KV Cache
KV Cache, czyli Key-Value Cache, przechowuje obliczone wcześniej wektory key i value w warstwach attention. Podczas Autoregressive Language Modeling pozwala używać ich ponownie przy przetwarzaniu kolejnego tokena. Model nadal wykonuje attention względem dostępnego kontekstu, ale nie musi za każdym razem obliczać od początku jego K i V.
W modelu z Causal Masking późniejsze tokeny nie zmieniają reprezentacji wcześniejszych pozycji. To umożliwia ponowne użycie cache dla tego samego prefiksu i ustawień modelu. Podstawę przepływu informacji opisuje Attention Is All You Need, §3.1 i §3.2.3, a aktualizację cache w każdej warstwie — dokumentacja Hugging Face: How caching works.
Co zostaje z poprzedniego kroku
Własna ilustracja: model przetworzył tokeny A, B i C. Gdy przetwarza D, korzysta z zachowanych K i V dla trzech wcześniejszych pozycji i dopisuje parę dla D. Query bieżącej pozycji porównuje z dostępnymi key; wynik wykorzystuje odpowiednie value. Cache nie jest gotową odpowiedzią ani tekstowym streszczeniem rozmowy.
Przechowywanie wyników ma koszt. Własny mały przykład dla jednej warstwy: cztery pozycje, dwie KV heads, po trzy liczby w każdym wektorze K i V, cztery bajty na liczbę:
Pierwszy czynnik 2 oznacza osobne key i value. Wynik obejmuje same elementy tensorów, bez narzutu alokacji. Pełny dynamiczny cache rośnie z liczbą przechowywanych pozycji; warianty z ograniczonym oknem mogą usuwać starsze pozycje.
Starszy artykuł o skalowaniu KV cache rozwija temat kosztów pamięci. Artykuł o przenoszeniu cache między modelami dotyczy odrębnego problemu: zgodne wymiary tensorów nie zapewniają zgodności ich znaczenia. Zmiana modelu lub prefiksu wymaga ponownego ustalenia, która część cache pozostaje poprawna.