Qu'est-ce que Cache KV ?

Mémoire qui conserve, lors de l'inférence d'un grand modèle de langage, les Key et Value de l'attention des tokens déjà traités. Elle évite les recalculs mais grandit proportionnellement à la longueur du texte et à la taille du lot.

Nom japonais: KVキャッシュ

« Cache KV » apparaît dans 4 questions d'entraînement réparties sur 1 thèmes, dont Pile matérielle et logicielle de l'IA.

Domaine: Pile matérielle et logicielle de l'IA

Pourquoi l'inférence des LLM conserve les clés et les valeurs

Un modèle de langage transformer génère le texte un token à la fois. Dans chaque couche d'attention, la requête (query) du nouveau token est comparée aux clés (keys) de tous les tokens précédents, et le résultat pondère leurs valeurs (values). Comme l'attention est causale, les clés et valeurs des tokens précédents ne changent plus une fois calculées. Le cache KV les stocke couche par couche ; chaque étape de décodage ne calcule ainsi que la requête, la clé et la valeur du nouveau token et ajoute ces deux dernières, au lieu de retraiter toute la séquence. Un recalcul complet répété devient ainsi un coût modeste par token.

Quelle taille atteint le cache KV

La taille du cache vaut 2 (clés et valeurs) × nombre de couches × dimension clé/valeur par couche × nombre de tokens × taille du lot × octets par élément. À titre d'exemple, un modèle de 32 couches, avec une dimension cachée de 4096 et une attention multi-têtes standard, nécessite environ 0,5 Mo par token en FP16. Un contexte de 4096 tokens occupe alors environ 2 Go par séquence, et un lot de huit séquences de ce type nécessite environ 16 Go, plus que les quelque 14 Go qu'occupent les poids d'un modèle FP16 de 7 milliards de paramètres.

Prefill, décodage et bande passante mémoire

L'inférence comporte deux phases. Le prefill traite tout le prompt en parallèle et écrit ses clés et valeurs dans le cache ; il est surtout limité par le calcul. Le décodage produit ensuite un token par étape, et chaque étape doit lire les poids du modèle ainsi que tout le cache KV de la séquence ; il est donc généralement limité par la bande passante mémoire. Des lots plus grands répartissent la lecture des poids entre davantage de requêtes et augmentent le débit, mais ils agrandissent le cache KV et allongent chaque étape, ce qui accroît la latence des requêtes individuelles.

Comment le réduire ou le gérer

Plusieurs techniques réduisent la pression sur le cache KV. L'attention à requêtes groupées (grouped-query) et à requête multiple (multi-query) permet à plusieurs têtes de requête de partager un même ensemble de têtes de clés et de valeurs, ce qui réduit proportionnellement la taille du cache. Stocker le cache en 8 bits ou en précision inférieure divise par deux, voire davantage, la mémoire nécessaire par rapport au FP16. Allouer le cache par petits blocs de taille fixe, plutôt qu'en une région contiguë par séquence dimensionnée pour la longueur maximale, évite la fragmentation et permet de loger davantage de requêtes ; cela permet aussi aux séquences partageant un préfixe de prompt commun de partager des blocs. Certains modèles limitent également l'attention à une fenêtre glissante de tokens récents.

S'entraîner : questions sur Cache KV

Quel est le rôle du cache KV utilisé dans l'inférence des grands modèles de langage ?

  1. AStocker les questions et réponses fréquentes pour répondre immédiatement à une même question
  2. BPlacer tous les poids du modèle dans la mémoire cache du CPU
  3. CConserver les Key et Value d'attention des jetons déjà traités pour éviter de les recalculer à chaque nouveau jeton
Afficher la réponse et l'explication

Réponse : C. Conserver les Key et Value d'attention des jetons déjà traités pour éviter de les recalculer à chaque nouveau jeton

Dans le calcul de l'attention, chaque nouveau jeton consulte les Key et Value de tous les jetons précédents. Celles des jetons précédents ne changeant pas, les conserver plutôt que les recalculer à chaque fois permet de ne calculer que la part du nouveau jeton : c'est le cache KV. Le calcul diminue fortement, mais le volume de Key et Value stockées croît proportionnellement à la longueur du texte et à la taille du lot.

Questions fréquentes

Qu'est-ce que le cache KV dans les grands modèles de langage ?

C'est la mémoire qui conserve les clés et valeurs d'attention des tokens déjà traités ; ainsi, pour chaque nouveau token généré, seules ses propres clés et valeurs doivent être calculées, sans recalculer toute la séquence.

Pourquoi le cache KV utilise-t-il autant de mémoire ?

Sa taille croît linéairement avec le nombre de couches, la largeur de l'attention, la longueur du contexte et la taille du lot ; des contextes longs ou de nombreuses requêtes simultanées peuvent donc le rendre plus volumineux que les poids du modèle.

Le cache KV affecte-t-il la qualité des réponses ?

Mettre en cache les clés et valeurs exactes est mathématiquement équivalent à les recalculer ; seules des approximations comme le stockage du cache en faible précision ou l'abandon des anciens tokens peuvent modifier les sorties.

« Cache KV » dans les explications

Questions mentionnant « Cache KV » (4)

  1. Quel est le rôle du cache KV utilisé dans l'inférence des grands modèles de langage ?
  2. Si les poids d'un modèle de 7 milliards de paramètres (7B) sont stockés en FP16 (2 octets), quelle est approximativement la mémoire des poids ?
  3. Quel est l'inconvénient d'une taille de lot trop grande en inférence ?
  4. Dans l'inférence d'un grand modèle de langage, quel problème survient souvent avec des textes longs ou de grands lots ?

Termes associés

Inférence Attention GPU Taille de lot (batch size) Débit (throughput) All-reduce Checkpointing de gradients Compilateur d'IA Décodage spéculatif Distillation des connaissances

Retour au glossaire