Разворачивать LLM на своих мощностях часто приходится не из-за любви к self-hosted решениям, а ради контроля над данными и предсказуемого инференса. Часто этого требуют стандарты безопасности или архитектура внутренних инструментов компании.
В этой инструкции показано, как развернуть Qwen на облачном сервере через vLLM. В результате вы получите OpenAI-совместимый API с аутентификацией по токену и интерфейс Open WebUI для тестирования. Модель при этом не будет доступна из интернета.
Большие языковые модели всё чаще используют как сервис инференса — к ним обращаются по HTTP-API из внутренних приложений, как к базам данных или поисковым системам.
В бизнесе это позволяет быстро внедрять прикладные сценарии:
- Помощник для поддержки и operations — суммаризация обращений, черновики ответов, классификация запросов;
- Ассистент для инженеров — объяснение кода, генерация шаблонов, работа с регламентами и runbook’ами;
- Внутренний помощник по знаниям — поиск и анализ корпоративной документации.
Чтобы перейти от идеи к прототипу, нужен воспроизводимый стенд: доступный по HTTP, с понятным способом подключения и возможностью быстрой проверки. Модель должна работать как сервис.
Мы развернём Qwen с Hugging Face на GPU-сервере в Selectel, запустим через vLLM в режиме OpenAI-совместимого API и подключим Open WebUI для тестирования ответов. Это станет основой для более сложных систем.
Полноценный RAG (индексация, эмбеддинги, ретривер, пайплайн обновления) — тема отдельной статьи. Здесь мы подготовим только стабильный эндпоинт инференса.
Qwen: выбор модели
В инструкции используется Qwen3-30B-Instruct с Hugging Face.
Instruct-версия предпочтительнее базовой: она заточена под диалог, лучше реагирует на системные инструкции и предсказуемее в интеграциях.
Hugging Face выступает источником весов и конфигурации. vLLM загружает модель по model id и кэширует артефакты на диске. При повторных запусках повторная загрузка не требуется, если кэш сохранён.
Перед развёртыванием проверьте в карточке модели:
- Точный model id — он понадобится при запуске vLLM;
- Длину контекста — от неё зависит потребление VRAM;
- Лицензию и доступ — если требуется токен, подготовьте его заранее.
Выбор сервера
Ключевые параметры — конфигурация сервера и контур доступа. От них зависят скорость первого запуска и воспроизводимость тестов.
Для развертывания используем облачную платформу Selectel. В панели управления переходим в раздел «Облачные серверы», выбираем пул (например, Москва) и создаём сервер.
Задаём имя проекта и выбираем образ, например Ubuntu 24.04 LTS.
GPU и VRAM
Видеопамять расходуется на:
- веса модели;
- KV-кэш, растущий с длиной контекста и числом параллельных запросов.
Нужно учитывать запас VRAM. В разделе конфигурации выбираем GPU.
Для Qwen3-30B достаточно одной A100 80GB — это минимальная конфигурация, снижающая риск нехватки памяти на старте.
Диск и кэш модели
Первый запуск включает скачивание весов. Если кэш хранится на маленьком системном диске, возможны повторные загрузки и долгий старт.
Рекомендуется сразу выделить отдельный каталог (например, /data/models) под кэш Hugging Face. Это предотвратит нехватку места.
Доступ к стенду: API и UI
На этапе теста есть два подхода:
- открыть порты, но ограничить доступ по IP и использовать токен;
- использовать SSH-туннель — безопаснее, так как сервисы не публикуются в интернет.
В этой инструкции используется SSH-туннель. Сервисы vLLM и Open WebUI остаются доступными только через SSH. Не нужно настраивать правила доступа к портам извне.
SSH-туннель не заменяет аутентификацию. Токен на API включается в любом случае. Туннель снижает сетевую экспозицию.
Установка и запуск модели
Теперь перейдём к развертыванию Qwen. Цель — поднять модель как сервис инференса, настроить кэш, проверить работу API с токеном и доступность через туннель.
1. Подключение к серверу и базовые проверки
Подключитесь к серверу по SSH. В macOS и Linux используйте терминал, в Windows — PowerShell.
Проверьте наличие GPU:
Затем проверьте свободное место на диске:
2. Настройка кэша Hugging Face
Создайте каталог для кэша и задайте переменные окружения:
Если не задать
HF_HOMEилиTRANSFORMERS_CACHE, кэш попадёт в домашний каталог. На облачных серверах он часто находится на маленьком системном диске, которого не хватит для Qwen.
3. Python-окружение и установка vLLM
Установите Python и создайте виртуальное окружение (venv) — это упростит управление зависимостями.
Установите vLLM:
Проверьте установку командой:
4. Запуск Qwen через vLLM
Задайте идентификатор модели и токен доступа. MODEL_ID должен совпадать с идентификатором на Hugging Face.
Токен лучше сохранить в переменной окружения — так он не попадёт в историю команд.
Запустите сервер vLLM. Ограничьте длину контекста, чтобы уложиться в доступную VRAM:
При первом запуске:
- займёт время — идёт загрузка весов;
- в
nvidia-smiпоявится процесс vLLM и рост потребления VRAM; - в логах будет сообщение о запуске сервера и прослушивании порта.
5. Проверка эндпоинта и генерации
Откройте вторую SSH-сессию. Экспортируйте VLLM_API_KEY, если он не прописан в ~/.bashrc. Процесс vllm serve должен продолжать работать в первой сессии.
Проверьте доступность эндпоинта и включённую авторизацию:
Проверьте генерацию:
Критерии успешного запуска:
- эндпоинт
/v1/modelsвозвращает список моделей; - эндпоинт
/v1/chat/completionsотвечает осмысленным текстом; - в логах vLLM видна обработка запроса.
6. SSH-туннель для доступа с macOS
Так как порты не открыты, используем SSH-туннель. Выполните в терминале локальной машины:
После этого API будет доступен по адресу http://localhost:8081/v1.
Если Open WebUI запускается в Docker-контейнере,
localhostвнутри контейнера указывает на сам контейнер. Чтобы он увидел API, укажите IP-адрес интерфейсаdocker0(обычно 172.17.0.1) или используйте флаг--network=host.
7. Мониторинг и логи
На этом этапе бэкенд работает. Перед подключением UI проверяйте:
- nvidia-smi — следите за использованием VRAM. При увеличении
--max-model-lenпамять будет расти; - Логи vLLM — они показывают входящие запросы и состояние KV-кэша. Это основной источник при задержках ответов.
Если эндпоинт стабильно отвечает на curl — база готова. Переходим к интерфейсу.
Open WebUI для тестирования
После запуска vLLM удобно перейти от curl к визуальному тестированию.
Open WebUI предоставляет простой интерфейс: можно быстро тестировать промты, сравнивать ответы и фиксировать наблюдения без написания кода.
Установите Docker на сервере и добавьте пользователя в группу docker, чтобы управлять контейнерами без sudo:
Запустите контейнер Open WebUI, передав адрес API и токен:
Проверьте, что контейнер работает:
Если туннель уже поднят, добавьте проброс порта WebUI:
После этого интерфейс будет доступен по http://localhost:3000.
Настройка подключения в Open WebUI
В интерфейсе Open WebUI перейдите в настройки и добавьте подключение к OpenAI-совместимому эндпоинту.
Поскольку WebUI работает в контейнере, он должен обращаться к серверу через IP-адрес docker0.
Выполните команду для получения IP:
Используйте результат для настройки:
- Base URL —
http://<docker0_ip>:8081/v1(обычно172.17.0.1); - API Key — тот же токен, что использован при запуске vLLM.
После подключения модель готова к работе. Можно настраивать системный промт и тестировать поведение.
Мы минимизировали сетевую экспозицию: порты API и UI не публикуются, доступ — только через SSH-туннель. Дополнительно включена аутентификация по токену.
Переход к продакшену
После тестов стенд нужно привести к виду продакшен-контура: сервис должен переживать перезагрузки, быть наблюдаемым и безопасным.
Запуск vllm serve вручную в SSH-сессии неудобен. Лучше перенести его в systemd или контейнер с политикой перезапуска. Это обеспечит автозапуск и отказоустойчивость.
Для защиты контура соблюдайте три правила:
- Сетевой периметр — API доступен только из доверенной сети (VPC/VPN) или через шлюз. Прямой доступ к портам vLLM и WebUI в интернет запрещён;
- Аутентификация — токен на API обязателен, ключи хранятся вне кода и подлежат ротации;
- Лимиты — добавьте rate limiting, таймауты и ограничения на размер запроса, чтобы защититься от перегрузок.
При росте нагрузки масштабирование идёт двумя путями:
- Вертикально — больше ресурсов на один инстанс;
- Горизонтально — несколько инстансов и балансировка.
Следующий шаг — прикладной сценарий: например, RAG или поиск по документации. Базовый элемент уже готов: стабильный эндпоинт инференса с контролируемым доступом.
Мы собрали стек, позволяющий запускать LLM на своих мощностях с интерфейсом, совместимым с OpenAI API. Главное преимущество vLLM — превращение «голой» модели в управляемый сервис с предсказуемым потреблением VRAM и встроенной очередью запросов.
Это надёжный фундамент для создания RAG-систем или внутренних ассистентов без рисков утечки данных и зависимости от внешних провайдеров.