Chapitre 2 — Le défi du cache KV
Deuxième billet de la tournée chapitre par chapitre de LLM Primer VI : Mettre à l'échelle les systèmes IA. Le chapitre qui nomme la structure de données qui dévore la VRAM de tout système de service avant même que les poids n'aient une chance de le faire.
Pourquoi ce chapitre existe
La boucle autoregressive du Chapitre 1 évite le travail quadratique en se souvenant. À chaque pas de décodage, le modèle doit attendre à chaque token précédent, et le faire depuis zéro reviendrait à rejouer tout le préremplissage à chaque itération — un multiplicateur N sur la longueur de la complétion. Le cache clé-valeur est l'espace de travail qui économise cette arithmétique. Il stocke les projections K et V par token à chaque couche, de sorte que les tokens suivants ne calculent que leurs propres K et V et lisent les précédents en retour. Le cache est la raison pour laquelle le décodage reste à peu près en O(N) plutôt qu'en O(N²). C'est aussi, dans chaque système de production que j'ai examiné, le plus grand consommateur unique de VRAM. Le Chapitre 2 parcourt la formule qui gouverne sa taille, les variantes architecturales qui la rétrécissent, et le problème de fragmentation qui ruine la manière naïve de l'allouer.
2.1 La formule qui gouverne la taille du cache
La mémoire KV pour une séquence vaut 2 × L × H_kv × D × S × octets : deux tenseurs (K et V), L couches, H_kv têtes clé/valeur, dimension de tête D, longueur de séquence S, et octets par élément selon la précision. Multipliez par la taille de batch pour le chiffre à l'échelle du parc. Chaque axe est multiplicatif. Llama-3-70B avec L=80, H_kv=8 (GQA), D=128, à S=8 192 et BF16, retient environ 40 Go de cache par séquence — avant batch. À batch 32, le cache seul frôle 1,3 To, plusieurs fois la taille des poids eux-mêmes et plusieurs fois la VRAM d'un H100. Llama-2-70B, le dernier grand modèle MHA, a H_kv=64 plutôt que 8 et son cache est huit fois plus gros à configuration égale. La formule n'est pas une curiosité ; c'est le chiffre qui détermine combien d'utilisateurs concurrents une puce peut retenir. Tout autre budget mémoire sur la carte — activations, surcoût du framework, tampons temporaires — doit tenir autour.
2.2 MHA, GQA et MQA sont des choix de conception sur la taille du cache
Le terme H_kv est celui que les architectures modernes ont travaillé à réduire. L'attention multi-tête (MHA) utilise une tête K et V par tête de requête ; le cache est gras, la qualité est maximale, et chaque tête peut spécialiser sa notion d'où porter l'attention. L'attention multi-requête (MQA) se réduit à une seule tête K et V partagée ; le cache rétrécit d'un facteur H, mais les têtes perdent leur spécialisation et une baisse de qualité mesurable apparaît sur les contextes longs. L'attention groupée (GQA), introduite en 2023 et devenue le choix dominant pour Llama-3, Mistral, Mixtral, Qwen et DeepSeek, partitionne les têtes de requête en G groupes qui partagent K et V ; un G = H/8 typique livre une réduction de cache d'un facteur huit à un coût de qualité si petit que les suites d'évaluation ne le distinguent pas de manière fiable. GQA n'est pas gratuit — il réduit aussi le nombre de paramètres des projections K/V, et ce budget est redistribué ailleurs dans le modèle — mais empiriquement la redistribution nuit rarement. MLA (attention multi-latente, DeepSeek-V2) pousse plus loin avec un cache latent de rang faible ; c'est la direction de recherche, mais les déploiements de production en 2026 sont dominés par GQA.
2.3 L'allocation naïve gaspille la majeure partie du budget
La manière évidente d'allouer la mémoire KV — réserver une tranche contiguë par séquence, dimensionnée à la longueur maximale possible — échoue au contact du trafic réel. La plupart des requêtes se terminent bien avant le maximum ; la queue réservée est de la mémoire morte. Sur Llama-3-70B avec une limite de 32K, une complétion à 1 000 tokens gaspille la valeur de 31 tranches de cache KV. Un batch 32 avec une limite à 8K et une longueur moyenne de 800 laisse environ 90 pour cent du cache KV réservé inutilisé à tout instant. Pire, la disposition est rigide : une nouvelle arrivée ne peut pas utiliser la queue inutilisée d'une autre séquence, car cette queue est déjà engagée. La concurrence se replie sur ce que permet le budget dans le pire cas, non sur ce que le trafic moyen pourrait soutenir. Le problème est la fragmentation interne — le même mode d'échec que les systèmes d'exploitation ont résolu par la pagination dans les années 1960. Le Chapitre 8 montre comment PagedAttention porte cette solution vers l'inférence.
Ce que prépare le Chapitre 2
La formule du cache et ses axes reviendront chaque fois que les chapitres suivants raisonneront sur le nombre d'utilisateurs qui tiennent sur un GPU. Le Chapitre 3 s'en sert pour expliquer pourquoi la capacité VRAM compte plus que les FLOPs au moment de choisir un GPU de service. Le Chapitre 7 s'en sert pour expliquer pourquoi le batching continu est borné par le cache KV, non par le modèle. Le Chapitre 8 s'en sert pour justifier PagedAttention, l'éviction H2O et le cache de préfixe — trois techniques dont l'objet est de faire se comporter le cache davantage comme une mémoire virtuelle paginée que comme une tranche d'octets réservés. La formule est la grammaire des raisonnements sur la mémoire du reste du livre.
Prochaine étape — Chapitre 3 : GPU de centre de données pour l'IA générative. Le silicium qui doit contenir à la fois les poids et le cache KV, lu par le mécanisme plutôt que par la fiche technique.