freedzhost.cloud

Le décodage spéculatif (MTP) : jusqu'à deux fois plus vite sur la même carte

Niveau IntermédiaireTemps estimé 1 hÀ lire avant Votre premier modèle local avec llama.cppUn mot inconnu ? Lexique

Un modèle écrit un jeton à la fois, et chaque jeton coûte une passe complète dans le modèle. Le décodage spéculatif devine plusieurs jetons à l'avance avec quelque chose de bon marché, puis les vérifie tous en une seule passe : chaque bonne devinette est un jeton gratuit. Certains modèles récents embarquent leur propre tête de devinette (multi-token prediction, MTP) dans le fichier du modèle.

Comment ces chiffres ont été obtenus. Mesurés sur nos propres machines (voir le protocole), en général en un seul passage, vitesses relevées par le serveur lui-même ; nous ne publions pas les journaux bruts. Ce sont des ordres de grandeur sur ce matériel, pas des garanties sur le vôtre. Les chiffres extérieurs sont accompagnés de leur source.

jetons par seconde (prompt de code)45,3sans76n_max 1115n_max 3134n_max 5134n_max 8123n_max 10
Jetons par seconde sur notre installation selon le nombre de jetons proposés à l'avance. Le gain s'arrête à 5 et baisse ensuite : la meilleure valeur dépend de votre matériel, mesurez la vôtre au lieu de copier celle d'un autre.

Un peu d'histoire

Le décodage spéculatif a été publié en 2022 et 2023 par des équipes de Google et de DeepMind : un petit modèle rapide devine plusieurs jetons d'avance, et le gros modèle les vérifie tous en un seul passage, en gardant ceux avec lesquels il est d'accord. Le résultat est exactement ce que le gros modèle aurait écrit, seulement plus vite. La prédiction multi-jetons (MTP) va plus loin : le modèle lui-même est entraîné à proposer les quelques jetons suivants.

1. La bonne façon de l'activer

Avec un build de llama.cpp qui le prend en charge, et un fichier de modèle qui contient des tenseurs MTP :

--spec-type draft-mtp --spec-draft-n-max 5

Passer la tête MTP comme un modèle de brouillon ordinaire (--model-draft seul) faisait planter notre serveur, et nous avons d'abord conclu que le MTP ne marchait pas. Et un build plus ancien de llama.cpp charge un tel fichier et ignore en silence la partie MTP : sur un vieux build, l'absence de gain ne prouve rien.

2. Mesurer votre propre n_max

--spec-draft-n-max, c'est le nombre de jetons devinés à l'avance. Trop peu gâche l'idée ; trop gaspille des passes sur de mauvaises devinettes. Sur notre installation, le gain montait jusqu'à 5 et baissait après 8. Les tableaux publiés, mesurés sur des GPU de centre de données, s'arrêtent bien plus tôt : une installation plus lente profite de la spéculation plus longtemps. Lancez le même prompt trois fois par valeur et gardez la vôtre.

3. Attendez-vous à moins en vrai que sur un banc

Sur un banc de code, réflexion coupée, nous avons mesuré presque trois fois la vitesse et 84 % des devinettes acceptées. En production, réflexion active, ça s'est stabilisé entre 84 et 98 jetons par seconde : environ deux fois la vitesse, avec la moitié des devinettes acceptées. La réflexion est moins prévisible que du code. Annoncez le vrai chiffre, pas celui du banc.

Pièges que nous avons payés

Ça coûte de la VRAM : environ 1,7 Go sur notre carte. Vérifiez que le modèle garde de la place pour ses tampons de calcul (voir la grille GPU).

Sur certaines requêtes, le chemin spéculatif faisait planter notre serveur. Ce qui ressemblait à plusieurs pannes sans lien (des agents qui mouraient après une réponse, un tableau de bord qui montrait le moteur tombé, des bascules qui « échouaient » après avoir réussi) était ce seul plantage. Si vos conteneurs ne redémarrent pas seuls, exprès, il faut que quelque chose s'en aperçoive et les recharge (voir router et réparer avec des garde-fous).

Sources

Utile ? Dites-nous ce qu'il faut mesurer ensuite.