Decode
Decode to etap inferencji, w którym model rozwija odpowiedź po przetworzeniu promptu. W zwykłej pętli generowania pojedynczej sekwencji każdy krok przetwarza ostatnio wybrany token i wyznacza rozkład następnego. Zależność od wcześniejszych wyborów wynika z Autoregressive Language Modeling. Shazeer, Fast Transformer Decoding, §2.4 opisuje obliczenia przyrostowe i ich koszt.
Pierwszy token odpowiedzi można wybrać z wyniku Prefill. Jeśli generowanie trwa dalej, ten token staje się wejściem kolejnego przejścia przez model. Jego nowe K i V dołączają do KV Cache, a query korzysta z bieżącej i wcześniejszych pozycji. Sam wybór identyfikatora tokena nie dopisuje jeszcze jego reprezentacji do cache. Widać to w pętli generowania Hugging Face, „Cache storage implementation”.
Token wybrany, ale jeszcze nieprzetworzony
Własny miniaturowy model ma trzy tokeny: A, B, C. Ich wektory to odpowiednio , i . Przyjmujemy równe tym wektorom; attention używa skali . Z wyniku tworzymy logity , a Greedy Decoding wybiera największy.
Prompt A B daje w przybliżeniu , więc pierwszą odpowiedzią jest A. Cache zawiera na razie tylko dwie pozycje promptu. Dopiero następne przejście przetworzy wybrane A.
To kompletnie określony model demonstracyjny, bez uczenia, pozycji, wielu warstw ani tokena końca. Jego powtarzalna odpowiedź nie ma znaczenia językowego. Porównanie z ponownym obliczaniem całego prefiksu sprawdza zgodność wyników, a licznik obejmuje wyłącznie pozycje, dla których liczono K/V.
Cache usuwa powtarzane obliczenia wcześniejszych K/V, ale attention nadal odczytuje kontekst. Przy małych batchach ograniczeniem często staje się transfer wag lub cache; zależy to od modelu, sprzętu i długości sekwencji. Decode w tym znaczeniu nie jest zamianą identyfikatorów tokenów z powrotem na tekst przez tokenizer.
Wykorzystuję treści generowane przez AI jako część mojego codziennego procesu nauki.