Как иерархия памяти GPU влияет на скорость инференса LLM

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

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

Иерархия памяти GPU влияет на инференс LLM, потому что перенос промежуточного тензора в основную память GPU обходится дороже, чем его повторное использование внутри работающего вычислительного ядра. HBM хранит большую модель и кэш аттеншна. Регистры, разделяемая память и L2 предоставляют меньшие области для повторного использования данных во время вычислений.

Инженерам, которые профилируют инференс, нужно различать объём памяти и обмен данными с памятью. То, что модель помещается в HBM, не доказывает, что её вычислительные ядра эффективно передают данные.

Что хранит каждый вид памяти

ПамятьОбласть использованияРоль в инференсе
РегистрыЗначения, используемые потокомАккумуляторы и промежуточные вычисления
Разделяемая памятьПотоки одного вычислительного блокаСовместное повторное использование фрагментов матриц и редукций
Кэш L2Общий для всего GPUПовторное использование между блоками без нового чтения из основной памяти
HBMОсновная память GPUВеса, KV cache, входные и выходные данные, более крупные промежуточные результаты

Для H100 SXM NVIDIA указывает 80 GB HBM3 с пропускной способностью 3.35 TB/s, 50 MB L2 и до 228 KB разделяемой памяти на потоковый мультипроцессор. Объём, доступный одному блоку потоков, меньше и зависит от настроек выделения памяти. Это характеристики конкретного варианта GPU, а не общие ограничения для всех H100. См. характеристики H100 и руководство по оптимизации Hopper.

Почему промежуточный тензор имеет значение

Последовательность отдельных вычислительных ядер может записывать промежуточный результат в HBM и снова читать его в следующем ядре. Объединение ядер может сохранить этот результат в регистрах или разделяемой памяти. FlashAttention применяет похожие принципы повторного использования данных к аттеншну и избегает хранения больших матриц оценок в HBM.

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

При исследовании изменения сравните число байтов, переданных через HBM, использование регистров и разделяемой памяти, перенос значений из регистров в память и число активных блоков. Не меняйте модель, формы тензоров, точность и вариант GPU. Затем измерьте весь запрос: более быстрое ядро аттеншна может отвечать лишь за небольшую долю общей латентности.

Инженерное руководство: иерархия памяти GPU показывает расположение этих видов памяти на H100 SXM.