Calculateur de taille du cache KV
Données
| Couches | 32 |
|---|---|
| Têtes clé/valeur | 32 |
| Dimension de tête | 128 |
| Longueur de contexte | 4 096 |
| Taille de lot | 1 |
| Précision | FP16 / BF16 (2 octets) |
Calculateur de taille du cache KV
Estimez la mémoire du cache clé-valeur qu'un transformeur conserve pendant l'inférence, à partir du nombre de couches, des têtes clé/valeur, de la dimension de tête, de la longueur de contexte, de la taille de lot et des octets par élément.
Données
Modèle
Charge de travail
Résultats
Saisissez une valeur pour afficher les résultats.
Taille du cache KV
Pendant l'inférence d'un transformeur, le modèle prête attention à chaque jeton vu jusqu'ici. Pour éviter de recalculer les vecteurs de clés et de valeurs de tout le contexte à chaque étape de génération, il les stocke et les réutilise — c'est le cache clé-valeur. Ce cache est souvent le principal consommateur de mémoire de l'accélérateur dans le service à long contexte, parfois plus volumineux que les poids du modèle eux-mêmes. Ce calculateur estime sa taille à partir du nombre de couches, du nombre de têtes clé/valeur, de la dimension de tête, de la longueur de contexte, de la taille de lot et des octets utilisés par nombre stocké.
Pourquoi le cache existe
Générer le texte un jeton à la fois signifie que chaque nouveau jeton doit prêter attention à tous les jetons qui le précèdent. Sans cache, chaque étape retraiterait toute l'invite et toute la sortie antérieure, faisant croître le coût de génération avec le carré de la longueur de séquence. En conservant les clés et les valeurs des jetons passés, le modèle ramène chaque étape à un travail proportionnel au seul nouveau jeton. Le prix de cette vitesse, c'est la mémoire : une paire de vecteurs — une clé et une valeur — pour chaque couche, chaque tête clé/valeur et chaque jeton en contexte.
La formule
Le cache contient deux tenseurs, clés et valeurs, donc sa taille en octets vaut
Koctets=2⋅L⋅H⋅d⋅s⋅B⋅eoù est le nombre de couches, le nombre de têtes clé/valeur, la dimension de tête, la longueur de contexte en jetons, la taille de lot et les octets par élément stocké. La division par donne des gigaoctets. La taille croît linéairement avec chaque facteur, ce qui est l'intuition clé : doubler le contexte, le lot ou le nombre de couches double le cache.
Attention à requêtes groupées
Le nombre de têtes clé/valeur est ce que vise l'attention à requêtes groupées (GQA). Dans l'attention multi-têtes simple, chaque tête de requête possède une paire clé/valeur. La GQA permet à un groupe de têtes de requête de partager une seule tête clé/valeur, et l'attention à requête unique n'en partage qu'une pour toute la couche. Comme le cache évolue avec , passer de 32 à 8 têtes clé/valeur ramène le cache au quart tandis que les têtes de requête — et l'essentiel de la qualité du modèle — restent en place. La plupart des grands modèles récents sont livrés avec la GQA précisément pour cette raison.
Exemple chiffré
Prenons un modèle de 32 couches, 32 têtes clé/valeur, une dimension de tête de 128, conservant 4 096 jetons de contexte, servant une seule séquence en précision 16 bits :
Koctets=2×32×32×128×4096×1×2=2147483648soit environ 2,15 Go. Servir quatre séquences de ce type à la fois le quadruple à environ 8,59 Go. Faire passer le cache en précision 8 bits diviserait par deux l'une ou l'autre valeur.
Lire le résultat
Comme chaque facteur multiplie linéairement, le service à long contexte et à fort lot les cumule et le cache peut éclipser les poids. C'est pourquoi les moteurs d'inférence en production s'appuient sur la quantification du cache vers moins d'octets par élément, la GQA pour réduire les têtes clé/valeur, et l'attention paginée pour empaqueter le cache sans fragmentation. Le versant calcul du même budget matériel apparaît dans le Calculateur de mémoire d'attention, et la part des poids du modèle dans le Calculateur de VRAM pour l'inférence LLM.
Questions fréquentes (FAQ)
Qu'est-ce que le cache KV ?
Pendant la génération autorégressive, un transformeur prête attention à chaque jeton précédent. Plutôt que de recalculer les vecteurs de clés et de valeurs de tout le contexte à chaque étape, il les stocke et les réutilise — ce stockage est le cache KV.
Il échange de la mémoire contre de la vitesse : sans lui, générer chaque nouveau jeton imposerait de retraiter toute l'invite et toute la sortie antérieure. Le cache contient deux tenseurs, clés et valeurs, pour chaque couche et chaque tête clé/valeur, avec une entrée par jeton en contexte.
Comment l'attention à requêtes groupées réduit-elle le cache ?
L'attention multi-têtes standard conserve une paire clé/valeur distincte pour chaque tête de requête. L'attention à requêtes groupées (GQA) permet à plusieurs têtes de requête de partager une seule tête clé/valeur, et l'attention à requête unique pousse cela à l'extrême avec une unique tête clé/valeur partagée.
Comme la taille du cache est proportionnelle au nombre de têtes clé/valeur, passer par exemple de 32 à 8 réduit le cache d'un facteur quatre tout en laissant les têtes de requête — et l'essentiel de la qualité du modèle — intactes.
Pourquoi un long contexte coûte-t-il autant en mémoire ?
Le cache croît linéairement avec la longueur de contexte : doubler le nombre de jetons en contexte double le cache. Il croît aussi linéairement avec la taille de lot, donc servir simultanément de nombreuses séquences à long contexte multiplie les deux.
Aux grandes longueurs de contexte, le cache KV peut dépasser la mémoire occupée par les poids du modèle eux-mêmes, ce qui explique pourquoi le service à long contexte s'appuie sur des techniques comme la quantification du cache, la GQA et l'attention paginée.
Mentions légales
Cette estimation ne compte que les tenseurs de clés et de valeurs à la précision indiquée et ignore le surcoût de service tel que la fragmentation mémoire, les métadonnées de pagination et les réservations du framework. L'usage réel sur un moteur d'inférence donné sera un peu plus élevé.