Как развернуть Qwen в облаке без доступа из интернета

Как развернуть Qwen в облаке без доступа из интернета

Разворачивать 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 URLhttp://<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-систем или внутренних ассистентов без рисков утечки данных и зависимости от внешних провайдеров.

Читать оригинал