Un modèle de langue à cache est un type de grand modèle de langue qui intègre un mécanisme de cache pour stocker et réutiliser des calculs intermédiaires, tels que les paires clé-valeur provenant des couches d'attention, lors de l'inférence. En évitant les calculs redondants pour des jetons ou des invites répétés, ces modèles réduisent la latence et la charge de calcul, ce qui les rend particulièrement utiles pour les applications en temps réel et les environnements à ressources limitées. Cette approche est un domaine de recherche actif au sein de l'IA et du apprentissage automatique, avec des implémentations apparaissant à la fois dans des prototypes académiques et des systèmes commerciaux.
Le concept repose sur l'observation que de nombreuses requêtes de modèles de langue partagent des préfixes communs ou des contenus répétés, tels que des invites système, des exemples en quelques essais ou un contexte conversationnel. Au lieu de recalculer les représentations internes du modèle pour ces parties partagées, un modèle de langue à cache les stocke en mémoire et les récupère lorsque nécessaire. Cette conception s'aligne sur des efforts plus larges pour optimiser les architectures basées sur transformeur, qui sont le fondement de la plupart des grands modèles de langue modernes.
Mécanismes de cache
Les modèles de langue à cache emploient généralement un cache clé-valeur, où les clés et les valeurs générées par le mécanisme d'attention pour chaque jeton sont stockées. Lors de la génération, si une séquence de jetons correspond à un préfixe déjà vu, le modèle peut réutiliser les paires clé-valeur mises en cache, en sautant la passe avant pour ces jetons. Cela est analogue à élagage de modèle dans la mesure où les deux visent à réduire les calculs inutiles, bien que la mise en cache se concentre sur l'efficacité à l'inférence plutôt que sur la taille du modèle.
Certaines implémentations utilisent un cache hiérarchique, distinguant le stockage à court terme et à long terme. Les caches à court terme gèrent le contexte récent au sein d'une seule session, tandis que les caches à long terme persistent entre les sessions, permettant des réponses plus rapides pour les utilisateurs ou applications récurrents. La taille du cache et la politique d'éviction sont des choix de conception critiques, car ils affectent l'utilisation de la mémoire et le taux de succès.
Entraînement et optimisation
Les modèles de langue à cache peuvent être entraînés en utilisant des variantes standard de descente de gradient stochastique, telles que Adam, avec des programmes de taux d'apprentissage et un écrêtage de gradient pour stabiliser l'entraînement. Le cache lui-même n'est généralement pas appris mais est un composant d'exécution, bien que certaines recherches explorent des politiques de cache apprises qui prédisent quels jetons sont susceptibles d'être réutilisés.
Pendant l'entraînement, les modèles peuvent être exposés à des données synthétiques qui simulent des contenus répétés, encourageant le modèle à produire des représentations plus favorables au cache. Des techniques de augmentation de données peuvent également être appliquées pour augmenter la diversité des motifs mis en cache. Cependant, l'objectif d'entraînement principal reste le même que pour les modèles de langue standard : minimiser une fonction de perte telle que l'entropie croisée.
Applications
Les modèles de langue à cache sont particulièrement précieux dans les scénarios avec des volumes de requêtes élevés et des entrées répétitives. Par exemple, Amazon Web Services, Microsoft Azure, Google Cloud et Oracle Cloud proposent des services d'inférence gérés où la mise en cache peut réduire les coûts pour les clients exécutant des applications à grande échelle. Groq et SambaNova ont également exploré la co-conception matériel-logiciel pour accélérer l'inférence basée sur le cache.
Dans l'IA conversationnelle, les modèles de langue à cache permettent des temps de réponse plus rapides pour les chatbots qui maintiennent de longues historiques de dialogue. Ils sont également utilisés dans les outils de complétion de code, où les développeurs répètent fréquemment des motifs de code similaires. La technique est compatible avec échantillonnage top-k, échantillonnage top-p et ajustement de température pour la génération, car le cache fonctionne indépendamment de la stratégie de décodage.
Défis et orientations futures
Un défi majeur est l'empreinte mémoire du cache, en particulier pour de très grands modèles avec des milliards de paramètres. Le stockage des paires clé-valeur pour de longues séquences peut consommer une mémoire significative, entraînant des compromis entre vitesse et utilisation des ressources. Les chercheurs étudient des techniques de compression et des ajustements de normalisation de couche pour atténuer ce problème.
Un autre problème ouvert est l'invalidation du cache lorsque le modèle est mis à jour ou affiné. Si les poids du modèle changent, les valeurs mises en cache peuvent devenir obsolètes, nécessitant une gestion prudente. Les travaux futurs pourraient impliquer des politiques de cache apprises qui s'adaptent au comportement des utilisateurs, ainsi que l'intégration avec des réseaux résiduels et d'autres innovations architecturales. Le développement des modèles de langue à cache est étroitement lié aux avancées dans les réseaux de neurones et le apprentissage profond, et il est probable qu'il reste un domaine de recherche actif dans les années à venir.