Cache KV
Découvrez comment KV Cache optimise les modèles Transformer tels que les LLM. Découvrez comment cette technique réduit la latence d'inférence et améliore l'efficacité Ultralytics .
Le cache KV (cache clé-valeur) est une technique d'optimisation essentielle principalement utilisée dans les
les grands modèles linguistiques (LLM)
et d'autres architectures basées sur Transformer afin d'accélérer la
latence d'inférence et réduire les
coûts de calcul. À la base, le cache KV stocke les matrices de clés et de valeurs générées par le
mécanisme d'attention pour les
token précédents dans une séquence. En enregistrant ces calculs intermédiaires, le modèle évite de recalculer les états d'attention
pour l'historique complet de la conversation chaque fois qu'il génère un nouveau token. Ce processus transforme le
flux de travail de génération de texte d'une
opération de complexité quadratique en une opération linéaire, ce qui rend les interactions en temps réel avec les chatbots et les
agents IA .
Mécanisme et avantages
Dans un transformateur standard Transformer , la
génération du mot suivant nécessite de prêter attention à tous les mots précédents afin de comprendre le contexte. Sans mise en cache,
le modèle devrait recalculer les relations mathématiques pour l'ensemble de la séquence à chaque étape. Le cache KV
résout ce problème en agissant comme une banque de mémoire.
-
Amélioration de la vitesse : en récupérant les clés et les valeurs précalculées dans la mémoire, le système accélère considérablement
le moteur d'inférence. Ceci est essentiel pour les applications nécessitant une faible latence, telles que l'
l'inférence en temps réel dans les
robots de service à la clientèle.
-
Efficacité des ressources : bien que cela augmente l'utilisation de la mémoire (VRAM), cela réduit considérablement la puissance de calcul
(FLOP) requise par jeton. Ce compromis est souvent géré à l'aide de techniques telles que la
quantification de modèle ou la pagination,
similaires à la manière dont les systèmes d'exploitation gèrent la RAM.
-
Contexte étendu : une gestion efficace du cache KV permet aux modèles de traiter un contexte plus large.
fenêtre contextuelle, ce qui leur permet de traiter de longs documents ou de maintenir des conversations cohérentes sur de longues périodes.
Applications concrètes
Le cache KV est un composant fondamental dans le déploiement de l'IA générative moderne, mais ses principes s'étendent également à la
vision par ordinateur (CV).
-
Chatbots génératifs : des services tels que
ChatGPT ou
Claude s'appuient fortement sur la mise en cache KV. Lorsqu'un utilisateur
pose une question complémentaire, le modèle ne relit pas l'historique complet de la conversation depuis le début. Au lieu de cela, il ajoute la
nouvelle entrée aux états mis en cache du tour précédent, ce qui permet des réponses quasi instantanées.
-
Compréhension vidéo : Dans
compréhension vidéo , les
modèles traitent les images de manière séquentielle. À l'instar des jetons de texte, les caractéristiques visuelles des images précédentes peuvent être mises en cache afin d'aider
le modèle track ou à reconnaître les actions sans retraiter l'historique vidéo dans son intégralité. Cela est particulièrement
pertinent pour la
reconnaissance d'actions où
le contexte temporel est crucial.
Gestion efficace de la mémoire
À mesure que les modèles deviennent plus volumineux, la taille du cache KV peut devenir un goulot d'étranglement, consommant des gigaoctets de GPU . Les progrès récents
se concentrent sur l'optimisation de ce stockage.
-
PagedAttention : inspiré de la mémoire virtuelle des systèmes d'exploitation,
PagedAttention (introduit par vLLM) permet au cache KV
d'être stocké dans des blocs de mémoire non contigus. Cela réduit la fragmentation et permet d'utiliser des tailles de lots plus importantes
lors du service du modèle.
-
Quantification du cache KV : pour gagner de l'espace, les développeurs appliquent souvent
quantification à précision mixte ou int8
spécifiquement aux valeurs mises en cache. Cela réduit l'empreinte mémoire, permettant à l'
aux appareils d'IA de pointe disposant d'une RAM limitée d'exécuter des
modèles performants.
-
Mise en cache des invites : technique connexe dans laquelle les états KV d'une invite de système statique (par exemple, « Vous
êtes un assistant de codage utile ») sont calculés une seule fois et réutilisés dans de nombreuses sessions utilisateur différentes. Il s'agit d'une
fonctionnalité essentielle pour optimiser l'
l'ingénierie des invites à grande échelle
.
Distinguer les concepts apparentés
Il est utile de différencier KV Cache des autres termes liés à la mise en cache et à l'optimisation :
-
Cache KV vs mise en cache instantanée: le cache KV
fait généralement référence à la mémoire dynamique, token par token, utilisée pendant un flux de génération unique. La mise en cache instantanée
fait spécifiquement référence au stockage de l'état traité d'une instruction d'entrée fixe afin de le réutiliser dans plusieurs
appels d'inférence indépendants.
-
Cache KV vs. Embeddings: Les embeddings
sont des représentations vectorielles des données d'entrée (texte ou images) qui capturent la signification sémantique. Le cache KV stocke les
activations (clés et valeurs) dérivées de ces embeddings dans les couches d'attention, spécifiquement dans le
but de générer des séquences.
-
Cache KV vs. Poids du modèle: Les poids du modèle
sont les paramètres statiques appris du réseau neuronal. Le cache KV est constitué de données dynamiques et temporaires
générées lors du passage en avant d'une séquence d'entrée spécifique.
Exemple : contexte dans les modèles de vision
Si la mise en cache KV est surtout connue dans le domaine du TALN, le concept de maintien d'état s'applique également aux modèles de vision avancés. Dans l'
exemple ci-dessous, nous simulons l'idée de transmission d'état (contexte) dans un scénario de suivi vidéo à l'aide d'
Ultralytics . Ici, le tracker maintient l'identité des objets d'une image à l'autre, de manière conceptuellement similaire à la façon dont un cache maintient le
contexte d'un token à l'autre.
from ultralytics import YOLO
# Load the Ultralytics YOLO26 model
model = YOLO("yolo26n.pt")
# Track objects in a video, maintaining identity state across frames
# The 'track' mode effectively caches object features to link detections
results = model.track(source="https://ultralytics.com/images/bus.jpg", show=False)
# Print the ID of the tracked objects
if results[0].boxes.id is not None:
print(f"Tracked IDs: {results[0].boxes.id.numpy()}")
Les développeurs qui souhaitent gérer des ensembles de données et déployer des modèles optimisés peuvent utiliser la
Ultralytics , qui simplifie le pipeline depuis l'annotation des données jusqu'au déploiement efficace des
déploiement des modèles. Pour ceux qui s'intéressent aux mécanismes plus approfondis de l'attention, des bibliothèques telles que
PyTorch
fournissent les blocs fondamentaux sur lesquels ces mécanismes de mise en cache sont implémentés.