S2D2: Fast Decoding for Diffusion LLMs via Training-Free Self-Speculation
Organizations: Red Hat AI Innovation · MIT-IBM Watson AI Lab · Iowa State University · Core AI, IBM
Abstract
Block-diffusion language models offer a promising path toward faster-than-autoregressive generation by combining block-wise autoregressive decoding with within-block parallel denoising. However, in the few-step regime needed for practical acceleration, standard confidence-thresholded decoding is often brittle: aggressive thresholds hurt quality, while conservative thresholds require unnecessary denoising steps. Existing approaches that address this issue either require additional training or incur extra test-time compute. We present S2D2, a training-free self-speculative decoding framework for block-diffusion language models. Our key observation is that a block-diffusion model becomes autoregressive when the block size is reduced to one, allowing the same pretrained model to act as both drafter and verifier. S2D2 inserts a speculative verification step into standard block-diffusion decoding and uses lightweight routing policies to decide when verification is worth its cost. This yields a hybrid decoding trajectory in which diffusion proposes tokens in parallel, while the autoregressive mode acts as a local sequence-level critic. Across three mainstream block-diffusion families, S2D2 consistently improves the accuracy-speed tradeoff over strong confidence-thresholding baselines. On SDAR, we observe up to speedup over autoregressive decoding, and up to over a tuned dynamic decoding baseline while improving accuracy by up to points. On LLaDA2.1-Mini, S2D2 remains complementary to built-in self-correction, including a conservative setting where it is faster than the static baseline with slightly higher accuracy.
Figures & tables
| Method | GSM8K | MBPP | HumanEval | IFEval | Avg |
|---|---|---|---|---|---|
| SDAR-1.7B-Chat | |||||
| AR | 76.3 (1.0 ) | 48.4 (1.0 ) | 62.2 (1.0 ) | 38.6 (1.0 ) | 56.4 (1.0 ) |
| Diffusion (static) | 77.9 (1.7 ) | 13.6 (1.3 ) | 51.8 (1.9 ) | 43.3 (2.1 ) | 46.7 (1.9 ) |
| Diffusion (dynamic) | 77.2 (2.7 ) | 21.6 (1.3 ) | 51.8 (3.4 ) | 43.0 (3.8 ) | 48.4 (3.1 ) |
| S2D2 (config-A) | 77.4 (2.3 ) | 45.4 (1.5 ) | 48.8 (2.3 ) | 46.2 (2.7 ) | 54.4 (2.5 ) |
| S2D2 (config-B) | 73.8 ( 4.3 ) | 44.4 ( 2.9 ) | 52.4 ( 4.1 ) | 41.1 ( 5.2 ) | 52.9 ( 4.7 ) |
| Method | GSM8K | MBPP | HumanEval | IFEval | Avg |
|---|---|---|---|---|---|
| AR | 85.1 (1.0 ) | 51.8 (1.0 ) | 32.9 (1.0 ) | 67.7 (1.0 ) | 59.4 (1.0 ) |
| Diffusion (config-A) | 84.8 (2.5 ) | 50.6 (2.3 ) | 14.6 (1.4 ) | 63.1 (1.6 ) | 53.3 (2.1 ) |
| Diffusion (config-B) | 83.2 (3.3 ) | 47.8 (2.9 ) | 11.0 (1.5 ) | 61.6 (1.9 ) | 50.9 (2.7 ) |
| Diffusion (config-C, SB=32) | 78.3 (3.5 ) | 46.2 (3.6 ) | 8.5 (1.7 ) | 59.4 (1.9 ) | 48.1 (2.9 ) |
| S2D2 (config-A) | 83.8 (1.6 ) | 48.8 (2.0 ) | 21.3 (1.5 ) | 62.7 (1.3 ) | 54.2 (1.6 ) |
| S2D2 (config-B) | 84.2 (3.0 ) | 45.0 (3.7 ) | 22.0 (2.0 ) | 64.0 ( 1.9 ) | 53.8 (2.8 ) |
| (AR) | ||||||
| Method | GSM8K | MBPP | Avg | GSM8K | MBPP | Avg |
| Diffusion | 90.8 (1.0 ) | 65.8 (1.0 ) | 78.3 (1.0 ) | 90.8 (0.6 ) | 67.6 (0.5 ) | 79.2 (0.5 ) |
| Diffusion | 89.6 ( 2.7 ) | 57.8 ( 2.8 ) | 73.7 ( 2.7 ) | 91.0 (1.7 ) | 66.4 (1.8 ) | 78.7 (1.7 ) |
| S2D2 | 90.8 (2.2 ) | 64.0 (2.1 ) | 77.4 (2.1 ) | 89.8 ( 2.1 ) | 68.8 ( 2.2 ) | 79.3 ( 2.2 ) |
Appendix figures & tables18 assets
Supplementary material from the paper’s appendix.
Appendix
| Setting | Method | GSM8K | MBPP | GSM8K | MBPP |
|---|---|---|---|---|---|
| Conservative | AR | 90.8 (1.0 ) | 65.8 (1.0 ) | (1.0 ) | (1.0 ) |
| Diffusion | 91.0 (1.6 ) | 66.4 (1.7 ) | (2.4 ) | (2.9 ) | |
| S2D2 | (2.0 ) | (2.1 ) | (1.8 ) | (2.0 ) | |
| Quality | AR | 90.8 (1.0 ) | 65.8 (1.0 ) | (1.0 ) | (1.0 ) |
| Diffusion | 89.6 (2.5 ) | 57.8 (3.0 ) | (2.8 ) | (3.5 ) | |
| S2D2 | (1.9 ) | (2.2 ) | (1.8 ) | (2.1 ) |
| BS | Method | GSM8K | MBPP | ||||
|---|---|---|---|---|---|---|---|
| Acc | Tput@128 | Tput full | Acc | Tput@128 | Tput full | ||
| 1 | BD3 dynamic | 0.87 | 38 | 125 | 0.43 | 33 | 275 |
| 1 | S2D2 | 0.86 | 45 | 143 | 0.72 | 46 | 354 |
| 32 | BD3 dynamic | 0.85 | 1064 | 3458 | 0.41 | 902 | 7485 |
| 32 | S2D2 | 0.85 | 1378 | 4555 | 0.69 | 1195 | 8914 |
| 64 | BD3 dynamic | 0.85 | 1800 | 5809 | 0.40 | 1491 | 12092 |
| BS | Method | GSM8K | MBPP | ||||
|---|---|---|---|---|---|---|---|
| Acc | Tput@128 | Tput full | Acc | Tput@128 | Tput full | ||
| 1 | Baseline | 0.78 | 146 | 342 | 0.41 | 83 | 237 |
| 1 | S2D2 | 0.89 | 143 | 310 | 0.47 | 113 | 327 |
| 32 | Baseline | 0.83 | 2021 | 4515 | 0.44 | 1120 | 3215 |
| 32 | S2D2 | 0.89 | 2535 | 5160 | 0.51 | 1715 | 4757 |
| 64 | Baseline | 0.83 | 2137 | 4752 | 0.44 | 1181 | 3385 |
| Quadrant | Description | SDAR | Fast-dLLM v2 |
|---|---|---|---|
| Q1 | High conf., high ratio | 47.9%, 99.2% acc. | 44.6%, 99.3% acc. |
| Q2 | Low conf., high ratio | 28.5%, 97.8% acc. | 21.3%, 96.4% acc. |
| Q3 | High conf., low ratio | 2.4%, 5.7% acc. | 3.8%, 4.6% acc. |
| Q4 | Low conf., low ratio | 21.2%, 5.4% acc. | 30.3%, 4.8% acc. |
| Config | Accuracy | Avg. NFE |
|---|---|---|
| AR ( ) | 20.0% | 225.5 |
| Diffusion ( ) | 50.0% | 72.6 |
| S2D2 ( , resampling) | 33.3% | 58.5 |
| S2D2 ( , reject only) | 46.7% | 67.7 |
| Config | Slowdown | |||
|---|---|---|---|---|
| Baseline | 85.0 / 61.5 | 90.5 / 63.5 | 90.0 / 56.0 | 1 |
| Residual, | 84.0 / 60.5 | 88.5 / 61.0 | 92.5 / 61.0 | 3 |
| Residual, | 84.5 / 63.5 | 91.0 / 59.0 | 88.5 / 57.5 | 10 |
| NLL, | 85.5 / 63.0 | 90.5 / 58.5 | 91.0 / 57.5 | 3 |
| NLL, | 90.5 / 63.0 | 92.0 / 61.5 | 92.5 / 59.0 | 10 |
| Method | GSM8K | MBPP | ||||
|---|---|---|---|---|---|---|
| Acc | NFE | Wall | P@1 | NFE | Wall | |
| AR ( ) | 0.900 | 1.00 | 1.00 | 0.665 | 1.00 | 1.00 |
| S2D2 config-B | 0.895 | 4.65 | 3.62 | 0.595 | 3.77 | 3.04 |
| BD3 dynamic | 0.835 | 3.63 | 3.58 | 0.465 | 2.92 | 2.73 |
| Periodic step | 0.865 | 4.33 | 3.28 | 0.480 | 3.29 | 2.58 |
| Periodic block | 0.835 | 4.47 | 3.71 | 0.490 | 3.43 | 2.74 |
| Config | Mean Error | Std Error | MAE |
|---|---|---|---|
| Random baseline | |||
| – | -8.014 | 10.293 | 8.129 |
| Soft entropy estimator | |||
| -0.445 | 8.598 | 5.843 | |
| -1.956 | 8.872 | 5.279 | |
| -2.861 | 9.031 | 5.084 | |
| Config | B=1 (AR) | B=4 | B=8 | B=16 | B=32 | ||||||||||
| GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | |
| Static | 89.0 (1.0 ) | 63.6 (1.0 ) | 76.3 (1.0 ) | 90.5 (1.5 ) | 62.6 (1.5 ) | 76.6 (1.5 ) | 90.5 (1.8 ) | 50.8 (1.7 ) | 70.7 (1.7 ) | 89.0 (1.6 ) | 36.2 (1.7 ) | 62.6 (1.6 ) | 86.0 (1.4 ) | 12.4 (1.5 ) | 49.2 (1.4 ) |
| Dynamic | – | – | – | 91.0 ( 2.9 ) | 60.8 ( 2.0 ) | 75.9 ( 2.4 ) | 90.5 ( 3.3 ) | 53.6 ( 2.6 ) | 72.0 ( 3.0 ) | 86.0 ( 3.4 ) | 49.0 ( 2.8 ) | 67.5 ( 3.1 ) | 83.0 ( 3.2 ) | 43.6 ( 2.8 ) | 63.3 ( 3.0 ) |
| B=4 | B=8 | B=16 | B=32 | |||||||||
| GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | |
| 1 | 90.0 (1.9 ) | 61.8 (1.9 ) | 75.9 (1.9 ) | 90.0 (2.9 ) | 61.2 (2.5 ) | 75.6 (2.7 ) | 90.0 (3.5 ) | 61.4 ( 3.0 ) | 75.7 (3.2 ) | 89.5 (4.7 ) | 59.8 (3.2 ) | 74.6 (3.8 ) |
| 2 | 91.5 ( 2.1 ) | 59.6 ( 2.0 ) | 75.6 ( 2.0 ) | 92.0 (3.2 ) | 60.6 (2.5 ) | 76.3 (2.8 ) | 90.0 (3.9 ) | 61.0 (2.9 ) | 75.5 (3.3 ) | 93.0 ( 4.8 ) | 58.6 ( 3.4 ) | 75.8 ( 4.0 ) |
| 3 | 93.0 (1.9 ) | 61.2 (1.9 ) | 77.1 (1.9 ) | – | – | – | – | – | – | – | – | – |
| 4 | – | – | – | 91.5 ( 3.3 ) | 60.4 ( 2.8 ) | 76.0 ( 3.0 ) | 91.5 (4.1 ) | 59.4 ( 3.0 ) | 75.4 ( 3.5 ) | 91.5 ( 4.8 ) | 58.8 (3.1 ) | 75.2 (3.8 ) |
| 7 | – | – | – | 91.5 (3.2 ) | 58.8 (2.6 ) | 75.2 (2.9 ) | – | – | – | – | – | – |
| B=4 | B=8 | B=16 | B=32 | ||||||||||
| GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | ||
| Static score | |||||||||||||
| -5 | 1 | 90.0 (2.0 ) | 62.0 (1.9 ) | 76.0 (2.0 ) | 92.5 (3.3 ) | 62.6 (2.6 ) | 77.6 (2.9 ) | 90.0 (3.6 ) | 59.0 (2.9 ) | 74.5 (3.2 ) | 89.5 ( 4.7 ) | 59.8 ( 3.4 ) | 74.6 ( 4.0 ) |
| 2 | 93.0 (2.1 ) | 62.0 (2.0 ) | 77.5 (2.1 ) | 91.5 (2.8 ) | 62.6 (2.4 ) | 77.0 (2.6 ) | 91.0 (4.0 ) | 59.8 (3.2 ) | 75.4 (3.6 ) | 90.0 (4.2 ) | 57.0 (3.2 ) | 73.5 (3.7 ) | |
| 4 | 93.0 (2.3 ) | 61.8 (2.0 ) | 77.4 (2.1 ) | 91.5 (3.0 ) | 61.2 (2.5 ) | 76.4 (2.8 ) | 90.5 ( 4.2 ) | 61.4 (3.0 ) | 76.0 (3.5 ) | 90.0 (3.9 ) | 59.8 (3.0 ) | 74.9 (3.4 ) | |
| -1 | 1 | 90.0 (2.2 ) | 62.0 (2.0 ) | 76.0 (2.1 ) | 90.0 (3.0 ) | 61.2 (2.5 ) | 75.6 (2.7 ) | 90.5 ( 4.2 ) | 61.4 (3.2 ) | 76.0 ( 3.7 ) | 90.0 (4.4 ) | 59.8 (3.1 ) | 74.9 (3.7 ) |
| B=4 | B=8 | B=16 | B=32 | ||||||||||
| GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | ||
| Static score | |||||||||||||
| -5 | 1 | 93.0 (2.2 ) | 59.6 (2.1 ) | 76.3 (2.1 ) | 90.5 (3.1 ) | 56.2 (2.7 ) | 73.4 (2.9 ) | 89.5 (3.4 ) | 57.0 (3.1 ) | 73.2 (3.3 ) | 89.5 (3.7 ) | 57.2 ( 3.6 ) | 73.4 (3.6 ) |
| 2 | 93.0 (2.2 ) | 59.6 (1.9 ) | 76.3 (2.1 ) | 90.5 (3.1 ) | 56.2 (2.7 ) | 73.4 (2.9 ) | 90.5 (3.5 ) | 57.0 (3.2 ) | 73.8 (3.3 ) | 89.0 (3.7 ) | 55.6 (3.2 ) | 72.3 (3.4 ) | |
| 4 | 93.0 (2.2 ) | 62.0 (2.0 ) | 77.5 (2.1 ) | 89.0 (3.1 ) | 56.6 (2.9 ) | 72.8 (3.0 ) | 89.5 (3.6 ) | 55.2 (3.2 ) | 72.4 (3.4 ) | 89.5 (3.7 ) | 55.6 (3.3 ) | 72.5 (3.5 ) | |
| -1 | 1 | 93.0 (2.2 ) | 61.8 (2.0 ) | 77.4 (2.1 ) | 91.0 (3.1 ) | 62.6 (2.4 ) | 76.8 (2.8 ) | 90.5 (4.1 ) | 61.4 (3.1 ) | 76.0 (3.6 ) | 92.5 (4.3 ) | 59.8 (3.1 ) | 76.2 (3.6 ) |
| B=4 | B=8 | B=16 | B=32 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | ||
| 0 | -5 | 90.5 (1.8 ) | 62.4 (1.9 ) | 76.4 (1.8 ) | 91.5 (3.2 ) | 63.6 (2.7 ) | 77.6 (3.0 ) | 89.0 (4.0 ) | 60.2 (2.6 ) | 74.6 (3.1 ) | 91.0 (4.3 ) | 59.2 (3.0 ) | 75.1 (3.5 ) |
| -1 | 93.0 (2.1 ) | 62.4 (1.9 ) | 77.7 (2.0 ) | 89.5 (3.2 ) | 63.6 (2.6 ) | 76.6 (2.9 ) | 91.5 ( 4.1 ) | 60.2 (3.0 ) | 75.8 (3.5 ) | 91.0 (4.0 ) | 59.4 (3.1 ) | 75.2 (3.5 ) | |
| 1 | -5 | 91.5 (2.1 ) | 62.4 ( 2.0 ) | 77.0 (2.0 ) | 89.0 (3.3 ) | 59.8 (2.7 ) | 74.4 (3.0 ) | 91.5 (3.8 ) | 59.4 (2.9 ) | 75.4 (3.3 ) | 90.5 (4.2 ) | 55.8 ( 3.2 ) | 73.2 ( 3.7 ) |
| -1 | 91.5 (1.9 ) | 62.4 (1.9 ) | 77.0 (1.9 ) | 88.5 (3.1 ) | 59.8 (2.6 ) | 74.2 (2.9 ) | 91.0 ( 4.1 ) | 61.4 ( 3.2 ) | 76.2 ( 3.6 ) | 91.5 ( 4.4 ) | 57.4 (3.1 ) | 74.4 (3.6 ) | |
| 5 | -5 | 91.0 ( 2.5 ) | 60.6 ( 2.0 ) | 75.8 ( 2.3 ) | 89.5 ( 3.4 ) | 53.6 ( 2.8 ) | 71.5 ( 3.1 ) | 92.5 (3.7 ) | 50.4 (2.9 ) | 71.5 (3.3 ) | 87.5 (3.7 ) | 51.6 (3.1 ) | 69.5 (3.4 ) |
| B=4 | B=8 | B=16 | B=32 | |||||||||
| GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | |
| Tuple | ||||||||||||
| 0.2 | 92.5 (2.2 ) | 53.4 (1.9 ) | 73.0 (2.1 ) | 87.0 (3.4 ) | 49.0 (2.5 ) | 68.0 (2.9 ) | 87.0 (3.4 ) | 50.2 (2.7 ) | 68.6 (3.0 ) | 83.5 (4.2 ) | 52.6 ( 3.2 ) | 68.0 (3.6 ) |
| 0.5 | 91.5 (2.2 ) | 55.4 (2.0 ) | 73.5 (2.1 ) | 89.5 ( 3.5 ) | 51.6 ( 2.7 ) | 70.5 ( 3.1 ) | 89.5 (3.6 ) | 52.0 (2.8 ) | 70.8 (3.2 ) | 82.5 (3.8 ) | 49.6 (2.8 ) | 66.0 (3.2 ) |
| 1 | 92.5 (2.3 ) | 55.0 (2.0 ) | 73.8 (2.2 ) | 85.5 (3.4 ) | 47.6 ( 2.7 ) | 66.5 (3.0 ) | 86.0 (3.9 ) | 50.8 (2.9 ) | 68.4 (3.3 ) | 81.5 (3.5 ) | 48.6 (2.9 ) | 65.0 (3.2 ) |
| 2 | 91.5 (2.3 ) | 53.6 (1.8 ) | 72.5 (2.0 ) | 87.5 (2.7 ) | 49.8 (2.4 ) | 68.7 (2.5 ) | 87.5 (3.8 ) | 48.0 (2.9 ) | 67.8 (3.3 ) | 83.0 (3.8 ) | 50.0 (3.0 ) | 66.5 (3.3 ) |
| Config-A | Config-B | |||||
|---|---|---|---|---|---|---|
| GSM8K | MBPP | Avg | GSM8K | MBPP | Avg | |
| 0.5 | 89.5 (1.02 ) | 60.0 (1.06 ) | 74.8 (1.03 ) | 88.5 (1.02 ) | 58.0 (1.00 ) | 73.2 (1.01 ) |
| 0.75 | 89.5 (0.99 ) | 62.0 (1.06 ) | 75.8 (1.01 ) | 90.5 (0.99 ) | 58.5 (0.95 ) | 74.5 (0.98 ) |
| 1.0 | 89.5 (1.00 ) | 64.0 (1.00 ) | 76.8 (1.00 ) | 89.5 (1.00 ) | 60.5 (1.00 ) | 75.0 (1.00 ) |
| 1.25 | 89.5 (1.00 ) | 60.5 (1.07 ) | 75.0 (1.02 ) | 90.5 (0.93 ) | 60.5 (0.96 ) | 75.5 (0.94 ) |
| 1.5 | 90.5 (1.00 ) | 60.5 (0.96 ) | 75.5 (0.99 ) | 90.5 (1.01 ) | 60.0 (0.96 ) | 75.2 (1.00 ) |
Speculative Decoding for Diffusion Language Models
Speculative decoding for diffusion language models speeds generation by drafting tokens in parallel and verifying them efficiently.
See all 33 papers