Ciągłe i statyczne przetwarzanie wsadowe: jak działa planowanie żądań LLM

Tłumaczenie automatyczne

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

Statyczne przetwarzanie wsadowe grupuje żądania do jednego przebiegu inferencji. Ciągłe przetwarzanie wsadowe aktualizuje zbiór aktywnych żądań między iteracjami generowania: zakończone żądania są usuwane, a oczekujące żądania spełniające warunki są przyjmowane. Dzięki temu serwer może ponownie wykorzystać zasoby bez czekania na zakończenie wszystkich pierwotnych żądań.

Dla inżynierów odpowiedzialnych za obsługę modeli korzyści zależą od zmiennych długości odpowiedzi, zasad planowania, pojemności pamięci i wymagań dotyczących opóźnień.

Porównaj różne długości odpowiedzi

Załóżmy, że trzy żądania potrzebują 10, 40 i 100 tokenów wyjściowych. W prostej pętli generowania ze stałą grupą, która nie zastępuje zakończonych żądań, zasoby zajmowane przez pierwsze dwa zwalniają się przed zakończeniem trzeciego. Serwer nadal czeka na najdłuższą odpowiedź w grupie, zanim rozpocznie przetwarzanie kolejnej pełnej grupy.

Planista działający na poziomie iteracji może usunąć każde zakończone żądanie i przyjąć inne. Orca wprowadziła projekt systemu obsługi LLM wykorzystujący ten sposób planowania. Przyjęcie żądania nadal wymaga wolnych bloków KV cache i odpowiedniego budżetu iteracji. Ciągłe przetwarzanie wsadowe nie oznacza, że każde żądanie w kolejce zaczyna się natychmiast.

Nowe prompty wymagają też wstępnego przetwarzania, czyli prefill. Prefill podzielony na fragmenty może współdzielić budżet iteracji z trwającym dekodowaniem. Zasady przyjmowania żądań i nadawania priorytetów wpływają więc zarówno na czas do pierwszego tokena, jak i na odstępy między kolejnymi tokenami.

Porównaj planistę i całe środowisko wykonawcze

Eksperyment Anyscale z 2023 roku wykazał około 4x dla FasterTransformer, 8x dla konfiguracji ciągłego przetwarzania wsadowego i 23x dla vLLM względem prostej implementacji bazowej. Użyto OPT-13B, A100-40GB, 1,000 żądań, wejść o długości 512 tokenów i wykładniczego rozkładu długości odpowiedzi ze średnią 128 tokenów. Są to wyniki całych implementacji w tej konfiguracji, a nie wyizolowany efekt pojedynczej zmiany planowania.

Na potrzeby porównania zapisz:

Co sprawdzićDlaczego to istotne
Rozkłady napływu żądań i długości odpowiedziOkreślają niewykorzystane zasoby i obciążenie kolejki
Maksymalna liczba aktywnych sekwencji i budżet tokenówOgraniczają pracę w każdej iteracji
Przydział KV i wywłaszczanieMogą uniemożliwić przyjmowanie nowych żądań
TTFT i opóźnienie generowania dla każdego żądaniaPokazują koszt ponoszony przez poszczególne żądania
Odsetek udanych żądań i goodputPokazują, czy dodatkowa praca spełnia cel usługi

Analizuj krótkie i długie żądania osobno. Większa łączna przepustowość może występować razem z większym opóźnieniem dla jednej grupy żądań. Wybierz ustawienia planowania na podstawie zmierzonych wymagań usługi.

Przewodnik inżynierski: ciągłe przetwarzanie wsadowe omawia łącznie mechanizmy przydzielania zasobów i planowania.