Strona główna / Rozdział 7 · Model na produkcji
    Ostatnia zmiana · 5 min czytania

    Użyj z AI

    Continuous batching i PagedAttention

    Serwer składa rozmowy w batch, żeby jedno czytanie wag obsłużyło wielu użytkowników naraz. Continuous batching wymienia rozmowy w batchu co krok, a PagedAttention przydziela im pamięć na KV cache małymi blokami, więc na tej samej karcie mieści się ich kilka razy więcej.

    Po ludzkuAutobus, który nie czeka, aż wszyscy dojadą do pętli: kto wysiada, zwalnia miejsce następnemu na najbliższym przystanku. Do tego nikt nie rezerwuje miejsca na całą trasę z góry, tylko siada, gdy wsiada.

    Odtwórz oba tryby i porównaj: ile kratek stoi pustych i w którym kroku kończy się ostatnia rozmowa

    rozmowa generuje tokenmiejsce stoi puste
    rozmów ukończonych
    pustych kratek (miejsce × krok) do tej pory
    kroków do obsłużenia wszystkich ośmiu

    Osiem rozmów (A–H) o długości od 2 do 9 tokenów. Wiersze m1–m4 to cztery miejsca w batchu, kolumny to kolejne kroki. Poglądowo: symulacja pomija prefill, który nowa rozmowa musi wykonać przed pierwszym tokenem.

    Jak działa continuous batching

    Przełącz sposób przydziału pamięci i policz, ile rozmów mieści się w tych samych 32 blokach

    blok zajęty przez rozmowęzarezerwowany i pusty
    rozmów mieści się w pamięci
    pamięci zarezerwowanej, ale pustej

    Poglądowo: rezerwacja zakłada maksimum 8 bloków na rozmowę. W prawdziwym serwerze pusta zostaje jeszcze końcówka ostatniego bloku każdej rozmowy.

    PagedAttention: pamięć na KV cache

    Przepustowość a opóźnienie na produkcji

    Sprawdź się

    Jak serwer LLM obsługuje wielu użytkowników naraz i co dają continuous batching oraz PagedAttention?

    Batch dzieli koszt czytania wag, więc serwer chce go mieć jak największy. Continuous batching ustala skład batcha co krok decode, a nie co żądanie: skończona rozmowa od razu zwalnia miejsce, nowa dołącza w następnym kroku, więc karta nie czeka na najdłuższą odpowiedź. PagedAttention przydziela KV cache blokami na żądanie, zamiast rezerwować maksimum z góry: strata pamięci spada z 60–80% do kilku procent, mieści się więcej rozmów, a wspólne prefiksy leżą w pamięci raz. Ceną są wywłaszczenia, gdy pamięć się skończy.

    In English

    A batch shares the cost of reading the weights, so a server wants it as large as possible. Continuous batching decides batch membership at every decode step rather than per request: a finished conversation frees its slot immediately and a new one joins on the next step, so the GPU never waits for the longest answer. PagedAttention allocates the KV cache in blocks on demand instead of reserving the maximum up front: memory waste drops from 60–80% to a few per cent, more conversations fit, and shared prefixes are stored once. The price is preemption when memory runs out.

    Pytania pogłębiające (4)
    Co ogranicza rozmiar batcha?
    Pamięć na KV cache wszystkich rozmów i budżet opóźnienia między tokenami. Przy długich kontekstach najpierw kończy się pamięć, przy krótkich budżet opóźnienia.
    Użytkownicy zgłaszają rzadkie, kilkusekundowe przestoje w strumieniu tokenów. Co sprawdzasz?
    Wywłaszczenia z braku pamięci na KV cache (licznik w metrykach serwera) i długie prefille nowych żądań bez chunked prefill. Pomaga niższy limit równoległych rozmów, więcej pamięci na cache albo osobne repliki dla bardzo długich promptów.
    Co daje PagedAttention poza ciaśniejszym upakowaniem?
    Współdzielenie bloków z copy-on-write. Wspólny prefiks wielu rozmów leży w pamięci raz, a kilka próbek tej samej odpowiedzi (n > 1, beam search) dzieli bloki promptu. Autorzy vLLM podają do 55% mniej pamięci przy takim samplowaniu.
    Czemu przy temperaturze 0 ten sam prompt daje czasem inny tekst?
    Wynik kernela zależy od rozmiaru batcha, bo zmienia się kolejność sumowania liczb zmiennoprzecinkowych. Rozmiar batcha zależy od obciążenia serwera, więc drobne różnice w logitach zmieniają czasem wybrany token. Thinking Machines (2025) wskazuje to jako główną przyczynę niedeterminizmu endpointów. Lekarstwem są kernele niezależne od batcha: vLLM ma tryb Batch Invariance (beta, stan na wrzesień 2026), w którym wynik nie zależy od rozmiaru batcha ani kolejności żądań, co może kosztować część szybkości. Przydaje się w ewaluacjach, debugowaniu i rolloutach RL.

    Źródła

    Zgłoś błąd · Zaproponuj poprawkę