Czym jest Flash-Decoding i kiedy przyspiesza LLMs?
Tłumaczenie automatyczne
Ten artykuł został automatycznie przetłumaczony z angielskiego oryginału.
Flash-Decoding równolegle oblicza uwagę podczas dekodowania, dzieląc zapisaną w pamięci podręcznej sekwencję kluczy i wartości. Różne bloki GPU przetwarzają różne części długiej historii, a następnie łączą częściowe wyniki uwagi z numerycznie poprawną normalizacją. Może to pomóc w generowaniu z małymi partiami, gdy długa pamięć podręczna zapewnia więcej pracy, niż obecny harmonogram obliczeń uwagi wykonuje efektywnie.
Przyspiesza operację uwagi. Wynikające z tego przyspieszenie obsługi modelu zależy również od czasu spędzonego w pozostałych częściach modelu.
Dlaczego dekodowanie wymaga innego harmonogramu
Podczas wstępnego przetwarzania wiele pozycji zapytania można obsługiwać równolegle. Podczas zwykłego dekodowania każda aktywna sekwencja dostarcza jedną nową pozycję zapytania. Mała partia może więc zapewniać zbyt mało niezależnych bloków, aby efektywnie wykorzystać GPU, mimo że każde zapytanie musi odczytać długą historię.
Flash-Decoding tworzy dodatkowe jednostki pracy, dzieląc tę historię. Każda jednostka oblicza częściowy wynik i wartość normalizacji log-sum-exp. Redukcja łączy je w wynik wymagany przez uwagę obliczaną dla całej historii. Zobacz wyjaśnienie Flash-Decoding autorów ze Stanford.
Przy krótkiej historii dodatkowa praca związana z wynikami częściowymi i redukcją może przewyższać korzyści. Większa partia może już zapewniać wystarczająco dużo pracy równoległej. Żaden z tych przypadków nie gwarantuje zysku z dalszego dzielenia sekwencji.
Jak interpretować opublikowany wynik
Autorzy zgłosili nawet ośmiokrotne przyspieszenie całego procesu w swojej ewaluacji CodeLlama-34B z partią o rozmiarze jeden na czterech GPUs A100, dla długości sekwencji od 512 do 64K. W porównaniu użyli wybranego przez siebie punktu odniesienia i konfiguracji wykonania. Wynik ten nie oznacza ośmiokrotnej poprawy względem obecnego serwera z już zoptymalizowanym backendem dekodowania.
Podczas testowania serwera:
- sprawdź, czy wybrany backend uwagi rzeczywiście korzysta z tej metody;
- porównuj ten sam model, układ GPU, precyzję pamięci podręcznej i długości sekwencji;
- testuj zarówno partię o rozmiarze jeden, jak i realistyczną liczbę równoczesnych żądań;
- rejestruj czas jądra uwagi oddzielnie od czasu całego kroku dekodowania;
- mierz opóźnienie tokenów wyjściowych i poprawność numeryczną.
Szybsze jądro uwagi może sprawić, że odczyt wag, obliczenia sieci feed-forward lub komunikacja staną się największym pozostałym kosztem. Przy podejmowaniu decyzji o zmianie konfiguracji obsługi modelu kieruj się wynikiem całego procesu.
Przewodnik inżynierski: Flash-Decoding łączy podział sekwencji z rozróżnieniem między wstępnym przetwarzaniem a dekodowaniem.