Jak grupowanie zadań AI w domu wymienia opóźnienia na przepustowość?

Eva Wong jest Technicznym pisarzem i stałym majsterkowiczem w ZimaSpace. Całe życie geek z pasją do homelabów i oprogramowania open-source, specjalizuje się w tłumaczeniu skomplikowanych koncepcji technicznych na przystępne, praktyczne przewodniki. Eva wierzy, że samodzielne hostowanie powinno być zabawą, a nie czymś onieśmielającym. Poprzez swoje samouczki umożliwia społeczności rozwiewanie tajemnic konfiguracji sprzętu, od budowy pierwszego NAS po opanowanie kontenerów Docker.

Grupowanie zadań AI w domu zwiększa całkowitą przepustowość dzięki łączeniu kompatybilnych operacji, ale każda prośba może czekać dłużej lub dzielić wolniejsze iteracje z innymi użytkownikami.

Pojedynczy prompt może natychmiast trafić do nieużywanego akceleratora, podczas gdy serwer rodzinny często obsługuje jednocześnie czaty, prompty dotyczące dokumentów, żądania głosowe i zadania działające w tle. Środowisko uruchomieniowe może przez chwilę przetrzymać żądanie, aby utworzyć pakiet, dodawać nowe sekwencje między iteracjami dekodowania albo dzielić długie fazy prefill na mniejsze fragmenty. Takie decyzje pozwalają lepiej wykorzystać akcelerator, ale zmieniają też czas do uzyskania pierwszego tokena, opóźnienie między tokenami i sprawiedliwość obsługi. Poniższe sekcje wyjaśniają, kiedy grupowanie pomaga oraz kiedy wzrost przepustowości przestaje poprawiać interaktywne korzystanie z systemu.

Grupowanie zamienia wolne zasoby akceleratora we wspólną pracę

Pojedyncze żądanie może nie wykorzystywać efektywnie wszystkich równoległych torów wykonywania, zwłaszcza podczas małych operacji macierzowych lub obsługi krótkich sekwencji. Połączenie kilku żądań tworzy większe operacje tensorowe, które mogą skuteczniej wykorzystywać akcelerator.

Orca wprowadziła planowanie na poziomie iteracji, pozwalając żądaniom dołączać do grupy i opuszczać ją między iteracjami generowania, zamiast wymuszać pozostawanie jednej stałej grupy razem do zakończenia wszystkich sekwencji.

Zysk mierzy się liczbą ukończonych tokenów lub żądań w jednostce czasu. Nie gwarantuje to, że którykolwiek użytkownik szybciej otrzyma token.

Okno grupowania dodaje czas oczekiwania przed rozpoczęciem obliczeń

Środowisko uruchomieniowe, które czeka na kolejne żądania, może utworzyć większą i wydajniejszą grupę, ale pierwsze żądanie ponosi koszt tego oczekiwania, nawet gdy akcelerator był dostępny.

kompromis między przepustowością a opóźnieniem staje się widoczny, gdy większe grupy poprawiają wydajność urządzenia, jednocześnie wydłużając czas kolejkowania lub iteracji.

Interaktywne AI w domu zwykle wymaga krótkiego lub adaptacyjnego okna grupowania. Osadzanie w tle może tolerować dłuższe oczekiwanie, ponieważ jego celem jest wykonanie pracy, a nie szybka odpowiedź w rozmowie.

Długie fazy prefill mogą blokować krótkie zadania dekodowania

Przetwarzanie promptu wykonuje intensywną obliczeniowo fazę prefill, podczas gdy aktywne rozmowy wielokrotnie wracają do ograniczonych przepustowością pamięci kroków dekodowania. Połączenie ich w jednej grupie może sprawić, że krótkie interaktywne dekodowanie będzie czekać za długim promptem dotyczącym dokumentu.

DistServe izoluje zakłócenia między fazami prefill i dekodowania, ponieważ obie fazy mają inne charakterystyki zasobów i opóźnień.

Prefill porcjowany jest rozwiązaniem kompromisowym: dzieli długi prompt, aby żądania dekodowania mogły działać między kolejnymi fragmentami, ale dokument potrzebuje większej liczby rund planowania, by zakończyć przetwarzanie.

Najlepsze ustawienie zależy od tego, czy serwer ma priorytetowo obsłużyć jedno długie zadanie analityczne, czy kilku użytkowników, którzy już otrzymują strumieniowane odpowiedzi.

Różne długości sekwencji sprawiają, że każda grupa jest nierówna

Żądania różnią się długością promptu, długością odpowiedzi, warunkami zatrzymania i funkcjami modelu. Niektóre kończą się szybko, podczas gdy inne pozostają aktywne, dlatego skład grupy stale się zmienia.

vLLM korzysta z ciągłego grupowania oraz stronicowanej pamięci podręcznej KV, aby przyjmować nowe żądania, gdy tylko zwolni się miejsce, zamiast czekać na ustaloną granicę grupy.

Nawet przy wydajnym zarządzaniu pamięcią jedna bardzo długa odpowiedź zużywa sloty dekodowania i pamięć podręczną KV przez wiele iteracji. Dlatego rozmiar grupy należy określać na podstawie budżetów tokenów i pamięci, a nie tylko liczby żądań.

Większe grupy mogą obniżyć szybkość tokenów dla pojedynczego użytkownika

Całkowita liczba tokenów na sekundę może wzrosnąć, podczas gdy każdy użytkownik otrzymuje mniejszą część iteracji dekodowania. Panel pokazujący wyższą łączną przepustowość może współistnieć z wolniejszym widocznym strumieniowaniem odpowiedzi.

Przewodnik ZimaSpace dotyczący równoczesnej pracy rodziny wyjaśnia, dlaczego testy z jednym użytkownikiem nie przewidują opóźnień przy kilku nakładających się rozmowach.

Oprócz łącznej przepustowości mierz czas do uzyskania pierwszego tokena, czas między tokenami oraz czas ukończenia każdego żądania. W przeciwnym razie grupowanie może być dostrajane pod kątem metryki, której użytkownicy bezpośrednio nie odczuwają.

Ustal różne zasady grupowania dla pracy interaktywnej i zadań w tle

Dla głosu i czatu zarezerwuj krótkie okna kolejkowania, ograniczoną współbieżność i wyższy priorytet. Dla osadzania, indeksowania, tworzenia podsumowań i transformacji offline pozwól na większe grupy oraz niższy priorytet.

Badania nad sprawiedliwą obsługą LLM wykorzystują sprawiedliwość uwzględniającą tokeny, aby długi tekst wejściowy lub wyjściowy jednego żądania nie zajmował przez długi czas nieproporcjonalnej części zasobów.

Testuj system przy reprezentatywnym obciążeniu rodzinnym, a nie tylko przy maksymalnym rozmiarze grupy. Użyteczna konfiguracja zapewnia najwyższą przepustowość, która nadal spełnia wymagania dotyczące czasu do pierwszego tokena i opóźnienia strumieniowania na ścieżce interaktywnej.

Gdy jeden akcelerator nie może obsłużyć obu klas zadań, prostszym rozwiązaniem niż jedna uniwersalna polityka grupowania może być rozdzielenie procesów roboczych lub harmonogramów.

FAQ

Czy grupowanie zawsze zwiększa opóźnienie?

Nie. Wydajne grupowanie może skrócić czas opróżniania kolejki i zapobiegać przeciążeniom, ale oczekiwanie na utworzenie grupy oraz dzielenie dłuższych iteracji może zwiększyć opóźnienie pojedynczego żądania.

Czy rozmiar grupy oznacza liczbę użytkowników?

Nie dokładnie. Środowiska uruchomieniowe mogą ustalać budżet na podstawie aktywnych sekwencji, tokenów, bloków KV lub całkowitego nakładu pracy, a jeden użytkownik może generować kilka równoczesnych żądań.

Czy żądania głosowe należy grupować z zadaniami osadzania?

Zwykle nie w ramach tej samej polityki opóźnień. Głos jest interaktywny, podczas gdy zadania osadzania mogą czekać i wykorzystywać większe grupy, gdy pozostają wolne zasoby.

Centrum Technologii i Sztucznej Inteligencji

Więcej do przeczytania

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.