Les grands modèles de langage (LLM) deviennent lents et coûteux à mesure que le trafic augmente. Un article publié sur le site Machine Learning Mastery, signé Bala Priya, propose un arbre de décision en six questions pour choisir, parmi les différentes techniques existantes, celle qui correspond au goulot d’étranglement d’une charge de travail donnée.
- Choisir la technique d’optimisation selon le goulot d’étranglement réel de la charge de travail.
- Commencer par compresser le modèle s’il ne tient pas confortablement sur le matériel cible.
- Appliquer le prefix caching uniquement si le préfixe est identique caractère pour caractère.
- Vérifier l’hypothèse de départ d’une technique avant d’ajouter de la complexité.
Ce que suppose chaque technique
Pendant l’inférence, c’est-à-dire la phase où le modèle produit ses réponses, les requêtes s’accumulent derrière les générations les plus longues, la mémoire du processeur graphique (GPU) se remplit d’états d’attention mis en cache, et le matériel passe une part importante de son temps à attendre des lectures en mémoire. Les techniques d’optimisation de l’inférence ne visent pas toutes le même point : certaines agissent sur la mémoire, d’autres sur le calcul, d’autres sur l’ordonnancement des requêtes.
Chacune repose sur une hypothèse précise. La quantification, la parcimonie structurée et la distillation supposent que le modèle est trop grand pour le matériel ou le budget de latence, et qu’en réduire la taille vaut un risque sur la précision. Le prefix caching suppose que de nombreuses requêtes partagent un même début de séquence de tokens (les unités de texte traitées par le modèle), dont le recalcul serait inutile. Le batching continu suppose que les requêtes arrivent en parallèle avec des longueurs de réponse imprévisibles.
D’autres techniques répondent à des situations différentes. Le PagedAttention concerne une mémoire de cache KV fragmentée ou surdimensionnée, le décodage spéculatif un décodage limité par la génération token par token, et la désagrégation prefill-decode une contention entre les deux phases sur un même GPU. Le parallélisme de tenseurs ou de pipeline sert aux modèles qui ne tiennent pas dans la mémoire d’un seul appareil, le déchargement du cache KV aux cas où des entrées utiles sont évincées trop tôt, et le traitement par lots hors ligne aux requêtes qui n’exigent pas de réponse interactive.
Un arbre de décision en six questions
La première question porte sur le matériel : le modèle tient-il confortablement sur la cible ? S’il est trop lourd, l’auteur recommande de commencer par la compression du modèle, car elle détermine la capacité restante. La deuxième question concerne la répétition des prompts. Les applications de chat renvoient l’historique complet à chaque tour, et les pipelines de génération augmentée par récupération (RAG) ajoutent souvent les mêmes instructions à différents contextes. Dans ce cas, le prefix caching est présenté comme « la technique au meilleur rapport d’effet », à condition que le préfixe soit identique caractère pour caractère. Le contenu stable doit donc précéder le contenu variable.
Les questions suivantes portent sur le trafic et la mémoire. Si des requêtes courtes et longues arrivent en rafales qui se chevauchent, le batching continu supprime les temps morts, les séquences terminées quittant le lot immédiatement. Si le cache KV réserve de la mémoire inutilisée, le PagedAttention le découpe en pages de taille fixe. Lorsque la vitesse de génération de chaque utilisateur prime sur le débit global, le décodage spéculatif, qui s’appuie sur un petit modèle de brouillon, peut être envisagé. La dernière question, la désagrégation prefill-decode, ne concerne que les déploiements à grande échelle, car elle modifie l’architecture de service.
Compromis et signes d’échec
Chaque technique a son revers. La quantification peut entraîner une perte de précision, le prefix caching échoue au moindre écart de caractère, et le décodage spéculatif exige un modèle de brouillon au taux d’acceptation suffisant. La désagrégation implique un coût de transfert du cache KV entre nœuds, et le traitement hors ligne n’est pas adapté aux usages soumis à des délais de réponse stricts.
L’article détaille aussi les symptômes d’un échec. Un taux de succès du cache de préfixes proche de zéro peut venir d’une sérialisation non déterministe ou d’un contenu dynamique placé en début de prompt. Un décodage spéculatif plus lent que le décodage classique indique un taux d’acceptation trop faible. Si la désagrégation dégrade la latence, la charge de travail est peut-être trop petite. Si le gain de débit attendu de la quantification n’apparaît pas, seuls les poids ont peut-être été quantifiés. Selon l’auteur, lorsqu’une technique sous-performe de façon répétée, il faut d’abord vérifier son hypothèse de départ avant d’ajouter de la complexité.
