Acceptance Is Not Speed: Length Inflation in Training-Free Lossy Speculative Decoding
Organizations: University of Waterloo
Abstract
Speculative decoding typically characterizes speedup by draft tokens accepted per verification round. Lossless verification preserves the target model's output distribution and thus expected completion length, making this metric a meaningful efficiency proxy. Relaxed (lossy) verification accepts tokens that lossless verification would reject, potentially altering that distribution. We identify a length inflation phenomenon: relaxed verification lengthens completions, primarily by extending reasoning traces, largely offsetting apparent gains in accepted tokens per round. We evaluate existing training-free relaxed verification rules on twelve target-drafter pairs against lossless verification on identical prompts, measuring completion length, verifier rounds, wall-clock time, and task accuracy. At each rule's most relaxed evaluated setting, relaxed verification on average accepts as many tokens per round but produces longer completions. For rules with higher acceptance lengths, tokens accepted only under relaxed verification tend to have low target-model probability, contributing to length inflation. For rules that reduce verifier rounds, accuracy typically drops substantially. Further analysis traces some failures to continued reasoning that exhausts the budget needed to deliver a final answer. Overall, accepted tokens per round alone is an unreliable measure of decoding speed under relaxed verification. Completion length and verifier rounds must also be reported to assess actual efficiency.
Figures & tables
| Dataset | mentored | cactus | casc-opt | r-fuzzy | casc-tok | mentored | cactus | casc-opt | r-fuzzy | casc-tok |
|---|---|---|---|---|---|---|---|---|---|---|
| GPT-OSS-20B + EAGLE-3 (nebius) | Qwen3-8B + EAGLE-3 (RedHatAI) | |||||||||
| GSM8K | 1.16 (.93) | 1.61 (.91) | 1.46 (.94) | 1.70 (.87) | 0.96 ∘ (.97) | 1.03 ∘ (.77) | 1.04 ∘ (.77) | 1.33 (.49) | 0.95 ∘ (.55) | 0.99 ∘ (.79) |
| AIME24 | 1.69 (.63) | 1.78 (.60) | 2.48 (.37) | 2.13 (.50) | 1.48 (.70) | 1.01 ∘ (.73) | 1.26 (.23) | 1.42 (.30) | 1.29 (.40) | 0.98 ∘ (.70) |
| HumanEval | 1.30 (.96) | 1.79 (.87) | 1.73 (.82) | 1.64 (.63) | 1.05 ∘ (.94) | 1.08 (.85) | 1.14 (.75) | 1.72 (.49) | 1.65 (.16) | 1.08 (.85) |
| LiveCodeBench | 1.25 (.84) | 1.54 (.61) | 1.64 (.49) | 1.65 (.34) | 1.16 (.88) | 1.05 (.63) | 1.15 (.44) | 1.27 (.33) | 1.07 ∘ (.02) | 1.00 ∘ (.71) |
| MT-Bench | 1.10 ∘ (6.41) | 1.18 (4.51) | 1.09 ∘ (5.74) | 1.20 (4.58) | 0.96 ∘ (7.49) | 1.04 ∘ (6.40) | 1.16 (2.99) | 1.22 (3.95) | 1.12 (3.05) | 1.04 ∘ (7.21) |
| Dataset | ment. | cactus | c-opt | r-fuzzy | c-tok | ment. | cactus | c-opt | r-fuzzy | c-tok |
|---|---|---|---|---|---|---|---|---|---|---|
| GPT-OSS-20B + EAGLE-3 (nebius) | Qwen3-8B + EAGLE-3 (RedHatAI) | |||||||||
| GSM8K | 0.83 | 0.99 | 1.07 | 1.14 | 0.83 | 0.93 | 0.90 | 1.05 | 0.76 | 0.95 |
| AIME24 | 1.18 | 1.07 | 1.70 | 1.37 | 1.22 | 0.94 | 0.55 | 1.06 | 1.16 | 0.93 |
| HumanEval | 0.97 | 1.12 | 1.29 | 1.16 | 0.93 | 0.99 | 0.96 | 1.36 | 1.33 | 1.04 |
| LiveCodeBench | 0.89 | 0.94 | 1.16 | 1.11 | 0.98 | 0.93 | 0.72 | 1.03 | 0.87 | 0.94 |
| MT-Bench | 0.75 | 0.62 | 0.76 | 0.76 | 0.88 | 0.89 | 0.64 | 0.94 | 0.85 | 0.96 |
| mean | mean | ||||||||||||||
| Target, drafter | gain | ment. | cactus | c-opt | r-fuzzy | c-tok | all | ment. | cactus | c-opt | r-fuzzy | c-tok | all | acc. loss | |
| GPT-OSS-20B | |||||||||||||||
| EAGLE-3 (nebius) | 2.28 | 1.38 | 1.35 | 1.61 | 1.70 | 1.67 | 1.12 | 1.49 | 0.96 | 0.93 | 1.22 | 1.10 | 0.97 | 1.04 | 22/25 |
| EAGLE-3 (RedHatAI) | 1.49 | 1.35 | 1.31 | 2.32 | 1.36 | 1.84 | 1.07 | 1.58 | 1.14 | 1.01 | 1.16 | 1.52 | 1.05 | 1.18 | 17/25 |
| Qwen3-8B | |||||||||||||||
| EAGLE-3 (RedHatAI) | 1.20 | 1.27 | 1.05 | 1.31 | 1.35 | 1.20 | 1.01 | 1.18 | 0.94 | 0.76 | 1.04 | 0.99 | 0.96 | 0.94 | 18/25 |
| Qwen3-8B | GPT-OSS-20B | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Dataset | forced | correct | forced | correct | ||||||
| GSM8K | 307 | 56 | 225 | 171 | 2 | 32 | 4 | 10 | 6 | 0 |
| AIME24 | 60 | 2 | 6 | 4 | 0 | 36 | 3 | 7 | 7 | 3 |
| HumanEval | 205 | 16 | 52 | 37 | 1 | 9 | 2 | 0 | 0 | 2 |
| LiveCodeBench | 226 | 11 | 81 | 72 | 2 | 62 | 7 | 16 | 13 | 4 |
| LongBench-v2 | 157 | 17 | 33 | 18 | 2 | 38 | 8 | 9 | 7 | 6 |
Appendix figures & tables15 assets
Supplementary material from the paper’s appendix.
Appendix
| Method (arm) | controls | swept | |||
|---|---|---|---|---|---|
| CACTUS ( cactus ) ( Hao and Mou, 2026 ) | reverse-KL budget | if , else ; | 0.03, 0.08, 0.18, 0.35 | ||
| Mentored decoding ( mentored_dec ) ( Tran-Thien, 2023 ) | forward-KL budget | 0.15, 0.35, 0.55, 0.75 | |||
| Fuzzy, reducible variant ( r_fuzzy ) ( Holsman et al., 2025 ) | divergence threshold | if , else | 0.03, 0.08, 0.15, 0.25 | ||
| Speculative cascade, optimal rule ( spec_casc_opt ) ( Narasimhan et al., 2025 ) | deferral cost | if , else | , , , | ||
| Speculative cascade, token rule ( spec_casc_tok ) ( Narasimhan et al., 2025 ) | trusted-set width | if , else ; , | 0.15, 0.35, 0.55, 0.8 | ||
| Ensemble ( ens ) ( Wang et al., 2026b ) | mixture weight | not swept |
| Method | Models and tasks | Speed metric | Length | Rounds | Long-form |
|---|---|---|---|---|---|
| CACTUS ( Hao and Mou, 2026 ) | Qwen3, Gemma, R1-Distill, Llama pairs; GSM8K, IFEval, GPQA | , rejected-token count, vLLM wall-clock | (✓) | (✓) | (✓) |
| Mentored decoding ( Tran-Thien, 2023 ) | T5-large/small; WMT15 En–Fr | tokens per second | |||
| Fuzzy ( Holsman et al., 2025 ) | Llama-3.1, Gemma-2, Qwen2.5 pairs; GSM8K, CSQA, MMLU, HumanEval | tokens per second, accepted length | |||
| Speculative cascades ( Narasimhan et al., 2025 ) | T5, Gemma pairs; translation, summarization, GSM8K, MBPP, QA | batch-one relative latency, rejection rate | |||
| Ensemble ( Wang et al., 2026b ) | Llama-3.1, Qwen3, Gemma-3 pairs; GSM8K, CNN/DM, XSum, MBPP | acceptance rate, wall-clock at fixed token count | |||
| Spec. contrastive ( Yuan et al., 2024 ) | Llama-2 7B/70B; WikiText, HumanEval, AlpacaEval, GSM8K | expected acceleration from acceptance rate |
| Dataset | Acc. | cut off | ||||
| GPT-OSS-20B | ||||||
| GSM8K | 150 | 2.57 | 322 | 94 | 0.960 | 2 |
| AIME24 | 30 | 2.19 | 8 717 | 2 953 | 0.767 | 7 |
| HumanEval | 150 | 2.53 | 912 | 272 | 0.960 | 0 |
| LiveCodeBench | 90 | 2.16 | 3 456 | 1 151 | 0.889 | 2 |
| MT-Bench | 80 | 2.34 | 1 264 | 414 | 7.29 | 4 |
| target prob. (median) | rank | entropy (mean) | ||||
|---|---|---|---|---|---|---|
| Method | only | only | both | only | only | both |
| mentored_dec | 16% | 0.09 | 0.93 | 37 | 1.8 | 0.8 |
| cactus | 24% | 0.01 | 0.78 | 234 | 2.1 | 1.1 |
| spec_casc_opt | 16% | 0.07 | 0.92 | 88 | 1.8 | 0.8 |
| r_fuzzy | 21% | 0.01 | 0.83 | 134 | 1.8 | 1.0 |
| spec_casc_tok | 7% | 0.29 | 0.99 | 0.9 | 1.5 | 0.5 |
| GPT-OSS-20B | Qwen3-8B | |||
|---|---|---|---|---|
| Method | cells | best | cells | best |
| mentored_dec | 5/5 | 0.86 | 5/5 | 0.88 |
| cactus | 1/5 | 0.98 | 2/5 | 0.97 |
| spec_casc_opt | 2/5 | 0.93 | 2/5 | 0.97 |
| r_fuzzy | 2/5 | 1.13 | 0/5 | — |
| spec_casc_tok | 5/5 | 0.83 | 5/5 | 0.93 |
| Method | score [95% CI] | no ans. | answered | |
| GPT-OSS-20B | ||||
| lossless | — | 7.29 [6.75, 7.80] | 0 | 7.29 |
| mentored_dec | 0.75 | 6.41 [5.73, 7.09] | 1 | 6.48 |
| cactus | 0.35 | 4.51 [3.70, 5.34] | 6 | 4.80 |
| spec_casc_opt | 0.05 | 5.74 [5.04, 6.45] | 2 | 5.86 |
| r_fuzzy | 0.25 | 4.58 [3.94, 5.23] | 3 | 4.71 |
| GPT-OSS-20B + EAGLE-3 (nebius) | Qwen3-8B + EAGLE-3 (RedHatAI) | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Dataset | Method | [95% CI] | time [95% CI] | cut off | [95% CI] | time [95% CI] | cut off | ||
| GSM8K | mentored_dec | 0.75 | 1.16 [1.02, 1.33] | 0.96 [0.86, 1.08] | 4 | 0.75 | 1.03 [0.98, 1.07] | 0.95 [0.91, 1.00] | 26 |
| cactus | 0.35 | 1.61 [1.41, 1.83] | 1.19 [1.06, 1.33] | 5 | 0.35 | 1.04 [1.00, 1.08] | 0.94 [0.90, 0.97] | 27 | |
| spec_casc_opt | 0.05 | 1.46 [1.28, 1.65] | 1.18 [1.06, 1.31] | 5 | 0.05 | 1.33 [1.26, 1.40] | 1.12 [1.07, 1.18] | 58 | |
| r_fuzzy | 0.25 | 1.70 [1.49, 1.94] | 1.29 [1.15, 1.45] | 5 | 0.25 | 0.95 [0.86, 1.05] | 0.81 [0.74, 0.90] | 35 | |
| spec_casc_tok | 0.8 | 0.96 [0.88, 1.04] | 0.91 [0.85, 0.98] | 1 | 0.8 | 0.99 [0.95, 1.02] | 0.96 [0.92, 1.00] | 23 | |
| Dataset | Method | [95% CI] | [95% CI] | Acc. | cut off | |
|---|---|---|---|---|---|---|
| GSM8K | mentored_dec | 1.85 | 1.01 [0.97, 1.04] | 0.94 [0.91, 0.98] | 0.81 | 23% |
| cactus | 1.81 | 1.01 [0.97, 1.05] | 0.96 [0.92, 1.00] | 0.81 | 23% | |
| spec_casc_opt | 3.34 | 1.52 [1.43, 1.62] | 0.95 [0.89, 1.02] | 0.20 | 87% | |
| r_fuzzy | 2.05 | 1.01 [0.92, 1.09] | 0.89 [0.81, 0.96] | 0.64 | 39% | |
| spec_casc_tok | 1.80 | 1.01 [0.97, 1.04] | 0.96 [0.92, 1.00] | 0.78 | 26% | |
| LiveCodeBench | mentored_dec | 1.57 | 1.04 [1.00, 1.09] | 0.94 [0.90, 0.99] | 0.68 | 34% |
| Dataset | mentored | cactus | casc-opt | r-fuzzy | casc-tok | mentored | cactus | casc-opt | r-fuzzy | casc-tok |
|---|---|---|---|---|---|---|---|---|---|---|
| GPT-OSS-20B + EAGLE-3 (nebius) | Qwen3-8B + EAGLE-3 (RedHatAI) | |||||||||
| GSM8K | 1.16 (.93) | 1.61 (.91) | 1.46 (.94) | 1.70 (.87) | 0.96 ∘ (.97) | 1.03 ∘ (.77) | 1.04 ∘ (.77) | 1.33 (.49) | 0.95 ∘ (.55) | 0.99 ∘ (.79) |
| AIME24 | 1.69 (.63) | 1.78 (.60) | 2.48 (.37) | 2.13 (.50) | 1.48 (.70) | 1.01 ∘ (.73) | 1.26 (.23) | 1.42 (.30) | 1.29 (.40) | 0.98 ∘ (.70) |
| HumanEval | 1.30 (.96) | 1.79 (.87) | 1.73 (.82) | 1.64 (.63) | 1.05 ∘ (.94) | 1.08 (.85) | 1.14 (.75) | 1.72 (.49) | 1.65 (.16) | 1.08 (.85) |
| LiveCodeBench | 1.25 (.84) | 1.54 (.61) | 1.64 (.49) | 1.65 (.34) | 1.16 (.88) | 1.05 (.63) | 1.15 (.44) | 1.27 (.33) | 1.07 ∘ (.02) | 1.00 ∘ (.71) |
| MT-Bench | 1.10 ∘ (6.41) | 1.18 (4.51) | 1.09 ∘ (5.74) | 1.20 (4.58) | 0.96 ∘ (7.49) | 1.04 ∘ (6.40) | 1.16 (2.99) | 1.22 (3.95) | 1.12 (3.05) | 1.04 ∘ (7.21) |
| Dataset | ment. | cactus | c-opt | r-fuzzy | c-tok | ment. | cactus | c-opt | r-fuzzy | c-tok | ment. | cactus | c-opt | r-fuzzy | c-tok |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| GPT-OSS-20B + EAGLE-3 (nebius) | Qwen3-8B + EAGLE-3 (RH) | GPT-OSS-20B + EAGLE-3 (RH) | |||||||||||||
| GSM8K | 0.83 | 0.99 | 1.07 | 1.14 | 0.83 | 0.93 | 0.90 | 1.05 | 0.76 | 0.95 | 0.98 | 1.38 | 1.08 | 1.59 | 0.83 |
| AIME24 | 1.18 | 1.07 | 1.70 | 1.37 | 1.22 | 0.94 | 0.55 | 1.06 | 1.16 | 0.93 | 1.23 | 0.46 | 1.18 | 1.67 | 1.33 |
| HumanEval | 0.97 | 1.12 | 1.29 | 1.16 | 0.93 | 0.99 | 0.96 | 1.36 | 1.33 | 1.04 | 1.30 | 1.80 | 1.43 | 2.70 | 1.02 |
| LiveCodeBench | 0.89 | 0.94 | 1.16 | 1.11 | 0.98 | 0.93 | 0.72 | 1.03 | 0.87 | 0.94 | 1.34 | 1.08 | 1.38 | 1.28 | 1.06 |
| MT-Bench | 0.75 | 0.62 | 0.76 | 0.76 | 0.88 | 0.89 | 0.64 | 0.94 | 0.85 | 0.96 | 0.95 | 0.74 | 0.99 | 0.93 | 1.03 |
| GSM8K | AIME24 | HumanEval | LiveCodeBench | MT-Bench | LongBench-v2 | |||||||||||||
| Target, drafter | acc. | acc. | acc. | acc. | score | acc. | ||||||||||||
| GPT-OSS-20B | ||||||||||||||||||
| EAGLE-3 (RedHatAI) | 2.13 | 353 | .97 | 1.34 | 9 650 | .77 | 2.04 | 911 | .98 | 1.57 | 3 445 | .83 | 1.82 | 1 157 | 7.31 | 0.05 | 1 403 | .54 |
| Qwen3-8B | ||||||||||||||||||
| P-EAGLE | 2.16 | 1 303 | .81 | 2.26 | 18 758 | .73 | 2.05 | 3 863 | .85 | 1.84 | 8 072 | .73 | 1.57 | 2 112 | 6.96 | 1.38 | 3 023 | .55 |
| DSpark | 2.77 | 1 335 | .75 | 2.51 | 19 550 | .70 | 2.50 | 3 756 | .84 | 2.31 | 8 063 | .74 | 2.12 | 2 133 | 6.74 | 1.88 | 2 948 | .47 |
| gentlest tested setting | most relaxed tested setting | ||||||||
|---|---|---|---|---|---|---|---|---|---|
| Pair | same | acc. loss | acc. loss | ||||||
| GPT-OSS-20B + EAGLE-3 (nebius) | 0 | 1.07 | 0.98 | 9 | 14 | 1.57 | 1.03 | 15 | 22 |
| GPT-OSS-20B + EAGLE-3 (RedHatAI) | 14 | 1.23 | 1.09 | 22 | 15 | 1.35 | 1.07 | 20 | 17 |
| Qwen3-8B + EAGLE-3 (RedHatAI) | 0 | 1.04 | 0.99 | 12 | 13 | 1.08 | 0.94 | 7 | 18 |
| Qwen3-8B + DSpark | 8 | 1.01 | 0.89 | 1 | 12 | 1.06 | 0.85 | 2 | 18 |
| Llama-3.1-8B-Instruct + EAGLE-3 | 7 | 1.84 | 1.57 | 24 | 18 | 1.69 | 1.35 | 21 | 18 |
| GPT-OSS-20B | Qwen3-8B | |||||||
|---|---|---|---|---|---|---|---|---|
| Rule | gain | gain | ||||||
| mentored_dec | 1.15 | 1.44 | 0.76 | 0.75 | 1.07 | 1.14 | 0.93 | 0.91 † |
| cactus | 1.26 | 1.89 | 0.63 | 0.62 | 1.35 | 1.91 | 0.67 | 0.68 ‡ |
| spec_casc_opt | 1.23 | 1.41 | 0.82 | 0.82 | 1.40 | 1.32 | 1.02 | 1.06 † |
| r_fuzzy | 1.20 | 1.52 | 0.77 | 0.75 | 1.20 | 1.28 | 0.95 | 0.96 |
| spec_casc_tok | 1.09 | 1.13 | 0.95 | 0.92 | 1.01 | 1.05 | 0.95 | 0.95 † |
| Qwen3-8B | GPT-OSS-20B | |||||||||||
| Dataset, rule | forced | correct | cut off | forced | correct | cut off | ||||||
| GSM8K | ||||||||||||
| mentored_dec | 44 | 6 | 38 | 32 | 0 | 4 | 6 | 2 | 2 | 0 | 0 | 3 |
| cactus | 56 | 15 | 45 | 30 | 0 | 11 | 9 | 1 | 2 | 1 | 0 | 6 |
| spec_casc_opt | 102 | 18 | 60 | 44 | 2 | 27 | 7 | 1 | 2 | 1 | 0 | 4 |
| r_fuzzy | 62 | 8 | 47 | 39 | 0 | 13 | 8 | 0 | 3 | 3 | 0 | 3 |
| First answer (token) | Length (tokens) | Extra tokens | Cut-off runs with the answer | ||||||
|---|---|---|---|---|---|---|---|---|---|
| Target | Dataset | Pairs | lossless | relaxed | lossless | relaxed | after answer (%) | relaxed | lossless |
| GPT-OSS-20B | GSM8K | 486 | 102 | 126 | 183 | 264 | 50 [37, 59] | 15/26 | 0/2 |
| Qwen3-8B | GSM8K | 304 | 325 | 350 | 877 | 989 | 82 [65, 96] | 147/201 | 28/33 |
| GPT-OSS-20B | AIME24 | 36 | 1 721 | 3 865 | 3 822 | 7 020 | 41 [28, 54] | 8/33 | 1/2 |
| Qwen3-8B | AIME24 | 33 | 4 221 | 6 031 | 11 160 | 14 230 | [ , 49] | 9/53 | 1/5 |
Speculative Decoding
Speculative decoding accelerates generation by drafting multiple tokens and verifying them in parallel with a larger target model.
See all 308 papers