Почему декодирование 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 и оптимизации для каждой фазы.