Qwen3.8-27B bf16 + MTP head (MLX)
mlx-community/Qwen3.8-27B-bf16 plus the model's native multi-token-prediction head,
so MLX runtimes with native MTP speculative decoding (oMLX mtp_enabled, mlx-lm PR 990 lineage)
decode ~2.5–3× faster. Weights are otherwise byte-identical to the mlx-community conversion.
| decode, M5 Max 128 GB, single stream | |
|---|---|
| mlx-community bf16 (no head) | plain autoregressive |
| this repo, oMLX mtp_enabled | 25.9 (9.3 without the head) tok/s |
Full A/B and method: MTP.md · code: bluehawana/Qwen3.827B-SGLang-mpbm5max — Track D.
What was added
model-mtp.safetensors — the 15 language_model.mtp.* tensors (bf16), taken from
EigenLabs/Qwen3.8-27B-MTP-bf16
(bit-identical to Qwen/Qwen3.8-27B's own head; norms already in MLX +1 convention),
registered in model.safetensors.index.json; text_config.mtp_num_hidden_layers = 1.
The mlx-community conversions declare the head in config.json but strip its weights, which
silently disables MTP.
Use with oMLX
- Download into your oMLX model dir (or HF cache).
- Admin UI → model settings → Lightning MTP on (API:
PUT /admin/api/models/<id>/settings {"mtp_enabled": true}), load. The log showsSpeculative backend selectedand per-requestMTP[...] accept=…lines. - Optional for Qwen3.8: set
chat_template_kwargs.reasoning_efforttomedium/low— the template defaults toxhigh.
Draft acceptance on coding/agent traffic: 75–99 %, ~3 tokens per verify pass (depth 3). MTP is single-stream; concurrent requests fall back to plain batched decode.
Size: ~55.4 GB. Credits: Qwen team (model, Apache-2.0), mlx-community (quantization), EigenLabs / Layr-Labs MTP challenge (head export), oMLX (runtime).