Как иерархия памяти 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.