vllm инференс

vLLM — это высокопроизводительная библиотека для инференса больших языковых моделей, разработанная в UC Berkeley. vLLM инференс стал индустриальным стандартом для production-деплоя LLM благодаря инновационной технологии PagedAttention, которая радикально повышает throughput и эффективность использования GPU-памяти.

Проблема, которую решает vLLM

Инференс LLM — принципиально другая задача, чем обучение. При обучении все последовательности в батче имеют фиксированную длину после padding. При генерации длина каждой последовательности растёт динамически — непредсказуемо. Традиционные фреймворки резервировали память под максимальную возможную длину для каждого запроса, что приводило к катастрофической фрагментации: 60–80% GPU-памяти простаивало.

Кроме того, KV-cache (кэш ключей и значений механизма внимания) занимает значительную часть VRAM и является узким местом при обслуживании многих параллельных запросов.

PagedAttention: ключевая инновация

PagedAttention — алгоритм, вдохновлённый механизмом виртуальной памяти операционных систем. Вместо резервирования непрерывного блока памяти под весь KV-cache каждого запроса, вLLM разбивает память на равные страницы (blocks) фиксированного размера. Страницы выделяются по мере необходимости и могут быть физически несмежными.

Это даёт несколько эффектов:

  • Фрагментация памяти снижается до менее 4%
  • KV-cache можно разделять между параллельными запросами с одинаковым префиксом (prefix caching)
  • Поддержка beam search без дублирования памяти для каждой гипотезы
  • Возможность обслуживать в 2–4× больше параллельных запросов на одном GPU

Continuous batching

В отличие от статического батчинга, где сервер ждёт набора запросов и обрабатывает их вместе, vLLM использует continuous batching (также называемый iteration-level scheduling). Новые запросы добавляются в батч на каждом шаге генерации, как только освобождается место. Это устраняет простой GPU между батчами и кардинально увеличивает throughput при переменной нагрузке.

Поддерживаемые модели и фичи

vLLM поддерживает все основные архитектуры трансформеров: LLaMA, Mistral, Mixtral, Falcon, MPT, Qwen, Gemma, Phi и многие другие. Ключевые возможности:

  • Тензорный параллелизм — разделение модели по нескольким GPU
  • Пайплайнный параллелизм — для моделей, не помещающихся на один узел
  • AWQ, GPTQ, SqueezeLLM квантизация для снижения требований к памяти
  • LoRA адаптеры — обслуживание нескольких адаптеров без перезагрузки
  • Speculative decoding — ускорение генерации через черновик-модель
  • Structured outputs — гарантированная генерация JSON по заданной схеме
  • OpenAI-compatible API — drop-in замена для приложений, работающих с OpenAI

Производительность

В бенчмарках vLLM демонстрирует throughput в 3–24× выше, чем наивный HuggingFace Transformers инференс, в зависимости от нагрузки и модели. При высоком параллелизме (много одновременных запросов) преимущество максимально — именно здесь PagedAttention и continuous batching дают наибольший эффект.

Деплой и интеграция

vLLM запускается как HTTP-сервер одной командой: vllm serve mistralai/Mistral-7B-Instruct-v0.3. Сервер предоставляет эндпоинты /v1/completions и /v1/chat/completions, полностью совместимые с OpenAI API. Это позволяет интегрировать vLLM в существующие системы без изменения кода клиента — достаточно поменять base_url.

vLLM доступен в Docker, поддерживает Kubernetes-деплой через официальные Helm-чарты, интегрирован с Ray Serve для масштабирования. Также существуют managed варианты через Anyscale и другие провайдеры.

Мониторинг и масштабирование vLLM

vLLM предоставляет эндпоинт /metrics с метриками в формате Prometheus: gpu_cache_usage (заполненность KV-cache), num_requests_running, num_requests_waiting, e2e_request_latency. Grafana-дашборды помогают отслеживать загрузку и выявлять bottleneck. При масштабировании vLLM горизонтально за балансировщиком нагрузки важно обеспечить sticky session для запросов с одним prefix — иначе prefix caching теряет эффективность. Для автомасштабирования на Kubernetes используют KEDA с метрикой queue depth от vLLM. Ray Serve предоставляет более гибкую оркестрацию с поддержкой rolling updates и A/B тестирования разных версий модели.

Расширенные возможности vLLM

vLLM активно развивается: каждый релиз приносит новые возможности. Prefix caching — автоматическое кэширование KV-cache для повторяющихся префиксов (например, одинаковый system prompt у всех пользователей): при втором запросе с тем же prefix GPU повторно не обрабатывает его, снижая latency и экономя вычисления. Chunked Prefill равномерно распределяет нагрузку prefill-фазы, предотвращая блокировку decode-запросов длинными промптами. Multi-LoRA serving позволяет хранить базовую модель в памяти один раз и динамически применять разные LoRA-адаптеры для каждого запроса — эффективный способ обслуживать персонализированные модели.

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

  • Чем vLLM лучше TGI (Text Generation Inference) от Hugging Face?

    Оба решения близки по производительности. vLLM отличается более широкой поддержкой моделей, гибким API и активным развитием новых фич (prefix caching, speculative decoding). TGI лучше интегрирован с экосистемой Hugging Face.

  • Можно ли запустить vLLM на CPU?

    Да, vLLM поддерживает CPU-инференс через OpenVINO и torch CPU, но производительность значительно ниже, чем на GPU. Для production CPU-инференса лучше рассмотреть llama.cpp или Intel OpenVINO.

  • Что такое speculative decoding в vLLM?

    Метод ускорения генерации: небольшая быстрая модель-драфтер генерирует несколько токенов за раз, основная модель проверяет их параллельно. Если черновик верен, генерация ускоряется в 1.5–3×.

Не хватает деталей?

Напишите, что уточнить по теме «vllm инференс» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).

Поделиться