Aller au contenu

La prédiction multi-jetons

Une ligne dans config.json, 26 Go de poids, et une confirmation obtenue par un simple calcul de taille de dépôt.


La ligne

"mtp_num_hidden_layers": 1,
"mtp_use_dedicated_embeddings": false

La carte de modèle mentionne une « prédiction multi-jetons (MTP) sur plusieurs pas » dans la phase d'instruction. Elle n'en dit rien de plus.


Le problème que MTP résout

La génération autorégressive est intrinsèquement séquentielle :

passe avant complète  →  1 jeton
passe avant complète  →  1 jeton
passe avant complète  →  1 jeton

Chaque passe demande de lire 95 milliards de paramètres depuis la mémoire. Pour produire un seul jeton. C'est un gâchis de bande passante : le GPU passe son temps à charger des poids, pas à calculer.

La génération spéculative contourne cela :

1. un modèle « brouillon », rapide, propose 4 jetons d'un coup
2. le grand modèle vérifie les 4 en UNE seule passe avant
3. il accepte le plus long préfixe correct, rejette le reste

Si trois jetons sur quatre sont acceptés en moyenne, on triple le débit sans changer une seule sortie — la vérification garantit que le résultat est identique à ce qu'aurait produit le grand modèle seul.


Ce que MTP apporte

Un modèle brouillon séparé pose deux problèmes : il faut l'entraîner, et il faut le charger en plus.

MTP intègre le brouillon dans le modèle lui-même. Une couche supplémentaire, branchée sur les représentations internes de la dernière couche, prédit le jeton \(t+2\) pendant que la tête principale prédit \(t+1\).

                       ┌──→ tête principale  ──→  jeton t+1
   couche 92  ──→ ─────┤
                       └──→ couche MTP       ──→  jeton t+2

Trois avantages sur un modèle brouillon externe :

Brouillon externe MTP intégré
Entraînement séparé requis non
Poids supplémentaires à charger oui oui, mais partagés avec le tronc
Cohérence avec le grand modèle approximative élevée — mêmes représentations
Taux d'acceptation typique modéré plus élevé

Le second bénéfice est moins connu : MTP améliore aussi l'entraînement. Forcer le modèle à prédire deux jetons en avant l'oblige à planifier au-delà du mot immédiat, ce qui améliore la qualité du tronc — pas seulement la vitesse.


Le coût

mtp_num_hidden_layers: 1 : une seule couche. Sa structure n'est pas décrite, mais si elle reproduit le motif du modèle — un bloc d'attention plus un bloc MoE — son coût est :

\[ 25{,}82\ \text{G (MoE)} + 0{,}42\ \text{G (attention)} = 26{,}24\ \text{G} \]

mtp_use_dedicated_embeddings: false indique par ailleurs que la couche réutilise la table d'embeddings principale — pas de 2 G supplémentaires.


La confirmation par la taille du dépôt

Voici le résultat le plus satisfaisant de ce rapport, et il tient en trois lignes.

Le décompte du corps du modèle donne :

\[ 2\,419\,802\,390\,528 \text{ paramètres} \times 2\ \text{octets} = 4{,}84\ \text{To} \]

Le dépôt Hugging Face affiche 4,89 To. Écart : 50 Go, soit environ 25 milliards de paramètres — inexpliqués.

Avec la couche MTP :

\[ (2\,419{,}80 + 26{,}24)\ \text{G} \times 2\ \text{octets} = 4{,}892\ \text{To} \]

Écart avec l'observation : 0,04 %.

Ce que cela établit

La couche MTP est bel et bien présente dans les poids publiés, et sa structure est cohérente avec l'hypothèse « un bloc d'attention + un bloc MoE ».

Ni la carte de modèle, ni le communiqué ne le disent. C'est une déduction de ce rapport, mais elle ne repose sur aucune supposition invérifiable : seulement sur l'arithmétique et deux nombres observés.

Reproduction : script joint, section 5.

La limite du raisonnement

L'accord à 0,04 % est fort mais pas une preuve formelle. Une couche MTP de structure différente totalisant approximativement 26 G donnerait le même résultat.

Ce qui est établi : il y a environ 26 G de paramètres au-delà du corps du modèle, et mtp_num_hidden_layers: 1 en donne l'explication la plus simple.


Un détail pratique

La plupart des moteurs d'inférence ignorent la couche MTP si elle n'est pas explicitement activée. Vous chargez alors 26 Go de poids qui ne servent à rien.

Sur un déploiement à 4,89 To, 26 Go représentent 0,5 % — négligeable. Mais si vous cherchez le débit, l'activation de la génération spéculative dans vLLM ou SGLang est un gain gratuit, déjà payé au téléchargement.


À retenir

Ce chapitre en cinq points

  1. La génération spéculative propose plusieurs jetons d'un coup et les vérifie en une passe, ce qui multiplie le débit sans changer les sorties.
  2. MTP intègre le modèle brouillon au modèle lui-même, ce qui améliore le taux d'acceptation.
  3. MTP améliore aussi la qualité de l'entraînement, en forçant une planification au-delà du jeton immédiat.
  4. La couche pèse environ 26,2 G de paramètres et réutilise la table d'embeddings.
  5. Sa présence dans les poids est établie par l'accord à 0,04 % entre le calcul et les 4,89 To du dépôt.

Chapitre suivant : Contexte 262 K et 1 M — l'arithmétique qui justifie toute l'architecture.