Qwen3.8-27B Optimized MTP Heads (EXL3)
A per-tensor mixed-precision EXL3 quantization of the
Qwen3.8-27B MTP (multi-token
prediction) draft head, packaged as a sidecar that shadows the built-in
MTP weights of the base model. Each optimized checkpoint is smaller than the
same-size uniform quant while posting equal-or-better draft acceptance — because
bits are concentrated where the draft head is actually sensitive (the feature
projection fc) and spent far more cheaply where it is not (q, k, v,
gate).
This is not a standalone model. It is the draft head a speculative-decoding server runs alongside the target: the MTP head proposes tokens, the target verifies them, and decoding stays lossless (accepted output is identical to the target's own output). What this changes is speed and memory — a smaller, higher-acceptance draft head means more tokens accepted per verification step and less VRAM for the drafter.
What the sidecar does
The files in this repo contain only the mtp.* tensors — the MTP head: the
feature projection fc, one attention block (q/k/v/o), one SwiGLU MLP
(gate/up/down), and the 7 norm tensors. When placed alongside a base
model, exllamav3 loads the directory's safetensors in alphabetical order, and
tensors in a later file shadow earlier ones. A file named mtp-*.safetensors
sorts after the base model's model-*.safetensors, so this sidecar's
mtp.* tensors override the base model's built-in MTP head.
Tip — trim the base model: because the sidecar shadows the base model's own MTP weights, those original
mtp.*tensors are dead weight. You can ask your agent to strip the MTP weights from any base model you pair this sidecar with, reclaiming their full size with no change in behavior.
Compatible base models
The MTP head is defined by the shared Qwen3.8-27B base, so this sidecar works with any model built on that base, including:
- Qwen3.8-27B
- Swift
- ThinkingCap
- AREX-2
- abliterated variants
- any other Qwen3.8-27B derivative
Checkpoints
| File | Size | eff. bpw | |
|---|---|---|---|
mtp-3.1bpw.safetensors |
158.4 MiB | 3.13 | smallest |
mtp-3.7bpw.safetensors |
188.7 MiB | 3.73 | sweet spot |
mtp-4.4bpw.safetensors |
224.4 MiB | 4.43 | highest quality |
mtp-4bit.safetensors |
202.8 MiB | 4.01 | uniform reference |
mtp-5bit.safetensors |
253.4 MiB | 5.01 | uniform reference |
mtp-6bit.safetensors |
304.0 MiB | 6.01 | uniform reference |
Measured performance
Draft acceptance (accepted draft tokens / total draft tokens), 50 runs per workload, against the Qwen3.8-27B target. Four workloads: repetitive, prose, prose_thinking (reasoning), code_thinking (reasoning). geomean is the geometric mean across the four — a size-balanced overall figure that weights every workload equally.
| Checkpoint | Size | repetitive | prose | prose_thinking | code_thinking | geomean |
|---|---|---|---|---|---|---|
| mtp-3.1bpw | 158.4 MiB | 0.705 | 0.203 | 0.226 | 0.818 | 0.403 |
| mtp-3.7bpw | 188.7 MiB | 0.736 | 0.208 | 0.227 | 0.839 | 0.413 |
| mtp-4bit | 202.8 MiB | 0.711 | 0.206 | 0.220 | 0.821 | 0.403 |
| mtp-4.4bpw | 224.4 MiB | 0.745 | 0.212 | 0.233 | 0.829 | 0.418 |
| mtp-5bit | 253.4 MiB | 0.732 | 0.205 | 0.230 | 0.832 | 0.411 |
| mtp-6bit | 304.0 MiB | 0.747 | 0.206 | 0.231 | 0.838 | 0.415 |
Mean accept length (draft tokens accepted per verification round) — the direct throughput driver (higher = fewer verification steps per token):
| Checkpoint | Size | repetitive | prose | prose_thinking | code_thinking | geomean |
|---|---|---|---|---|---|---|
| mtp-3.1bpw | 158.4 MiB | 4.98 | 1.43 | 1.58 | 5.73 | 2.83 |
| mtp-3.7bpw | 188.7 MiB | 5.20 | 1.46 | 1.59 | 5.89 | 2.90 |
| mtp-4bit | 202.8 MiB | 5.03 | 1.45 | 1.54 | 5.76 | 2.84 |
| mtp-4.4bpw | 224.4 MiB | 5.27 | 1.49 | 1.64 | 5.82 | 2.94 |
| mtp-5bit | 253.4 MiB | 5.18 | 1.44 | 1.61 | 5.84 | 2.89 |
| mtp-6bit | 304.0 MiB | 5.29 | 1.45 | 1.62 | 5.88 | 2.92 |
The mixed-precision win
Every optimized checkpoint sits on the size–quality Pareto frontier and dominates a uniform quant that is the same size or larger:
- mtp-3.7bpw (188.7 MiB) beats mtp-4bit (202.8 MiB) on all four workloads while being 14 MiB smaller (geomean 41.32 vs 40.28).
- mtp-4.4bpw (224.4 MiB) beats mtp-5bit (253.4 MiB) on repetitive, prose and prose_thinking while being 29 MiB smaller (geomean 41.81 vs 41.12).
- mtp-4.4bpw (224.4 MiB) exceeds mtp-6bit (304.0 MiB) on geomean (41.81 vs 41.54) while being 26% smaller.
The uniform 4/5-bit checkpoints are never the right answer: a smaller optimized checkpoint is always at least as good.
Acceptance vs size — Pareto frontier
Each plot shows draft acceptance against model size. The black line connects only the Pareto-optimal checkpoints; a checkpoint is dominated (gray open) if a smaller one is at least as good.
How it was built
Quantized clean from the BF16 MTP head (no dequant-from-quant) with
exllamav3's EXL3 format: per-tensor bitrate, identity Hessian (no calibration
data), seed 0, mul1. The 7 norm tensors are held in bf16 (a bit-exact copy of
the source). The 8 quantizable linears are allocated independently:
| Tensor | Params | Share | 3.1bpw | 3.7bpw | 4.4bpw | Sensitivity |
|---|---|---|---|---|---|---|
fc (feature projection) |
52.4 M | 12.3% | 5 | 6 | 7 | highest (cliff at 3→4 bit) |
q |
62.9 M | 14.8% | 2 | 2.5 | 3 | lowest |
k |
5.2 M | 1.2% | 4 | 6 | 8 | low |
v |
5.2 M | 1.2% | 4 | 6 | 8 | low |
o |
31.5 M | 7.4% | 3 | 3.5 | 4 | low |
gate |
89.1 M | 21.0% | 2.5 | 3 | 3.5 | low |
up |
89.1 M | 21.0% | 3 | 3.5 | 4 | medium |
down |
89.1 M | 21.0% | 3.5 | 4 | 5 | high |
| Total | 424.7 M | 100% | 3.13 | 3.73 | 4.43 |
The allocation comes from a systematic per-tensor sensitivity sweep: each tensor's bit width was lowered one at a time (the rest held at baseline) and the acceptance cost measured. The ordering that emerged is
fc ≫ down > up > o > gate > k, v > q
fc is only 12% of the parameters but dominates acceptance (it has a hard
cliff between 3 and 4 bit), so it is the first tensor to be protected and the
last to be cut. q is 15% of the parameters but nearly free to compress, and
k/v are quite insensitive but there's little to gain.
Reinvesting the savings from q/k/v/gate into fc is exactly what
makes each optimized checkpoint smaller than the uniform quant at equal acceptance.
Usage
Pair the sidecar with any compatible base model (see above) and run exllamav3 with MTP drafting enabled:
- Copy one of the
mtp-*.safetensorsfiles into the base model's directory. Keep themtp-prefix so it sorts after the base model'smodel-*.safetensorsand shadows the built-in head. - (Optional) strip the base model's own
mtp.*tensors to reclaim their drive space. - Launch with
--mtpor configure mtp drafting in tabbyAPI.
License
Apache-2.0. Base model: Qwen/Qwen3.8-27B.