Décodage spéculatif
Le décodage spéculatif est une optimisation d'inférence dans laquelle un petit modèle "brouillon" rapide prédit plusieurs tokens à l'avance, puis le grand modèle cible les vérifie en une seule passe avant parallèle, acceptant ceux qui correspondent à ce qu'il aurait généré et rejetant le reste. L'utilisateur obtient exactement la même sortie que le décodage classique, mais 2 à 4 fois plus vite.
Le décodage spéculatif est une optimisation d'inférence dans laquelle un petit modèle "brouillon" rapide prédit plusieurs tokens à l'avance, puis le grand modèle cible les vérifie en une seule passe avant parallèle, acceptant ceux qui correspondent à ce qu'il aurait généré et rejetant le reste. L'utilisateur obtient exactement la même sortie que le décodage classique, mais 2 à 4 fois plus vite.
Pourquoi c'est important
La génération des LLM est limitée par des dépendances séquentielles : chaque token doit attendre le précédent. Les grands modèles ne sont pas bridés par la puissance de calcul brute mais par la bande passante mémoire, le déplacement de leurs poids gigantesques vers les unités de calcul du GPU une fois par token. Le décodage spéculatif brise la chaîne séquentielle en regroupant plusieurs tokens spéculatifs en une seule passe avant, réduisant considérablement le nombre d'appels coûteux au grand modèle. Google l'a publié pour la première fois en 2022 ; entre 2024 et 2025, tous les grands moteurs d'inférence (vLLM, TensorRT-LLM, llama.cpp, together.ai) livrent le décodage spéculatif comme optimisation standard, réduisant les coûts de service de 30 à 70 % pour une qualité de sortie identique.
Comment ça fonctionne
1. Le modèle brouillon propose : un petit modèle bon marché (par exemple, un jumeau de 1 milliard de paramètres de la cible à 70 milliards) génère les k tokens suivants de façon autorégressive. C'est rapide car les poids du modèle brouillon sont petits.
2. Le modèle cible vérifie : le modèle cible exécute une seule passe avant sur les k tokens brouillons en parallèle, calculant ce que lui aurait généré à chaque position.
3. Accepter ou rejeter : en partant du premier token brouillon, le modèle cible l'accepte si son propre meilleur choix (ou un échantillon ajusté en probabilité) concorde, et continue jusqu'à ce qu'il soit en désaccord.
4. Corriger et poursuivre : au premier désaccord, le token de la cible remplace celui du brouillon. Le processus reprend à partir de là.
5. Effet net : si le brouillon a raison 70 % du temps en moyenne, le modèle cible génère environ 3 fois plus de tokens par passe avant, réduisant la latence d'autant.
Pourquoi c'est sans perte
Correctement réalisé, le décodage spéculatif produit exactement la même distribution de sortie que le décodage classique. Le calcul fonctionne parce que le modèle cible agit comme vérificateur : tout token proposé par le brouillon doit passer le test d'acceptation de la cible, de sorte que la séquence finale est identique à celle que la cible aurait générée seule. Il n'y a aucun compromis sur la qualité, seulement un gain de vitesse.
Variantes
Décodage spéculatif classique (Google 2022) : un modèle brouillon, une cible. La formulation d'origine.
Medusa : ajoute plusieurs "têtes" au modèle cible lui-même qui prédisent plusieurs tokens à l'avance, éliminant le besoin d'un modèle brouillon séparé. Déploiement plus simple.
EAGLE : une variante plus précise qui utilise les représentations internes du modèle cible pour le brouillon, atteignant des taux d'acceptation plus élevés que les brouillons externes.
Décodage spéculatif en arbre : ébaucher plusieurs arbres de tokens candidats en parallèle. Probabilité d'acceptation plus élevée, davantage de calcul de vérification.
Auto-spéculatif : sauter des couches du modèle cible pour former un "brouillon" bon marché à partir des mêmes poids.
Quand ça aide le plus
Inférence par lot d'un : un chat interactif mono-utilisateur est limité par la mémoire. Le décodage spéculatif brille ici.
Sorties longues : plus le modèle génère de tokens, plus les économies cumulées s'additionnent.
Structure répétitive : lorsque la sortie suit des schémas prévisibles (code, JSON), les taux d'acceptation du brouillon sont très élevés.
Utilisation de matériel sous-exploité : sur les GPU qui resteraient autrement inactifs en attendant la mémoire, la spéculation comble l'écart de calcul.
Quand ça aide moins
Service par gros lots : les charges de travail à fort débit sont déjà limitées par le calcul, pas par la mémoire. La spéculation ajoute du surcoût sans beaucoup d'économies.
Sorties très créatives / aléatoires : de faibles taux d'acceptation du brouillon limitent l'accélération.
Modèles minuscules : un brouillon de 1 milliard sur une cible de 3 milliards n'économise pas grand-chose car la cible est déjà bon marché.
Prompts courts avec réponses courtes : le surcoût de mise en place de la spéculation domine le gain.
Compromis
Modèle supplémentaire en mémoire : vous servez désormais à la fois la cible et le brouillon. L'empreinte mémoire augmente, sauf en auto-spéculatif.
Complexité de mise en œuvre : gérer la boucle de vérification, l'échantillonnage de rejet et le rollback du cache KV n'est pas trivial. Utilisez une bibliothèque.
Sensibilité au taux d'acceptation : un brouillon mal apparié peut en fait ralentir les choses si les rejets dominent.
Démarrage à froid : les premiers tokens ne bénéficient pas de la spéculation le temps que le brouillon monte en régime.
Erreurs courantes
Utiliser un modèle brouillon d'une autre famille : un brouillon Llama pour une cible Mistral est rarement accepté. Le brouillon doit être aligné sur la cible.
Un brouillon trop grand : un brouillon de 7 milliards sous une cible de 70 milliards a un excellent taux d'acceptation mais coûte trop cher à exécuter. Le brouillon devrait représenter 5 à 20 % de la taille de la cible.
Ignorer le rollback du cache KV : les tokens rejetés doivent annuler le cache KV de la cible. L'oublier corrompt l'état.
L'appliquer à des modèles déjà rapides : les modèles de niveau Haiku/Flash sont légers en mémoire. La spéculation économise moins.
Ne pas mesurer de bout en bout : évaluez tout le chemin de la requête. Les gains naïfs en tokens par seconde disparaissent parfois sous charge ou lorsque la latence réseau domine.
Sources :