
KV-cache (Key-Value Cache) is een geheugenoptimalisatietechniek in transformergebaseerde taalmodellen die de key- en value-tensoren opslaat die zijn berekend tijdens het attentiemechanisme voor alle eerder verwerkte tokens. Tijdens autoregressieve tekstgeneratie — waarbij het model één token tegelijk produceert — elimineert de KV-cache de noodzaak om attentie over de volledige sequentie opnieuw te berekenen voor elk nieuw token, waardoor de computationele complexiteit daalt van kwadratisch naar lineair in sequentielengte. Deze optimalisatie is zo fundamenteel dat elke productie-LLM-deployment standaard KV-caching gebruikt, met 3-5× snellere generatielatentie. Zonder deze techniek zou realtime conversationele AI onpraktisch traag zijn voor sequenties boven enkele honderden tokens.
Waarom het belangrijk is
KV-caching maakt interactieve LLM-applicaties haalbaar op schaal. Zonder caching vereist het genereren van het 100e token in een sequentie het herberekenen van attentie over alle 99 voorgaande tokens — en het 200e token vereist attentie over 199. Deze kwadratische groei betekent dat een conversatie van 4.000 tokens 40× langer per token zou duren dan de eerste respons. KV-caching reduceert dit tot een constante-tijdoperatie per nieuw token: cached keys en values opzoeken, attentie alleen berekenen voor het nieuwe token tegen de gecachte waarden, en het nieuwe key-value-paar toevoegen. Voor bedrijven die LLM-inferentie op schaal draaien, bepaalt KV-caching direct kosten en responsiviteit. De afweging is geheugen: een KV-cache voor een model als Claude of GPT-4 kan 1-4 GB per actieve sessie verbruiken bij lange contexten, waardoor geheugencapaciteit de primaire bottleneck wordt voor het aantal gelijktijdige gebruikers in productie.
Hoe het werkt
In het attentiemechanisme van een transformer wordt elk token geprojecteerd in drie vectoren: Query (Q), Key (K) en Value (V). Attentiescores worden berekend door de Query van het huidige token te vergelijken met alle Keys, waarna die scores de Values wegen. Tijdens autoregressieve generatie verwerkt het model tokens sequentieel. Zonder caching herberekent het K en V voor elk voorgaand token bij elke stap. De KV-cache slaat de K- en V-vectoren op voor alle tot nu toe verwerkte tokens. Bij het genereren van een nieuw token berekent het model alleen Q, K en V voor dat ene nieuwe token, haalt het de gecachte K en V op van alle voorgaande tokens, voegt nieuwe K en V toe aan de cache, en berekent attentie over de volledige set. Elke transformerlaag heeft een eigen cache, dus de totale cachegrootte is: lagen × sequentielengte × 2 × verborgen_dimensie × precisiebytes. Geavanceerde technieken als grouped-query attention (GQA) en multi-query attention (MQA) verkleinen de cache door K- en V-heads te delen over query-heads.
Voorbeeld
Een cloudprovider benchmarkt hun LLM-servinginfrastructuur met en zonder KV-caching op een 70B-parametermodel. Zonder caching duurt het genereren van een 500-token respons op een 2.000-token prompt 12,4 seconden — elk nieuw token vereist een volledige attentiepass over de groeiende sequentie. Met KV-caching duurt dezelfde generatie 2,8 seconden: de prompt wordt eenmaal verwerkt (prefill-fase, 1,6 seconden) en de 500-token generatiefase kost slechts 1,2 seconden omdat elk token alleen attentie berekent tegen gecachte keys en values. De versnelling is 4,4×. De cache verbruikt echter 2,1 GB GPU-geheugen per sessie. Bij 80 GB per GPU beperkt dit gelijktijdige sessies tot circa 38 per GPU. De provider implementeert paged attention (zoals vLLM's PagedAttention) dat cachegeheugen beheert in blokken van vaste grootte, fragmentatie vermindert en gelijktijdige sessies verhoogt naar 52 per GPU — een doorvoerverbetering van 37% zonder kwaliteitsverlies.