Décodage Spéculatif : L'Astuce d'Inférence qui Rend les LLM 3x Plus Rapides Sans Sacrifier la Qualité

Le décodage spéculatif réduit la latence d'inférence des LLM de 2 à 3 fois sans modifier les poids du modèle, la qualité de sortie ou la distribution de probabilité sous-jacente. Il le fait en exploitant une asymétrie structurelle que la plupart des pipelines d'inférence ignorent : vérifier des tokens est bien moins coûteux que de les générer à partir de zéro.
La technique a été formalisée dans l'article de DeepMind de 2023 et a depuis été adoptée dans des systèmes de production chez Google, Meta et un nombre croissant de frameworks d'optimisation d'inférence, dont vLLM et TensorRT-LLM. Comprendre pourquoi elle fonctionne — et où elle échoue — est essentiel pour toute équipe faisant tourner des LLM à grande échelle.
Comment Fonctionne Réellement le Décodage Spéculatif
La génération autorégressive standard est séquentielle par nature : le modèle produit un token à la fois, chacun conditionné par tous les tokens précédents. Cela signifie qu'un modèle de 70 milliards de paramètres s'exécutant sur un seul A100 génère environ 20 à 30 tokens par seconde, consacrant la grande majorité de son calcul à la bande passante mémoire plutôt qu'à l'arithmétique. Le GPU attend principalement que les poids soient chargés depuis la HBM, et non qu'il calcule des nombres.
Le décodage spéculatif introduit un second modèle "brouillon" beaucoup plus petit — généralement 7 milliards de paramètres ou moins — qui propose une séquence de tokens candidats (généralement 4 à 8 à la fois) avant le modèle "cible" plus grand. Le modèle cible évalue ensuite tous les tokens du brouillon en un seul passage avant. Parce que l'attention sur une courte séquence est presque aussi rapide qu'un passage à un seul token sur un grand modèle, le modèle cible peut vérifier ou rejeter chaque token du brouillon en parallèle.
Lorsque les tokens du brouillon correspondent à ce que le modèle cible aurait généré (c'est-à-dire qu'ils se situent dans sa probabilité d'acceptation), ils sont tous acceptés et le processus avance de plusieurs positions à la fois. Lorsqu'un token du brouillon est rejeté, le pipeline retombe sur un échantillonnage à partir de la distribution cible à cette position et redémarre le brouillon à partir de là. La perspicacité clé, prouvée rigoureusement dans l'article original, est que ce schéma d'échantillonnage par rejet produit une distribution de sortie identique à celle que l'on obtiendrait du modèle cible seul — la qualité est donc mathématiquement préservée.
Taux d'Acceptation et Où la Qualité du Brouillon Compte
Le multiplicateur de rapidité est directement proportionnel au taux d'acceptation moyen des tokens du brouillon. Si le modèle brouillon accepte 80 % des tokens proposés et que vous spéculez 4 à l'avance, vous traitez effectivement ~3,2 tokens par passage avant du modèle cible au lieu de 1. Les taux d'acceptation dans le monde réel varient considérablement selon la tâche :
- Sorties répétitives ou modélisées (code standard, données structurées) : acceptation de 85–95 %, accélération de 3–4x courante
- Chat général et suivi d'instructions : acceptation de 60–80 %, accélération de 1,5–2,5x typique
- Génération créative et chaînes de raisonnement : acceptation de 40–65 %, gains plus modestes
Cela signifie que le décodage spéculatif fonctionne mieux lorsque la tâche a une structure prévisible — ce qui décrit une grande partie des charges de travail d'inférence de LLM en production : génération de code, résumé de documents avec un formatage cohérent et réponses de chatbot suivant des modèles de Prompt. Il fonctionne moins bien sur les tâches créatives ouvertes où le modèle brouillon diverge systématiquement de la cible.
Décodage Spéculatif Automatique et Têtes Medusa
L'exécution d'un modèle brouillon séparé ajoute une complexité opérationnelle : vous devez colocaliser deux modèles, gérer la mémoire pour les deux et les maintenir synchronisés. Plusieurs approches ont émergé pour y remédier.
Le décodage spéculatif automatique utilise le modèle cible lui-même comme générateur de brouillon, mais avec des couches de sortie anticipée. Le modèle Llama 3.1 70B, par exemple, peut être configuré pour sortir à la couche 32 (au lieu des 80 couches complètes) pour le brouillon, puis rentrer dans la pile complète pour la vérification. Cela élimine le besoin d'un modèle séparé mais nécessite un support architectural pour le saut de couches.
Medusa, développé à Princeton et publié en Open Source en 2024, adopte une approche différente : il ajoute plusieurs têtes de prédiction supplémentaires à l'état caché final du modèle cible, chacune prédisant des tokens aux positions +1, +2, +3, etc. Ces têtes sont entraînées à moindre coût via un Fine-tuning supervisé sur les sorties existantes du modèle. Medusa-2, combiné à une vérification arborescente, atteint une accélération de 2,8x sur Vicuna-13B sans modèle brouillon séparé et avec une dégradation minime de la précision.
SpecInfer de Carnegie Mellon étend encore l'idée en utilisant un arbre de séquences de brouillon plutôt qu'une seule séquence, vérifié en un seul passage avant par lots. Cela augmente la probabilité d'acceptation car le modèle cible n'a besoin que de trouver un chemin valide dans l'arbre.
Considérations de Production
Déployer le décodage spéculatif en production nécessite une attention à plusieurs facteurs que les benchmarks sous-estiment souvent :
- Interaction de la taille du lot : Le décodage spéculatif offre les plus grands gains avec une taille de lot de 1 (cas d'usage interactifs). À mesure que la taille du lot augmente, le goulot d'étranglement de la bande passante mémoire diminue par rapport à l'arithmétique, et le surcoût lié à l'exécution du modèle brouillon devient moins justifié. Pour des tailles de lot supérieures à 32–64, la génération standard surpasse souvent le décodage spéculatif.
- Gestion du KV Cache : Le modèle brouillon et le modèle cible maintiennent tous deux des KV Caches. L'allocation mémoire doit tenir compte des deux, ce qui complique les frameworks de service qui optimisent l'utilisation du Cache (comme PagedAttention de vLLM).
- Sélection du modèle brouillon : Le modèle brouillon doit être de la même famille que le modèle cible. Utiliser Llama-3-8B comme brouillon pour Llama-3-70B donne des taux d'acceptation bien plus élevés que l'utilisation d'un modèle entraîné sur un jeu de données différent ou avec une tokenisation différente.
- Compromis latence vs débit : Le décodage spéculatif optimise davantage la latence (temps pour terminer une seule requête) que le débit (tokens par seconde sur l'ensemble des requêtes). Les équipes gérant des inférences de service à haut QPS doivent évaluer quelle métrique est la plus importante pour leur SLA.
Où la Technique se Dirige
Le déploiement en 2024 par Google du décodage spéculatif dans l'infrastructure de service de Gemini aurait réduit les coûts d'inférence de 40 % pour les charges de travail sensibles à la latence. NVIDIA a intégré le support du décodage spéculatif dans TensorRT-LLM 0.8 avec des têtes de prédiction multi-tokens (MTP), et l'approche est désormais une fonctionnalité de première classe plutôt qu'un plugin expérimental.
La prochaine frontière est le décodage spéculatif en cascade : utiliser trois modèles ou plus dans une hiérarchie (par exemple 1B → 7B → 70B), où le plus petit modèle rédige pour le modèle moyen, qui rédige pour le grand modèle. Les premiers résultats de l'équipe de recherche de Meta suggèrent une réduction de latence de 4–5x sur les tâches structurées avec cette approche, bien que l'empreinte mémoire et la complexité d'orchestration augmentent en conséquence.
Il y a également un travail actif sur le décodage spéculatif pour les modèles de mélange d'experts, où les schémas de calcul irréguliers du routage sparse des experts interagissent de manière non évidente avec la vérification du brouillon. L'architecture Mixtral de Mistral a été spécifiquement examinée pour cela ; les premiers résultats montrent que la dynamique du taux d'acceptation diffère significativement des modèles denses.
Enseignements Actionnables
- Si votre charge de travail est sensible à la latence et que la taille du lot est faible (1–8), le décodage spéculatif devrait être votre première optimisation à évaluer — des frameworks comme vLLM le supportent avec un simple drapeau de configuration.
- Faites correspondre votre modèle brouillon à la famille et aux données d'entraînement de votre modèle cible ; des brouillons mal adaptés vous donneront de faibles taux d'acceptation et pourraient même ralentir les choses.
- Mesurez les taux d'acceptation sur vos prompts de production réels, pas sur des benchmarks. La structure de la tâche importe plus que la taille du modèle pour prédire l'accélération.
- Pour les équipes qui ne peuvent pas exécuter un second modèle, évaluez les têtes Medusa comme un juste milieu — elles ajoutent une surcharge mémoire minimale et peuvent être affinées en quelques heures sur un seul GPU.
- N'appliquez pas le décodage spéculatif à l'inférence par lots à haut débit à moins d'avoir vérifié la dynamique de la taille du lot à votre point de fonctionnement spécifique.