Prefill
Prefill to etap inferencji, w którym model przetwarza znany prompt przed wygenerowaniem odpowiedzi. W causal Transformerze powstają wtedy reprezentacje pozycji oraz klucze i wartości zapisywane w KV Cache. Wynik ostatniej pozycji służy do obliczenia rozkładu pierwszego nowego tokena; jego wybór jest osobną operacją. Tak rozdziela te czynności NVIDIA, Mastering LLM Techniques: Inference Optimization, część „Understanding LLM inference”.
Znany prompt można przetwarzać równolegle
Wszystkie tokeny wejścia są już dostępne, więc w obrębie warstwy można liczyć wiele pozycji jednocześnie. Nadal obowiązuje Causal Masking: pozycja druga nie korzysta z trzeciej. Równoległe obliczenia nie znoszą tej zależności ani kolejności przechodzenia przez warstwy. Podstawę opisują Vaswani et al., §3.1–3.2.
Prefill może też przetwarzać prompt porcjami, zachowując cache wcześniejszych pozycji. Dokumentacja vLLM, „Chunked Prefill” opisuje użycie tego podziału do przeplatania pracy nad promptami z generowaniem odpowiedzi innych żądań.
Cztery pozycje, ten sam wynik
Własny przykład izoluje jedną głowicę attention o wymiarze 1: wszystkie query i key wynoszą 1, a values to . Dozwolone wyniki porównań są równe, więc każda pozycja zwraca średnią widocznych values: . Porównaj przetwarzanie całej czwórki z porcjami po dwa. W drugim wariancie pozycja trzecia musi nadal widzieć pierwsze dwie.
To rachunek pojedynczej operacji, bez wag wyuczonego modelu i bez pomiaru GPU. W pełnym modelu cache jest utrzymywany osobno dla warstw. Zmiana podziału może wprowadzać drobne różnice numeryczne implementacji; nie zmienia matematycznej maski.
Po promptcie zaczyna się Decode, gdzie kolejne wejścia zależą od dopiero wybranych tokenów. Sam czas Prefill nie obejmuje całego oczekiwania użytkownika: znaczenie mają też kolejka, przygotowanie wejścia i dostarczenie wyniku.
Wykorzystuję treści generowane przez AI jako część mojego codziennego procesu nauki.