инфра/гид

vLLM на своём GPU-сервере: установка, Docker и OpenAI API

Обновлено08.11.2026 Цены проверены08.11.2026Источникdocs.selectel.ru, docs.vllm.ai, documentation.ubuntu.com, recipes.vllm.ai, selectel.ruЧтение12 мин .md
Коротко

vLLM ставится на Linux-сервер с видеокартой NVIDIA одной командой Docker и сразу отдаёт OpenAI-совместимый API: меняете в коде адрес и ключ — и работаете со своей моделью. Для Qwen3.8-27B в FP8 нужна карта на 48 ГБ: облачный сервер с RTX 4090 48 ГБ стоит 146,42 ₽/час. На карту 24 ГБ (L4 — 69,52 ₽/час) помещаются модели около 9 млрд параметров.

В этой статье
Наш выбор

Для первого запуска vLLM под команду или продукт — облачный сервер с RTX 4090 48 ГБ и моделью Qwen3.8-27B в FP8: модель помещается на одну карту с запасом под контекст, а платите только за часы работы.

Конфигурация
1 × RTX 4090 48 ГБ · 12 vCPU · 64 ГБ RAM
Цена от
146,42 ₽/час
Софт
vLLM 0.33.0 в Docker, модель Qwen/Qwen3.8-27B-FP8
Отдельно
диск от 100 ГБ (универсальный SSD — 10,48 ₽ за ГБ/мес, цена пула ru-6a) и публичный IP (189,57 ₽/мес)
Когда не подходит
модели от 70 млрд параметров; нужна гарантированная карта на месяцы вперёд
GPU-серверы в Selectel

Реклама. АО «Селектел», ИНН 7810962785, selectel.ru. erid: 2VtzqwajdVY

Что нужно понять за минуту

vLLM — сервер, который загружает открытую языковую модель в видеопамять и отвечает на запросы по тому же протоколу, что и API OpenAI. Любой код, библиотека или чат-интерфейс, который умеет работать с OpenAI, переключается на вашу модель заменой адреса и ключа.

Главная сила vLLM — много одновременных запросов. Он собирает запросы разных пользователей в общие пакеты и экономно раскладывает по памяти их контекст, поэтому одна карта может обслуживать много параллельных диалогов. Если сервер нужен одному человеку для экспериментов, хватит и Ollama — чем они отличаются и когда что ставить, разобрано в статье vLLM, Ollama, llama.cpp или SGLang.

Что нужно для запуска, по документации vLLM на ноябрь 2026 года (версия 0.33.0):

  • Linux. Windows напрямую не поддерживается — только через WSL или неофициальные сборки.
  • Карта NVIDIA с compute capability 7.5 и выше: T4, RTX 20xx и новее, A100, L4, RTX 4090, RTX PRO 6000, H100. GTX 1080 и V100 уже не подходят.
  • Драйвер NVIDIA ветки 580 или новее. Официальный образ собран на CUDA 13. Для части серверных карт есть режим совместимости с драйверами 535 и 570, для игровых RTX его нет.
  • Видеопамять под модель и контекст. Веса в FP8 занимают примерно 1 ГБ на 1 млрд параметров, в BF16 — 2 ГБ, плюс запас под контекст пользователей. Под свою модель посчитайте в калькуляторе видеопамяти.

Модели меняются быстро. Ниже — рецепт под Qwen3.8-27B, актуальную модель Qwen среднего размера с открытой лицензией Apache 2.0. Для другой модели меняется одна строка в конфиге.

Сколько стоит

Сервер Что запустить в vLLM Цена Круглосуточно за месяц, ≈
Облако · L4 24 ГБ модели около 9 млрд параметров (Qwen3.5-9B в FP8) 69,52 ₽/час 50 750 ₽
Облако · RTX 4090 48 ГБ Qwen3.8-27B в FP8 146,42 ₽/час 106 900 ₽
Облако · RTX PRO 6000 96 ГБ Qwen3.8-27B без сжатия (BF16) или больше пользователей 289,79 ₽/час 211 550 ₽
Облако · 4 × RTX PRO 6000 Qwen3.8-Flash-Next в FP8 1 159,16 ₽/час 846 200 ₽
Выделенный · RTX 4090 24 ГБ модели около 9 млрд параметров 56 900 ₽/мес —
Выделенный · RTX 4090 48 ГБ Qwen3.8-27B в FP8 62 700 ₽/мес —
Выделенный · RTX PRO 6000 96 ГБ Qwen3.8-27B в BF16 225 000 ₽/мес —

Облако — калькулятор пула ru-7a (Москва), минимальная конфигурация с картой, диск и IP отдельно. Месяц в облаке — наш расчёт: цена часа × 730 часов. Выделенные: RTX 4090 48 ГБ на 8 ноября — лист ожидания, RTX 4090 24 ГБ — 2 шт., RTX PRO 6000 — 3 шт. Цены с НДС, проверено 08.11.2026 · источник

Выделенный сервер можно взять и на сутки: RTX 4090 24 ГБ — 1 890 ₽/день, RTX PRO 6000 — 10 000 ₽/день. Где проходит граница между облаком и выделенным при вашем графике, считает калькулятор облако или выделенный GPU, а наличие и цены всех карт собраны в гайде по аренде GPU для нейросети.

Сколько стоит миллион токенов на своём сервере

Своя карта стоит одинаково, сколько бы токенов она ни выдала. Поэтому цена миллиона токенов зависит от того, насколько плотно вы её загрузили:

₽ за 1 млн токенов = цена часа × 277,8 ÷ токенов в секунду (суммарно по всем пользователям; 277,8 = 1 000 000 ÷ 3 600).

Суммарная скорость генерации L4 24 ГБ RTX 4090 48 ГБ
100 токенов/с 193 ₽ 407 ₽
300 токенов/с 64 ₽ 136 ₽
1 000 токенов/с 19 ₽ 41 ₽
3 000 токенов/с 6,4 ₽ 13,6 ₽

Наш расчёт по ценам часа 69,52 ₽/час и 146,42 ₽/час при загрузке сервера 100 % времени. Скорости в таблице — условные точки для расчёта, а не замер. Проверено 08.11.2026 · источник

Для сравнения: та же Qwen3.8-27B в Token Factory стоит 31,01 ₽ за 1 млн токенов на входе и 206,50 ₽ за 1 млн токенов на выходе (за сгенерированный текст). Свой сервер выгоднее, только когда карта загружена большую часть суток и одновременно работает много запросов. Если сервер простаивает половину времени, каждый токен обходится вдвое дороже. Свой объём запросов подставьте в калькулятор LLM по API или свой GPU.

Как сделать

Ниже — сервер Ubuntu 24.04 с одной картой, vLLM и Caddy в одном docker compose. Caddy выпускает сертификат Let's Encrypt и пропускает снаружи только API. Мы проверили синтаксис и параметры по документации vLLM 0.33.0; на арендованной карте этот конфиг мы ещё не прогоняли — замер скорости добавим сюда после прогона.

1. Драйвер, Docker и NVIDIA Container Toolkit

Сначала проверьте, видит ли система карту и какой стоит драйвер:

nvidia-smi

Если команды нет или версия драйвера ниже 580, поставьте серверную ветку драйвера и перезагрузитесь:

sudo ubuntu-drivers list --gpgpu
sudo ubuntu-drivers install --gpgpu nvidia:580-server
sudo apt install -y nvidia-utils-580-server   # nvidia-smi для серверной ветки
sudo reboot

Затем Docker и NVIDIA Container Toolkit — он даёт контейнерам доступ к карте. Первая строка запускает официальный скрипт установки Docker с get.docker.com; если не хотите выполнять скрипт не глядя, скачайте его и прочитайте или поставьте Docker из apt-репозитория по документации Docker:

curl -fsSL https://get.docker.com | sudo sh

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
  | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
  | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
  | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

2. Ключ API

Ключ храните в файле .env рядом с конфигом, а не в самом конфиге:

mkdir -p ~/vllm && cd ~/vllm
echo "VLLM_API_KEY=$(openssl rand -hex 32)" > .env
chmod 600 .env

3. docker-compose.yml

services:
  vllm:
    image: vllm/vllm-openai:v0.33.0
    restart: unless-stopped
    ipc: host
    ports:
      - "127.0.0.1:8000:8000"   # только для проверок с самого сервера
    environment:
      VLLM_API_KEY: ${VLLM_API_KEY}
    volumes:
      - ./hf-cache:/root/.cache/huggingface   # веса модели не скачиваются заново
      - vllm-cache:/root/.cache/vllm          # кэш компиляции, быстрее рестарт
    command:
      - --model
      - Qwen/Qwen3.8-27B-FP8
      - --served-model-name
      - qwen-27b
      - --max-model-len
      - "32768"
      - --gpu-memory-utilization
      - "0.90"
      - --reasoning-parser
      - qwen3
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    healthcheck:
      test: ["CMD", "python3", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/health')"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 900s

  caddy:
    image: caddy:2.11
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data:/data
    depends_on:
      - vllm

volumes:
  vllm-cache:
  caddy-data:

Что здесь важно:

  • Версия образа закреплена. vLLM выходит примерно раз в две недели, и тег latest однажды сменит поведение без предупреждения. Обновляйтесь сменой тега и проверкой.
  • --max-model-len — максимальная длина контекста одного запроса. Чем она меньше, тем больше пользователей поместится в память одновременно.
  • --gpu-memory-utilization 0.90 — vLLM займёт 90 % видеопамяти: веса модели плюс кэш контекста.
  • --reasoning-parser qwen3 — Qwen3.8 по умолчанию «думает» перед ответом. Парсер выносит рассуждения в отдельное поле ответа, чтобы они не смешивались с текстом.
  • Для карты 24 ГБ замените модель на Qwen/Qwen3.5-9B и добавьте --quantization fp8_per_tensor: vLLM сожмёт веса в FP8 при загрузке, и они займут примерно вдвое меньше: около 10 ГБ вместо 19.

4. Caddyfile

Создайте рядом файл Caddyfile. Вместо llm.example.com — ваш домен, A-запись которого уже указывает на сервер:

llm.example.com {
    handle /v1/* {
        reverse_proxy vllm:8000
    }
    handle {
        respond 404
    }
}

Наружу проходят только адреса /v1/…, которые защищены ключом. Остальное — метрики, проверка здоровья и служебные адреса vLLM, где ключ не спрашивается, — снаружи недоступно.

5. Запуск и файрвол

docker compose up -d
docker compose logs -f vllm

Первый запуск долгий: образ скачивается объёмом около 10 ГБ (на диске после распаковки больше), веса модели — ещё около 30 ГБ, плюс компиляция под карту. Поэтому диск берите от 100 ГБ. Сервер готов, когда в логе появится Application startup complete.

Откройте только нужные порты:

sudo ufw allow 22/tcp
sudo ufw allow 80,443/tcp
sudo ufw enable

6. Проверка через curl и библиотеку openai

curl https://llm.example.com/v1/chat/completions \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "qwen-27b",
    "messages": [{"role": "user", "content": "Объясни в двух предложениях, что такое vLLM."}],
    "max_tokens": 500,
    "chat_template_kwargs": {"enable_thinking": false}
  }'

"enable_thinking": false выключает рассуждения для конкретного запроса — для коротких ответов так быстрее и дешевле.

Из Python — официальной библиотекой openai, меняются только адрес и ключ:

from openai import OpenAI

client = OpenAI(base_url="https://llm.example.com/v1", api_key="ВАШ_КЛЮЧ")
resp = client.chat.completions.create(
    model="qwen-27b",
    messages=[{"role": "user", "content": "Составь план статьи про бэкапы."}],
)
print(resp.choices[0].message.content)

7. Замер скорости

Чтобы посчитать цену миллиона токенов, нужна суммарная скорость генерации на вашей карте. В образ встроен бенчмарк:

docker compose exec vllm sh -c 'OPENAI_API_KEY=$VLLM_API_KEY vllm bench serve \
  --backend vllm --endpoint /v1/completions \
  --model Qwen/Qwen3.8-27B-FP8 --served-model-name qwen-27b \
  --dataset-name random --random-input-len 1000 --random-output-len 300 \
  --num-prompts 200 --max-concurrency 16'

В итогах смотрите строку Output token throughput (tok/s) и подставляйте её в формулу выше. Прогоните замер с разным --max-concurrency — 1, 8, 32: так видно, сколько одновременных пользователей карта держит без заметной потери скорости.

Что не подойдёт и ограничения

  • Старые карты. vLLM 0.33 требует compute capability 7.5 и выше. Облачная GTX 1080 за 33,09 ₽/час дешёвая, но vLLM на ней не запустится. Tesla T4 подходит формально, но у неё 16 ГБ, а FP8 на ней работает только как сжатие весов, без аппаратного ускорения.
  • Большие модели на одной карте. Qwen3.8-Flash-Next в FP8 весит около 185 ГБ — это сервер на 4 и больше крупных карт. Модель на 70 млрд параметров в FP8 занимает около 70 ГБ и требует карту на 96 ГБ.
  • Облачный GPU нельзя зарезервировать. Квота в проекте не означает, что в пуле есть свободная карта: сервер не создастся с ошибкой «No valid host was found». Нужна гарантия на месяцы — берите выделенный сервер.
  • Выключенный сервер платный. Пока облачный сервер просто выключен, ресурсы остаются за вами и плата идёт. vCPU, память и GPU не тарифицируются только у «замороженного» сервера, диск и IP оплачиваются всё равно.
  • Ноль на балансе. Облачный сервер с GPU блокируется, и если за 12 часов долг не погашен, он удаляется вместе с данными.
  • Ключ API — не вся защита. --api-key проверяется только на адресах /v1 и ещё нескольких. Порт 8000 нельзя публиковать наружу напрямую.
  • Windows. Только через WSL или неофициальные сборки; для сервера, который работает круглые сутки, это неудобно.
  • Готовая модель без своего сервера. Если нужна модель из каталога с OpenAI API, а не свой конфиг, есть Dedicated Inference — он тоже работает на vLLM, оплата по часам, токены не тарифицируются. Например, qwen3-6-27b стоит от 253,20 ₽/час. Ограничения: режим предварительного доступа, только Москва, свою модель загрузить нельзя, после 8 часов неоплаты сервис удаляется.

Как мы сделали

Как мы сделали

Крупные языковые модели мы запускаем только в облаке, а небольшие держим на своём железе: модель эмбеддингов bge-m3 для поиска по документам работает на процессоре домашнего сервера и отвечает примерно за 0,17 с. Главный урок с Docker на том же сервере: порт, опубликованный на 0.0.0.0, обходит файрвол ufw. Поэтому в конфиге выше порт vLLM привязан к 127.0.0.1, а наружу смотрит только прокси. И про деньги: по нашему расчёту почасовое облако выгоднее, пока карта занята меньше 16–18 часов в сутки, дальше дешевле выделенный сервер. Порог зависит от карты: по ценам на этой странице для RTX 4090 48 ГБ он ниже — около 14 часов в сутки (наш расчёт: 62 700 ₽/мес ÷ 146,42 ₽/час ≈ 428 часов в месяц), а облачная RTX PRO 6000 дешевле выделенной даже круглосуточно.

Частые вопросы

Как запустить vLLM в Docker?

Возьмите официальный образ vllm/vllm-openai с конкретной версией (на ноябрь 2026 — v0.33.0), поставьте на сервер драйвер NVIDIA и NVIDIA Container Toolkit и передайте контейнеру имя модели. Образ сам запускает vllm serve и отвечает на порту 8000. Удобнее держать всё в docker compose: модель, ключ API, кэш весов и HTTPS-прокси в одном файле.

Как запустить Qwen 3.8 в vLLM?

Qwen3.8-27B по рецепту vLLM работает начиная с версии 0.17.0; вариант в FP8 требует около 38 ГБ видеопамяти и помещается на одну карту 48 ГБ. Qwen3.8-Flash-Next требует vLLM 0.30.0 и новее, а его веса в FP8 занимают около 185 ГБ — это сервер на 4 × RTX PRO 6000 (1 159,16 ₽/час) или на 8 × H100 или H200. Если такой сервер не нужен, обе модели есть с оплатой за токены в Token Factory.

vLLM совместим с OpenAI API?

Да. Сервер отвечает на /v1/chat/completions, /v1/completions, /v1/models и другие адреса в формате OpenAI. В официальной библиотеке openai достаточно указать base_url вашего сервера и ключ. Имя модели в запросе — то, что вы задали параметром --served-model-name.

Как установить vLLM без Docker?

Через pip или uv в чистом окружении Python 3.11–3.14 на Linux: uv pip install vllm --torch-backend=auto, затем vllm serve и имя модели. Колёса vLLM собраны под конкретные версии CUDA и PyTorch, поэтому ставить его в окружение, где уже есть другой PyTorch, не стоит. На сервере проще Docker: обновление — это смена тега образа.

Работает ли vLLM на Windows?

Напрямую нет: документация vLLM поддерживает только Linux. На Windows его запускают через WSL с Linux-дистрибутивом или через неофициальные сборки. Для постоянной работы проще арендовать Linux-сервер с GPU и подключаться к нему по API.

Как задать API key в vLLM?

Параметром --api-key или переменной окружения VLLM_API_KEY; можно указать несколько ключей, чтобы менять их без простоя. Ключ проверяется только на адресах /v1 и ещё нескольких — /metrics, /health и служебные адреса остаются открытыми. Поэтому порт 8000 наружу не открывают, а пускают снаружи только /v1 через прокси с HTTPS.

Источники

  1. Облачные серверы с GPU — калькуляторпроверено 08.11.2026
  2. Выделенные серверы с GPU — готовые конфигурациипроверено 08.11.2026
  3. Цены на ресурсы облака: диски и IPпроверено 08.11.2026
  4. Dedicated Inference — готовые модели по часампроверено 08.11.2026
  5. Dedicated Inference — описание и ограниченияпроверено 08.11.2026
  6. Dedicated Inference — оплата и удаление при неоплатепроверено 08.11.2026
  7. Token Factory — модели с оплатой за токеныпроверено 08.11.2026
  8. Оплата облачных серверов — документацияпроверено 08.11.2026
  9. Резервирование ресурсов и GPU — FAQ миграциипроверено 08.11.2026
  10. vLLM — требования и установка на GPUпроверено 09.11.2026
  11. vLLM — запуск в Dockerпроверено 09.11.2026
  12. vLLM — безопасность и защита APIпроверено 09.11.2026
  13. Ubuntu Server — установка драйвера NVIDIAпроверено 09.11.2026
  14. Рецепт vLLM для Qwen3.8-27Bпроверено 09.11.2026
  15. Рецепт vLLM для Qwen3.8-Flash-Nextпроверено 09.11.2026

Связанные гайды