В мире больших языковых моделей (LLM) скорость генерации текста часто становится узким местом, ограничивающим интерактивность приложений. Традиционный автогенеративный подход, при котором модель предсказывает один токен за раз, требует множества итераций, что замедляет ответ. Однако NVIDIA предлагает элегантное решение — спекулятивное декодирование (speculative decoding). Эта техника позволяет не просто ускорить процесс, но и переосмыслить архитектуру инференса, смещая баланс между вычислительной мощностью и пропускной способностью памяти.
В этой статье мы подробно разберем, как совместная разработка моделей (co-design) с использованием спекулятивного декодирования позволяет достичь пиковой производительности. Мы рассмотрим пять ключевых правил выбора длины черновика (draft length) и механизма спекуляции, а также проанализируем реальные бенчмарки и инструменты, такие как SPEED-Bench и TensorRT LLM, чтобы вы могли оптимизировать свои модели для работы в условиях ограниченных ресурсов или высоких требований к задержкам.
01Что такое спекулятивное декодирование?
Спекулятивное декодирование — это метод ускорения автогенеративного этапа инференса LLM, который позволяет предсказывать несколько токенов за одну итерацию. В отличие от стандартного подхода, где большая целевая модель (target model) генерирует один токен за шаг, здесь используется небольшая модель-черновик (draft model). Сначала модель-черновик предлагает несколько наиболее вероятных следующих токенов. Затем эти токены проверяются параллельно за один проход через более крупную целевую модель.
Этот подход снижает общее количество итераций декодирования, одновременно увеличивая арифметическую интенсивность целевой модели, без необходимости повышения конкурентности (batch size). Целевая модель принимает предложенные токены по очереди до тех пор, пока не встретит первое расхождение. Следующий цикл предсказания затем возобновляется с этой позиции. Поскольку сохраняются только токены, принятые целевой моделью, спекулятивное декодирование дает ту же последовательность вывода, что и стандартное декодирование, если только критерии принятия не были намеренно ослаблены.

Ключевые метрики здесь — это длина черновика (D), то есть количество предложенных токенов за итерацию целевой модели, и длина принятия (AL), то есть количество токенов, которые были фактически приняты за итерацию. Значение AL варьируется от 0 до D, так как целевая модель всегда может добавить один новый «истинный» токен к принятым токенам черновика. Скорость ускорения можно количественно оценить как отношение времени, необходимого целевой модели для последовательной генерации N токенов, ко времени, необходимому для параллельной проверки D токенов, с учетом накладных расходов на создание черновика.
02Выбор оптимальной длины черновика: Баланс вычислений и памяти
Для простоты, если пренебречь задержкой модели-черновика, спекуляция обеспечивает ускорение, когда вычислительная нагрузка растет быстрее, чем доступ к памяти. Во время проверки вычисления масштабируются пропорционально длине черновика D, в то время как доступ к памяти (особенно к KV-кэшу) остается неизменным. Следовательно, цель состоит в том, чтобы увеличить D до тех пор, пока операция не перейдет из состояния, ограниченного памятью (memory-bound), в состояние, ограниченное вычислениями (compute-bound).
Влияние длины черновика на производительность линейных слоев
При спекуляции GEMM (General Matrix Multiply) для каждого линейного слоя целевой модели растет от B до B*D, где B — размер батча. Это означает, что более длинные черновики позволяют GEMM достигать пиковой производительности при меньших эффективных размерах батча. Например, увеличение длины черновика может позволить достичь вычислительной насыщенности при значительно меньшем размере батча, чем без спекуляции.
Это особенно важно для моделей с архитектурой Mixture-of-Experts (MoE). По мере того как такие модели становятся более разреженными, а рабочие нагрузки с длинным контекстом увеличивают давление на емкость KV-кэша, эффективная конкурентность на эксперта снижается. В таких сценариях более длинные черновики становятся привлекательными, так как они помогают утилизировать вычислительные ресурсы GPU более полно.
Влияние длины черновика на производительность внимания (Attention)
Для рабочих нагрузок, связанных с рассуждением (reasoning) и агентами (agentic), операция внимания (attention) часто доминирует во времени выполнения в области, ориентированной на пропускную способность. Арифметическая интенсивность декодирования внимания составляет примерно 2/G, где G — количество заголовков запросов, разделяющих один заголовок KV. Спекуляция увеличивает эту интенсивность до 2*D/G, так как спекулированные токены повторно используют тот же KV-кэш.
На текущих устройствах GPU ядра внимания достигают хорошей утилизации оборудования при определенных значениях GEMM-N. Это делает оптимальную длину черновика зависимой от архитектуры модели. Например, если ядро внимания достигает насыщения пропускной способности при определенном значении D, дальнейшее увеличение D может замедлить рабочую нагрузку, так как время выполнения внимания начинает масштабироваться нелинейно.

Источник: NVIDIA Developer ↗
