Optimisation du cache KV
Le cache KV stocke les clés et les valeurs qu'un transformateur a déjà calculées afin de ne pas refaire le travail pour chaque nouveau jeton, mais il peut atteindre des gigaoctets.
Aperçu
KV cache optimization shrinks and manages that memory so models serve longer contexts to more users at once.
Plongée profonde
Dans un transformateur, chaque nouveau jeton s'occupe de tous les jetons précédents via les clés d'attention (K) et les valeurs (V). Recalculer K et V pour toute la séquence à chaque étape serait quadratique et inutile, c'est pourquoi les modèles les mettent en cache : le cache KV. L'inconvénient est la taille. Le cache augmente de manière linéaire avec la longueur de la séquence, la taille du lot, les couches et les têtes, de sorte qu'une requête à contexte long peut consommer plus de mémoire GPU que le poids du modèle lui-même. L'optimisation aborde ce problème sous plusieurs angles : la mémoire paginée (PagedAttention de vLLM) stocke le cache dans des blocs non contigus pour éliminer la fragmentation et permettre le partage ; la quantification stocke K et V en 8 bits ou 4 bits ; et les changements architecturaux tels que Grouped-Query Attention (GQA) et Multi-Query Attention (MQA) permettent à de nombreuses têtes de requête de partager moins de têtes clé/valeur, réduisant ainsi la taille du cache à la source.
Aperçu technique
PagedAttention emprunte la pagination de la mémoire virtuelle aux systèmes d'exploitation : le cache réside dans des blocs de taille fixe mappés via une table de recherche, de sorte que les requêtes utilisent uniquement les blocs dont elles ont besoin et que des préfixes identiques (comme une invite système partagée) peuvent pointer vers les mêmes blocs. L'attention latente multi-têtes (MLA), utilisée dans les modèles DeepSeek, compresse K et V en un petit vecteur latent partagé, réduisant considérablement la mémoire tout en conservant la précision.
Impact stratégique
Coût et budget
Les décisions en matière d'architecture déterminent les performances et les coûts d'exploitation pendant des années.
Décisions plus claires
La formation technique aide les équipes à choisir la bonne pile, pas seulement la plus récente.
Contrôle qualité
De meilleurs choix d’ingénierie réduisent les incidents de fiabilité en production.
L'avenir de l'optimisation du cache KV
À mesure que les fenêtres contextuelles s'étendent sur des centaines de milliers, voire des millions de jetons, le cache KV devient le coût de service dominant. Attendez-vous à une compression et à une expulsion agressives du cache (suppression des jetons à faible attention), au partage de préfixes de requêtes croisées par défaut, au déchargement du cache froid vers le CPU ou le NVMe et à des architectures telles que MLA et GQA devenant la norme. La gestion du cache ressemblera de plus en plus à une hiérarchie de mémoire complète avec des niveaux et une prélecture intelligente.
Mise en œuvre dans le monde réel
PagedAttention de vLLM servant de nombreuses sessions de discussion simultanées en regroupant des blocs KV sans fragmentation de la mémoire
Attention aux requêtes groupées dans les modèles Llama réduisant la taille du cache KV afin que les contextes plus longs tiennent dans la mémoire GPU
Quantification du cache KV à 8 bits (KV8) pour réduire de moitié environ la mémoire cache lors du résumé de documents longs
Mise en cache des préfixes qui réutilise les blocs KV d'une invite système partagée sur des milliers de requêtes API
Risques et garde-fous
L’optimisation d’un benchmark peut masquer des faiblesses plus larges du système.
Les coûts d’infrastructure et de maintenance sont souvent sous-estimés.
Les lacunes en matière de sécurité et d’observabilité peuvent se creuser à mesure que les systèmes deviennent plus complexes.
Feuille de route de mise en œuvre
Définissez les objectifs de latence, de qualité et de coût avant la mise en œuvre.
Benchmark dans des conditions de charge et de données réalistes.
Surveillance des instruments pour détecter les erreurs, la dérive et l'impact sur l'utilisateur.
Préparez les chemins de restauration et de réponse aux incidents avant la mise à l’échelle.
Continuez à explorer
Free newsletter
Get the daily AI briefing
Three verified AI stories every weekday morning, written in plain English. Free forever, no ads.
One email each weekday. Unsubscribe in one click. We never sell or share your address.
Test yourself
Take the KV Cache Optimization quiz
Instant feedback on every answer, and a shareable certificate with a verifiable ID once you pass a course.
Support free AI education. AI Understanding is a 501(c)(3) nonprofit — no ads, no paywall, ever. Make a donation
Guide suivant
Cache KV
Questions fréquemment posées
What is KV Cache Optimization?
Le cache KV stocke les clés et les valeurs qu'un transformateur a déjà calculées afin de ne pas refaire le travail pour chaque nouveau jeton, mais il peut atteindre des gigaoctets. L'optimisation du cache KV réduit et gère cette mémoire afin que les modèles servent des contextes plus longs à plus d'utilisateurs à la fois.
Que stocke le cache KV et pourquoi ?
La mise en cache des clés et des valeurs des jetons précédents évite de refaire le calcul de l'attention sur chaque nouveau jeton, ce qui permet de gagner du temps.
Pourquoi le cache KV peut-il devenir un problème de mémoire ?
La taille du cache évolue en fonction de la longueur du contexte et de la concurrence, de sorte que les requêtes longues peuvent utiliser d'énormes quantités de mémoire GPU.
Quel concept de système d’exploitation PagedAttention emprunte-t-il ?
PagedAttention stocke le cache dans des blocs non contigus de taille fixe mappés via une table, tout comme la pagination du système d'exploitation.
Comment les requêtes groupées et l'attention multi-requêtes réduisent-elles la taille du cache KV ?
Le partage des têtes clé/valeur sur plusieurs têtes de requête signifie beaucoup moins de vecteurs K et V à stocker.
Quel est l’un des avantages du partage de préfixes dans le cache KV ?
Une invite système partagée produit des entrées KV identiques, de sorte que plusieurs requêtes peuvent pointer vers les mêmes blocs au lieu de les dupliquer.