Почему декодирование LLM ограничено памятью, а префилл — вычислениями?

Автоматический перевод

Эта статья была автоматически переведена с оригинальной английской версии.

Декодирование LLM часто ограничено памятью, потому что небольшой батч использует каждый вес модели лишь несколько раз, прежде чем загрузить следующие веса. Префилл длинного промпта или достаточно большого батча повторно использует веса для множества токенов промпта, поэтому ограничивающим ресурсом могут стать матричные вычисления. Это условия конкретной нагрузки, а не постоянные свойства каждой из фаз.

Арифметическая интенсивность помогает решить, нужно ли уменьшить объём передачи данных или улучшить выполнение матричных операций.

Сравните вычисления с объёмом переданных данных

Арифметическая интенсивность — это число операций с плавающей точкой на байт, переданный из памяти. Модель roofline сравнивает её с отношением пиковой вычислительной производительности к пропускной способности памяти.

Спецификации NVIDIA H100 SXM указывают примерно 989 TFLOPS для плотных вычислений FP16/BF16 на Tensor Core и пропускную способность памяти 3.35 TB/s. Указанное значение 1,979 TFLOPS предполагает структурированную разреженность. Их отношение составляет около 295 FLOPs на байт. Это теоретическая граница, рассчитанная по согласованным аппаратным характеристикам.

Упрощённое умножение плотной матрицы на вектор выполняет около двух операций на каждый двухбайтовый вес: примерно один FLOP на байт. Декодер с размером батча один в таком режиме не может использовать пиковую производительность матричных вычислений GPU. Более крупные батчи позволяют использовать загруженный вес в вычислениях для нескольких токенов. Префилл аналогично использует веса повторно для токенов промпта. Splitwise описывает эти различия между фазами.

Выберите изменение на основе измеренного ограничения

НаблюдениеИзменение для проверкиЧто может помешать выигрышу
Декодирование небольших батчей тратит время на передачу весовПоддерживаемая квантизация весов; более крупные батчи декодированияКернелы квантизации, потеря качества, ограничения латентности
Декодирование с длинным контекстом тратит время на чтение истории аттеншнаМеньше голов KV; поддерживаемая квантизация KV; эффективный аттеншнАрхитектура модели и поддержка точности кэша
Большой префилл интенсивно использует матричные блокиЭффективные матричные кернелы; поддерживаемые вычисления с пониженной точностьюКороткие промпты, небольшие батчи, другие операции
Много коротких кернелов оставляют промежутки без выполнения операций на GPUОбъединение операций или уменьшение накладных расходов на запускДополнительное использование регистров и разделяемой памяти

После каждого изменения измеряйте и латентность до первого токена, и интервалы между последующими токенами. Более крупный батч может увеличить общее число токенов в секунду и одновременно замедлить каждый запрос. Отношение аппаратных характеристик указывает возможное ограничение; трейс показывает, какого ресурса на самом деле ждёт ваша нагрузка.

Инженерное руководство: инференс, ограниченный памятью или вычислениями содержит диаграмму roofline и оптимизации для каждой фазы.