Обзор настройки производительности инференса
Обзор
Открытые движки инференса, такие как vLLM и SGLang, обеспечивают отличную производительность, но разрыв между настроенным и ненастроенным развёртыванием может оказаться больше ожидаемого. Самый эффективный способ проверки — запустить бенчмарки с реальным трафиком на целевых устройствах. Тем не менее мы провели многочисленные эксперименты с разными движками, GPU, моделями и сочетаниями параметров. Общие наблюдения из этих экспериментов помогут выбрать направление перед глубокой оптимизацией.
Наблюдения
Следующие наблюдения основаны на текущем наборе экспериментов и могут обновляться или дополняться по мере тестирования и развития сообщества. Методы оптимизации и выводы для конкретных моделей и GPU приведены в соответствующих экспериментальных документах.
Движки инференса
Выбор движка инференса имеет решающее значение. Оптимизация часто требует тонкой настройки конкретного движка под определённые модели, методы квантизации, GPU и другие условия. Поэтому оптимизирован ли движок для данного сценария, существенно влияет на результат. Например, vLLM запускает gpt-oss-20b на A100 более чем в десять раз быстрее SGLang/TensorRT-LLM (подробности). Но нельзя утверждать, что один движок лучше другого во всех случаях. В наших экспериментах vLLM, SGLang и TensorRT-LLM каждый показывали лучшую производительность в определённых сценариях.
- vLLM отличается удобством работы, высокой совместимостью и широким, своевременно обновляемым набором поддерживаемых моделей. Он стабильно обеспечивает высокую производительность инференса и служит сбалансированным, надёжным выбором для самых разных сценариев.
- SGLang также удобен в использовании и обеспечивает конкурентную производительность инференса. Хотя совместимость и охват моделей немного уступают vLLM, скорость добавления новых моделей остаётся одной из лучших. Особенно хорошо он проявляет себя в спекулятивном декодировании и при запуске крупных моделей MoE в FP8 на GPU Hopper.
- TensorRT-LLM предлагает глубоко оптимизированный инференс и в некоторых экспериментах показывает исключительные результаты. Однако область применения более специализирована из-за тесной привязки к поставщику и сравнительно медленного добавления новых моделей.
Quantization
- Квантизация — важнейший метод максимизации пропускной способности.
- Квантизация весов и активаций также помогает снизить задержку.
Спекулятивное декодирование
Спекулятивное декодирование эффективно снижает задержку. Однако с увеличением размера батча его эффект резко падает. Поэтому оно не подходит для повышения пропускной способности.
Стратегии параллелизма
Стратегии параллелизма крайне важны для распределённого инференса на нескольких GPU.
Ядра
vLLM/SGLang обычно выбирают разумные настройки по умолчанию с учётом оборудования. В большинстве случаев бэкенд внимания по умолчанию наиболее подходящий. Оптимизации ядер вроде DeepGEMM предназначены для определённых форматов и GPU. Обычно они включены по умолчанию, но иногда их лучше отключить.
Обобщаемость
Хорошая конфигурация развёртывания обычно повышает производительность при разных длинах входных (ISL) и выходных (OSL) последовательностей, но относительный прирост может существенно различаться.
Углублённая настройка
Некоторые параметры нужно подбирать по реальному характеру запросов инференса: ISL/OSL, повторению префиксов, конкурентности и т. д. К ним относятся:
- Максимальный размер батча (зависит от конкурентности)
- Настройки планировщика (например, масштабирование API-сервера [vLLM], асинхронное планирование [vLLM], консервативность планировщика [SGLang], политика планирования [SGLang]) (зависят от различных факторов)
- Расширенный KV-кэш (зависит от длины последовательности и повторяемости префиксов)
- CUDA graph (зависит от конкурентности)
- Torch compile (зависит от архитектуры модели и конкурентности)