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

> Как поставить vLLM на арендованный GPU-сервер: Docker Compose, OpenAI-совместимый API с ключом и HTTPS, какая карта нужна под Qwen3.8 и сколько это стоит.

Источник: https://infragid.ru/vllm-ustanovka/ · Обновлено: 2026-11-08 · Цены проверены: 2026-11-08 · Раздел: Нейросети и GPU

**Коротко.** 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 млрд параметров; нужна гарантированная карта на месяцы вперёд

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

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

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

Что нужно для запуска, по документации 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 ГБ, плюс запас под контекст пользователей. Под свою модель посчитайте в [калькуляторе видеопамяти](/instrumenty/podbor-gpu-pod-model/).

Модели меняются быстро. Ниже — рецепт под 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 · [источник](https://selectel.ru/services/cloud/servers/gpu/)
{: .stamp}

Выделенный сервер можно взять и на сутки: RTX 4090 24 ГБ — 1 890 ₽/день, RTX PRO 6000 — 10 000 ₽/день. Где проходит граница между облаком и выделенным при вашем графике, считает калькулятор [облако или выделенный GPU](/instrumenty/gpu-oblako-ili-vydelennyj/), а наличие и цены всех карт собраны в гайде [по аренде GPU для нейросети](/arenda-gpu-dlya-nejroseti/).

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

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

**₽ за 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 · [источник](https://selectel.ru/services/cloud/servers/gpu/)
{: .stamp}

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

## Как сделать

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

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

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

```bash
nvidia-smi
```

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

```bash
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:

```bash
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` рядом с конфигом, а не в самом конфиге:

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

### 3. docker-compose.yml

```yaml
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-запись которого уже указывает на сервер:

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

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

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

```bash
docker compose up -d
docker compose logs -f vllm
```

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

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

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

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

```bash
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`, меняются только адрес и ключ:

```python
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. Замер скорости

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

```bash
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 часов неоплаты сервис удаляется.

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

!!! how "Как мы сделали"
    Крупные языковые модели мы запускаем только в облаке, а небольшие держим на своём железе: модель эмбеддингов 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.


## Источники

- Облачные серверы с GPU — калькулятор — https://selectel.ru/services/cloud/servers/gpu/ (проверено 2026-11-08)
- Выделенные серверы с GPU — готовые конфигурации — https://selectel.ru/services/dedicated/gpu/ (проверено 2026-11-08)
- Цены на ресурсы облака: диски и IP — https://selectel.ru/prices/ (проверено 2026-11-08)
- Dedicated Inference — готовые модели по часам — https://selectel.ru/services/dedicated-inference/ (проверено 2026-11-08)
- Dedicated Inference — описание и ограничения — https://docs.selectel.ru/dedicated-inference/about/about-dedicated-inference/ (проверено 2026-11-08)
- Dedicated Inference — оплата и удаление при неоплате — https://docs.selectel.ru/dedicated-inference/about/payment/ (проверено 2026-11-08)
- Token Factory — модели с оплатой за токены — https://selectel.ru/services/cloud/token-factory/ (проверено 2026-11-08)
- Оплата облачных серверов — документация — https://docs.selectel.ru/cloud-servers/about/payment/ (проверено 2026-11-08)
- Резервирование ресурсов и GPU — FAQ миграции — https://docs.selectel.ru/migrations/migrate-to-cloud-servers/faq-cloud-servers-migration/ (проверено 2026-11-08)
- vLLM — требования и установка на GPU — https://docs.vllm.ai/en/latest/getting_started/installation/gpu/ (проверено 2026-11-09)
- vLLM — запуск в Docker — https://docs.vllm.ai/en/latest/deployment/docker/ (проверено 2026-11-09)
- vLLM — безопасность и защита API — https://docs.vllm.ai/en/latest/usage/security/ (проверено 2026-11-09)
- Ubuntu Server — установка драйвера NVIDIA — https://documentation.ubuntu.com/server/how-to/graphics/install-nvidia-drivers/ (проверено 2026-11-09)
- Рецепт vLLM для Qwen3.8-27B — https://recipes.vllm.ai/Qwen/Qwen3.8-27B (проверено 2026-11-09)
- Рецепт vLLM для Qwen3.8-Flash-Next — https://recipes.vllm.ai/Qwen/Qwen3.8-Flash-Next (проверено 2026-11-09)
