Aller au contenu principal
Les basesIntermédiaire6 min de lecture

Décodage spéculatif et MTP : la vitesse sans compromis

i
iaLocale Team
•
Décodage spéculatif et MTP : la vitesse sans compromis

L'IA locale a un goulot d'étranglement bien connu : le décodage autorégressif. Chaque jeton de la réponse passe par un passage complet du modèle, et même sur du matériel sérieux cela fait des dizaines de jetons par seconde — suffisant pour lire, souvent pas assez pour travailler. Il existe pourtant une technique qui contourne cette limite à presque coût nul : le décodage spéculatif. Cet article explique comment ça marche, pourquoi c'est « lossless », ce que signifie l'acronyme MTP présent dans les modèles Qwen, et comment l'activer aujourd'hui avec llama.cpp, vLLM et SGLang.

Le schéma draft-verify

L'idée originale vient du paper Fast Inference from Transformers via Speculative Decoding de Leviathan, Kalman et Matias (arXiv:2211.17192) : les tâches de langage difficiles contiennent souvent des sous-tâches plus simples, qu'un petit modèle peut approcher très bien. Le mécanisme est une boucle en deux temps :

  1. Draft — un petit modèle (ou une tête légère du même modèle) propose K jetons consécutifs en séquence rapide.
  2. Verify — le grand modèle exécute un seul forward pass sur ces K jetons et les évalue en parallèle. Si les j premiers jetons sont corrects, ils sont acceptés ; le premier jeton refusé est remplacé par la réponse vraie du grand modèle.

Le point crucial, c'est l'échantillonnage : avec la méthode correcte (speculative sampling), la distribution finale des jetons est identique à celle du grand modèle utilisé seul. Aucun fine-tuning, aucune approximation sur la qualité : si un jeton proposé est accepté, c'est exactement comme si le grand modèle l'avait produit.

Pourquoi est-ce rentable ? Le coût du draft est négligeable devant le forward du grand modèle, et ce seul forward vérifie jusqu'à K jetons au lieu d'un. Si le petit modèle a souvent raison — et c'est très fréquent sur du texte réel — la vitesse est multipliée par un facteur proche de la longueur moyenne des blocs acceptés.

MTP : les têtes multiples dans les checkpoints Qwen

Dans les derniers checkpoints de la famille Qwen, comme Qwen3.8-27B, le modèle embarque déjà une composante de Multi-Token Prediction : pendant l'entraînement, le modèle apprend à prédire non seulement le jeton suivant mais aussi les deux ou trois suivants, via des têtes MTP entraînées sur plusieurs pas. La documentation officielle du modèle le confirme : « MTP (Multi-Token Prediction) : trained with multiple steps » (model card Qwen3.8).

En pratique, il n'est pas besoin d'un second modèle : les têtes MTP font office de brouillon dans le même checkpoint. Dans llama.cpp, tout s'active avec un flag, sans fichier supplémentaire :

llama-server -m Qwen3.8-27B.Q4_K_M.gguf --spec-type draft-mtp

Le flag --spec-type draft-mtp est documenté dans la documentation officielle de llama.cpp comme « Multi Token Prediction (MTP) heads from the main model ». Pour les modèles qui ont un draft séparé, le même document liste les autres types (draft, draft-eagle3, ngram-simple et d'autres).

EAGLE : un draft qui lit les pensées du modèle

La famille EAGLE — issue du paper EAGLE: Speculative Sampling Requires Rethinking Feature Uncertainty (arXiv:2401.15077) — déplace le drafting à un niveau plus informatif : au lieu de faire prédire les jetons à un modèle séparé qui ne lit que le texte, un petit draft model lit les états cachés du grand modèle et prédit les jetons suivants à partir de là. EAGLE est lossless comme le sampling spéculatif classique : aucun fine-tuning du modèle cible et distribution de sortie inchangée.

Mistral a adopté cette voie pour son flagship : avec Mistral Medium 3.5, dense 128B avec une fenêtre de contexte de 256k, il publie une tête de draft EAGLE dédiée, mistralai/Mistral-Medium-3.5-128B-EAGLE (model card). Le draft est un corps de 2 couches quantisé en FP8, environ 4 Go, pensé pour du serving à faible concurrence où la latence compte.

Les réglages de départ recommandés sont (num_steps, eagle_topk, num_draft_tokens) = (3, 1, 4), et il faut retenir le principe : EAGLE brille à faible concurrence ; en charge massive, le débit est dominé par le passage du modèle cible et la contribution du draft diminue.

Combien de gain, vraiment

Les chiffres dépendent du matériel, du modèle et du type de texte, mais les ordres de grandeur sont stables :

  • SGLang rapporte pour Mistral Medium 3.5 sur 4× H200 un single-stream de 69,07 jetons/s sans EAGLE et 97,10 jetons/s avec EAGLE, avec une longueur d'acceptation de 1,72 jeton par pas (cookbook SGLang) : un gain de ~40 % de latence de streaming pour un utilisateur unique.
  • Les drafts EAGLE-3 sur d'autres modèles atteignent typiquement 3 à 4 jetons acceptés par pas, avec des speedup vers les 3×.
  • Sur laptop et GPU grand public, les gains en pourcentage tendent à être plus élevés : le draft coûte peu en RAM et le verify parallélisé amortit bien le coût du prefill.

La règle pratique : si vous utilisez l'IA locale pour des réponses longues (rédaction, code, chat), le décodage spéculatif se paie tout seul ; si vous ne générez que quelques jetons à la fois, le prefill domine et le gain s'amenuise.

Comment l'activer : trois scénarios concrets

1. Modèle avec têtes MTP (Qwen3.8, llama.cpp). Le flag suffit, comme vu plus haut. Aucun fichier additionnel, aucun téléchargement : les têtes MTP voyagent dans le GGUF du modèle.

2. Draft EAGLE officiel (Mistral Medium 3.5, vLLM). Le checkpoint EAGLE de Mistral est servi nativement par vLLM :

vllm serve mistralai/Mistral-Medium-3.5-128B-EAGLE

avec le nombre de jetons spéculatifs = 3 et la méthode eagle, comme documenté dans la model card. Même support day-zero dans SGLang, avec des tags docker dédiés.

3. Serving haut débit (SGLang). SGLang est un moteur de serving open source (licence Apache-2.0) qui a fait du décodage spéculatif une fonctionnalité de premier plan : MTP, EAGLE, draft model, ngram — tous derrière le même --speculative-algorithm. C'est le choix naturel quand on sert un modèle à plusieurs utilisateurs, car il combine continuous batching, RadixAttention et décodage spéculatif dans une seule stack.

Quand ça vaut le coup, et quand non

Le décodage spéculatif n'est pas de la magie : le gain est proportionnel à la longueur des blocs acceptés, qui dépend de la prévisibilité du texte. Les réponses courtes ou très créatives acceptent moins ; le texte structuré, le code et les réponses à gabarit acceptent plus. Pour l'usage quotidien sur matériel grand public — le terrain où la plupart de ceux qui font tourner l'IA locale sur leur propre hardware travaillent — c'est l'une des améliorations à coût zéro les plus grandes disponibles : on l'active avec un flag, la qualité ne change pas, et le poids de la latence perçue s'allège. Le modèle reste le vôtre, les jetons restent les vôtres, et la vitesse n'est plus un compromis.

Références

Article généré par IA

#decodifica-speculativa#eagle#mtp#performance#velocita
Partager :

Vous avez aimé cet article ?

Abonnez-vous à la newsletter pour recevoir de nouveaux tutoriels et guides.

Après l'inscription, vous recevez un e-mail de confirmation (double opt-in). Sans confirmation, nous n'envoyons rien. Pas de spam, promis.

Articles Correlés

RAG : posez des questions à vos documents
Les bases5 min de lecture

RAG : posez des questions à vos documents

Le RAG (Retrieval Augmented Generation) est le moyen le plus simple de faire répondre un modèle local à des questions sur vos documents : encodage sémantique, base vectorielle et boucle de récupération, avec un exemple concret.

iaLocale Team - 24 septembre 2026Lire la suite