Блог и статьи
Как развернуть LLM на арендованном GPU с vLLM

Как развернуть LLM на арендованном GPU с vLLM

Запуск Qwen на виртуальной машине с GPU

5 ноября 2026 г.Автор: qudata3 мин чтения

Чтобы развернуть LLM через vLLM на Qudata.ai, арендуйте виртуальную машину (ВМ) с Linux и NVIDIA GPU. Внутри ВМ запустим Docker-контейнер с Qwen2.5-7B-Instruct и отправим первый запрос к модели через SSH-туннель.

Выберите виртуальную машину до аренды

В каталоге Qudata.ai выберите ВМ с NVIDIA GPU и проверьте, что она поддерживает подключение по SSH. Для примера возьмите одну GPU с поддержкой BF16 и 24 ГиБ видеопамяти. Веса модели займут около 14,2 ГиБ, остальная память понадобится vLLM и запросам. При выборе диска учтите место под образ Docker и файлы модели. Сверьте тип инстанса, GPU и диск до оплаты.

Если вы уже арендовали Docker-инстанс, запустить этот сценарий внутри него нельзя. Чтобы перейти на ВМ, сохраните нужные файлы, удалите Docker-инстанс, когда это позволяют условия аренды, и отдельно арендуйте ВМ. Запущенный Docker-инстанс нельзя преобразовать в ВМ.

Возьмите адрес, имя пользователя и порт из данных ВМ. Подключитесь к ВМ по SSH и выполните команды на самой машине. Для них нужны установленный Docker и NVIDIA Container Toolkit.

nvidia-smi
docker version --format '{{.Server.Version}}'
docker run --rm --gpus all ubuntu:24.04 nvidia-smi

Первая команда проверяет драйвер на сервере, третья — передачу GPU в контейнер. Если видеокарта видна только на хосте, проверьте настройку NVIDIA Container Toolkit. Для схемы ниже используйте Docker Engine 28.0.0 или новее и драйвер, совместимый с CUDA 12.9 в выбранном образе vLLM.

Запустите vLLM в Docker

Создайте на ВМ каталог для кэша Hugging Face и запустите контейнер. Тег образа закреплён, чтобы повторный запуск использовал ту же версию vLLM. Порт контейнера публикуется только на loopback-интерфейсе сервера. Дополнительные параметры образа описаны в официальном руководстве vLLM по Docker.

mkdir -p "$HOME/.cache/huggingface"
docker run -d --name qudata-vllm --gpus all --shm-size=2g \
  -p 127.0.0.1:8000:8000 \
  -v "$HOME/.cache/huggingface:/root/.cache/huggingface" \
  vllm/vllm-openai:v0.30.0-cu129 \
  --model Qwen/Qwen2.5-7B-Instruct --served-model-name qwen-demo \
  --host 0.0.0.0 --port 8000 --dtype bfloat16 \
  --max-model-len 4096 --max-num-seqs 4 \
  --gpu-memory-utilization 0.90
docker logs --tail 80 -f qudata-vllm

--host 0.0.0.0 задаёт адрес внутри контейнера. За доступ снаружи отвечает -p 127.0.0.1:8000:8000. Лимит 4096 включает входные и выходные токены, а --max-num-seqs 4 ограничивает число последовательностей, которые движок обрабатывает одновременно. Первый запуск скачивает веса. Когда сервер готов, выйдите из просмотра журнала с помощью Ctrl+C. Контейнер продолжит работу.

Отправьте первый запрос через SSH

Откройте отдельный терминал на своём компьютере. Замените user@your-gpu-host данными для подключения к ВМ. Если Qudata указала отдельный SSH-порт, добавьте -p с этим номером. Оставьте туннель открытым и выполните запросы в другом локальном терминале.

ssh -N -o ExitOnForwardFailure=yes \
  -L 127.0.0.1:18000:127.0.0.1:8000 user@your-gpu-host
curl -fsS http://127.0.0.1:18000/v1/models

curl -fsS http://127.0.0.1:18000/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{"model":"qwen-demo","messages":[{"role":"user",
       "content":"Объясни, зачем нужен KV-кэш, одним предложением."}],
       "max_tokens":64,"temperature":0}'

В первом ответе найдите модель qwen-demo, во втором — текст в choices[0].message.content. Для клиента, который поддерживает Chat Completions, базовый URL будет http://127.0.0.1:18000/v1. Этот стенд рассчитан на доверенный сервер и доступ по SSH. Для общего доступа настройте аутентификацию, TLS и ограничения запросов на входном прокси.

Если модель не запускается или заканчивается память

Посмотрите журнал контейнера и вывод nvidia-smi. Если сервер сообщает, что контекст не помещается в KV-кэш, начните с --max-model-len 2048. Если память заканчивается под нагрузкой, снизьте --max-num-seqs до 1 и увеличивайте лимит после замеров. Чтобы применить параметры, остановите и удалите тестовый контейнер командами docker stop qudata-vllm и docker rm qudata-vllm, затем запустите его снова. Кэш в смонтированном каталоге сохранится. Если движок не может загрузить сами веса, проверьте занятость GPU и выберите меньшую модель, совместимый квантизованный чекпоинт или GPU с большей памятью.

Если curl не соединяется, сначала проверьте curl -fsS http://127.0.0.1:8000/v1/models в SSH-сеансе на сервере. Если там запрос проходит, проверьте туннель и локальный порт. По окончании теста остановите контейнер командой docker stop qudata-vllm и отдельно завершите аренду ВМ в Qudata, если он больше не нужен. Сохраните необходимые данные перед завершением. На Qudata.ai также можно арендовать LLM вместе с GPU и подключиться к готовому OpenAI-совместимому API.