Back to archive
#ai#llm#glossary#aigen

Disaggregated Serving

Przetwarzanie długiego pytania i dopisywanie odpowiedzi mają różny charakter pracy. Gdy odbywają się na tych samych zasobach, mogą sobie przeszkadzać. Chcesz osobno dobierać sprzęt i planowanie dla obu etapów.

Disaggregated Serving rozdziela Prefill — przetwarzanie znanego wejścia — i Decode — dalsze generowanie — na osobne instancje i zasoby. Jedna pula przygotowuje kontekst, druga kontynuuje odpowiedź.

Między pulami trzeba przenieść potrzebny stan, przede wszystkim KV Cache, czyli zapisane wyniki attention dla wcześniejszego tekstu. Można wtedy niezależnie zwiększać zasoby części obciążonej długimi wejściami i części prowadzącej wiele strumieni.

Rozdzielenie ma cenę: transfer danych, dodatkową koordynację i możliwe niezrównoważenie obu pul. Nie jest automatycznym przyspieszeniem każdego żądania. Korzyść zależy od obciążenia i sieci, a pomiar powinien obejmować także przekazanie stanu.

Mechanizm i szczegóły

Dwa oddzielne stanowiska pracy łączy wąska kładka, po której przenoszony jest pakiet zebranych elementów.

DistServe, §2.3–3.3 opisuje powód tego podziału: długi Prefill może zakłócać generowanie innych odpowiedzi, a obie fazy mają różne potrzeby związane z batchingiem i równoległością. Osobne pule pozwalają dobrać im inną liczbę GPU i konfigurację. Każda nadal wykonuje właściwe dla swojej fazy operacje modelu; nie jest to po prostu podział jego warstw na dwie połowy.

Przekazanie stanu też zajmuje czas

W DistServe instancja Prefill wyznacza pierwszy token, a instancja Decode otrzymuje go wraz z cache i generuje kolejne. Pierwszy token może więc być dostępny przed zakończeniem transferu; opóźnienie przekazania stanu może pojawić się między nim a następnym tokenem.

Własny bilans: zostało 64 MiB cache do przesłania. Przy efektywnym transferze 1 GiB/s samo przesłanie trwa 62,5 ms, a przy 8 GiB/s — 7,8125 ms. Korzystamy z t=S/Bt=S/B, z jednostkami binarnymi. To obliczenie dydaktyczne przy stałej przepustowości, bez narzutów i nakładania transferu na obliczenia.

Zmień przepustowość i porównaj transfer z umownym opóźnieniem 20 ms, którego udałoby się uniknąć przez rozdzielenie faz. Przy 1 GiB/s bilans tego uproszczenia jest niekorzystny, przy 8 GiB/s — korzystny. Granica wypada przy 3,125 GiB/s.

Dwie pule nie gwarantują przyspieszenia

Rzeczywisty bilans obejmuje również kolejki obu pul, zajętą pamięć, kopie wag, synchronizację i wykorzystanie GPU. DistServe, §4.2–4.3 i §7 wiąże rozmieszczenie instancji z dostępną siecią i omawia ograniczenia przy małej liczbie GPU. Wynik zależy od obciążenia oraz wymaganych opóźnień. Porównuj także Inter-token Latency: po szybkim pierwszym tokenie może nastąpić długa przerwa.

Zobacz także: Goodput — maksymalne tempo napływu żądań przy ustalonym celu opóźnień i wymaganym odsetku odpowiedzi spełniających ten cel.

Wykorzystuję treści generowane przez AI jako część mojego codziennego procesu nauki.