Robocikowo>ROBOCIKOWO
Wnioskowanie

Prefill

2020AktywnyOpublikowano: 29 września 2026Aktualizacja: 29 września 2026Opublikowany
Prefill to początkowa faza inferencji LLM: równoległe przetworzenie całego promptu, zbudowanie KV cache i wygenerowanie pierwszego tokenu; wyznacza opóźnienie do pierwszego tokenu (TTFT).
Kluczowa innowacja
Wyodrębnienie pierwszej fazy inferencji LLM, w której cały prompt jest przetwarzany równolegle w jednym przebiegu forward, zapełniając cache klucz-wartość (KV cache) i produkując pierwszy token — faza ograniczona mocą obliczeniową (compute-bound), przeciwieństwo fazy decode.
Kategoria
Wnioskowanie
Poziom abstrakcji
Wzorzec
Poziom operacji
InferencjaUdostępnianie
Zastosowania
Przetworzenie promptu i systemowego kontekstu przed generacjąWyznaczanie i optymalizacja czasu do pierwszego tokenu (TTFT)Chunked prefill do łączenia długich promptów z fazą decodePrefix caching (współdzielenie KV cache wspólnych prefiksów)Rozdzielenie prefill i decode na osobne węzły (disaggregated serving)

Jak działa

W fazie prefill model wykonuje jeden (lub kilka, przy chunked prefill) przebieg forward na całej sekwencji promptu o długości N. Ponieważ wszystkie tokeny wejściowe są znane z góry, obliczenia uwagi i warstw MLP realizuje się jako duże mnożenia macierzy o wysokim wykorzystaniu jednostek (compute-bound). W trakcie tego przebiegu dla każdej warstwy zapisuje się klucze i wartości (K, V) wszystkich N tokenów do KV cache. Na końcu model produkuje rozkład prawdopodobieństwa następnego tokenu i próbkuje pierwszy wygenerowany token. Następnie sterowanie przechodzi do fazy decode, która generuje kolejne tokeny po jednym, korzystając z zapełnionego KV cache. Koszt obliczeniowy prefill rośnie z długością promptu (uwaga ~O(N^2)).

Rozwiązany problem

Generacja autoregresyjna wymaga, by model przed wyprodukowaniem pierwszego tokenu przetworzył cały prompt i zbudował reprezentację kontekstu. Faza prefill robi to efektywnie, przetwarzając wszystkie tokeny promptu naraz (równolegle) zamiast jeden po drugim, i zapisując klucze oraz wartości uwagi w KV cache, aby faza decode nie musiała ich przeliczać. Prefill wyznacza opóźnienie do pierwszego tokenu i mocno obciąża jednostki obliczeniowe.

Kluczowe mechanizmy

Równoległy przebieg forward na całej sekwencji promptu
Mnożenia macierz-macierz o wysokiej intensywności arytmetycznej
Zapełnienie KV cache kluczami i wartościami wszystkich tokenów
Generacja pierwszego tokenu i wyznaczenie TTFT
Chunked prefill przeplatający fragmenty z krokami decode

Mocne strony i ograniczenia

Mocne strony
✓Równoległe przetworzenie całego promptu w jednym przebiegu
✓Wysokie wykorzystanie jednostek obliczeniowych (compute-bound)
✓Buduje KV cache, eliminując przeliczanie kontekstu w fazie decode
✓Podatne na prefix caching wspólnych prefiksów (systemowy prompt)
✓Możliwe rozdzielenie od decode (disaggregated serving)
Ograniczenia
✗Koszt rośnie kwadratowo z długością promptu (uwaga O(N^2))
✗Długi prefill może blokować generację innych zapytań w batchu
✗Wyznacza TTFT, który dla długich promptów bywa wysoki
✗Wymaga dużej pamięci na KV cache przy długim kontekście
✗Bez prefix cachingu powtarzalne prefiksy są przeliczane od nowa

Komponenty

Równoległy przebieg forward promptuZbudowanie reprezentacji kontekstu

Jednoczesne przetworzenie wszystkich N tokenów promptu w jednym przebiegu, realizowane jako duże mnożenia macierzy.

Zapelnienie KV cachePrzygotowanie pamięci podręcznej dla fazy decode

Zapis kluczy i wartości uwagi wszystkich tokenów promptu dla każdej warstwy, aby uniknąć ich przeliczania w fazie decode.

Generacja pierwszego tokenuPrzejście do fazy autoregresyjnej

Wyznaczenie rozkładu następnego tokenu z ostatniej pozycji i wypróbkowanie pierwszego wyjścia, wyznaczające TTFT.

Implementacja

Pułapki implementacyjne
Długi prompt blokujący generację innych zapytańŚrednia

Pojedynczy długi prefill może zająć GPU na długo i zwiększyć opóźnienia tokenów innych zapytań w batchu.

Rozwiązanie:Stosuj chunked prefill, aby przeplatać fragmenty prefill z krokami decode i utrzymać płynność generacji.
Pominięte prefix cachingNiska

Powtarzalne prefiksy (np. wspólny prompt systemowy) przeliczane od nowa marnują moc obliczeniową prefill.

Rozwiązanie:Włącz prefix caching / automatic prefix caching, aby współdzielić KV cache wspólnych prefiksów.

Ewolucja

Oryginalny paper · 2023 · SOSP 2023 · Woosuk Kwon
Efficient Memory Management for Large Language Model Serving with PagedAttention
Woosuk Kwon, Zhuohan Li, Siyuan Zhuang, Ying Sheng, Ion Stoica
2020
Rozróżnienie faz prefill i decode w serwowaniu autoregresyjnym
Punkt przełomowy

Wraz z upowszechnieniem generatywnych transformerów uwidacznia się podział inferencji na compute-bound prefill i memory-bound decode.

2023
Chunked prefill i disaggregated serving

Prace nad efektywnym serwowaniem (m.in. vLLM, Sarathi, DistServe) wprowadzają chunked prefill i rozdzielenie prefill/decode dla lepszego wykorzystania GPU.

Hiperparametry (konfigurowalne osie)

Rozmiar fragmentu (chunked prefill)Wysoka

Liczba tokenów promptu przetwarzanych w jednym fragmencie przy przeplataniu z decode.

512Typowy rozmiar fragmentu.
Prefix cachingŚrednia

Współdzielenie KV cache wspólnych prefiksów między zapytaniami.

enabledRedukuje czas prefill powtarzalnych prefiksów.

Złożoność obliczeniowa

Charakterystyki obliczeniowe
→Faza compute-bound (wysokie wykorzystanie FLOPs)
→Koszt uwagi ~O(N^2) względem długości promptu
→Wysoka intensywność arytmetyczna (mnożenia macierz-macierz)
→Zapis pełnego KV cache promptu do pamięci
→Wyznacza TTFT (time to first token)

Złożoność czasowa: O(N^2 d) uwaga + O(N d^2) projekcje. Złożoność przestrzenna: O(N x L x d) na KV cache promptu.

Uwagi do benchmarku

TTFT zdominowane przez prefill rośnie z długością promptu; dla długich kontekstów człon O(N^2) uwagi staje się zauważalny. Prefix caching wspólnego promptu systemowego może zredukować czas prefill do niemal zera dla powtarzalnych prefiksów, a chunked prefill wygładza opóźnienia tokenów innych zapytań przez przeplatanie fragmentów prefill z krokami decode.

Wąskie gardło obliczeniowe

Mnożenie macierzy (compute-bound)

Prefill jest ograniczony mocą obliczeniową: duże mnożenia macierz-macierz uwagi i MLP wysycają jednostki Tensor Core.

Zależy od
Długość promptu NPrzepustowość obliczeniowa GPU

Paradygmat wykonania

Tryb główny
Gęsty

Wszystkie tokeny i ścieżki obliczeń są aktywne jednocześnie.

Wzorzec aktywacji
Wszystkie ścieżki aktywne
Mechanizm routingu

Prefill wykonuje gęsty przebieg forward bez warunkowego routingu (chyba że model jest MoE).

Równoległość

Poziom równoległości
W pełni równoległy

Wszystkie tokeny promptu przetwarzane są jednocześnie, co czyni prefill wysoce równoległym i compute-bound.

Zakres
InferencjaPomiędzy tokenami

Wymagania sprzętowe

Podstawowe

Duże mnożenia macierzy fazy prefill maksymalnie wykorzystują rdzenie Tensor Core; to faza, w której GPU osiąga wysoki FLOPs utilization.

Dobry fit

Równoległy, compute-bound charakter prefill dobrze pasuje do jednostek MXU w TPU.