Jak hierarchia pamięci GPU wpływa na szybkość inferencji LLM

Tłumaczenie automatyczne

Ten artykuł został automatycznie przetłumaczony z angielskiego oryginału.

Hierarchia pamięci GPU wpływa na inferencję LLM, ponieważ przeniesienie tensora pośredniego do pamięci głównej GPU kosztuje więcej niż jego ponowne użycie w działającym jądrze. HBM przechowuje duży model i pamięć podręczną mechanizmu uwagi. Rejestry, pamięć współdzielona i L2 zapewniają mniejsze obszary, w których można ponownie używać danych podczas obliczeń.

Inżynierowie profilujący inferencję muszą odróżniać pojemność pamięci od ruchu w pamięci. To, że model mieści się w HBM, nie dowodzi, że jego jądra wydajnie przenoszą dane.

Co przechowują poszczególne rodzaje pamięci

PamięćZakresRola w inferencji
RejestryWartości używane przez wątekAkumulatory i obliczenia pośrednie
Pamięć współdzielonaWątki w jednym bloku obliczeniowymWspólne ponowne użycie fragmentów macierzy i redukcji
Pamięć podręczna L2Współdzielona w całym GPUPonowne użycie między blokami bez kolejnego odczytu z pamięci głównej
HBMPamięć główna GPUWagi, KV cache, dane wejściowe, dane wyjściowe i większe wyniki pośrednie

Dla H100 SXM NVIDIA podaje 80 GB HBM3 o przepustowości 3.35 TB/s, 50 MB L2 i do 228 KB pamięci współdzielonej na multiprocesor strumieniowy. Ilość dostępna dla pojedynczego bloku wątków jest mniejsza i zależy od ustawień alokacji. Są to specyfikacje tego wariantu GPU, a nie limity wspólne dla wszystkich H100. Zobacz specyfikację H100 i przewodnik optymalizacji Hopper.

Dlaczego tensor pośredni ma znaczenie

Sekwencja osobnych jąder może zapisać wynik pośredni w HBM i odczytać go ponownie w następnym jądrze. Fuzja może utrzymać ten wynik w rejestrach lub pamięci współdzielonej. FlashAttention stosuje podobne zasady ponownego użycia danych do mechanizmu uwagi, unikając dużych macierzy wyników w HBM.

Pamięć na układzie jest ograniczona. Jądro, które używa zbyt wielu rejestrów lub zbyt dużo pamięci współdzielonej, może zmniejszyć liczbę bloków działających jednocześnie. Przenoszenie wartości z rejestrów do pamięci przy braku miejsca może zwiększyć ruch w pamięci. Większa fuzja nie gwarantuje więc szybszego wykonania.

Badając zmianę, porównaj liczbę bajtów przesłanych przez HBM, użycie rejestrów, użycie pamięci współdzielonej, przenoszenie wartości z rejestrów do pamięci oraz liczbę aktywnych bloków. Zachowaj ten sam model, kształty tensorów, precyzję i wariant GPU. Następnie zmierz całe żądanie: szybsze jądro mechanizmu uwagi może odpowiadać tylko za niewielką część całkowitego opóźnienia.

Przewodnik inżynierski: hierarchia pamięci GPU pokazuje, gdzie znajdują się te rodzaje pamięci w H100 SXM.