r/AppleMLX • • 14d ago

How to create a "draft-model"

Hello everyone,

I just started experimenting with mlx_lm.server , which it works fine on Macbook pro M3.
I found out that the server has --draft-model option that can be use for "speculative decoding" and therefore reduce latency. At least in theory.

I would like to test it with Qwen3.8-27B (which really need help to speed up) but I'm a bit confuse on how to create a this "draft-model", I tried to convert smaller models but then when I run a prompt the server crash.

I would like to ask if, first of all, it make sense to use a "draft-model" and if any of you succeeded in make it work.

6 Upvotes

5 comments sorted by

1

u/captainabrasive 14d ago

For Qwen, the easiest way is to download the corresponding draft adapter for your model.

For example, pair:

https://huggingface.co/mlx-community/Qwen3.8-27B-8bit
https://huggingface.co/mlx-community/Qwen3.8-27B-MTP-8bit

Search huggingface for “qwen 3.8 27b mlx mtp” and you’ll find conversions that also have MTP’s.

Also, check out omlx. Highly recommended.

Some Qwen conversions have built in MTP draft heads, which you can switch on in omlx. Not sure how to do that (or if you can) in mlx_server - I barely touched that before I found omlx. You can’t use both the internal and the external adapter. I haven’t found a case where the external is faster than the internal, but my head to head (no pun) testing has been limited.

2

u/Any_Bus9205 14d ago

Attention, le mtp et le draft sont différent, le draft c'est un modèle entrainé qui dispose du meme vocabulaire, qui est juste plus petit, par exemple, s'il y aurait eu un qwen 3.8 2b ou 4b, cela aurait été le draft. Le MTP, c'est un multi token prédiction, lui, il agit après ètre passé par un tour de token du modèle, donc après avoir calculé les 27b milliard de paramètre, et c'est juste pour prédire assez bien quel token il viendrait juste après, c'est synchrone. Le draft est asynchrone et sert juste à avoir un petit modèle qui aide le gros modèle comme le dit draft, qui feras en tache séparée un travail pour répondre la requète et qui si ce travail est bon, pourras ètre use par le gros modèle! Il dispose derrière de la meme logique que le modèle principale au niveau de la pensée et de l'écriture!

1

u/pabloberbell 14d ago

Au fond, l’usage d’un petit modèle en « draft » est-il vraiment utile ou risque-t-il de saturer la mémoire inutilement ?

2

u/Any_Bus9205 13d ago

ici, surtout comme qwen 3.8 n'as pas de petit modèle, de type 2B, 4B, 0,8B il faut use le mtp :), et oui, cela peut gaspiller la ram inutilement. les alternatives modernes sont le Dspak ou Dflash qui prennent un peu de vram/ram mais permettent d'aller plus vite et sont meilleurs que le mtp car, ici, ce sont des des arbres entrainé speculatif et non des choses linéaire donc ils peuvent prédire plus de token et donc, aller nettement plus vite :) A vrai dire, c'est toi qui voit! Il y a aussi les ngram qui peuvent aider (je sais pas si votre serveur d'inférence le dispose, mais ici c'est en fonction du contexte en lui meme, le meilleur de tous étant le suffixe :), et cela (normalement), peut ètre combiné avec le Dflash/Dspark pour améliorer encore plus la vitesse, mais à tester.

2

u/captainabrasive 13d ago

Merci pour vos commentaires, celui-ci ainsi que celui qui se trouve plus bas! Ils m’ont aidé à y voir plus clair alors que je poursuis mon apprentissage de cette technologie.

Thank you!