# vLLM: установка, модели, память и OpenAI API

Источник: https://modelium.tech/zhurnal/vllm/

vLLM — движок инференса и сервер для локального или кластерного запуска моделей через OpenAI-совместимый API. Он подходит, когда нужен программный endpoint, параллельная обработка запросов и масштабирование на несколько GPU; для первого запуска без сервера обычно проще Ollama или LM Studio. Начинайте с маленькой подтверждённо совместимой модели и ограниченного контекста, а не с максимального размера весов.

**Граница проверки.** Материал сверён с релизом и документацией vLLM 0.30.0 на 22 сентября 2026 года. Modelium не запускал сервер и не измерял скорость, latency, throughput, RAM или VRAM. Команды ниже основаны на документации; перед рабочим внедрением закрепите версии и проверьте их на своей модели и инфраструктуре.

## Что такое vLLM и когда он нужен

vLLM — движок инференса и HTTP-сервер для генеративных и pooling-моделей. Документация описывает нативные реализации моделей и Transformers modeling backend; поддерживаются языковые, embedding-, vision-language- и audio-language-модели, но возможности зависят от конкретной архитектуры и версии движка [s5](#src-s5). Код тега v0.30.0 опубликован с текстом Apache License 2.0; лицензия самой запускаемой модели проверяется отдельно [s8](#src-s8).

Практический смысл vLLM — поднять программный endpoint для приложения, агента, RAG-системы или внутреннего сервиса. В версии 0.30.0 сервер документирует OpenAI-совместимые Completions, Chat Completions, Responses, Embeddings, Transcriptions и Translations API [s3](#src-s3). Это не означает полной идентичности облачному OpenAI API: у отдельных endpoint и параметров есть ограничения, а некоторые возможности зависят от типа модели и chat template [s3](#src-s3).

Выбирайте vLLM, если нужен хотя бы один из сценариев:

- локальный или внутренний API для нескольких клиентов;

- управление контекстом, batch и KV-кэшем;

- запуск одной модели на нескольких GPU;

- переход от одного узла к кластеру;

- явный контроль версии движка, модели и параметров сервера.

Для первого личного чата на одном компьютере обычно проще начать с Ollama или LM Studio. vLLM оправдан, когда важнее серверный режим и управляемая конфигурация, чем графический интерфейс.

## Какие ОС и ускорители поддерживает vLLM

Основной документированный путь vLLM 0.30.0 рассчитан на Linux и Python 3.10–3.13. Нативной поддержки Windows нет; документация предлагает WSL с Linux-дистрибутивом либо сторонние форки [s2](#src-s2).

Для NVIDIA документация требует compute capability 7.5 или выше и приводит T4, RTX 20xx, A100, L4, H100 и B200 как примеры совместимых поколений [s2](#src-s2). Для AMD перечислены отдельные семейства MI и Radeon с требованиями к ROCm; Intel XPU имеет свой пакет ядер и в документированном wheel-пути требует Python 3.12 [s2](#src-s2). Apple Silicon поддерживается не основным GPU-пакетом, а отдельным community-maintained плагином vLLM-Metal на базе MLX [s2](#src-s2).

Название поддерживаемой платформы не гарантирует, что конкретная модель и квант заработают на любой карте. Матрица квантизации различается: например, в документации 0.30.0 GGUF отмечен для NVIDIA и AMD GPU, но не для Intel GPU и CPU, а AWQ и GPTQ имеют другую совместимость [s6](#src-s6). Проверяйте одновременно модель, формат, GPU и версию vLLM.

## Как установить vLLM 0.30.0

Официальная документация рекомендует отдельное Python-окружение: бинарные сборки связаны с конкретными версиями PyTorch, CUDA или ROCm, поэтому смешивание с уже установленным стеком повышает риск несовместимости [s2](#src-s2). Для воспроизводимого запуска Modelium рекомендует закрепить текущую проверенную версию 0.30.0.

uv venv --python 3.12 --seed --managed-pythonsource .venv/bin/activateuv pip install "vllm==0.30.0" --torch-backend=auto

Синтаксис установки через `uv` и автоматический выбор PyTorch backend документирован для GPU-пути, а релиз 0.30.0 опубликован как отдельный PyPI/wheel-артефакт [s1](#src-s1) [s2](#src-s2). Если на машине уже есть несовместимая сборка PyTorch или требуется другой CUDA/ROCm-вариант, следуйте отдельной ветке установки или собирайте из исходников, а не заменяйте зависимости вслепую [s2](#src-s2).

У релиза 0.30.0 также есть официальные Docker-образы для CUDA, ROCm, CPU и XPU, включая `vllm/vllm-openai:v0.30.0` для основного CUDA-варианта [s1](#src-s1). Контейнер удобен для сервера и нескольких узлов, но сам по себе не решает вопрос совместимости драйвера, модели и доступной памяти.

## Как поднять первый OpenAI-совместимый сервер

Для первой проверки используйте маленькую модель, которую документация прямо приводит в примерах совместимости. Страница поддерживаемых моделей показывает `Qwen/Qwen3-0.6B` в команде `vllm serve` [s5](#src-s5).

vllm serve Qwen/Qwen3-0.6B \  --api-key local-test-key \  --max-model-len 2048 \  --generation-config vllm

`vllm serve` запускает HTTP-сервер, а OpenAI-совместимый клиент подключается к `http://localhost:8000/v1` [s3](#src-s3). Ограничение `--max-model-len 2048` — рекомендация Modelium для первого теста: документация подтверждает, что уменьшение `max_model_len` снижает потребление памяти [s7](#src-s7). Параметр `--generation-config vllm` отключает автоматическое применение `generation_config.json` из репозитория модели, чтобы скрытые defaults автора не меняли параметры семплирования [s3](#src-s3).

Проверьте список моделей:

curl http://localhost:8000/v1/models \  -H "Authorization: Bearer local-test-key"

Затем отправьте короткий запрос:

curl http://localhost:8000/v1/chat/completions \  -H "Authorization: Bearer local-test-key" \  -H "Content-Type: application/json" \  -d '{    "model": "Qwen/Qwen3-0.6B",    "messages": [{"role": "user", "content": "Ответь одним словом: 2+2?"}],    "temperature": 0  }'

Chat Completions применим к генеративным моделям с chat template; для модели без корректного шаблона нужен другой режим или явная настройка шаблона [s3](#src-s3). Успешный HTTP-ответ доказывает только работу выбранной связки «версия vLLM + модель + конфигурация», но не качество модели для бизнес-задачи.

## Почему одного API-ключа недостаточно для безопасности

Документация vLLM 0.30.0 предупреждает, что `--api-key` защищает не все endpoint сервера. Аутентификация применяется к путям `/v1`, `/v2` и `/inference`, но другие маршруты могут оставаться открытыми; в документации отдельно упомянут `/invocations` с возможностями инференса [s3](#src-s3).

Поэтому не публикуйте порт 8000 напрямую в интернет. Для сети компании ставьте vLLM за reverse proxy или API gateway, ограничивайте доступ сетевыми правилами, включайте TLS и журналирование. Для multi-node развёртывания документация также предупреждает, что служебный трафик между узлами может быть незашифрованным; такой кластер должен работать в приватном сетевом сегменте [s4](#src-s4).

## Как проверить совместимость модели

Список моделей vLLM шире фиксированной таблицы нативных реализаций. Движок умеет использовать Transformers modeling backend для ряда embedding-, language-, vision-language- и audio-language-моделей, включая encoder-only, decoder-only и MoE-архитектуры [s5](#src-s5). Для custom-моделей из Hugging Face может потребоваться `--trust-remote-code`; этот флаг разрешает выполнение кода из репозитория модели, поэтому применять его следует только после проверки источника и закрепления ревизии [s5](#src-s5).

Не считайте наличие файла на Hugging Face доказательством поддержки. Минимальная проверка:

- найти архитектуру модели в актуальной странице поддерживаемых моделей;

- проверить формат весов и матрицу квантизации;

- закрепить точную ревизию репозитория;

- запустить короткий запрос с небольшим контекстом;

- проверить нужный API: chat, embeddings, ASR или другой;

- только затем увеличивать контекст, batch и число клиентов.

Если модель возвращает текст или pooling-выход через тестовый вызов, документация считает это практическим признаком поддержки выбранного backend [s5](#src-s5). Но tool calling, structured output, мультимодальность и параллельные вызовы инструментов требуют отдельной проверки: их наличие зависит не только от сервера, но и от модели, шаблона и parser.

## Как управлять памятью без ложных минимумов

vLLM не даёт одного универсального значения VRAM для всех моделей. Память зависит от самих весов, dtype или квантизации, длины контекста, числа одновременных последовательностей, KV-кэша, CUDA graphs и мультимодальных процессоров [s7](#src-s7). Размер файла весов нельзя объявлять минимальной VRAM.

При OOM уменьшайте параметры по одному:

vllm serve Qwen/Qwen3-0.6B \  --max-model-len 2048 \  --max-num-seqs 2 \  --enforce-eager

Документация рекомендует ограничивать `max_model_len` и `max_num_seqs`; полное отключение CUDA graph capture через `enforce_eager` также уменьшает дополнительное потребление GPU-памяти, но может снизить скорость [s7](#src-s7). Квантизованные модели занимают меньше памяти ценой более низкой точности представления, однако поддержка конкретной схемы зависит от аппаратной платформы [s6](#src-s6) [s7](#src-s7).

Не выбирайте AWQ, GPTQ, bitsandbytes или GGUF только по размеру файла. Сначала сверяйте строку метода и колонку своего железа в матрице vLLM 0.30.0, затем проверяйте качество на контрольных данных [s6](#src-s6).

## Когда переходить на несколько GPU

Если модель помещается на одной GPU, документация считает распределённый инференс обычно ненужным. Если она не помещается на одной карте, но помещается на одном узле, используется tensor parallelism; для четырёх GPU пример выглядит так [s4](#src-s4):

vllm serve /path/to/model \  --tensor-parallel-size 4

Если одного узла недостаточно, документация предлагает сочетать tensor parallelism по числу GPU на узле и pipeline parallelism по числу узлов [s4](#src-s4). На одном узле vLLM по умолчанию использует native Python multiprocessing, а для multi-node — Ray; backend можно переопределить явно [s4](#src-s4).

Не переносите конфигурацию из vendor-примера как «минимальное железо». Число GPU в примере показывает только конкретную схему параллелизма. После запуска смотрите фактические логи `GPU KV cache size` и `Maximum concurrency`: документация использует их для оценки, хватает ли кэша и ресурсов под требуемую длину запросов и одновременную нагрузку [s4](#src-s4).

## Как проверить готовность сервера к задаче

Проверка должна идти дальше статуса процесса:

- запрос к `/v1/models` возвращает ожидаемый идентификатор;

- короткий Chat Completions-запрос завершается без OOM;

- ответ содержит нужный язык и формат;

- несколько одинаковых контрольных входов не ломают контракт приложения;

- для structured output результат проходит внешнюю JSON Schema-валидацию;

- при параллельной нагрузке фиксируются latency, throughput, ошибки и потребление памяти;

- после перезапуска сохраняются закреплённые версии vLLM, модели и параметров.

Для embeddings, распознавания речи и Responses API используйте отдельный endpoint, который документация связывает с соответствующим типом модели [s3](#src-s3). Не оценивайте ASR-модель через chat endpoint и не считайте наличие `/v1/embeddings` доказательством, что любая генеративная модель стала embedding-моделью.

## Когда vLLM не подходит

Не начинайте с vLLM, если нужен только личный чат с одной небольшой моделью и важнее простой интерфейс: Ollama или LM Studio быстрее доведут до первого ответа. llama.cpp часто удобнее, если основной актив — конкретный GGUF и нужен ручной контроль локальных backend.

vLLM имеет смысл, когда модель уже выбрана, приложение ждёт HTTP API, а конфигурацию нужно масштабировать и воспроизводить. Следующий шаг — сверить конкретный вариант модели, его архитектуру, формат весов и требования к железу, а затем повторить минимальный тест на закреплённых версиях.

## Источники

1. [vLLM — Release v0.30.0](https://github.com/vllm-project/vllm/releases/tag/v0.30.0) — получено 2026-09-22
2. [vLLM 0.30.0 — GPU Installation](https://docs.vllm.ai/en/v0.30.0/getting_started/installation/gpu/) — получено 2026-09-22
3. [vLLM 0.30.0 — OpenAI-Compatible Server](https://docs.vllm.ai/en/v0.30.0/serving/online_serving/openai_compatible_server/) — получено 2026-09-22
4. [vLLM 0.30.0 — Parallelism and Scaling](https://docs.vllm.ai/en/v0.30.0/serving/parallelism_scaling/) — получено 2026-09-22
5. [vLLM 0.30.0 — Supported Models](https://docs.vllm.ai/en/v0.30.0/models/supported_models/) — получено 2026-09-22
6. [vLLM 0.30.0 — Quantization](https://docs.vllm.ai/en/v0.30.0/features/quantization/) — получено 2026-09-22
7. [vLLM 0.30.0 — Conserving Memory](https://docs.vllm.ai/en/v0.30.0/configuration/conserving_memory/) — получено 2026-09-22
8. [vLLM v0.30.0 — LICENSE](https://raw.githubusercontent.com/vllm-project/vllm/v0.30.0/LICENSE) — получено 2026-09-22
