Как установить и запустить Qwen локально: системные требования и выбор сервера, чтобы развернуть LLM - Академия Selectel

Как установить и запустить Qwen локально: системные требования и выбор сервера, чтобы развернуть LLM

Разворачиваем Qwen локально на серверах Selectel и собственном железе: системные требования модели и процесс установки, настройка API и SSL, проверка работы локальной LLM.

Почему везде говорят про Qwen

Модель Qwen была разработана компанией Alibaba и является одной из самых популярных языковых моделей на данный момент. Ее популярность обусловлена тем, что она open-source и эффективна для развертывания на собственном железе или выделенных серверах. 

Открытая архитектура решает вопрос для бизнеса — конфиденциальность данных, так как вся информация обрабатывается строго внутри изолированного контура компании без передачи на сторонние зарубежные API. При этом в тестах на написание кода, понимание русского языка и работу с длинным контекстом Qwen стабильно опережает альтернативные открытые модели схожего размера.

Второе преимущество — полноценная мультимедийная линейка в рамках одного семейства. Разработчики адаптировали архитектуру под разные типы данных: Qwen-VL отвечает за компьютерное зрение и анализ изображений, Qwen-Audio распознает аудио и синтезирует речь, а Qwen Omni способна обрабатывать видеопоток.

Преимущества локальной установки

Локальная установка собственной ИИ-модели дает следующие преимущества: 

  • экономия — не надо платить за токены, нет никаких лимитов;
  • приватность данных — только вы знаете контролируете что будет с вашими данными;
  • независимость от провайдеров — вашу модель никто не отключит, не поднимет цену за использование, локальный сервер работает ровно столько, сколько нужно вам;
  • свобода настройки — вы можете настроить свою модель как вам угодно, дообучить как и на чем угодно.

Системные требования

Версий и размерностей модели Qwen много, так что каждый может выбрать для себя оптимальный вариант и развернуть тот, который будет покрывать необходимые задачи. Для примера ниже приведена таблица версий с системными требованиями.

РазмерностьКоличество памятиДля чего использовать
0,6B–1,7B2–4 ГБПодходит для простых тестов, или для запуска на слабых ПК
4B–8B6–10 ГБПодходит для повседневных задач, можно запустить на большинстве современных компьютеров
14B12–16 ГБПодходит для более сложных задач, например генерации кода
32B~24 ГБВыдает максимальное качество, но очень требовательно

Лучше всего разворачивать такую модель, чтобы оставалось еще место в памяти. Иначе если память будет еще чем-то занята, то будет задействован swap и тогда инференс станет очень медленным.

Локальная установка

Поднять локальную LLM можно разными способами, все зависит от ваших нужд и способов использования. Для начала разберемся как развернуть Qwen через ollama.

Ollama — это бесплатная утилита, которая позволяет запускать языковые модели на локальной машине.

Я буду запускать на macOS, но также можно запустить на Windows и Linux.

Во первых установим саму программу:

brew install ollama

После установки можно убедиться, что все установилось следующим образом:

Ollama скачана, но не запущена.

Ollama скачана, но не запущена. Поэтому первое предупреждение говорит о том, что нет запущенного инстанса, а второе выводит версию.

Теперь необходимо запустить ollama, чтобы можно было дальше скачать модель и пользоваться ею. Запустить можно как в фоне, так и во втором терминале. Чтобы запустить в фоне, необходимо сделать brew services start ollama, для того, чтобы запустить во втором терминале, можно сделать ollama serve. В моем случае запуск будет фоновым процессом.

После запуска в фоне будет выведено сообщение о том, что все запустилось, и далее можно сразу проверить статус и версию запущенного инстанса через ollama –version.

Далее необходимо скачать нужную модель через ollama pull <версия модели>. Я возьму версию 8b:

ollama pull qwen3:8b

После установки модели можно запускать модель с помощью ollama run <версия модели>. Но перед этим, советую указать уровень логирования, чтобы не получать много служебной информации, которая может быть не сильно интересна. 

Чтобы это сделать необходимо добавить переменную окружения export OLLAMA_DEBUG=0 и перезапустить ollama. Так мы получим только полезную нам информацию.

Теперь можно приступить к запуску модели:

ollama run qwen3:8b

После запуска в терминале видим такой интерфейс, позволяющий отправить запрос:

Модель «размышляет» перед ответом.

Если ввести запрос, то увидим как модель «размышляет» перед ответом, а после дает ответ.

Ollama, кроме интерактивного чата, также поддерживает и простые http запросы.

Хорошая попытка, Qwen3, но на дворе 2026 год. Ollama, кроме интерактивного чата, также поддерживает и простые http запросы.

Делаем простой curl запрос, немного ждем пока «подумает», и получаем ответ, который можно потом распарсить в коде и получить всю полезную информацию.

Добавить Ollama как провайдера.

Таким образом можно даже добавить Ollama как провайдера в LiteLLM и использовать несколько своих моделей под одним «капотом».

Развертывание на сервере 

А если хочется, чтобы ваша модель работала всегда, вне зависимости от того где вы находитесь, и включен ли ваш компьютер, то в Selectel можно арендовать сервер и запустить на нем модель.

Для этого переходим в панель управления. Если не зарегистрированы, то регистрируемся и заполняем данные о себе. Переходим во вкладку Продукты и в разделе «Вычисления» нажимаем Облачные серверы.


Переходим во вкладку Продукты и в разделе «Вычисления» нажимаем Облачные серверы.


Нажимаем на кнопку Создать сервер, далее нас встречает конфигуратор сервера. 

Выбираем нужные ресурсы под нашу модель.

Выбираем нужные ресурсы под нашу модель. Видеокарту берем NVIDIA A100 на 80 ГБ. Модели Qwen работают напрямую из видеопамяти, поэтому если веса не влезут в карту целиком, ничего не запустится. Процессор выбираем на 12 vCPU и добавляем 64 ГБ оперативки. Такой запас нужен, чтобы сервер успевал обрабатывать текст, держать ОС и не зависал. Диск обязательно ставим быстрый, Универсальный v2 SSD, так как файлы модели весят много, и на обычном накопителе сервер будет долго грузиться при каждом перезапуске. В целом, советую закладывать ресурсов побольше, так как что-то возьмет система, чтобы не было проблем с упором в ресурсы.

Советую закладывать ресурсов побольше.

Ниже необходимо будет добавить SSH-ключ, для подключения к серверу.

Необходимо будет добавить SSH-ключ.

Добавить новый ключ можно нажав на «+», заполнив имя и нажав Добавить.

После этого необходимо нажать кнопку Создать сервер. Сразу после создания нас переносит к панели сервера.

Сразу после создания нас переносит к панели сервера.

После того как он завершит сборку, кнопка загорится зеленым и будет написана надпись Active.

Окей, кнопка загорелась, сервер запустился, а также ниже появился публичный ip адрес и команда, по которой можно зайти на сервер по SSH.

Также, во вкладке «Консоль», можно подключиться прямо из браузера. Необходимо ввести логин и пароль, которые написаны сверху над консолью.

Необходимо ввести логин и пароль, которые написаны сверху над консолью.

После подключения к серверу необходимо установить docker, запускать будем в нем. 

Подробная инструкция по установке docker есть на официальном сайте.

Серверным вариантом для поднятия Qwen будет утилита vLLM. Запускаем контейнер с помощью команды:

 docker run -d --name qwen3 --gpus all -p 8000:8000   vllm/vllm-openai:latest   --model Qwen/Qwen3-8B --host 0.0.0.0 --port 8000.

После запуска контейнера можем проверить, точно ли все запустилось:

 docker ps
Контейнер работает.

Контейнер работает, но приложение может не до конца запуститься, необходимо подождать пару минут. Когда приложение будет запущено в логах контейнера увидим строку (APIServer pid=1) INFO:     Application startup complete.

Посмотреть логи можно командой: docker logs qwen3.

И так, когда все запустилось, vLLM работает, можно попробовать сделать первый запрос.

Делаем curl http://localhost:8000/v1/models, это нам выведем список доступных моделей. Модель будет только одна, потому что сейчас устанавливали только qwen3.


      {"object":"list","data":[{"id":"Qwen/Qwen3-8B","object":"model","created":1788174415,"owned_by":"vllm","root":"Qwen/Qwen3-8B","parent":null,"max_model_len":40960,"permission":[{"id":"modelperm-beede9631044c140","object":"model_permission","created":1788174415,"allow_create_engine":false,"allow_sampling":true,"allow_logprobs":true,"allow_search_indices":false,"allow_view":true,"allow_fine_tuning":false,"organization":"*","group":null,"is_blocking":false}]}]}

Если запрос проходит, то можно считать что уже почти все работает, осталось только сделать запрос именно к модели.


      curl http://127.0.0.1:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen3-8B",
    "messages": [
      {"role": "user", "content": "Что такое LLM?"}
    ],
    "max_tokens": 512
  }'

Получаем следующий ответ:


      {
  "id": "chatcmpl-a8c2c4e8f4d1f7ba",
  "object": "chat.completion",
  "created": 1788174717,
  "model": "Qwen/Qwen3-8B",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "<think>\nХорошо, пользователь спрашивает, что такое LLM. Начну с того, что LLM расшифровывается как Large Language Model. Это большой языковой модель, которая обучается на огромных объемах текстовых данных. Нужно объяснить, что это искусственный интеллект, который может понимать и генерировать человеческий язык.\n\nВажно упомянуть, что такие модели могут выполнять различные задачи: отвечать на вопросы, писать текст, переводить, создавать код и т.д. Надо привести примеры популярных моделей, например, GPT от OpenAI, BERT от Google, или модели от Alibaba Cloud, как Qwen. Это поможет пользователю лучше понять, о чем идет речь.\n\nТакже стоит объяснить, как они работают: обучение на больших данных, использование глубокого обучения и нейронных сетей. Возможно, упомянуть, что они могут генерировать текст, основываясь на входных данных, и улучшать свои способности с каждым обновлением.\n\nНужно обратить внимание на то, что LLM могут быть как общего назначения, так и специализированные. Например, некоторые модели созданы для определенных задач, таких как ответы на вопросы или создание программного кода. Важно подчеркнуть, что эти модели становятся все более продвинутыми и применяются в различных сферах, от разработки программного обеспечения до медицины и образования.\n\nСтоит также упомянуть, что LLM могут иметь ограничения, например, зависимость от качества данных, возможные ошибки в генерации текста или проблемы с биасом. Это даст пользователю более полное представление о возможностях и ограничениях технологий.\n\nВ итоге, структурирую ответ, начиная с определения, затем описания функций, примеров, механизма работы и применения. Убедюсь, что язык простой и понятный, без излишнего технического жаргона, чтобы пользователь мог легко понять, что такое LLM",
        "refusal": null,
        "annotations": null,
        "audio": null,
        "function_call": null,
        "reasoning": null
      },
      "logprobs": null,
      "finish_reason": "length",
      "stop_reason": null,
      "token_ids": null,
      "routed_experts": null
    }
  ],
  "service_tier": null,
  "system_fingerprint": "vllm-0.28.0-72edf2d8",
  "usage": {
    "prompt_tokens": 14,
    "total_tokens": 526,
    "completion_tokens": 512,
    "prompt_tokens_details": null,
    "completion_tokens_details": null
  },
  "prompt_logprobs": null,
  "prompt_token_ids": null,
  "prompt_text": null,
  "kv_transfer_params": null,
  "ec_transfer_params": null,
  "metrics": null
}

Отлично! Сделали запрос к LLM и получили ответ. Теперь можно точно сказать что все работает.

На сервере развернули, а что насчет того, чтобы делать запросы теперь извне?

Попробуем вместо локального адреса подставить адрес сервера и сделать запрос:


      curl http://185.55.56.47:8000/v1/chat/completions   -H "Content-Type: application/json"   -d '{
    "model": "Qwen/Qwen3-8B",
    "messages": [
      {"role": "user", "content": "Что такое LLM?"}
    ],
    "max_tokens": 512
  }'

Получили ответ:

Получили ответ.

Происходит это потому, что при запуске контейнера мы прокидывали порты 8000 сервера на 8000 контейнера -p 8000:8000.

Пока API отвечает по обычному http: запросы и ответы модели идут по сети открытым текстом. Чтобы обращаться к серверу по https:// и не светить промпты по дороге, на вход ставят TLS-сертификат — браузер и клиенты тогда шифруют соединение до vLLM.

Сейчас если сделать запрос с https, то будет ошибка, либо перенаправление на http.

Сейчас если сделать запрос с https, то будет ошибка, либо перенаправление на http.

Настройка SSL

Для настройки SSL-сертификата нам необходимо получить доменное имя для сервера, чтобы при запросах все было безопасно, не было никаких предупреждений и тому подобного.

Получить домен можно в Selectel. Сразу проверяем доступен ли домен, я для примера выбрал qwen-test-my.ru.

Получить домен в Selectel.

Нажав на кнопку Оформить, нас переносит обратно в панель управления, как было при оформлении сервера.

Нажать на кнопку Оформить.

Далее необходимо заполнить свои контактные данные. После заполнения контактных данных домен будет оформлен и отображаться в личном кабинете.

Домен будет оформлен и отображаться в личном кабинете.

Далее на левой панели нажимаем Доменные зоны и переходим на наш домен.

Нажимаем Доменные зоны и переходим на наш домен.

Тут необходимо добавить «А запись».

Необходимо добавить «А запись».

Теперь, когда добавлена А запись, DNS сервера будут знать что по домену qwen-test-my.ru находится IP-адрес моего сервера с qwen3. Чтобы проверить это можно в терминале ввести nslookup qwen-test-my.ru

Здесь можно увидеть адрес вашего сервера.

Снизу можно увидеть адрес вашего сервера. Это происходит не сразу, занять может больше часа. А пока домен не резолвится, то при выпуске сертификата будет ошибка. Так что, прежде чем переходить на следующий шаг, дождитесь этого.

Добавим TLS-сертификат при помощи Caddy. Для начала его необходимо установить:

sudo apt update
sudo apt install -y caddy

Когда Caddy установится, то появится файл /etc/caddy/Caddyfile, можно прочитать его содержимое через cat /etc/caddy/Caddyfile. 

У меня было что-то такое:

Файл который появился после установки.

В этом файле необходимо все содержимое изменить следующим образом:

qwen-test-my.ru {
    reverse_proxy 127.0.0.1:8000
}

Там, где написано qwen-test-my.ru необходимо указать домен вашего сервера.

Теперь можно перезапустить Caddy, чтобы он подтянул изменения:

sudo systemctl reload caddy

Через минуту-две можно будет попробовать сделать запрос используя https и домен:

curl https://ваш-домен/v1/models

У меня получился такой ответ:

Получился такой ответ.

Еще можно проверить то, что сертификат есть и все работает как надо с помощью команды curl -vI https://ваш-крутой-домен. Там нас интересует строка *  SSL certificate verify ok. Если видите ее, значит сертификат работает корректно, соединение с сервером будет защищено.

Типичные проблемы и их решения

Даже если делать все по инструкции, то можно наткнуться на некоторые проблемы. Они могут возникнуть как от характеристик компьютера, так и от простой человеческой невнимательности. Рассмотрим несколько проблем, с которыми чаще всего сталкиваются.

Недостаточно памяти

Если видите в логах ошибку «CUDA out of memory», то она означает, что веса модели не поместились в видеопамять. Qwen работает напрямую из VRAM, и если карта целиком не вмещает модель, то ничего не запустится. У этой проблемы есть два решения: взять модель поменьше или выделить больше ресурсов.

Медленный инференс

Когда ответ модели приходится ждать очень долго — стоит проверить, хватает ли оперативной памяти. Через команду htop можно посмотреть текущие процессы, и, если там есть процесс, который занимает много памяти, то его можно попробовать остановить, перезагрузить ollama или vLLM. Или, если модель работает в режиме GPU, то nvidia-smi, которая покажет состояние видеокарты и чем она занята. Если же очистка памяти не помогает, то стоит перейти на менее требовательную модель, либо увеличить мощности.

Сервис запущен, локальные запросы идут, а из сети не проходят

В такой ситуации следует проверить правильно ли запущен контейнер с приложением, проброшены порты -p 8000:8000, и хост указан --host 0.0.0.0, без них API будет доступен только внутри сервиса. Также можно убедиться что порт точно не занят другим процессом: ss -ltnp | grep 8000.

Caddy не выпускает сертификат

Может быть такое, что DNS-запись не резолвится, после привязки домена к ip: обновление А записи может занимать больше часа. Проверить актуальность записи можно с помощью nslookup ваш-домен. Если домен резолвится, то необходимо детальнее изучить логи Caddy, чтобы точно выявить причину.

Зачем дообучить модель на своих данных

Как я сказал в начале, qwen можно дообучить на любых своих данных. Дообучение помогает заточить модель под ваши нужды, в то время как базовая модель знает лишь общие специфики того, что вам может потребоваться. 

Для дообучения используют три метода:

  • полное дообучение (fine-tuning) — дает лучший результат, но значительно повышает потребляемые ресурсы;
  • LoRA — в этом методе используются не все веса, а только некоторые, что обеспечивает снижение потребления памяти в разы, а качество на типовых задачах остается примерно на одном уровне;
  • QLoRA — LoRA поверх сжатой (квантованной) модели. 

Последний метод самый бережный к железу. Для дообучения Qwen 8B хватит одной обычной игровой видеокарты. А сделать все это можно с помощью Python библиотек transformers и peft от HuggingFace 

Готово

Теперь у вас есть свой собственный Qwen на вашем сервере. Как оказалось, собственная нейросеть это не так сложно и страшно, как может показаться на первый взгляд. На деле нужны лишь рабочий компьютер/сервер, и час времени чтобы все настроить и начать пользоваться.