vLLM обходит SGLang на промптах в 64K токенов, но SGLang вырывается вперед, когда контекст достигает 200K на сервере с 8 GPU B300. Этот сдвиг показывает, что при расширении окна токенов производительность диктуется узкими местами на этапе декодирования (decode stage), а не на этапе prefill.

Почему этот бенчмарк важен

Инференс с длинным контекстом определяет стоимость работы чат-ассистентов, помощников по написанию кода и любых приложений, которым необходимо держать сотни тысяч токенов в памяти. Kimi-K3, модель с огромным количеством параметров, является одной из первых LLM с открытыми весами, способных комфортно работать с такими окнами, но именно движок, на котором она запущена, определяет, завершится ли запрос за секунды или за минуты.

И vLLM, и SGLang обещают высокую пропускную способность инференса, однако они используют противоположные подходы к этапу декодирования. vLLM сохраняет путь декодирования простым, избегая дополнительной синхронизации, которую вносит Decode Context Parallelism (DCP). SGLang распределяет чтение KV-кэша (key-value cache) между несколькими GPU с помощью DCP — эта техника позволяет эффективно распределить нагрузку на пропускную способность памяти ценой увеличения объема межпроцессорного взаимодействия.

Тестовый стенд

  • Hardware: один сервер с восемью GPU NVIDIA B300, каждая с идентичным объемом памяти.
  • Workloads: два режима длины контекста — 64K токенов (нижняя граница «длинного контекста») и 200K токенов (верхняя граница, на которую ориентировано множество исследовательских демо).
  • Metrics: общее время обработки фиксированного батча промптов; пропускная способность вычисляется на основе разницы во времени.

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

Цифры говорят сами за себя

Контекст Движок Время (с) Относительная скорость
64K vLLM 100.5 –
SGLang 150.8 vLLM ≈ в 1.5× быстрее
200K vLLM 295.2 –
SGLang 225.3 SGLang ≈ в 1.31× быстрее

Пропускная способность (токенов в секунду) у vLLM резко упала при увеличении контекста: снижение в 3.29× при переходе от 64K к 200K. Пропускная способность SGLang за тот же период снизилась всего в 1.25×.

Откуда берется разрыв

Оба движка тратят примерно одинаковое время на этап prefill — загрузку промпта в KV-кэш. Расхождение проявляется на этапе декодирования, когда модель генерирует токены по одному.

  • 64K токенов: преобладает межпроцессорное взаимодействие (inter-GPU communication). Путь декодирования vLLM на одном GPU позволяет избежать дополнительной синхронизации, необходимой для DCP, что позволяет завершить работу примерно в 1.5× быстрее.
  • 200K токенов: KV-кэш становится настолько большим, что его чтение превращается в узкое место. DCP в SGLang с размером 8 распределяет эти операции чтения между всеми восемью GPU. Выигрыш в пропускной способности перевешивает затраты на коммуникацию, обеспечивая SGLang явное преимущество.

Второе, практическое наблюдение касается нагрузки на память. Запуск любого из движков с целевым показателем использования памяти 0.95 приводил к повторным попыткам из-за нехватки памяти (OOM) на B300. Снижение целевого показателя до 0.92 устранило повторные попытки и стабилизировало время выполнения, ценой небольшого увеличения задержки (latency).

Кто выигрывает, а кто проигрывает

  • Разработчики с коротким или средним контекстом (≤ 64K токенов) получают больше преимуществ от оптимизированного пути декодирования vLLM. Более быстрое выполнение запросов означает более низкие счета за облачные вычисления и более быстрый отклик для пользователя.
  • Командам, создающим инструменты для глубокого анализа или исследований, которым необходимо удерживать сотни тысяч токенов в контексте, следует склоняться к SGLang с включенным DCP. Его более стабильная пропускная способность снижает риск таймаутов и поддерживает более высокую загрузку GPU по мере роста требований к памяти.
  • Планировщикам оборудования стоит учитывать, что само по себе количество GPU не гарантирует линейного масштабирования. Когда пропускная способность KV-кэша становится узким местом, архитектуры, способные распараллеливать чтение кэша — либо через DCP, либо за счет будущих обновлений подсистемы памяти — будут извлекать больше пользы из того же кремния.

Контраргумент: сможет ли vLLM сократить разрыв?

Пока не появятся новые данные, текущие цифры остаются лучшим публичным сравнением.

За чем следить дальше

  • Более широкие окна контекста еще сильнее нагрузят пропускную способность KV-кэша, что потенциально может увеличить отрыв SGLang.

Итог

Если вам нужно обрабатывать запросы с длинным контекстом на кластере на базе B300, выбирайте движок, соответствующий вашему окну токенов. Для нагрузок с контекстом 64K токенов vLLM обеспечивает инференс примерно в 1.5× быстрее. При превышении порога в 200K токенов более эффективным выбором становится декодирование в SGLang на базе DCP, так как его пропускная способность снижается всего в 1.25× по сравнению с падением в 3.29× у vLLM. Установите использование памяти на уровне 0.92, чтобы избежать повторных попыток из-за OOM, и помните, что «лучший» движок зависит от контекста, а не является универсальным решением.