COMRAD404 / HOWTO

Как развернуть vLLM для быстрого inference

Инструкция по локальному развёртыванию vLLM для быстрого inference: установка через uv, запуск OpenAI-совместимого сервера, проверка /v1/models и /metrics, типовые ошибки и ограничения безопасности.

Понадобится

Официальная документация не фиксирует точное время; оно зависит от готовности окружения и первой загрузки модели.
  • Linux-хост для воспроизводимого пути из Quickstart; macOS поддерживается отдельно через vLLM-Metal на Apple Silicon.
  • Python 3.10–3.13; в шагах ниже используется Python 3.12.
  • Установленный uv для создания виртуального окружения и установки пакета.
  • Совместимая среда для выбранной модели и backend; фактическая производительность зависит от GPU, драйверов и размера модели.
  • Понимание, какую модель вы будете запускать; в официальном примере используется Qwen/Qwen2.5-1.5B-Instruct.

После выполнения этой инструкции вы развернёте локальный OpenAI-совместимый сервер vLLM и проверите, что он отвечает на запросы модели и публикует метрики. Ниже — воспроизводимый путь по официальному Quickstart, без Docker и без Kubernetes.

  • Время: официальная документация не фиксирует точное время; на практике длительность зависит от готовности окружения и первой загрузки модели.
  • Сложность: средняя.
  • Стоимость: сам проект self-hosted и open source, но итоговая стоимость зависит от вашего сервера или облачного провайдера; собственного hosted-прайса у проекта в источниках нет.
  • Что потребуется: Linux-хост для воспроизводимого пути из Quickstart; Python 3.10–3.13; в шагах ниже используется Python 3.12; установленный uv; совместимая среда для выбранной модели и backend.
  • Актуальная версия: vLLM v0.27.1, релиз от 2026-08-11; источники проверены на дату 2026-08-15.

Редакционное ограничение: эта инструкция покрывает быстрый локальный запуск и базовую проверку сервера vLLM по официальным источникам на дату 2026-08-15. Она не заменяет отдельные руководства по Docker и Kubernetes/Helm и не обещает конкретный throughput: производительность зависит от GPU, драйверов, backend и размера модели.

Что именно вы развернёте

vLLM — это fast and easy-to-use library for LLM inference and serving. Для быстрого inference в текущем how-to логично использовать его как локальный сервер с OpenAI-совместимым API.

После запуска сервера vLLM в текущей документации заявлена поддержка следующих путей API.

Путь Назначение
/v1/completions Текстовые completion-запросы
/v1/chat/completions Чат-запросы
/v1/chat/completions/batch Пакетные чат-запросы
/v1/responses Responses API
/v1/embeddings Эмбеддинги
/v1/audio/transcriptions Транскрибация аудио
/v1/audio/translations Перевод аудио

Ещё одна важная деталь до запуска: по умолчанию vLLM применяет generation_config.json. Если вам нужно отключить это поведение и использовать настройки самого vLLM, документация указывает параметр --generation-config vllm.

Пошагово: как развернуть vLLM для быстрого inference

  1. Шаг 1. Создайте виртуальное окружение с Python 3.12.

    Текущий Quickstart использует именно такой путь. Выполните команду в каталоге проекта или в отдельной рабочей папке.

    uv venv --python 3.12 --seed

    Ожидаемый результат: в рабочей директории создаётся виртуальное окружение .venv.

  2. Шаг 2. Активируйте окружение.

    Для Linux-пути из Quickstart используйте стандартную активацию shell-окружения.

    source .venv/bin/activate

    Ожидаемый результат: следующие команды uv pip и vllm будут выполняться внутри изолированного окружения.

  3. Шаг 3. Установите vLLM.

    Текущий рекомендованный путь установки из Quickstart выглядит так:

    uv pip install vllm --torch-backend=auto

    Важно: официальная документация отдельно предупреждает, что ни один pre-built wheel vLLM не содержит FlashInfer. Если вам нужен именно этот backend, его надо устанавливать отдельно.

    Ожидаемый результат: пакет vLLM устанавливается в текущее окружение без необходимости ручной сборки по этому сценарию Quickstart.

  4. Шаг 4. Запустите локальный сервер vLLM с тестовой моделью.

    Для быстрого воспроизведения используйте официальный пример команды:

    vllm serve Qwen/Qwen2.5-1.5B-Instruct

    Эта команда поднимает локальный OpenAI-совместимый сервер. Если вы не хотите, чтобы применялся generation_config.json модели, добавьте параметр --generation-config vllm.

    Ожидаемый результат: процесс сервера стартует и слушает локальный порт 8000, который используется в официальных примерах проверки.

  5. Шаг 5. Проверьте, что сервер отдаёт список моделей.

    После старта сервера выполните запрос к API:

    curl http://localhost:8000/v1/models

    Ожидаемый результат: вы получаете ответ от OpenAI-совместимого API, а не ошибку соединения. Это базовая проверка того, что сервер поднялся корректно.

  6. Шаг 6. Проверьте публикацию production-метрик.

    Текущая документация по метрикам показывает такую команду проверки:

    curl http://0.0.0.0:8000/metrics

    Ожидаемый результат: сервер возвращает текстовые метрики. Это полезно, если вы хотите подключать мониторинг сразу после базового запуска.

  7. Шаг 7. Зафиксируйте схему аутентификации до вывода сервера наружу.

    Если вы будете открывать сервис не только локально, не считайте --api-key полноценной защитой всего экземпляра. Официальная документация предупреждает, что этот параметр аутентифицирует только /v1, /v2 и /inference, а /invocations не аутентифицируется. Для внешнего доступа нужен reverse-proxy hardening.

    Ожидаемый результат: у вас есть не только рабочий сервер, но и корректное понимание границ его встроенной аутентификации.

Как проверить, что всё работает

  • Проверка API: выполните curl http://localhost:8000/v1/models. Если вместо ошибки подключения приходит ответ сервера, базовый serving уже работает.
  • Проверка мониторинга: выполните curl http://0.0.0.0:8000/metrics. Если сервер отдаёт метрики, вы можете подключать внешнее наблюдение.
  • Проверка health-check: официальная документация указывает, что health endpoint возвращает 200 в здоровом состоянии и 503 при сбоях движка, например при EngineDeadError. В этом пакете источников не зафиксирован точный путь endpoint для вашей версии, поэтому сверяйте маршрут с документацией именно вашего deployment-пути.

Частые ошибки и исправления

  • Ошибка: вы ожидаете, что FlashInfer уже входит в стандартную установку vLLM.

    Решение: текущая документация прямо пишет, что pre-built wheels vLLM не содержат FlashInfer. Если этот backend нужен, ставьте его отдельно.
  • Ошибка: ответы модели отличаются от ожидаемых из-за параметров, которые пришли из generation_config.json.

    Решение: отключите это поведение через --generation-config vllm, если вам нужны настройки генерации со стороны самого vLLM.
  • Ошибка: сервер отвечает локально, но вы ошибочно считаете, что --api-key защищает все маршруты при внешнем доступе.

    Решение: учитывайте ограничение документации: аутентификация касается только /v1, /v2 и /inference; /invocations не аутентифицируется, поэтому добавляйте reverse proxy и сетевое ограничение доступа.
  • Ошибка: health-check начинает отдавать 503, и это воспринимается как случайная сетевой сбой.

    Решение: трактуйте 503 как сигнал нездорового состояния движка. В официальной документации это связано, в частности, с EngineDeadError.
  • Ошибка: вы повторяете Linux Quickstart на неподходящей платформе или на неподдерживаемой версии Python.

    Решение: для этого сценария держитесь условий документации: Linux и Python 3.10–3.13; на macOS поддержка описана отдельно через vLLM-Metal на Apple Silicon.

Безопасность и ограничения

  • Linux — основной воспроизводимый путь в этой инструкции. Quickstart документирует Linux, а macOS — через vLLM-Metal на Apple Silicon с GPU acceleration. В этом пакете источников нет отдельного пошагового пути для Windows.
  • Производительность нельзя обещать заранее. Бумага про PagedAttention описывает прирост throughput на 2–4x при той же latency по сравнению с FasterTransformer и Orca, но это исследовательский результат, а не гарантия для вашей инфраструктуры.
  • Стоимость не фиксирована проектом. vLLM — self-hosted open-source software, поэтому расходы определяются вашим сервером, облаком и выбранной моделью.
  • Аутентификация ограничена. Встроенный --api-key не покрывает все маршруты, поэтому для внешнего деплоя закладывайте reverse-proxy hardening.
  • Версия в статье зафиксирована во времени. Проверенная upstream-версия в этом исследовании — v0.27.1; после 2026-08-15 могут существовать более новые релизы.

Практический вывод: если вам нужен самый короткий путь до локального OpenAI-совместимого inference-сервера, vLLM закрывает задачу несколькими командами. Если же вам нужен контейнерный или кластерный продакшн-деплой, переходите к официальным руководствам по Docker и Production Stack, а не расширяйте этот quickstart вслепую.

Что делать дальше

Источники

Вопросы и ответы

Можно ли развернуть vLLM на macOS?

Да, текущий Quickstart отмечает поддержку macOS через vLLM-Metal на Apple Silicon с GPU acceleration. Но воспроизводимый путь в этой инструкции ориентирован на Linux.

Какие API доступны сразу после запуска сервера?

В текущей документации перечислены /v1/completions, /v1/chat/completions, /v1/chat/completions/batch, /v1/responses, /v1/embeddings, /v1/audio/transcriptions и /v1/audio/translations.

Как отключить применение generation_config.json?

Документация указывает параметр --generation-config vllm. Он отключает поведение по умолчанию, при котором vLLM применяет generation_config.json.

Достаточно ли параметра –api-key для продакшн-защиты?

Нет. По официальной документации он аутентифицирует только /v1, /v2 и /inference; /invocations не аутентифицируется, поэтому нужен reverse proxy и дополнительное сетевое ограничение доступа.

Гарантирует ли vLLM конкретный прирост скорости?

Нет. В статье про PagedAttention описан прирост throughput на 2–4x при той же latency по сравнению с FasterTransformer и Orca, но фактический результат зависит от вашей модели, GPU, драйверов и backend.

Шаги

HOW-TO
  1. Создайте виртуальное окружение

    | Выполните команду uv venv --python 3.12 --seed и убедитесь, что создан каталог .venv.

  2. Активируйте окружение

    | Выполните source .venv/bin/activate, чтобы дальнейшие команды использовали изолированное окружение.

  3. Установите vLLM

    | Выполните uv pip install vllm --torch-backend=auto. Если вам нужен FlashInfer, учитывайте, что он не входит в pre-built wheels и ставится отдельно.

  4. Запустите локальный сервер

    | Выполните vllm serve Qwen/Qwen2.5-1.5B-Instruct. При необходимости отключите применение generation_config.json параметром --generation-config vllm.

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

    | Выполните curl http://localhost:8000/v1/models и убедитесь, что сервер отвечает на OpenAI-совместимом API.

  6. Проверьте метрики

    | Выполните curl http://0.0.0.0:8000/metrics и убедитесь, что сервер публикует production-метрики.

  7. Зафиксируйте безопасный доступ

    | До внешней публикации сервиса учтите, что --api-key аутентифицирует только /v1, /v2 и /inference, а /invocations не защищён и требует reverse-proxy hardening.

Источники

SOURCES

Вопросы и ответы

FAQ
Можно ли развернуть vLLM на macOS?

Да. Текущий Quickstart отмечает поддержку macOS через vLLM-Metal на Apple Silicon с GPU acceleration, но воспроизводимый путь в этой инструкции ориентирован на Linux.

Какие API доступны сразу после запуска сервера?

В текущей документации перечислены /v1/completions, /v1/chat/completions, /v1/chat/completions/batch, /v1/responses, /v1/embeddings, /v1/audio/transcriptions и /v1/audio/translations.

Как отключить применение generation_config.json?

Документация указывает параметр --generation-config vllm. Он отключает поведение по умолчанию, при котором vLLM применяет generation_config.json.

Достаточно ли параметра --api-key для продакшн-защиты?

Нет. По официальной документации он аутентифицирует только /v1, /v2 и /inference; /invocations не аутентифицируется, поэтому нужен reverse proxy и дополнительное сетевое ограничение доступа.

Гарантирует ли vLLM конкретный прирост скорости?

Нет. В статье про PagedAttention описан прирост throughput на 2–4x при той же latency по сравнению с FasterTransformer и Orca, но фактический результат зависит от модели, GPU, драйверов и backend.

Читайте также

LINKS