Accélérer les réponses des LLM avec la réutilisation du cache KV
Une nouvelle méthode accélère les réponses des grands modèles de langage en réutilisant le cache KV.
― 7 min lire
Table des matières
Les grands modèles de langage (LLMs) utilisent souvent plusieurs morceaux de texte pour donner du contexte dans leurs réponses. Ça peut ralentir le processus de génération des réponses parce que le LLM doit gérer tout le texte d'une manière spécifique avant de produire quoi que ce soit. Pour accélérer les choses, une méthode est de pré-calculer un type de mémoire, appelé Cache KV, pour le texte et ensuite réutiliser cette mémoire quand le même texte est de nouveau nécessaire.
Cependant, quand les morceaux de texte réutilisés ne sont pas au début de l'entrée, leurs caches KV pré-calculés ne peuvent pas être utilisés directement. C'est parce que la façon dont le modèle regarde la nouvelle entrée doit prendre en compte ce qui est venu avant, ce que ces caches ne prévoient pas. En conséquence, les bénéfices de la réutilisation de ces caches restent largement inexploités.
Cet article traite d'une question clé : comment peut-on rapidement combiner ces caches KV pré-calculés pour maintenir la qualité de la sortie du modèle, tout en accélérant le processus ? On introduit une méthode qui nous permet de réutiliser des caches KV pré-calculés même s'ils ne sont pas au début du texte. Elle met à jour juste un petit nombre de tokens pour s'assurer que la qualité de la sortie reste élevée.
En même temps, ce léger retard pour mettre à jour certains tokens peut se produire en même temps que la récupération des caches KV. Ça nous permet de garder des caches plus grands dans des dispositifs de stockage plus lents sans ralentir le processus d'inférence.
En testant notre méthode par rapport aux méthodes existantes de réutilisation des caches KV sur divers LLMs et des tâches de benchmark de Performance communes, on a constaté que cette approche réduit le temps nécessaire pour générer le premier token jusqu'à 3,3 fois et augmente la capacité de traitement globale jusqu'à 5 fois, sans sacrifier la qualité du texte généré.
Avec leurs capacités impressionnantes, les LLMs sont largement utilisés dans des domaines comme l'assistance personnelle et la santé. Pour s'assurer que les réponses sont précises et fiables, ces modèles ont souvent besoin de plus d'infos que ce que la requête de l'utilisateur de base fournit. En général, dans un processus appelé Génération augmentée par récupération (RAG), plusieurs morceaux de texte pertinents sont ajoutés à la requête de l'utilisateur pour former l'entrée finale pour le LLM.
Le besoin de ce contexte supplémentaire peut ralentir les temps de réponse de manière significative. Avant de générer une réponse, le LLM traite d'abord l'ensemble de l'entrée pour créer le cache KV, ce qui aide le modèle à déterminer comment répondre. Cette étape de prétraitement peut prendre beaucoup de temps, surtout avec des entrées plus longues.
Même avec des optimisations, le temps nécessaire pour traiter de longues entrées peut ralentir tout le système. Comme l'ont montré de nombreuses avancées récentes, les mêmes textes de contexte sont souvent réutilisés à travers différentes entrées. Pour y remédier, certains systèmes pré-calculent les caches KV pour ces textes une fois et les réutilisent, ce qui fait gagner du temps.
Il y a actuellement deux approches principales pour réutiliser les caches KV, mais les deux ont leurs inconvénients. La première approche, appelée mise en cache par préfixe, ne garde et ne réutilise que le cache KV pour la partie initiale de l'entrée. Bien que cela soit efficace pour les courtes entrées, ça ne fonctionne pas bien quand plusieurs morceaux de texte pertinents sont nécessaires, comme c'est souvent le cas dans les configurations RAG.
La deuxième approche, réutilisation complète des KV, essaie d'y remédier en ajustant la manière dont les caches sont appliqués, mais elle ignore comment les différents morceaux de texte se rapportent les uns aux autres dans une entrée plus complexe. Cela peut mener à des réponses moins précises parce que ça manque d'interactions importantes entre les morceaux de texte.
En revanche, notre approche se concentre sur la combinaison efficace de ces caches KV pour maintenir une haute qualité de réponse tout en réduisant le Temps de traitement. On a juste besoin de mettre à jour une petite fraction des tokens, qui peut généralement être inférieure à 15 %, et ça réduit considérablement le temps de calcul global.
Notre méthode traite le texte couche par couche, en mettant à jour juste une petite portion des tokens qui en ont besoin tout en réutilisant le reste. Cette mise à jour sélective est basée sur les tokens qui montrent le plus d'écart par rapport à ce qu'une pré-computation complète produirait.
On a trouvé qu'avec juste un petit ratio de mise à jour, on peut toujours atteindre la même qualité de sorties que la pré-compute complète, tout en bénéficiant d'un gain de vitesse considérable.
En utilisant aussi une méthode de pipeline, où les délais de récupération des caches KV et de recomputation sont gérés en parallèle, on peut stocker plus de caches KV dans des mémoires plus lentes sans affecter la performance. Ça permet une meilleure gestion des ressources et une plus grande efficacité.
Notre système a été testé avec divers LLMs open-source et plusieurs ensembles de données de benchmark, montrant qu'il améliore significativement non seulement la performance mais aussi la qualité des réponses.
En résumé, notre approche permet la réutilisation des caches KV pour plusieurs morceaux de contexte dans les entrées des LLM sans sacrifier la qualité des réponses. Cette technique complète les travaux récents axés sur la réduction des tailles de mémoire et l'optimisation de l'accès aux caches KV.
Avec la montée des LLMs, il y a un besoin croissant de gérer comment ils traitent efficacement plusieurs entrées. Ces modèles doivent généralement analyser divers morceaux de contexte ensemble pour donner des réponses précises. Cependant, gérer des entrées plus grandes peut ralentir le temps de réponse. Notre technique permet à ces modèles de maintenir une haute qualité et vitesse, les rendant plus utiles dans des applications réelles.
À travers une série de tests et d'évaluations, on a montré que notre méthode peut être très efficace pour répondre aux exigences de performance rapide et précise des LLMs dans des scénarios complexes. Ce travail ouvre la porte à de nouvelles possibilités pour améliorer la façon dont les LLMs servent les applications réelles, en particulier dans des domaines qui nécessitent un traitement rapide et fiable des informations.
Titre: CacheBlend: Fast Large Language Model Serving for RAG with Cached Knowledge Fusion
Résumé: Large language models (LLMs) often incorporate multiple text chunks in their inputs to provide the necessary contexts. To speed up the prefill of the long LLM inputs, one can pre-compute the KV cache of a text and re-use the KV cache when the context is reused as the prefix of another LLM input. However, the reused text chunks are not always the input prefix, and when they are not, their precomputed KV caches cannot be directly used since they ignore the text's cross-attention with the preceding text in the LLM input. Thus, the benefits of reusing KV caches remain largely unrealized. This paper tackles just one question: when an LLM input contains multiple text chunks, how to quickly combine their precomputed KV caches in order to achieve the same generation quality as the expensive full prefill (i.e., without reusing KV cache)? We present CacheBlend, a scheme that reuses the pre-computed KV caches, regardless prefix or not, and selectively recomputes the KV values of a small subset of tokens to partially update each reused KV cache. In the meantime,the small extra delay for recomputing some tokens can be pipelined with the retrieval of KV caches within the same job,allowing CacheBlend to store KV caches in slower devices with more storage capacity while retrieving them without increasing the inference delay. By comparing CacheBlend with the state-of-the-art KV cache reusing schemes on three open-source LLMs of various sizes and four popular benchmark datasets of different tasks, we show that CacheBlend reduces time-to-first-token (TTFT) by 2.2-3.3X and increases the inference throughput by 2.8-5X, compared with full KV recompute, without compromising generation quality or incurring more storage cost.
Auteurs: Jiayi Yao, Hanchen Li, Yuhan Liu, Siddhant Ray, Yihua Cheng, Qizheng Zhang, Kuntai Du, Shan Lu, Junchen Jiang
Dernière mise à jour: 2024-06-03 00:00:00
Langue: English
Source URL: https://arxiv.org/abs/2405.16444
Source PDF: https://arxiv.org/pdf/2405.16444
Licence: https://creativecommons.org/licenses/by/4.0/
Changements: Ce résumé a été créé avec l'aide de l'IA et peut contenir des inexactitudes. Pour obtenir des informations précises, veuillez vous référer aux documents sources originaux dont les liens figurent ici.
Merci à arxiv pour l'utilisation de son interopérabilité en libre accès.