KV Cache: Pamäť transformera, ktorá zrýchľuje generovanie textu
KV Cache (Key-Value Cache) je optimalizačná technika inference, bez ktorej by moderné LLM nedokázali generovať text v reálnom čase — najmä pri kontextoch s desiatkami tisíc tokenov.
1. Čo je KV Cache a prečo vznikol
Každý transformer model pri generovaní textu vykonáva pozornostný mechanizmus (attention). Ten pre každý token vypočítava tri vektory: Query (Q), Key (K) a Value (V). Pri generovaní odpovede token po tokene nastáva zásadný problém: každý nový token potrebuje vidieť K a V hodnoty všetkých predchádzajúcich tokenov.
Bez cachovania by model musel znova prepočítavať K a V pre každý predchádzajúci token pri každom novom generovanom tokene. Pre sekvenciu 1 000 tokenov to znamená kvadraticky rastúci počet výpočtov — čo by urobilo dlhé generovanie prakticky nepoužiteľným.
KV Cache rieši tento problém priamočiaro: K a V vektory každého tokenu sa uložia do pamäte GPU po prvom výpočte a pri ďalších krokoch sa len znovu použijú. Prepočítava sa iba Query pre práve generovaný token.
Kľúčové vlastnosti:
- K a V sa cachujú pre každý token v každej vrstve modelu
- Q sa nepotrebuje cachovať — každý nový token generuje nové Q nezávisle
- Cache rastie lineárne s dĺžkou sekvencie
- Bez cache: O(n²) výpočtová závislosť; s cache: O(n) pri inkrementálnom generovaní
2. Ako KV Cache funguje krok za krokom
Generovanie prebieha v dvoch odlišných fázach:
Prefill fáza: Model spracuje celý vstupný prompt naraz. Pre každý token v prompte sa vypočítajú K a V a uložia do cache. Táto fáza je výpočtovo náročná — vyžaduje paralelné spracovanie celého vstupu — ale prebehne iba raz.
Decode fáza: Každý nový generovaný token vypočíta K a V len pre seba, potom načíta uložené K a V z cache pre všetky predchádzajúce tokeny. Attention prebehne iba pre tento jeden nový token voči celej histórii — a to je dôvod, prečo je generovanie rýchle.
Pamäťová stopa KV cache závisí od viacerých faktorov:
- Počtu vrstiev — každá vrstva má vlastný KV cache
- Počtu attention hláv — viac hláv znamená viac uložených vektorov
- Dĺžky sekvencie — cache lineárne rastie s každým tokenom
- Dátového typu — float16 vs. float8 = dvojnásobný rozdiel v pamäti
Pre model veľkosti 70B s kontextovým oknom 128K tokenov môže KV Cache zaberať desiatky gigabajtov VRAM — niekedy viac ako samotné váhy modelu.
3. Varianty a optimalizácie KV Cache
| Technika | Princíp | Dopad na pamäť |
|---|---|---|
| Multi-Head Attention (MHA) | Každá hlava má vlastný K, V | Základná varianta, žiadna úspora |
| Multi-Query Attention (MQA) | Všetky hlavy zdieľajú jeden K, V | 10–20× menej pamäte na K/V |
| Grouped-Query Attention (GQA) | Skupiny hláv zdieľajú K, V | Kompromis medzi MHA a MQA |
| PagedAttention (vLLM) | Cache ukladaná v stránkach ako OS paging | 24–40× vyšší throughput servera |
| Sliding Window Attention | Cache iba pre N posledných tokenov | Fixná pamäť bez ohľadu na dĺžku |
| Kvantizovaný KV cache | K, V uložené v INT8 alebo FP8 | 2–4× menej pamäte, malá strata presnosti |
GQA je dnes de facto štandardom — používajú ho Llama 3 a 4, Mistral, Gemma a väčšina moderných open-source architektúr. MQA stále nájdeme napríklad vo Falcone a starších Gemini variantoch. Kombinácia GQA s kvantizovaným cache umožňuje nasadiť veľké modely aj na hardvér, ktorý by inak nestačil.
4. Praktické dopady pre nasadenie
KV Cache priamo ovplyvňuje, ako sa LLM nasadzujú v produkcii.
vLLM a PagedAttention: Najvýznamnejší prielom priniesol vLLM framework, ktorý zaviedol PagedAttention — správu KV Cache podobnú virtuálnej pamäti operačného systému. Namiesto alokovania jedného súvislého bloku pre celý kontext sa cache ukladá do diskrétnych stránok. To eliminuje fragmentáciu pamäte a umožňuje serveru obsluhovať podstatne viac paralelných requestov bez OOM chýb.
Prefix caching: Ak viacero požiadaviek zdieľa rovnaký systémový prompt (napríklad pevná system prompt pri API), provider môže cachovať K a V pre tento prefix a nevypočítavať ich opakovane. Anthropic, OpenAI aj Google toto ponúkajú ako prompt caching — s priamou finančnou zľavou na API volania.
Orientačné hodnoty z praxe:
- Bez KV Cache by generovanie jedného tokenu pri 128K kontexte trvalo sekundy
- S KV Cache moderné servery dosiahnu 50–200 tokenov/s aj pri dlhých kontextoch
- Anthropic prompt caching: 90 % zľava na tokeny v cachovanej časti promptu
Pre vývojárov nasadzujúcich LLM server platí:
- Sledujte metriku
kv_cache_usage— pri hodnotách blízkych 100 % nové requesty čakajú alebo sú odmietané - Batch size a dĺžka sekvencie súperia o VRAM s KV Cache — optimalizácia jedného vždy ovplyvní druhé
- Modely s GQA sú pre deployment preferované práve kvôli menšej pamäťovej stope cache
5. Limity, riziká a ďalší vývoj
Pamäťový strop: KV Cache je hlavný dôvod, prečo mimoriadne dlhé kontexty (1M+ tokenov) vyžadujú obrovské množstvo VRAM. Pri miliontokenovom kontexte môže cache zabrať stovky gigabajtov — výzva pre súčasný hardware aj pri najvýkonnejších GPU klastroch.
Latencia vs. priepustnosť: Veľký KV Cache zvyšuje nároky na pamäťovú šírku pásma. Pri dlhých sekvenciách sa decode fáza stáva memory-bound — limitujúcim faktorom nie je výpočtový výkon čipov, ale rýchlosť prenosu dát medzi pamäťou a procesorom.
Bezpečnostné riziká: V systémoch zdieľaného inference môže nesprávna implementácia cache spôsobiť únik dát medzi requestmi rôznych používateľov. Tento vektor útoku je aktívnou témou bezpečnostného výskumu pri nasadení vo verejných API.
Smerovanie ďalšieho vývoja:
- KV Cache offloading na CPU alebo NVMe disky pri dlhých nečinných konverzáciách
- Distribuovaný KV Cache cez viacero GPU a nodov pre multi-agent systémy
- Lineárna attention (Mamba, RWKV, Hawk), ktorá nepotrebuje rastúci cache vôbec
- Hierarchická cache s rôznou presnosťou pre staré vs. nové tokeny
Zhrnutie: KV Cache je neviditeľná, no kľúčová infraštruktúra každého moderného LLM — bez nej by generovanie textu pri dnešných kontextových oknách bolo rádovo pomalšie a nákladnejšie. Pochopiť jeho princípy a limity je základ pre každého, kto navrhuje alebo nasadzuje produkčné AI aplikácie.