Why Speculative Decoding Works Better Than Predicted on Sparse MoE Models
Organizations: Cohere
Abstract
Speculative decoding (SD) accelerates autoregressive inference by leveraging the memory bound nature of decoding, verifying multiple draft tokens in a single forward pass. For mixture-of-experts (MoE) models, prior work predicts a concave speedup-batch size relationship, with gains peaking at intermediate batch sizes due to expert saturation. We evaluate this across 10 sparse MoE models (30B--1T parameters, 8--512 experts) and find recent fine-grained models break this trend, showing higher speedup at low batch size. We find verification cost is governed not only by activated-expert bytes, but also by temporal overlap across draft tokens and GPU execution dynamics. At low batch size, MoE layers in fine-grained models account for a much smaller share of runtime than of weights; on H100, kernel profiling attributes this mainly to higher bandwidth utilization of MoE kernels relative to attention, with L2 absorbing repeated reads of co-routed experts. Across draft tokens, routing overlap further reduces the unique experts activated during verification relative to independence assumptions. We model this effect using a maximum-entropy Iterative Proportional Fitting (IPF) framework that predicts unique expert counts from routing-overlap statistics with less than 4% error, and substantially narrows the gap to real-model curves and captures the qualitative low-batch trend from synthetic routing.
Figures & tables
| Model | (MB/GPU) | (MB/GPU) | MoE wt% | TE. pred. | TE observed | Gap | |
|---|---|---|---|---|---|---|---|
| Mixtral-8x7B (bf16, TP2) | 168.0 | 40.0 | 89.4 | 4.99 | 0.428 | 0.505 | +0.08 |
| Mixtral-8x7B (fp8, TP1) | 168.0 | 40.0 | 89.4 | 4.99 | 0.428 | 0.488 | +0.06 |
| Qwen3-30B (bf16, TP1) | 9.0 | 36.0 | 66.7 | 19.49 | 0.511 | 0.630 | +0.12 |
| Qwen3-30B (bf16, TP2) | 4.5 | 18.0 | 66.7 | 19.49 | 0.511 | 0.697 | +0.19 |
| Qwen3-30B (fp8, TP1) | 4.5 | 18.0 | 66.7 | 19.49 | 0.511 | 0.818 | +0.31 |
| Qwen3-30B (fp8, TP2) | 2.25 | 9.0 | 66.7 | 19.49 | 0.511 | 0.860 | +0.35 |
| Model | Uniform | Indep | Empirical | Temporal | Temp/Total | |
|---|---|---|---|---|---|---|
| Mixtral-8x7B | 0.250 | 0.250 | 0.253 | 0.355 | 0.102 | 28.7% |
| Qwen3-30B | 0.063 | 0.063 | 0.119 | 0.431 | 0.312 | 72.4% |
| Qwen3-235B | 0.063 | 0.063 | 0.098 | 0.447 | 0.349 | 78.2% |
| Kimi-K2.5 | 0.021 | 0.021 | 0.040 | 0.296 | 0.256 | 86.4% |
| Unique experts (4 tokens) | IPF prediction | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Model | Unif | Indep | Emp | Emp/ | Uniform IPF | Err | Skewed IPF | Err | ||
| Mixtral-8x7B | 2 | 8 | 5.5 | 5.5 | 5.0 | 2.5 | 4.99 | +0.1% | 4.99 | +0.1% |
| Qwen2-57B | 8 | 64 | 26.5 | 26.0 | 24.6 | 3.1 | 24.72 | +0.5% | 24.63 | +0.1% |
| Qwen3-30B | 8 | 128 | 29.1 | 26.9 | 19.5 | 2.4 | 20.08 | +3.1% | 19.72 | +1.2% |
| Kimi-K2.5 | 8 | 384 | 31.0 | 30.2 | 23.3 | 2.9 | 23.88 | +2.7% | 23.66 | +1.7% |
| Metric | Qwen3-30B | Mixtral-8x7B |
|---|---|---|
| Expert size (FP8) | 4.5 MB | 168 MB |
| MoE share of weight | 66.7% | 89.4% |
| MoE share of GPU time | 33% | 75% |
| Attn CTAs / 132 SMs | 16 (12%) | 96 (73%) |
| Attn HBM BW (% peak) | 22–25% | 62% |
| MoE CTAs / 132 SMs | 96–128 | 132 |
Appendix figures & tables23 assets
Supplementary material from the paper’s appendix.
Appendix
| Model | Hidden | Layers | TP | SD Method | |||
|---|---|---|---|---|---|---|---|
| Mixtral-8x7B | 2/8 | 14336 | n/a | 4096 | 32 | 2 | EAGLE |
| Qwen2-57B | 8/64 | 2560 | 20480 | 3584 | 28 | 2 | Draft model (0.5B) |
| GLM-4.7-Flash | 4/64 | 1536 | 10240 | 2048 | 40 | 1 | MTP |
| Qwen3-30B | 8/128 | 768 | n/a | 2048 | 48 | 1 | EAGLE-3 |
| Qwen3-235B | 8/128 | 1536 | n/a | 4096 | 94 | 4 | EAGLE-3 |
| GPT-OSS-120B | 4/128 | 2880 | n/a | 2880 | 56 | 4 | EAGLE-3 |
| Batch size | Num prompts | Batch size | Num prompts |
|---|---|---|---|
| 1 | 80 | 16 | 320 |
| 2 | 80 | 32 | 640 |
| 4 | 80 | 64 | 1280 |
| 8 | 160 | 128 | 2560 |
| Model | Target weights | TP | GPU |
|---|---|---|---|
| Mixtral-8x7B | mistralai/Mixtral-8x7B-Instruct-v0.1 | 2 | H100 |
| Qwen2-57B | Qwen/Qwen2-57B-A14B-Instruct | 2 | H100 |
| GLM-4.7-Flash | zai-org/GLM-4.7-Flash | 1 | H100 |
| Qwen3-30B | Qwen/Qwen3-30B-A3B-FP8 | 1 | H100 |
| Qwen3-235B | Qwen/Qwen3-235B-A22B-Instruct-2507-FP8 | 4 | H100 |
| GPT-OSS-120B | openai/gpt-oss-120b | 4 | H100 |
| Model | Draft weights | Method |
|---|---|---|
| Mixtral-8x7B | yuhuili/EAGLE-mixtral-instruct-8x7B | EAGLE |
| Qwen2-57B | Qwen/Qwen2-0.5B-Instruct | Draft model |
| GLM-4.7-Flash | (built-in MTP heads) | MTP |
| Qwen3-30B | RedHatAI/Qwen3-30B-A3B-Instruct-2507-speculator.eagle3 | EAGLE-3 |
| Qwen3-235B | RedHatAI/Qwen3-235B-A22B-Instruct-2507-speculator.eagle3 | EAGLE-3 |
| GPT-OSS-120B | nvidia/gpt-oss-120b-Eagle3-long-context | EAGLE-3 |
| Model | SD method | Target eff. | Model | SD method | Target eff. |
|---|---|---|---|---|---|
| Qwen2-57B (bf16, TP2) | Separate draft | 0.270 | Qwen3-30B (fp8, TP2) | EAGLE-3 | 0.860 |
| Mixtral-8x7B (bf16, TP2) | Separate draft | 0.192 | Qwen3-235B (bf16, TP8) | EAGLE-3 | 0.786 |
| Mixtral-8x7B (bf16, TP2) | EAGLE | 0.505 | Qwen3-235B (fp8, TP4) | EAGLE-3 | 0.889 |
| Mixtral-8x7B (fp8, TP1) | EAGLE | 0.488 | Qwen3-Next-80B (bf16, TP4) | MTP | 0.615 |
| GLM-4.7-Flash (bf16, TP1) | MTP | 0.554 | Qwen3-Next-80B (fp8, TP2) | MTP | 0.707 |
| GLM-4.7-Flash (bf16, TP2) | MTP | 0.568 | Qwen3.5-35B (bf16, TP2) | MTP | 0.546 |
| Step | Correction | Target efficiency | % gap closed | |
| 0 | Weight model baseline | 0.511 | n/a | n/a |
| 1 | MoE fraction: 67% 33% (GPU time weight) | 0.679 | +0.168 | 44% |
| 2 | MoE scaling: =2.44 1.57 (L2 cache + dilution) | 0.843 | +0.164 | 43% |
| 3 | Non-MoE: =1.0 0.94 (amortization) | 0.872 | +0.029 | 8% |
| Measured (kernel-level sum) | 0.872 | |||
| Measured (sweep wall-clock) | 0.896 |
| Metric | Qwen3-235B (H100, TP4) | Qwen3-30B (B200, TP1) | Mixtral-8x7B (B200, TP1) |
|---|---|---|---|
| MoE weight reads (SD) | per (token, expert) pair | once per expert | once per expert |
| Expert size (per GPU) | 4.5 MB | 4.5 MB | 168 MB |
| MoE share of weight | 67.9% | 66.7% | 89.4% |
| MoE share of GPU time | 34% | 35% | 69% |
| Attn CTAs / SMs | 18 (14%) | 16 (11%) | 48 (32%) |
| Attn HBM BW (% peak) | 19–26% | 12–13% | 27–37% |
| Model | Uniform | Indep | Empirical | Temporal | Temp/Total | |
|---|---|---|---|---|---|---|
| Mixtral-8x7B | 0.250 | 0.250 | 0.253 | 0.355 | 0.102 | 28.7% |
| Qwen2-57B | 0.125 | 0.125 | 0.140 | 0.204 | 0.064 | 31.5% |
| GLM-4.7-Flash | 0.063 | 0.063 | 0.097 | 0.319 | 0.222 | 69.4% |
| Qwen3-30B | 0.063 | 0.063 | 0.119 | 0.431 | 0.312 | 72.4% |
| Qwen3-235B | 0.063 | 0.063 | 0.098 | 0.447 | 0.349 | 78.2% |
| Qwen3.5-35B | 0.031 | 0.031 | 0.055 | 0.332 | 0.277 | 83.4% |
| Model | Step | Acc | 1st Rej | ||
|---|---|---|---|---|---|
| Qwen3-30B | 1 | 0.433 | 0.441 | 0.008 | 4991 |
| 2 | 0.409 | 0.448 | 0.039 | 3021 | |
| 3 | 0.392 | 0.420 | 0.028 | 1374 | |
| Qwen3-235B | 1 | 0.447 | 0.488 | 0.040 | 8420 |
| 2 | 0.422 | 0.475 | 0.053 | 5936 | |
| 3 | 0.407 | 0.458 | 0.051 | 3752 |
| Model | Step | Cohen’s | Size | ||
|---|---|---|---|---|---|
| Qwen3-30B | 1 | 0.008 | 0.06 | 2.3e-3 | negligible |
| 2 | 0.039 | 0.26 | 5.9e-22 | small | |
| 3 | 0.028 | 0.19 | 5.4e-7 | negligible | |
| Qwen3-235B | 1 | 0.040 | 0.29 | 6.2e-111 | small |
| 2 | 0.053 | 0.38 | 8.2e-129 | small | |
| 3 | 0.051 | 0.37 | 5.3e-79 | small |
| Model | Data | Anchor drop | |||
|---|---|---|---|---|---|
| Qwen3-30B | Spec-Bench | +0.000 | 0.017 | 0.017 | +0.085 |
| Aya | +0.002 | 0.018 | 0.015 | +0.095 | |
| Qwen3-235B | Spec-Bench | 0.018 | 0.021 | 0.028 | +0.070 |
| Aya | 0.002 | 0.020 | 0.015 | +0.106 |
| Model | Step 1 | Step 2 | Step 3 | Step 4 | Indep |
|---|---|---|---|---|---|
| Mixtral-8x7B | 0.355 | 0.303 | 0.298 | 0.288 | 0.253 |
| Qwen2-57B | 0.204 | 0.150 | 0.149 | 0.142 | 0.140 |
| GLM-4.7-Flash | 0.319 | 0.277 | 0.245 | 0.233 | 0.097 |
| Qwen3-30B | 0.431 | 0.356 | 0.328 | 0.312 | 0.119 |
| Qwen3-235B | 0.447 | 0.378 | 0.354 | 0.337 | 0.098 |
| Qwen3.5-35B | 0.332 | 0.272 | 0.243 | 0.225 | 0.055 |
| Data slice | Step 1 | Step 2 | Step 3 | Step 4 | Indep | Verify ratio |
|---|---|---|---|---|---|---|
| MT-Bench | 0.431 | 0.356 | 0.328 | 0.312 | 0.119 | 0.415 |
| Spec-Bench mean | 0.438 (0.407–0.468) | 0.358 (0.324–0.391) | 0.330 (0.289–0.366) | 0.313 (0.274–0.348) | 0.172 (0.122–0.207) | 0.418 (0.400–0.434) |
| Aya mean | 0.477 (0.447–0.515) | 0.396 (0.364–0.458) | 0.364 (0.333–0.424) | 0.345 (0.310–0.404) | 0.176 (0.148–0.228) | 0.439 (0.423–0.462) |
| Qwen3-30B | Qwen3-235B | ||
| Layer | Overlap (indep) | Layer | Overlap (indep) |
| 0 | 0.094 (0.089) | 0 | 0.110 (0.078) |
| 1 | 0.265 (0.099) | 1 | 0.168 (0.082) |
| 2 | 0.306 (0.118) | 2 | 0.247 (0.085) |
| 3 | 0.389 (0.121) | 3 | 0.328 (0.088) |
| 22 | 0.433 (0.111) | 45 | 0.399 (0.090) |
| Unique experts | IPF prediction | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Model | Unif | Indep | Emp | Emp/ | Uniform IPF | Err | Skewed IPF | Err | ||
| Mixtral-8x7B | 2 | 8 | 5.5 | 5.5 | 5.0 | 2.5 | 4.99 | +0.1% | 4.99 | +0.1% |
| Qwen2-57B | 8 | 64 | 26.5 | 26.0 | 24.6 | 3.1 | 24.72 | +0.5% | 24.63 | +0.1% |
| GLM-4.7-Flash | 4 | 64 | 14.6 | 13.9 | 11.0 | 2.7 | 11.16 | +1.6% | 11.07 | +0.8% |
| Qwen3-30B | 8 | 128 | 29.1 | 26.9 | 19.5 | 2.4 | 20.08 | +3.1% | 19.72 | +1.2% |
| Qwen3-235B | 8 | 128 | 29.1 | 27.7 | 19.0 | 2.4 | 19.67 | +3.5% | 19.45 | +2.3% |
Speculative Decoding
Speculative decoding accelerates generation by drafting multiple tokens and verifying them in parallel with a larger target model.
See all 314 papers