vLLM изнутри: как работает высокопроизводительный LLM-инференс

vLLM — движок LLM-инференса с PagedAttention и непрерывным батчингом. Разбираем архитектуру V1, планировщик и масштабирование для продакшна.

Коротко: vLLM — высокопроизводительный движок инференса LLM с PagedAttention, непрерывным батчингом и многоуровневым планировщиком. Архитектура позволяет обслуживать десятки параллельных запросов на одном GPU и масштабироваться до мультиузловых кластеров. Актуальна версия V1 (август 2025).

Почему стандартный инференс LLM неэффективен

Когда компания деплоит языковую модель «в лоб» — через стандартную библиотеку transformers или наивный API — GPU используется неэффективно. Причина в KV-кэше: под каждый запрос резервируется блок памяти заранее. Часть этой памяти никогда не используется, но и не освобождается. При 50 параллельных запросах потери могут составлять 60-80% видеопамяти.

vLLM решает эту проблему системно, а не точечными оптимизациями.

Как PagedAttention меняет управление памятью

PagedAttention — центральная инновация vLLM, заимствованная из теории операционных систем. Идея: управлять KV-кэшем как виртуальной памятью — страницами.

Принцип работы:

  • KV-кэш каждого запроса разбивается на страницы фиксированного размера
  • Страницы выделяются по мере необходимости, а не заранее
  • Страницы физически несмежны — менеджер хранит таблицу маппинга
  • По завершении запроса страницы немедленно освобождаются

Это устраняет внутреннюю фрагментацию. На практике — возможность обслуживать значительно больший батч на том же железе без докупки GPU.

Непрерывный батчинг: GPU без простоев

Традиционный батчинг ждёт, пока все запросы в батче завершатся. Один медленный (длинная генерация) блокирует всех быстрых.

Непрерывный батчинг работает иначе:

  1. На каждом шаге декодирования планировщик пересматривает очередь
  2. Завершённые запросы немедленно покидают батч
  3. Ожидающие запросы занимают освободившееся место
  4. GPU никогда не ждёт «последнего» запроса в батче

Для бизнеса это означает: стоимость одного токена при высоком RPS (requests per second) снижается кратно по сравнению с наивным деплоем.

Архитектура vLLM V1: что внутри

vLLM V1 (актуальная архитектура на август 2025) состоит из нескольких слоёв:

LLMEngine — оркестратор. Принимает запросы, управляет жизненным циклом, возвращает результаты.

EngineCore — ядро:

  • Планировщик — решает, какие запросы идут в следующий батч
  • Исполнитель модели — управляет forward pass на GPU
  • Менеджер структурированного вывода — для JSON-схем и грамматик

Процессор ввода/вывода — токенизация на входе, форматирование результата на выходе.

Слой обслуживания — асинхронный веб-слой для онлайн-деплоя с поддержкой конкурентных запросов.

Ключевые оптимизации для продакшн-деплоя

Кэширование префиксов — системный промпт вычисляется один раз, KV-кэш переиспользуется для всех запросов. Критично для RAG и чат-ботов с длинными системными инструкциями.

Чанкированный префилл — длинные промпты не блокируют декодирование коротких запросов. Снижает p99-задержку в смешанных нагрузках.

Спекулятивное декодирование — черновая модель предсказывает токены, основная верифицирует батчем. Ускорение до 2-3x в сценариях с предсказуемыми выходами.

Масштабирование:

СценарийПодход
Один GPUБазовый деплой, разработка
Несколько GPUTensor Parallelism для больших моделей
Несколько узловPipeline + Tensor Parallelism
Разнесённые P/DОтдельные GPU для префилла и декодирования

Когда вашей команде нужен vLLM

  • Вы деплоите LLM в продакшн с реальной нагрузкой (>10 RPS)
  • Используете модели 7B+ и хотите уложиться в один GPU
  • Работаете с RAG или длинными системными промптами
  • Нужен structured output (JSON, схемы)
  • Планируете масштабирование на несколько GPU или узлов

Для разовых экспериментов и исследований vLLM избыточен. Для продакшна — это стандарт индустрии.

Часто задаваемые вопросы

Что такое vLLM и чем он лучше других решений?
vLLM — open-source движок инференса с PagedAttention и непрерывным батчингом. По сравнению с наивным деплоем через transformers обеспечивает в 10-30 раз большую пропускную способность при той же железной базе.

Нужен ли vLLM для маленьких моделей (до 7B)?
Да, если у вас реальная нагрузка. Даже на моделях 1-3B непрерывный батчинг и PagedAttention дают значительный выигрыш при параллельных запросах. Для одиночных запросов в разработке — избыточен.

Как vLLM поддерживает структурированный вывод?
Через встроенный менеджер структурированного декодирования. Он ограничивает сэмплинг токенов в соответствии с JSON-схемой или грамматикой, гарантируя валидный структурированный вывод без постобработки.

Что изменилось в vLLM V1 по сравнению с V0?
V1 — полностью переработанное ядро с улучшенным планировщиком, поддержкой чанкированного префилла, разнесённых P/D и более эффективным управлением памятью. V0 устарел, но понимание его архитектуры полезно для контекста эволюции проекта.

Разбираем ИИ-инструменты для бизнеса →
<a href='https://t.me/contentrunbot'>ИИ Инструменты</a> | <a href='https://contentrun.ai/'>Контент-завод</a> | <a href='https://platform.contentrun.ai/'>База знаний</a>

Опубликовано на ContentRun, внедрение ИИ в маркетинг и продажи. Что мы делаем.