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 odpowiedzi | Określają niewykorzystane zasoby i obciążenie kolejki |
| Maksymalna liczba aktywnych sekwencji i budżet tokenów | Ograniczają pracę w każdej iteracji |
| Przydział KV i wywłaszczanie | Mogą uniemożliwić przyjmowanie nowych żądań |
| TTFT i opóźnienie generowania dla każdego żądania | Pokazują koszt ponoszony przez poszczególne żądania |
| Odsetek udanych żądań i goodput | Pokazują, 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.