Le cache KV
Le cache KV (clés-valeurs) conserve des calculs intermédiaires du mécanisme d'attention pour que le modèle n'ait pas à tout recalculer à chaque nouveau token. Sans lui, la génération de texte serait beaucoup plus lente.
Le problème
Un LLM génère sa réponse token par token, et chaque nouveau token doit tenir compte de tous les précédents grâce à l'attention. Pour cela, le modèle calcule pour chaque token deux vecteurs, une clé (K) et une valeur (V). Sans précaution, il recalculerait les clés et valeurs de tout le texte à chaque nouveau token : un travail qui grossit sans cesse.
La solution
Les clés et valeurs des tokens passés ne changent jamais. On les calcule une fois et on les garde en mémoire. Pour chaque nouveau token, le modèle ne calcule que ses propres clé et valeur, et réutilise le cache pour tout le reste. C'est ce qui permet au millième token de sortir presque aussi vite que le dixième.
Le revers : la mémoire
Les poids du modèle sont partagés entre tous les utilisateurs. Le cache, lui, est propre à chaque conversation et grandit avec sa longueur. Ordre de grandeur pour un modèle de 70 milliards de paramètres de conception récente : environ 2,5 Go de cache par utilisateur pour 8 000 tokens de contexte en 16 bits. À cent utilisateurs simultanés, le cache dépasse la taille des poids : c'est souvent lui qui limite le nombre d'utilisateurs d'un serveur.
MQA et GQA : stocker moins
Dans l'attention classique (MHA), chaque tête d'attention a ses propres clés et valeurs. MQA les partage entre toutes les têtes : le cache devient très petit, au prix d'une perte de qualité. GQA les partage par groupes de têtes : sur les modèles courants, le cache est divisé par 4 à 8 pour une perte de qualité minime. C'est l'architecture de la plupart des modèles open-weight récents, comme Llama, Mistral ou Qwen.
La mise en cache des prompts
Le même principe est réutilisé entre requêtes. Quand de nombreuses requêtes commencent par le même texte, comme un long prompt système ou un même document, le calcul de ce début peut être conservé. Plusieurs fournisseurs facturent moins cher ces tokens d'entrée mis en cache, et le délai avant la première réponse diminue.
En projet
- Placer les parties stables du prompt au début, les parties variables à la fin.
- Pour un serveur multi-utilisateurs : choisir un modèle GQA, plafonner la longueur de contexte, et quantifier aussi le cache.
- Intégrer le cache dans le dimensionnement : voir Déployer un LLM en entreprise.