Сравнение стэков для инференса LLM: vLLM, TensorRT-LLM, HF TGI v3 и LMDeploy
'Короткое техническое сравнение vLLM, TensorRT-LLM, HF TGI v3 и LMDeploy: когда выбирать каждый стек для продакшн-инференса по throughput, латентности и KV-поведению.'
Обслуживание production LLM стало системной задачей: стэк инференса определяет количество токенов в секунду, хвостовую латентность и, в итоге, стоимость обслуживания на GPU-флоте. Ниже техническое сравнение четырех распространенных решений: vLLM, NVIDIA TensorRT-LLM, Hugging Face TGI v3 и LMDeploy.
vLLM — PagedAttention как открытый базовый уровень
Идея
vLLM основан на PagedAttention, где KV-кэш воспринимается как страничная виртуальная память, а не как один непрерывный буфер на запрос. Вместо выделения большого KV-региона на запрос, vLLM:
- Делит KV на блоки фиксированного размера
- Ведет таблицу блоков, сопоставляющую логические токены с физическими блоками
- Делит блоки между последовательностями при совпадении префиксов
Это снижает внешнюю фрагментацию и позволяет планировщику упаковать гораздо больше конкурентных последовательностей в одно VRAM-пространство.
Пропускная способность и латентность
vLLM показывает улучшение throughput в 2–4× по сравнению со старшими системами вроде FasterTransformer и Orca при сопоставимой латентности, с большими выигрышами для длинных последовательностей. Важные свойства для операторов: непрерывное (inflight) батчинг, который объединяет входящие запросы в уже выполняющиеся GPU-батчи. На чат-нагрузках throughput масштабируется почти линейно с конкуренцией до насыщения KV-памяти или вычислений. P50 остается низким при умеренной конкуренции, но P99 может ухудшаться при длинных очередях или плотной KV-памяти, особенно для предзаполнения.
KV и мультиарендность
PagedAttention обеспечивает почти нулевые потери KV и гибкое разделение префиксов внутри и между запросами. Каждый процесс vLLM обслуживает одну модель; мульти-модельные и мульти-арендные топологии обычно строятся через внешний маршрутизатор или API-шлюз, распределяющий запросы по экземплярам vLLM. vLLM предоставляет OpenAI-совместимый HTTP API и хорошо интегрируется с Ray Serve и оркестраторами.
TensorRT-LLM — максимум на NVIDIA GPU
Идея
TensorRT-LLM это оптимизированная библиотека NVIDIA для инференса на их GPU, с кастомными attention-ядрами, inflight-батчингом, страничным KV, квантованием до FP4/INT4 и speculative decoding. Библиотека тесно связана с аппаратными возможностями NVIDIA, включая FP8 tensor cores на Hopper и Blackwell.
Измеренная производительность
Публичные данные NVIDIA показывают, что на H100 с FP8 TensorRT-LLM превышает 10 000 выходных токенов/с при пиковом throughput для 64 конкурентных запросов, с примерно 100 мс до первого токена. H100 FP8 может давать до 4.6× более высокий максимальный throughput и 4.4× более быструю латентность первого токена по сравнению с A100 на тех же моделях. Для режимов, чувствительных к латентности, TensorRT-LLM на H100 может опускать TTFT ниже 10 мс в конфигурациях batch-1, жертвуя общей пропускной способностью. Конкретные числа зависят от модели и форм-фактора входа/выхода, но дают реальную картину масштабов.
Prefill vs decode
TensorRT-LLM оптимизирует как фазу prefill, так и decode: prefill выигрывает от высокопроизводительных FP8 attention-ядр и тензорного параллелизма; decode выигрывает от CUDA-графов, speculative decoding, квантованных весов и KV, и слияния ядер. В сумме это дает очень высокие токены/с для широкого диапазона длины входов и выходов, при условии настройки движка под модель и профиль батча.
KV и мультиарендность
TensorRT-LLM предоставляет страничный KV с конфигурируемыми раскладками, поддержку длинных последовательностей, повторное использование и выгрузку KV, inflight-батчинг и приоритетно-ориентированные примитивы планирования. NVIDIA обычно использует Ray- или Triton-ориентированные паттерны оркестрации для мультиарендных кластеров; поддержка нескольких моделей выполняется на уровне оркестратора.
Hugging Face TGI v3 — специалист по длинным промптам и мультибэкендный шлюз
Идея
TGI это стек на Rust и Python с HTTP и gRPC API, планировщиком непрерывного батчинга, хуками для наблюдаемости и автоскейлинга, и подключаемыми бэкендами, включая vLLM-стиль и TensorRT-LLM. Версия 3 уделяет особое внимание обработке очень длинных промптов через chunking и prefix caching.
Производительность на длинных промптах
В документации TGI v3 приводится пример: для очень длинных промптов более 200 000 токенов ответ, который занимает 27.5 с в vLLM, может обслуживаться за ~2 с в TGI v3, что заявлено как 13× ускорение для этой нагрузки. TGI v3 способна обрабатывать около 3× больше токенов в той же GPU-памяти за счет сокращения footprint и использования chunking и кеширования. Механизм сохраняет оригинальный контекст разговора в prefix cache, поэтому последующие ходы оплачивают только инкрементальные токены; накладные расходы на поиск в кеше микросекундного порядка.
Архитектура и поведение латентности
Ключевые компоненты: chunking для разбиения очень длинных промптов, prefix caching для совместного использования контекста между ходами, continuous batching для присоединения входящих запросов к уже запущенным батчам, и использование paged-attention и fused kernels в GPU-бэкендах. Для коротких чатов throughput и латентность сопоставимы с vLLM, тогда как для длинных кэшируемых контекстов P50 и P99 могут улучшаться на порядок, потому что движок избегает повторных prefill.
Мультибэкенд и мульти-модель
TGI спроектирован как маршрутизатор плюс модельный сервер: он может маршрутизировать запросы по множеству моделей и направлять трафик на разные бэкенды, что делает его подходящим центральным слоем для мульти-арендных сред.
LMDeploy — TurboMind с blocked KV и агрессивной квантизацией
Идея
LMDeploy из экосистемы InternLM это тулкит для сжатия и сервинга LLM, с движком TurboMind, сконцентрированный на высокой пропускной способности запросов, blocked KV cache, persistent batching и квантовании весов и KV.
Относительная пропускная способность и латентность
Проект заявляет до 1.8× более высокую пропускную способность запросов по сравнению с vLLM благодаря persistent batch, blocked KV, dynamic split-and-fuse, tensor parallelism и оптимизированным CUDA-ядрам. Blocked KV похож по идее на paged KV и помогает упаковывать много последовательностей в VRAM. Поддерживается квантование KV (int8, int4) и квантование только весов (4-bit AWQ). В комплекте есть бенчмаркинговая обвязка для отчета токен- и запросной пропускной способности и латентности первого токена.
Мульти-модельные деплойменты
LMDeploy предоставляет прокси-сервер для мульти-модельных, мульти-машинных, мульти-GPU развёртываний и логику маршрутизации на основе метаданных запроса, что ставит его архитектурно ближе к TGI, чем к одиночному движку.
Когда что использовать
- Для максимального throughput и минимального TTFT на NVIDIA GPU: TensorRT-LLM.
- Для рабочих нагрузок с длинными переиспользуемыми контекстами (RAG, аналитические сводки): TGI v3.
- Для открытого простого движка с OpenAI-совместимым API и надежным базовым уровнем: vLLM.
- Для открытых моделей вроде InternLM или Qwen с агрессивной квантизацией и мульти-модельным обслуживанием: LMDeploy.
В реальном мире часто смешивают стэки: TensorRT-LLM для крупного пропускного чата, TGI v3 для аналитики по длинным контекстам, и vLLM или LMDeploy для экспериментальных или открытых моделей. Главное — согласовать throughput, хвосты латентности и поведение KV с реальным распределением токенов в вашем трафике и затем расчитать стоимость на миллион токенов по измеренному tokens/s на вашем железе.
Switch Language
Read this article in English