Avancé 9 minLM Studio

MTP dans LM Studio : activer la Multi-Token Prediction

Le MTP (Multi-Token Prediction) est l'une des rares techniques d'inférence qui donne un vrai gain de tokens/sec sur LM Studio sans dégrader la qualité. Popularisée par DeepSeek V3, elle s'invite désormais dans le runtime llama.cpp utilisé par LM Studio. Ce guide explique ce qu'est le MTP, sur quels modèles il marche, comment l'activer dans LM Studio et quel gain attendre — sans promettre la lune.

Par Mohamed Meguedmi·Màj 2026-06-03·Testé sur Windows, macOS, Linux

#Pourquoi le MTP accélère l'inférence

L'inférence d'un LLM est goulot-d'étranglement par la mémoire : à chaque token généré, il faut relire la totalité des poids du modèle depuis la VRAM. Sur un 32B en Q4, c'est ~19 Go qui transitent à chaque pas. Même une RTX 4090 plafonne autour de 1 To/s de bande passante, ce qui plafonne mécaniquement le débit à quelques dizaines de tokens par seconde.

Le MTP contourne ce mur d'une manière simple : générer plusieurs tokens par passe forward, plutôt qu'un seul. Si on peut produire 2 ou 3 tokens valides pour un seul aller-retour mémoire, le débit grimpe d'autant — sans avoir à acheter une carte plus rapide. C'est ce qui distingue le MTP des autres « optimisations » qui se contentent de mieux utiliser le compute (Flash Attention, prefix caching) : ici, on s'attaque directement à la contrainte dominante.

i
L'enjeu en une phrase
Le MTP ne rend pas le modèle plus rapide à charger, plus petit ou meilleur. Il fait juste plus de travail utile par accès à la VRAM. Sur un 32B local, c'est l'écart entre 25 et 45 tok/s. C'est énorme.

#Ce que fait vraiment le MTP

Concrètement, un modèle entraîné avec MTP n'a pas qu'une seule tête de prédiction. Il en a deux, trois ou quatre, en cascade : la première prédit le token N+1, la deuxième tente le token N+2, etc. Pendant l'entraînement, ces têtes auxiliaires apprennent à anticiper les tokens suivants à partir des états cachés intermédiaires. Une fois entraîné, le modèle peut servir ces têtes en inférence pour produire plusieurs candidats d'un coup.

À la génération, deux schémas coexistent dans les runtimes actuels :

MTP en speculative decoding
Les têtes auxiliaires produisent un brouillon de 2-4 tokens, puis le modèle principal vérifie en un seul forward s'il les valide. Tout token rejeté est régénéré. C'est l'implémentation par défaut dans llama.cpp pour DeepSeek V3.
MTP comme draft model interne
Variante où les têtes secondaires servent uniquement de petit modèle de brouillon, et le runtime traite ça comme un draft model standard, mais hébergé dans le même fichier GGUF. Plus simple à servir, mais gain plus modeste.
Pas magique, mais costaud
Le taux d'acceptation des tokens proposés est le facteur clé. Sur du texte structuré (code, JSON, balisage) il dépasse 80 % et le gain frôle 2×. Sur du texte très créatif ou très imprévisible, il tombe parfois sous 50 % et le gain se réduit à 1.2-1.3×.

#Quels modèles supportent réellement le MTP

Le MTP n'est pas un réglage qu'on bascule sur n'importe quel modèle : il faut que le modèle ait été entraîné avec les têtes MTP, et que les poids correspondants soient présents dans le fichier GGUF. À l'heure actuelle, la liste utile pour un usage local LM Studio est courte :

DeepSeek V3 (base et chat)
Le pionnier. Architecture MoE 671B avec 4 têtes MTP. En local, on vise les variantes quantifiées agressivement (Q2_K_XL, IQ3_XS) ou les distillations.
DeepSeek V3.1 / V3.2 / V4 Flash
Toute la lignée DeepSeek a hérité du MTP. Les versions Flash (≈300B MoE) sont les seules qui rentrent vraiment sur un Mac Studio Ultra ou un build multi-GPU 80-100 Go VRAM.
Qwen3 MoE (sélection de variantes)
Plusieurs variantes Qwen3 MoE ont publié des poids GGUF avec têtes MTP. Vérifiez la fiche du modèle Hugging Face : la présence d'un champ « mtp_layers » ou d'un suffixe -mtp dans le nom est un bon indicateur.
Modèles dense classiques (Llama 3, Mistral, Gemma)
Pas de MTP natif. LM Studio ne fera rien de spécial. Pour ces modèles, le seul équivalent disponible est le speculative decoding classique avec un draft model séparé.
!
Vérifier le GGUF
Un fichier GGUF estampillé « DeepSeek » ne contient pas forcément les têtes MTP : certaines conversions communautaires les ont retirées pour gagner quelques centaines de Mo. Cherchez la mention explicite « MTP » ou « multi-token » dans la description du repo, ou regardez la taille — un modèle avec MTP est 5-10 % plus gros à quantization égale.

#Prérequis côté LM Studio

LM Studio récent
Version 0.3.10 ou supérieure. Les versions plus anciennes utilisent un runtime llama.cpp antérieur au support MTP et l'option n'apparaît tout simplement pas dans l'UI.
Runtime llama.cpp à jour
Le support MTP dans llama.cpp est arrivé fin 2024 et a été stabilisé courant 2025. LM Studio embarque plusieurs versions de runtime ; il faut explicitement sélectionner la plus récente dans l'onglet Runtimes.
VRAM ou mémoire unifiée suffisante
Le MTP ajoute peu d'overhead mémoire (les têtes auxiliaires sont petites), mais il faut quand même charger le modèle entier. Comptez la VRAM standard pour la taille visée, plus 5-10 % pour le KV-cache étendu utilisé pendant la vérification.
GPU correctement détecté
Le gain MTP n'apparaît que si l'inférence est GPU-bound. En mode CPU pur, le bénéfice existe mais est largement marginal et parfois négatif sur les petits modèles.

#1. Activer le runtime à jour

Avant de toucher au modèle, on vérifie que LM Studio utilise une version de llama.cpp qui connaît le MTP. C'est l'étape la plus oubliée.

  1. 01
    Ouvrir les paramètres Runtimes
    Dans LM Studio, allez dans l'icône engrenage (Settings) puis dans la section « Runtimes » (ou « LM Runtimes » selon les versions). Vous y voyez les runtimes installés : CUDA, Metal, Vulkan, CPU.
  2. 02
    Installer la dernière version
    Cliquez sur « Check for updates » à côté du runtime de votre plateforme. LM Studio télécharge une version récente du llama.cpp embarqué. Le support MTP est présent dans toutes les builds 2025+.
  3. 03
    Vérifier la version active
    Dans la même section, la version actuellement utilisée est affichée (par exemple « llama.cpp v0.3.x — CUDA »). Confirmez qu'elle est postérieure à novembre 2024. Si plusieurs runtimes coexistent, sélectionnez le plus récent comme défaut.
i
Le runtime, pas l'app
LM Studio et son runtime llama.cpp évoluent indépendamment. Une vieille version de LM Studio peut très bien tourner avec un runtime récent : ce qui compte, c'est la version du runtime embarqué pour le MTP.

#2. Charger un modèle avec tête MTP

Téléchargez un modèle compatible MTP via l'onglet de recherche intégré. Tapez « DeepSeek V3 » ou « Qwen3 MoE » et filtrez sur les builds GGUF récentes qui mentionnent MTP. À défaut, passez par Hugging Face en direct et glissez le fichier GGUF dans le dossier des modèles de LM Studio.

Chemin du dossier modèles LM Studio
# Linux / macOS
~/.lmstudio/models/

# Windows
%USERPROFILE%\.lmstudio\models\

Une fois le modèle visible dans la bibliothèque, chargez-le normalement depuis l'onglet Chat ou l'onglet Local Server. Avant de cliquer sur « Load », ouvrez le panneau « Advanced Configuration » : c'est là que les options MTP apparaissent quand le modèle les déclare.

Le bon signe
Si l'option MTP ne s'affiche pas dans l'Advanced Configuration, c'est presque toujours que les têtes MTP n'ont pas été incluses dans le GGUF. Téléchargez une autre variante avant de chercher midi à quatorze heures.

#3. Régler les paramètres MTP

L'Advanced Configuration expose en général trois paramètres liés au MTP. Les noms varient selon la version de LM Studio, mais le principe reste le même.

Enable MTP (ou Use MTP heads)
Interrupteur principal. À activer. Désactivé, le modèle ignore ses têtes auxiliaires et se comporte comme un modèle classique.
MTP draft tokens (n_draft)
Nombre de tokens proposés par passe. Valeur typique : 3 ou 4. Au-delà, le taux d'acceptation chute et le gain s'évapore. En dessous (1-2), le coût de vérification devient comparable au gain.
MTP acceptance threshold
Seuil de confiance pour accepter un token proposé. Par défaut souvent autour de 0.7. Plus haut = plus de sécurité mais moins de gain. Plus bas = plus rapide mais qualité de sortie qui peut dériver subtilement.
Exemple de config sauvegardée (model_config.json)
{
  "mtp": {
    "enabled": true,
    "n_draft": 3,
    "acceptance_threshold": 0.7
  },
  "gpu_layers": -1,
  "context_length": 8192
}
!
Ne baissez pas le seuil sans tester
Descendre acceptance_threshold à 0.5 fait gagner 10-15 % de tokens/sec mais introduit des micro-dérives de style sur les générations longues. Comparez vos sorties côte à côte avant de figer ce réglage.

#4. Mesurer le gain réel sur votre machine

Activer le MTP sans mesurer, c'est se priver de la moitié du bénéfice du guide. LM Studio affiche le débit en bas du chat (tok/s) après chaque génération. La méthode honnête :

  1. 01
    Préparer 3 prompts représentatifs
    Un prompt de code (très structuré, taux d'acceptation élevé attendu), un prompt FR factuel, un prompt créatif libre. Sauvegardez-les pour pouvoir les rejouer à l'identique.
  2. 02
    Désactiver MTP, mesurer la baseline
    Décharger le modèle, désactiver MTP, recharger. Lancer chaque prompt, noter le tok/s moyen sur 3 répétitions. Ne pas oublier d'ignorer le tout premier run (prefill non comparable).
  3. 03
    Activer MTP, mesurer
    Décharger, réactiver MTP, recharger avec exactement les mêmes paramètres (contexte, température, etc.). Refaire les mêmes prompts.
  4. 04
    Comparer
    Calculer le ratio par prompt. Un facteur 1.5-2× sur le code est attendu, 1.3-1.7× sur le FR factuel, 1.1-1.4× sur le créatif. En dessous de 1.2× partout, quelque chose ne va pas (runtime trop ancien, têtes MTP absentes, ou GPU saturé par autre chose).
DeepSeek V3 distillé 32B Q4, RTX 4090
Baseline ~25 tok/s, MTP activé ~42 tok/s sur un prompt de code Python. Sur de la prose française, ~30 tok/s.
DeepSeek V4 Flash sur Mac Studio M2 Ultra 192 Go
Baseline ~14 tok/s, MTP activé ~24 tok/s sur du code. Sur du texte libre, ~18 tok/s. Le gain est franc même sur Apple Silicon.
Qwen3 MoE 30B-A3B Q4, RTX 4070 Ti
Baseline ~38 tok/s, MTP activé ~55 tok/s sur du JSON. Sur du texte créatif, gain limité à ~46 tok/s.

#Réglages avancés et combinaisons

Le MTP se combine bien avec d'autres optimisations disponibles dans LM Studio. Quelques associations qui marchent :

MTP + Flash Attention
À activer en même temps. Flash Attention réduit le coût mémoire du KV-cache pendant la vérification des brouillons, ce qui aide quand n_draft est élevé.
MTP + Q4_K_M (vs Q8)
Le MTP préserve la qualité même sur Q4 agressif. Pas de raison de monter en Q8 « pour compenser » — gardez Q4_K_M et économisez la VRAM.
MTP + grand contexte
Le KV-cache pèse plus lourd avec MTP (la vérification stocke davantage d'états intermédiaires). Sur un 32B en 32k contexte, comptez 1-2 Go VRAM supplémentaires.
MTP + batch (Local Server)
Si vous servez plusieurs requêtes simultanées via le serveur OpenAI-compatible de LM Studio, le gain MTP se cumule au gain de batching. C'est là qu'on voit les plus gros écarts.
Profil par usage
Pour de l'assistance code (Continue.dev, Aider) branchée sur LM Studio, montez n_draft à 4 : le code est si prévisible que le taux d'acceptation reste élevé. Pour du chat généraliste, restez à 3. Pour de la fiction ou du brainstorming, descendez à 2 voire désactivez le MTP.

#Dépannage

L'option MTP n'apparaît pas
Soit le runtime est trop ancien (vérifiez la version dans Settings → Runtimes), soit le modèle GGUF ne contient pas les têtes MTP. Téléchargez une variante explicitement marquée MTP.
MTP activé, mais zéro gain mesuré
Vérifiez que le GPU est bien la cible (gpu_layers = -1 ou égal au total de couches). Sur CPU pur, le MTP coûte parfois plus qu'il ne rapporte. Vérifiez aussi qu'aucun autre process ne sature la VRAM.
Sortie qui dérive ou répétitions étranges
Acceptance threshold trop bas. Remontez-le à 0.75-0.8. Si le problème persiste, désactivez MTP : il existe des cas pathologiques sur des prompts très atypiques.
LM Studio crashe au chargement
Un GGUF mal converti avec têtes MTP corrompues peut planter le runtime. Essayez une autre quantization du même modèle, ou un fichier d'un autre publisher sur Hugging Face.
Gain visible sur le chat mais pas via l'API
Vérifiez que le Local Server utilise bien la même configuration que le chat — il existe une page de réglages séparée pour le serveur, où MTP doit être réactivé indépendamment.
i
Quand garder MTP désactivé
Sur du fine-tune custom où vous suspectez les têtes auxiliaires d'avoir mal appris, sur un modèle CPU-only de petite taille, ou en débuggage quand vous voulez la sortie la plus déterministe possible : désactiver le MTP est une décision raisonnable.

#Pour aller plus loin

Le MTP est un des leviers de performance qui marchent vraiment en local. Quelques pistes complémentaires pour pousser plus loin :

Démarrer avec LM Studio
Si vous arrivez ici sans avoir installé LM Studio, le guide de démarrage couvre les bases avant de toucher aux réglages avancés.
Transformer LM Studio en serveur API
Pour exposer un endpoint OpenAI-compatible et bénéficier du MTP sur tous vos clients (Continue.dev, Aider, scripts Python).
Plugins LM Studio : lesquels installer et comment
Au-delà du MTP, l'écosystème de plugins et le SDK lmstudio-js/python ouvrent d'autres marges de manœuvre.
Ce guide vous a aidé ?

Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.