Dlaczego dekodowanie LLM jest ograniczone pamięcią, a przetwarzanie promptu mocą obliczeniową?

Tłumaczenie automatyczne

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

Dekodowanie LLM często jest ograniczone pamięcią, ponieważ mała partia wykorzystuje każdą wagę modelu tylko kilka razy przed załadowaniem kolejnych wag. Przetwarzanie długiego promptu lub dostatecznie dużej partii wykorzystuje wagi wielokrotnie dla wielu tokenów promptu, więc zasobem ograniczającym mogą stać się obliczenia macierzowe. Są to warunki konkretnego obciążenia, a nie stałe właściwości każdej z faz.

Intensywność arytmetyczna pomaga zdecydować, czy należy ograniczyć przesyłanie danych, czy poprawić wykonywanie operacji macierzowych.

Porównaj obliczenia z liczbą przesyłanych bajtów

Intensywność arytmetyczna to liczba operacji zmiennoprzecinkowych wykonywanych na każdy bajt przesłany z pamięci. Model roofline porównuje ją ze szczytową mocą obliczeniową podzieloną przez przepustowość pamięci.

Specyfikacja NVIDIA H100 SXM podaje około 989 TFLOPS dla gęstych obliczeń FP16/BF16 na jednostkach Tensor Core oraz przepustowość pamięci 3.35 TB/s. Podana wartość 1,979 TFLOPS zakłada ustrukturyzowaną rzadkość. Ich iloraz wynosi około 295 FLOPs na bajt. To granica teoretyczna wyznaczona na podstawie odpowiadających sobie parametrów sprzętu.

Uproszczone mnożenie gęstej macierzy przez wektor wykonuje około dwóch operacji na każdą dwubajtową wagę: mniej więcej jeden FLOP na bajt. Dekoder przetwarzający partię o rozmiarze jeden nie może w tych warunkach wykorzystać szczytowej wydajności obliczeń macierzowych GPU. Większe partie pozwalają wykorzystać załadowaną wagę w obliczeniach dla kilku tokenów. Przetwarzanie promptu podobnie wykorzystuje wagi wielokrotnie dla jego tokenów. Splitwise opisuje te różnice między fazami.

Wybierz zmianę na podstawie zmierzonego ograniczenia

ObserwacjaZmiana do zbadaniaCo może uniemożliwić poprawę
Dekodowanie małych partii wymaga czasu na przesyłanie wagObsługiwana kwantyzacja wag; większe partie dekodowaniaKernele kwantyzacji, utrata jakości, limity opóźnienia
Dekodowanie z długim kontekstem wymaga czasu na odczyt historii uwagiMniej głów KV; obsługiwana kwantyzacja KV; wydajne obliczanie uwagiArchitektura modelu i obsługa precyzji pamięci podręcznej
Przetwarzanie dużego promptu lub partii intensywnie wykorzystuje jednostki macierzoweWydajne kernele macierzowe; obsługiwane obliczenia o niższej precyzjiKrótkie prompty, małe partie, inne operacje
Wiele krótkich kerneli pozostawia przerwy w wykonywaniu obliczeń na GPUŁączenie kerneli lub zmniejszenie narzutu ich uruchamianiaWiększe zużycie rejestrów i pamięci współdzielonej

Po każdej zmianie mierz zarówno opóźnienie do pierwszego tokena, jak i odstępy między kolejnymi tokenami. Większa partia może zwiększyć łączną liczbę tokenów na sekundę, a jednocześnie spowolnić każde żądanie. Iloraz parametrów sprzętu wskazuje możliwe ograniczenie; ślad wykonania pokazuje, na jaki zasób faktycznie czeka Twoje obciążenie.

Poradnik inżynierski: inferencja ograniczona pamięcią lub mocą obliczeniową zawiera diagram roofline i optymalizacje dla poszczególnych faz.