Memory-bound decoding
Jak działa
Wydajność jądra obliczeniowego opisuje model roofline: operacja jest compute-bound, gdy jej intensywność arytmetyczna (FLOPs/bajt) przekracza stosunek szczytowej mocy do przepustowości pamięci sprzętu, i memory-bound w przeciwnym razie. W fazie decode LLM, przy małym batchu, na każdy wczytany bajt wag przypada bardzo mało operacji (mnożenie macierz-wektor), więc intensywność jest niska i dominuje odczyt pamięci. Aby wygenerować jeden token, trzeba przeczytać z pamięci HBM wszystkie parametry modelu oraz cały KV cache; teoretyczna górna granica prędkości to (przepustowość pamięci) / (rozmiar wczytywanych danych na token). Dlatego techniki, które zmniejszają liczbę bajtów czytanych na token — kwantyzacja wag i KV cache, GQA/MQA, batching (amortyzacja odczytu wag na wiele zapytań) oraz speculative decoding (wiele tokenów na jeden przebieg) — bezpośrednio zwiększają przepustowość generacji.
Rozwiązany problem
Naturalne założenie, że inferencja LLM jest ograniczona mocą obliczeniową GPU, prowadzi do błędnych optymalizacji. Koncept memory-bound decoding wyjaśnia, dlaczego przy generowaniu jednego tokenu na raz GPU jest niedowykorzystane: operacje macierz-wektor mają niską intensywność arytmetyczną (mało FLOPs na każdy bajt wczytany z pamięci), więc czas zdominowany jest przez transfer wag i KV cache z pamięci HBM. Zrozumienie tego kieruje optymalizacje na redukcję ruchu pamięci (kwantyzacja, batching, GQA/MQA, speculative decoding), a nie na zwiększanie mocy FLOPs.
Kluczowe mechanizmy
Mocne strony i ograniczenia
Komponenty
Stosunek liczby operacji zmiennoprzecinkowych do liczby bajtów wczytanych z pamięci; niski w fazie decode przy małym batchu.
Rama analityczna wiążąca osiągalną wydajność z intensywnością arytmetyczną, szczytową mocą i przepustowością pamięci sprzętu.
Łączny rozmiar wag i KV cache wczytywanych z pamięci HBM dla wygenerowania jednego tokenu, wyznaczający teoretyczny limit prędkości.
Implementacja
Skupienie na redukcji operacji zmiennoprzecinkowych nie przyspiesza fazy decode, bo wąskim gardłem jest przepustowość pamięci.
Dla długich kontekstów odczyt KV cache na token dorównuje lub przewyższa odczyt wag, dodatkowo obciążając pamięć.
Ewolucja
Roofline dostarcza ram do klasyfikacji jąder jako compute- lub memory-bound wg intensywności arytmetycznej.
Analizy wydajności serwowania LLM (m.in. prace o efektywnej inferencji transformerów) wskazują memory-bound decoding jako główne ograniczenie i motywację batchingu oraz kwantyzacji.
Hiperparametry (konfigurowalne osie)
Główna dźwignia intensywności arytmetycznej; większy batch amortyzuje odczyt wag i łagodzi ograniczenie pamięciowe.
Precyzja wag (FP16/INT8/INT4) wyznaczająca liczbę bajtów czytanych na token.
Złożoność obliczeniowa
Złożoność czasowa: t_token >= (bajty wag + bajty KV cache) / przepustowość pamięci. Złożoność przestrzenna: Ruch pamieci na token = O(rozmiar wag + rozmiar KV cache).
Nowoczesne GPU mają stosunek FLOPs do przepustowości pamięci rzędu setek operacji na bajt, podczas gdy decode przy batchu 1 osiąga intensywność bliską ~1-2 operacji na bajt — stąd głębokie niedowykorzystanie mocy obliczeniowej. Przejście z FP16 na INT4 wag (~4x mniej bajtów na token) daje zbliżone ~kilkukrotne przyspieszenie generacji, potwierdzając dominację ruchu pamięci.
Wąskie gardło obliczeniowe
Zjawisko z definicji jest wąskim gardłem pamięciowym: niska intensywność arytmetyczna sprawia, że prędkość wyznacza przepustowość pamięci, nie FLOPs.
Paradygmat wykonania
Dotyczy gęstego przebiegu decode, w którym wszystkie wagi są czytane na każdy token.
To własność wydajnościowa gęstej generacji autoregresyjnej, nie mechanizm routingu.
Równoległość
Batching wielu zapytań amortyzuje odczyt wag i łagodzi ograniczenie pamięciowe; w obrębie jednej sekwencji generacja pozostaje sekwencyjna.
Wymagania sprzętowe
Prędkość generacji zależy od przepustowości pamięci GPU (HBM2e/HBM3); karty o wyższej przepustowości generują tokeny szybciej niezależnie od zapasu FLOPs.
Na CPU niska przepustowość pamięci RAM czyni memory-bound decoding jeszcze bardziej dotkliwym, silnie ograniczając liczbę tokenów na sekundę.