Pourquoi l'IA ralentit quand la conversation s'allonge
Vous avez probablement remarqué le phénomène : au début d'une conversation avec une IA, les réponses arrivent quasi instantanément. Mais après une vingtaine de messages, quelques PDF joints et des consignes complexes, l'attente s'allonge sensiblement. Ce n'est pas un bug. C'est un problème fondamental de contexte et de calcul.
Le contexte : tout ce que l'IA garde en mémoire
Le contexte, c'est l'ensemble des informations que le modèle prend en compte pour générer sa réponse :
- Votre requête actuelle
- L'historique de la conversation
- Les documents joints
- Les consignes système
Certains modèles récents peuvent traiter jusqu'à 1 million de tokens de contexte. Mais cette capacité a un coût.
Plus de contexte, plus de latence
L'IA ne lit pas votre texte comme un humain. Elle calcule les relations entre chaque token du contexte via le mécanisme d'attention.
Prenons un exemple concret : en début de conversation, vous mentionnez que votre chat s'appelle Michel. Quinze questions plus tard, vous demandez "Comment rendre Michel plus sympa ?". Le modèle doit comparer le mot "Michel" avec tous les mots précédents pour comprendre que vous parlez de votre chat et non d'une personne. Et pour chaque mot de sa réponse, il effectue des millions de calculs sur l'ensemble du contexte.
Le résultat : la complexité computationnelle explose avec la taille du contexte, et la latence suit la même courbe.
Les caches aident, mais pas toujours
Le KV cache, qui stocke les vecteurs Key et Value déjà calculés, est censé atténuer ce problème. Mais en pratique, plusieurs facteurs limitent son efficacité :
Purge mémoire
Sur une infrastructure partagée (comme les services cloud), le cache est régulièrement vidé pour libérer de la RAM ou de la VRAM pour d'autres utilisateurs. Votre conversation perd alors son cache, et le modèle doit tout recalculer.
Contenu partiel
Dans un format de type "réflexion puis réponse" (Think > Answer), seule la réponse finale est souvent conservée dans le cache. La phase de raisonnement, qui peut être longue, est écartée, rendant le cache partiellement invalide pour les échanges suivants.
Pas de persistance entre sessions
Rares sont les services qui conservent le cache d'une session à l'autre. À chaque nouvelle connexion, le modèle repart de zéro, même si votre conversation précédente était longue et détaillée.
Les implications pour les systemes en production
Ces contraintes sont cruciales pour quiconque construit des systèmes basés sur des LLMs :
- Latence variable : le temps de réponse n'est pas constant, il augmente avec le contexte. Il faut en tenir compte dans la conception de l'expérience utilisateur.
- Gestion mémoire : plus le contexte est long, plus la mémoire GPU requise est importante. Pour un modèle comme Llama3-70B, le KV cache peut atteindre 10,5 Go pour 4k tokens.
- Coût d'inférence : chaque token de contexte a un coût en calcul. Les conversations longues coûtent significativement plus cher à traiter.
- Stabilité : la qualité des réponses peut se dégrader sur de très longs contextes, même si le modèle est capable de les traiter techniquement.
Stratégies d'atténuation
Plusieurs approches permettent de limiter l'impact :
- Compression du contexte : résumer les échanges précédents pour réduire le nombre de tokens sans perdre l'information essentielle.
- Fenêtre glissante : ne conserver que les N derniers messages, en sacrifiant les informations anciennes.
- RAG (Retrieval-Augmented Generation) : stocker les informations dans une base vectorielle et ne charger que les passages pertinents à chaque requête.
- Optimisation du KV cache : techniques comme PagedAttention ou l'offloading pour mieux gérer la mémoire.
Conclusion
Les LLMs peuvent traiter d'énormes contextes, mais ils ne le font pas rapidement, ni sans contraintes mémoire, ni de façon stable. Comprendre ces limites est essentiel pour concevoir des systèmes fiables, performants et scalables. La taille de la fenêtre de contexte affichée par un modèle n'est qu'une partie de l'histoire : ce qui compte vraiment, c'est comment cette fenêtre est gérée en conditions réelles.