Ce este KV Cache (Key-Value Caching)?

Memoria în care modelul păstrează vectorii Key și Value ai tokenilor deja procesați, ca fiecare token nou să fie generat fără recalcularea întregului istoric.

Denumire completă

KV Cache – păstrarea în memorie a vectorilor Key și Value calculați pentru tokenii anteriori, ca să nu fie recalculați la fiecare token nou

Ce înseamnă KV Cache (Key-Value Caching)

La generare, fiecare token nou are nevoie de vectorii Key și Value ai tuturor tokenilor anteriori. Fără cache, ei ar fi recalculați la fiecare pas. KV cache îi păstrează în memoria GPU, așa că la fiecare pas se calculează doar vectorii tokenului nou.

Prima fază a cererii (prefill) procesează tot promptul și umple cache-ul; faza de generare (decode) îl citește și adaugă câte o intrare pentru fiecare token nou.

Cum funcționează

Memoria ocupată crește liniar cu numărul de tokeni și cu numărul de cereri servite simultan. Calcul pentru Llama 3 70B în BF16 (80 de straturi, 8 capete Key/Value, dimensiunea capului 128): 2 × 80 × 8 × 128 × 2 octeți ≈ 320 KB pe token, deci aproximativ 43 GB pentru o singură secvență de 131.072 de tokeni. Ponderile modelului au circa 140 GB.

Reducerea memoriei: MQA (Shazeer, 2019) folosește un singur cap Key/Value, iar GQA (Ainslie et al., 2023) câteva. Llama 3 70B are 64 de capete Query și 8 Key/Value, deci un cache de 8 ori mai mic decât cu atenție multi-head completă.

Pe înțelesul tuturor

Când aduni o listă lungă de cheltuieli, notezi subtotalul. La o sumă nouă adaugi doar ultima valoare, nu reiei calculul de la început. KV cache este acest subtotal.

Exemplu

PagedAttention (Kwon et al., 2023) gestionează KV cache-ul în blocuri, ca paginile memoriei virtuale. vLLM, construit pe el, a obținut un throughput de 2–4 ori mai mare decât FasterTransformer și Orca, la aceeași latență.

De reținut

  • KV cache accelerează faza de generare; prefill-ul trebuie oricum să proceseze tot promptul.
  • La contexte lungi și multe cereri simultane, KV cache-ul poate deveni principalul consumator de memorie GPU.

Nu confunda

  • KV cache vs. prompt caching: KV cache există în interiorul unei cereri; prompt caching-ul oferit de API-uri refolosește prefixe între cereri diferite.

Termeni înrudiți

  • Auto-Atenția (Self-Attention): Inima Transformerului: mecanismul matematic care permite modelului să decidă ce alte cuvinte contează pentru a înțelege un anumit cuvânt în context.
  • Fereastra de Context (Context Window): Limita de tokeni pe care modelul o poate vedea într-o cerere: instrucțiuni, istoric, documente și răspunsul generat.
  • Decodarea Speculativă (Speculative Decoding): Tehnică de accelerare în care un model mic ghicește următorii tokeni, iar modelul mare îi verifică în paralel, cu aceeași distribuție a rezultatului.
  • Multi-Head Attention: Varianta atenției în care mai multe capete calculează atenția în paralel, fiecare pe propria proiecție a datelor, iar rezultatele se combină.
  • FlashAttention (FlashAttention-1, 2, 3 și 4): Algoritm care calculează exact aceeași atenție, dar pe blocuri care încap în memoria rapidă a GPU-ului, cu memorie liniară și mai puține accesări ale memoriei principale.