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 необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).