Перейти к содержанию

Обзор настройки производительности инференса

Обзор

Открытые движки инференса, такие как vLLM и SGLang, обеспечивают отличную производительность, но разрыв между настроенным и ненастроенным развёртыванием может оказаться больше ожидаемого. Самый эффективный способ проверки — запустить бенчмарки с реальным трафиком на целевых устройствах. Тем не менее мы провели многочисленные эксперименты с разными движками, GPU, моделями и сочетаниями параметров. Общие наблюдения из этих экспериментов помогут выбрать направление перед глубокой оптимизацией.

Наблюдения

Следующие наблюдения основаны на текущем наборе экспериментов и могут обновляться или дополняться по мере тестирования и развития сообщества. Методы оптимизации и выводы для конкретных моделей и GPU приведены в соответствующих экспериментальных документах.

Движки инференса

Выбор движка инференса имеет решающее значение. Оптимизация часто требует тонкой настройки конкретного движка под определённые модели, методы квантизации, GPU и другие условия. Поэтому оптимизирован ли движок для данного сценария, существенно влияет на результат. Например, vLLM запускает gpt-oss-20b на A100 более чем в десять раз быстрее SGLang/TensorRT-LLM (подробности). Но нельзя утверждать, что один движок лучше другого во всех случаях. В наших экспериментах vLLM, SGLang и TensorRT-LLM каждый показывали лучшую производительность в определённых сценариях.

  1. vLLM отличается удобством работы, высокой совместимостью и широким, своевременно обновляемым набором поддерживаемых моделей. Он стабильно обеспечивает высокую производительность инференса и служит сбалансированным, надёжным выбором для самых разных сценариев.
  2. SGLang также удобен в использовании и обеспечивает конкурентную производительность инференса. Хотя совместимость и охват моделей немного уступают vLLM, скорость добавления новых моделей остаётся одной из лучших. Особенно хорошо он проявляет себя в спекулятивном декодировании и при запуске крупных моделей MoE в FP8 на GPU Hopper.
  3. TensorRT-LLM предлагает глубоко оптимизированный инференс и в некоторых экспериментах показывает исключительные результаты. Однако область применения более специализирована из-за тесной привязки к поставщику и сравнительно медленного добавления новых моделей.

Quantization

  1. Квантизация — важнейший метод максимизации пропускной способности.
  2. Квантизация весов и активаций также помогает снизить задержку.

Спекулятивное декодирование

Спекулятивное декодирование эффективно снижает задержку. Однако с увеличением размера батча его эффект резко падает. Поэтому оно не подходит для повышения пропускной способности.

Стратегии параллелизма

Стратегии параллелизма крайне важны для распределённого инференса на нескольких GPU.

Ядра

vLLM/SGLang обычно выбирают разумные настройки по умолчанию с учётом оборудования. В большинстве случаев бэкенд внимания по умолчанию наиболее подходящий. Оптимизации ядер вроде DeepGEMM предназначены для определённых форматов и GPU. Обычно они включены по умолчанию, но иногда их лучше отключить.

Обобщаемость

Хорошая конфигурация развёртывания обычно повышает производительность при разных длинах входных (ISL) и выходных (OSL) последовательностей, но относительный прирост может существенно различаться.

Углублённая настройка

Некоторые параметры нужно подбирать по реальному характеру запросов инференса: ISL/OSL, повторению префиксов, конкурентности и т. д. К ним относятся:

  1. Максимальный размер батча (зависит от конкурентности)
  2. Настройки планировщика (например, масштабирование API-сервера [vLLM], асинхронное планирование [vLLM], консервативность планировщика [SGLang], политика планирования [SGLang]) (зависят от различных факторов)
  3. Расширенный KV-кэш (зависит от длины последовательности и повторяемости префиксов)
  4. CUDA graph (зависит от конкурентности)
  5. Torch compile (зависит от архитектуры модели и конкурентности)