Le speculative decoding est une technique d’inférence pour LLM qui accélère la génération de tokens sans modifier la qualité du résultat. Un modèle de brouillon plus petit et plus rapide propose à l’avance plusieurs tokens candidats, puis le modèle cible, plus grand, les vérifie tous en une seule passe parallèle : il conserve les prédictions valides et procède à un nouvel échantillonnage à partir de la première divergence afin de préserver sa distribution de sortie exacte.
Les grands modèles de langage génèrent généralement leurs réponses un token à la fois. Chaque nouvelle étape de génération nécessite de lire les poids du modèle en mémoire, ce qui laisse la capacité de calcul de l’accélérateur sous-utilisée en attendant la bande passante mémoire. Le speculative decoding supprime ce goulot d’étranglement d’un token par étape en transformant les vérifications séquentielles en vérification parallèle.
Pourquoi le décodage autorégressif classique est-il lent ?
Le décodage autorégressif classique est lent parce que la génération de chaque token nécessite une passe avant distincte dans l’ensemble du modèle. Le processus est donc limité par la bande passante mémoire plutôt que par la capacité de calcul.
Quand un modèle de langage rédige une réponse, chaque token dépend de tous les tokens qui le précèdent. En décodage classique, un modèle de 70 milliards de paramètres doit charger ses poids depuis la mémoire à haute bande passante pour produire le premier token, puis recharger ces mêmes poids pour produire le deuxième, et répéter ce cycle des centaines de fois.
Pourtant, de nombreux tokens d’une réponse sont faciles à prédire. Les mots-outils, les crochets fermants dans le code, les expressions courantes et la syntaxe répétitive ne nécessitent pas toute la profondeur de raisonnement d’un modèle massif pour être devinés avec précision, même si l’on souhaite toujours que le grand modèle porte le jugement final sur l’ensemble de la réponse. Comme les GPU et TPU peuvent traiter un court bloc de tokens en parallèle presque dans le même temps réel qu’un seul token, une capacité de calcul supplémentaire reste inutilisée pendant le décodage token par token. Le speculative decoding exploite cette capacité parallèle disponible.
Comment fonctionne le speculative decoding étape par étape ?
Le speculative decoding exécute une boucle en quatre étapes jusqu’à ce que la réponse soit complète : proposer des tokens candidats, les vérifier en parallèle avec le modèle cible, accepter les tokens correspondants et procéder à un nouvel échantillonnage au premier rejet.
Au lieu de demander au grand modèle cible de générer chaque token séquentiellement, le moteur d’inférence l’associe à une approximation beaucoup plus petite et rapide, souvent appelée modèle de brouillon. Chaque cycle comporte quatre phases distinctes :
- Proposition de tokens candidats : À partir de la séquence actuelle, le petit modèle de brouillon génère rapidement, un par un, une courte fenêtre d’anticipation de $K$ tokens candidats et enregistre sa distribution de probabilité pour chaque position.
- Vérification parallèle : Le grand modèle cible prend la séquence initiale ainsi que les $K$ tokens proposés et effectue une seule passe avant. Comme les architectures de type transformer peuvent évaluer des séquences connues de tokens en parallèle, tout comme lors du traitement du prompt, le modèle cible calcule simultanément ses propres distributions de probabilité pour chaque position proposée.
- Acceptation ou rejet des tokens proposés : En parcourant les $K$ tokens proposés de gauche à droite, le moteur compare à chaque étape la probabilité du modèle de brouillon à celle du modèle cible à l’aide d’une règle formelle d’échantillonnage par rejet, souvent appelée speculative sampling. En décodage glouton (température nulle), un token proposé est accepté lorsqu’il correspond au premier choix du modèle cible. Dans les modes d’échantillonnage, les tokens auxquels le modèle cible attribue une probabilité au moins égale à celle du modèle de brouillon sont toujours acceptés, tandis que les tokens de probabilité inférieure sont acceptés proportionnellement au rapport entre la probabilité du modèle cible et celle du modèle de brouillon.
- Nouvel échantillonnage et génération d’un token bonus : Si la première divergence apparaît à la position $m$, ce token et tous les tokens proposés ensuite sont abandonnés. Un token de remplacement pour la position $m$ est directement échantillonné dans une distribution résiduelle ajustée qui tient compte des probabilités des deux modèles. Si les $K$ tokens proposés sont tous acceptés, le modèle cible dispose déjà de la distribution de probabilité pour la position $K + 1$ grâce à la même passe parallèle ; il peut donc échantillonner un token bonus supplémentaire sans coût additionnel.
Puisque les règles de rejet et de nouvel échantillonnage compensent mathématiquement les erreurs du modèle de brouillon, le speculative decoding est sans perte. Chaque étape portant sur plusieurs tokens produit des échantillons tirés exactement de la même distribution de probabilité que si le modèle cible était exécuté seul : la précision aux benchmarks, la capacité de raisonnement et le ton ne subissent donc aucune dégradation.
Quel gain de vitesse le speculative decoding apporte-t-il en pratique ?
Les recherches fondatrices montrent que le speculative decoding accélère le temps réel d’exécution des grands modèles de langage d’environ 2X à 3X lorsqu’il est associé à un modèle de brouillon bien adapté et à une puissance de calcul parallèle suffisante.
Les articles fondateurs qui ont présenté cette technique fin 2022 et début 2023 ont montré des gains de latence substantiels sur les transformers encodeur-décodeur comme sur ceux à décodeur seul, sans modifier les poids des modèles ni leurs distributions de sortie :
| Étude | Modèle cible | Configuration du brouillon | Accélération du temps réel rapportée | Conditions et tâches |
|---|---|---|---|---|
| Leviathan et al. (2023) | T5-XXL (11B paramètres) | T5-small (77M paramètres) | 2X–3X (jusqu’à 2.6X–3.4X dans les tableaux de configuration T5-small) | Implémentation T5X utilisée telle quelle pour la traduction (EN-DE) et le résumé (CNN/DM), avec argmax (temp 0) et échantillonnage standard (temp 1). |
| Chen et al. (2023) | Chinchilla (70B paramètres) | Modèle de brouillon de 4B paramètres entraîné pour speculative sampling | 2X–2.5X | Configuration distribuée sur TPU v4 pour le résumé (XSum) et la génération de code (HumanEval). |
Remarquez l’écart de taille entre les modèles cibles et les modèles de brouillon dans les deux études : T5-small est environ deux ordres de grandeur plus petit que T5-XXL, et le modèle de brouillon de 4B ne représente qu’une petite fraction du modèle Chinchilla de 70B. Un modèle de brouillon doit être suffisamment petit pour que l’exécution de $K$ étapes séquentielles sur celui-ci ajoute très peu de surcharge par rapport à une seule étape du modèle cible.
Qu’est-ce qui détermine le taux d’acceptation et pourquoi le gain de vitesse n’est-il pas garanti ?
Le gain de vitesse du speculative decoding dépend de deux facteurs principaux : le degré d’accord entre le modèle de brouillon et le modèle cible (le taux d’acceptation) et la capacité de calcul parallèle disponible sur le matériel. Un gain net n’est donc jamais garanti.
Si le modèle de brouillon se trompe constamment, le système supporte le coût de latence de $K$ étapes séquentielles sur ce modèle pour voir le modèle cible rejeter le tout premier token. Dans le pire des cas, un cycle spéculatif ne produit qu’un seul token issu d’un nouvel échantillonnage tout en prenant plus de temps qu’une étape classique du modèle cible.
Plusieurs variables pratiques déterminent si le speculative decoding accélère ou ralentit l’inférence :
- Alignement entre les modèles de brouillon et cible : Le modèle de brouillon doit partager exactement le même tokenizer et le même vocabulaire que le modèle cible, et sa distribution d’entraînement doit être très proche. L’autocomplétion de code, les sorties JSON structurées et la traduction de formulations prévisibles tendent à produire des taux d’acceptation plus élevés que l’écriture créative à haute température, où de nombreux tokens très différents sont tout aussi plausibles.
- Surcoût de latence du modèle de brouillon : Même un taux d’acceptation élevé ne suffit pas à accélérer la génération si le modèle de brouillon lui-même est trop grand et trop lent. Leviathan et al. ont montré qu’un modèle de brouillon T5-small plus petit surpassait les candidats plus grands T5-base et T5-large en accélération globale du temps réel, car son surcoût de proposition à chaque étape était bien inférieur.
- Longueur de la fenêtre d’anticipation ($K$) : Une anticipation trop courte limite le nombre de tokens vérifiables en une seule passe. Une anticipation trop longue gaspille du temps de proposition sur des tokens ultérieurs qui sont abandonnés dès qu’un token précédent est rejeté.
- Calcul parallèle disponible (saturation liée à la taille des lots) : Le speculative decoding échange de la puissance de calcul inutilisée contre une latence plus faible. Pour un service sensible à la latence avec de petits lots, les accélérateurs disposent d’une grande capacité libre pour vérifier $K$ tokens en parallèle avec un coût temporel supplémentaire presque nul. Avec des lots simultanés très importants, lorsque les unités de calcul du GPU sont déjà entièrement saturées, l’ajout de $K$ positions de vérification par requête augmente la durée de la passe et peut annuler le gain de vitesse.
Quel est le rapport entre speculative decoding, KV cache et mise en cache des prompts ?
Le speculative decoding n’accélère que la phase de décodage de la génération de sortie, tandis que la mise en KV cache évite de recalculer l’attention entre les tokens et que la mise en cache des prompts accélère le prefill des entrées répétées et en réduit le coût.
Comme ces trois optimisations touchent à la latence d’inférence des transformers, les développeurs confondent souvent leur place respective dans le cycle de vie d’une requête :
- Prefill et décodage : Chaque requête adressée à un LLM comporte deux étapes. Le prefill traite tous les tokens du prompt d’entrée en parallèle afin de construire l’état initial ; cette étape est déjà limitée par le calcul et rapide par token. Le décodage génère les tokens de sortie étape par étape et est limité par la bande passante mémoire. Le speculative decoding n’aide que pendant le décodage ; il n’accélère pas la lecture d’un long prompt d’entrée.
- Rôle du KV cache : Le modèle cible et le modèle de brouillon utilisent chacun leur propre KV cache pendant le speculative decoding. À mesure que les tokens candidats sont proposés et vérifiés, leurs états Key et Value sont ajoutés au cache. Lorsque le modèle cible rejette des tokens proposés après la position $m$, le moteur d’inférence revient simplement en arrière en tronquant les KV cache des deux modèles afin de supprimer les entrées rejetées avant de commencer le cycle suivant.
- Différence avec la mise en cache des prompts : La mise en cache des prompts réutilise des blocs de KV cache précalculés pour des préfixes de prompt identiques entre des appels API distincts. Elle réduit le délai jusqu’au premier token (TTFT) et souvent le prix des tokens d’entrée. Le speculative decoding réduit la latence entre les tokens (ITL) pendant la transmission de la réponse.
Que signifie le speculative decoding pour les développeurs d’API et les utilisateurs qui hébergent leurs modèles ?
Pour les développeurs d’API, le speculative decoding se traduit par une latence de transmission de bout en bout plus faible plutôt que par une ligne de facturation distincte. Les utilisateurs qui hébergent leurs modèles le configurent directement dans les moteurs d’inférence pour améliorer la réactivité de chaque requête.
Votre manière d’utiliser le speculative decoding dépend de votre recours à des points d’accès de modèles hébergés ou de la gestion de votre propre parc de GPU :
- La facturation par token des API hébergées change rarement : Les fournisseurs d’IA hébergée facturent généralement par million de tokens d’entrée et de sortie traités du point de vue de l’utilisateur. Même si un fournisseur utilise le speculative decoding en interne, les tokens de brouillon rejetés restent internes au moteur de service : vous payez les tokens de sortie finalement générés au tarif standard du modèle. Pour réduire votre facture d’API directe plutôt que le seul temps d’attente, examinez l’ingénierie de prompts, les API par lots et les moyens pratiques de réduire les coûts des API d’IA, ou comparez les tarifs lorsque vous décidez comment choisir un modèle d’IA.
- Avantages pour l’expérience utilisateur en temps réel : Pour les créateurs d’applications, le speculative decoding se distingue par son effet sur l’expérience utilisateur. Les agents vocaux, les assistants de code dans les IDE et les flux de production interactifs, des copilotes de programmation en direct aux pipelines de scripts associés à des outils créatifs comme AI Studio Video, semblent nettement plus réactifs lorsque les tokens de sortie arrivent deux fois plus vite sans passer à un modèle moins performant.
- Configuration en hébergement autonome : Si vous exécutez des modèles à poids ouverts sur votre propre infrastructure, vous configurez le speculative decoding directement dans votre pile de service. Vous devez charger le modèle cible et le modèle de brouillon dans la mémoire du GPU (ou utiliser une variante sans brouillon), vérifier qu’ils partagent exactement le même tokenizer et ajuster la longueur d’anticipation à votre niveau habituel de requêtes simultanées.
Faut-il toujours un modèle de brouillon distinct ?
Des variantes ultérieures du speculative decoding évitent d’avoir à entraîner et déployer un petit modèle de brouillon distinct tout en conservant le même principe de proposition et de vérification.
Gérer deux modèles distincts en mémoire et trouver un petit modèle dont le tokenizer est exactement le même et dont le comportement est aligné sur celui du modèle cible peut être compliqué en pratique. Pour résoudre ce problème, les chercheurs en inférence et les frameworks de service ont introduit plusieurs approches sans modèle de brouillon :
- Proposition par recherche de n-grammes et dans le prompt : Au lieu d’exécuter un réseau neuronal pour proposer des tokens, le moteur recherche des passages correspondants dans le prompt d’entrée et dans la sortie récemment générée, puis copie les tokens suivants comme candidats. Cela fonctionne particulièrement bien pour résumer des documents, modifier du code ou extraire des citations déjà présentes dans la fenêtre de contexte.
- Têtes de prédiction de plusieurs tokens et couches auxiliaires : Au lieu de maintenir un modèle autonome complet, un petit ensemble de têtes de prédiction légères ou de couches de brouillon peut être relié directement aux états cachés du modèle cible afin de proposer les prochains tokens en une seule passe.
- Self-speculative decoding : Certaines configurations utilisent un sous-ensemble des couches du modèle cible lui-même, en sautant des couches intermédiaires pendant la proposition, pour générer des tokens candidats, puis exécutent toutes les couches pour les vérifier.
Quelle que soit la manière dont les tokens candidats sont proposés, la garantie fondamentale reste la même : le modèle cible complet vérifie les candidats en parallèle et impose sa distribution de probabilité exacte à chaque token accepté.
Questions fréquentes
Le speculative decoding modifie-t-il la précision du modèle ou la qualité de la sortie ?
Non. Le speculative decoding classique (speculative sampling) est mathématiquement sans perte. En décodage glouton, il n’accepte que les tokens qui correspondent exactement à la première prédiction du modèle cible. Pour l’échantillonnage avec température, ses règles de rejet et de nouvel échantillonnage résiduel garantissent que les séquences générées suivent exactement la même distribution de probabilité que le décodage autorégressif classique du modèle cible.
Le speculative decoding réduit-il le délai jusqu’au premier token (TTFT) ?
Non. Le délai jusqu’au premier token mesure le temps nécessaire au modèle pour lire votre prompt d’entrée pendant l’étape de prefill et émettre le tout premier token de sortie. Comme le prefill traite déjà les tokens du prompt en parallèle, le speculative decoding n’accélère que les étapes de décodage suivantes, réduisant ainsi la latence entre les tokens et le temps total nécessaire pour terminer le reste de la réponse.
Pourquoi le speculative decoding peut-il être plus lent avec de grands lots ?
Le speculative decoding utilise la capacité de calcul parallèle libre du GPU ou du TPU pour vérifier plusieurs tokens de brouillon en à peu près autant de temps qu’il en faut pour en vérifier un seul. Lorsqu’un serveur traite un très grand lot de requêtes simultanées, la capacité de calcul de l’accélérateur est déjà entièrement utilisée ; vérifier des tokens de brouillon supplémentaires pour chaque requête ajoute donc un temps d’exécution réel qui peut dépasser le temps économisé sur les lectures en mémoire.
N’importe quel petit modèle peut-il servir de modèle de brouillon à n’importe quel grand modèle ?
Pas directement dans le speculative decoding classique au niveau des tokens. Le modèle de brouillon et le modèle cible doivent partager un vocabulaire et un tokenizer compatibles afin que les identifiants des tokens candidats et leurs distributions de probabilité correspondent correctement entre les deux modèles. C’est pourquoi les associations proviennent généralement de la même famille de modèles, par exemple T5-small proposant des brouillons pour T5-XXL.
Sources
- Yaniv Leviathan, Matan Kalman, and Yossi Matias — Fast Inference from Transformers via Speculative Decoding (arXiv:2211.17192, ICML 2023)
- Charlie Chen, Sebastian Borgeaud, Geoffrey Irving, Jean-Baptiste Lespiau, Laurent Sifre, and John Jumper — Accelerating Large Language Model Decoding with Speculative Sampling (arXiv:2302.01318, 2023)



