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, и помните, что «лучший» движок зависит от контекста, а не является универсальным решением.
