DiffusionGemma + ORL: DiffusionGemma-26B-A4B post-trained with On-Policy Residual Learning (ORL); it decodes 3-6 more tokens per forward than DiffusionGemma at comparable quality
Accuracy (%) / TPF; each model uses its selected decoder.
| Model | GSM8K | MATH-500 | HumanEval | MBPP |
|---|---|---|---|---|
| DiffusionGemma-26B-A4B | 95.8 / 26.0 | 92.3 / 23.7 | 90.9 / 24.5 | 87.7 / 23.1 |
| DiffusionGemma-26B-A4B-it-ORL | 96.0 / 30.0 | 92.3 / 27.4 | 91.9 / 27.9 | 87.4 / 28.7 |

Tokens per second for a single request, measured with dlmrt unless noted, with the paper's prompts and decoders (the paper reports the base model on GSM8K and HumanEval):
| Model | GPU, precision | GSM8K | MATH-500 | HumanEval | MBPP |
|---|---|---|---|---|---|
| DiffusionGemma-26B-A4B (vLLM) | H100, BF16 | 990 | β | 963 | β |
| DiffusionGemma-26B-A4B | H100, BF16 | 1,271 | β | 1,196 | β |
| DiffusionGemma-26B-A4B-it-ORL | H100, BF16 | 1,456 | 1,415 | 1,378 | 1,361 |
| DiffusionGemma-26B-A4B-it-ORL-NVFP4 | RTX 5090, NVFP4 | 1,540 | 1,408 | 1,490 | 1,465 |
| DiffusionGemma-26B-A4B-it-ORL-NVFP4 | B200, NVFP4 | 4,214 | 3,805 | 3,949 | 3,898 |
| DiffusionGemma-26B-A4B-it-ORL-NVFP4 | 8Γ B200, NVFP4 | 7,708 | 7,123 | 7,026 | 6,871 |
The 8Γ B200 and RTX 5090 rows use generation seed 1234.
Plain
transformersgeneration does not run the paper's decoding. Two engines do: dlmrt, our inference engine, and the ORL repository's patched vLLM (evaluation/inference/vllm/patches) with its recorded sampler, which the paper's evaluation uses.
dlmrt, our inference engine, decodes one request at a time with the paper's decoder (role="orl")
and measures the paper's throughput; see its README for installation, tensor parallelism and the commands of every
paper cell.
from dlmrt import LLM
llm = LLM("yifanyu/DiffusionGemma-26B-A4B-it-ORL", role="orl")
out = llm.generate("Write a Python function that reverses a linked list.", max_new_tokens=2048)
print(out.text)
print(f"{out.request_tps:.0f} tokens/s")
python -m dlmrt serve --model yifanyu/DiffusionGemma-26B-A4B-it-ORL --role orl --port 18080
curl -N localhost:18080/generate -d '{"messages": [{"role": "user", "content": "Hi!"}], "max_new_tokens": 512}'
Evaluate it with the paper's protocol (GSM8K, MATH-500, HumanEval, MBPP) using the repository's evaluation pipeline; DiffusionGemma generation is not bit-deterministic, so results vary slightly between runs:
git clone https://github.com/Introspective-Diffusion/ORL orl && cd orl/evaluation
export ORL_EVAL_WORK=/path/to/eval-work
bash scripts/build_images.sh && bash scripts/prepare.sh
hf download yifanyu/DiffusionGemma-26B-A4B-it-ORL --local-dir $ORL_EVAL_WORK/hf/DiffusionGemma-26B-A4B-it-ORL
bash scripts/main_table.sh dg-orl $ORL_EVAL_WORK/hf/DiffusionGemma-26B-A4B-it-ORL
Serve it as the evaluation does (one 80 GB GPU; an OpenAI-compatible server on 127.0.0.1:8000, model name dg,
with the GSM8K context length and sampler):
apptainer exec --nv -B "$PWD,$ORL_EVAL_WORK" --env PYTHONPATH=$PWD $ORL_EVAL_WORK/images/vllm-dg-orl.sif \
python3 -m runtime.vllm.serve --model-root $ORL_EVAL_WORK/hf/DiffusionGemma-26B-A4B-it-ORL --role orl \
--benchmark gsm8k --out $ORL_EVAL_WORK/dg-server --execute
ORL trains on fresh, verified trajectories of the current model, replays the exact residual inputs each denoising
step consumed, and adds adjacent entropy contraction (AEC) so that refinement gets faster, not only more accurate.
This checkpoint is step 900 of the paper run on a mixture of 819 GSM8K, 819 MATH and 819 Python problems, on two
nodes of 8 Γ H100 (actor and rollout). training/scripts/reproduce_diffusion_gemma.sh in the code repository reruns
the recipe; MoE kernels accumulate in a nondeterministic order, so reruns differ slightly.
Paper role dg-orl, training step 900. checkpoint_manifest.json records the hashes of the weights, tokenizer and
configuration, and paper_decoding.json the engine and benchmark-specific decoding settings, which downloading the
model does not apply.
| Model | Hugging Face | Description |
|---|---|---|
| DiffusionGemma-26B-A4B | google/diffusiongemma-26B-A4B-it | Start model of this checkpoint |
| QwenDLM-4B | yifanyu/QwenDLM-4B | Qwen3-4B-Thinking-2507 converted to block diffusion; start model of QwenDLM-4B-ORL |
| QwenDLM-4B-ORL | yifanyu/QwenDLM-4B-ORL | ORL on QwenDLM-4B |
| LLaDA2.1-mini-ORL | yifanyu/LLaDA2.1-mini-ORL | ORL on LLaDA-2.1-mini |
| LLaDA2.1-mini-ORL-NVFP4 | yifanyu/LLaDA2.1-mini-ORL-NVFP4 | NVFP4 quantization of LLaDA2.1-mini-ORL |
| DiffusionGemma-26B-A4B-it-ORL | yifanyu/DiffusionGemma-26B-A4B-it-ORL | This model |
| DiffusionGemma-26B-A4B-it-ORL-NVFP4 | yifanyu/DiffusionGemma-26B-A4B-it-ORL-NVFP4 | NVFP4 quantization of DiffusionGemma-26B-A4B-it-ORL |
| ORL-training-data | yifanyu/ORL-training-data | Dataset of the three ORL training runs |
@misc{yu2026orl,
title = {On-Policy Residual Learning for Diffusion Language Models},
author = {Yu, Yifan and Jian, Yuqing and Li, Jisen and Hu, Yuezhou and Zhang, Tianyi and Wu, Xiaoxia and
Zhu, Rui-Jie and Wang, Junxiong and Zhou, Zhongzhu and Lai, Fan and Zou, James and Xu, Chenfeng},
year = {2026},
eprint = {2610.20687},
archivePrefix = {arXiv},
primaryClass = {cs.LG},
url = {https://arxiv.org/abs/2610.20687}
}
DiffusionGemma + ORL: DiffusionGemma-26B-A4B post-trained with On-Policy Residual Learning (ORL); it decodes 3-6 more tokens per forward than DiffusionGemma at comparable quality
Accuracy (%) / TPF; each model uses its selected decoder.
| Model | GSM8K | MATH-500 | HumanEval | MBPP |
|---|---|---|---|---|
| DiffusionGemma-26B-A4B | 95.8 / 26.0 | 92.3 / 23.7 | 90.9 / 24.5 | 87.7 / 23.1 |
| DiffusionGemma-26B-A4B-it-ORL | 96.0 / 30.0 | 92.3 / 27.4 | 91.9 / 27.9 | 87.4 / 28.7 |

Tokens per second for a single request, measured with dlmrt unless noted, with the paper's prompts and decoders (the paper reports the base model on GSM8K and HumanEval):
| Model | GPU, precision | GSM8K | MATH-500 | HumanEval | MBPP |
|---|---|---|---|---|---|
| DiffusionGemma-26B-A4B (vLLM) | H100, BF16 | 990 | β | 963 | β |
| DiffusionGemma-26B-A4B | H100, BF16 | 1,271 | β | 1,196 | β |
| DiffusionGemma-26B-A4B-it-ORL | H100, BF16 | 1,456 | 1,415 | 1,378 | 1,361 |
| DiffusionGemma-26B-A4B-it-ORL-NVFP4 | RTX 5090, NVFP4 | 1,540 | 1,408 | 1,490 | 1,465 |
| DiffusionGemma-26B-A4B-it-ORL-NVFP4 | B200, NVFP4 | 4,214 | 3,805 | 3,949 | 3,898 |
| DiffusionGemma-26B-A4B-it-ORL-NVFP4 | 8Γ B200, NVFP4 | 7,708 | 7,123 | 7,026 | 6,871 |
The 8Γ B200 and RTX 5090 rows use generation seed 1234.
Plain
transformersgeneration does not run the paper's decoding. Two engines do: dlmrt, our inference engine, and the ORL repository's patched vLLM (evaluation/inference/vllm/patches) with its recorded sampler, which the paper's evaluation uses.
dlmrt, our inference engine, decodes one request at a time with the paper's decoder (role="orl")
and measures the paper's throughput; see its README for installation, tensor parallelism and the commands of every
paper cell.
from dlmrt import LLM
llm = LLM("yifanyu/DiffusionGemma-26B-A4B-it-ORL", role="orl")
out = llm.generate("Write a Python function that reverses a linked list.", max_new_tokens=2048)
print(out.text)
print(f"{out.request_tps:.0f} tokens/s")
python -m dlmrt serve --model yifanyu/DiffusionGemma-26B-A4B-it-ORL --role orl --port 18080
curl -N localhost:18080/generate -d '{"messages": [{"role": "user", "content": "Hi!"}], "max_new_tokens": 512}'
Evaluate it with the paper's protocol (GSM8K, MATH-500, HumanEval, MBPP) using the repository's evaluation pipeline; DiffusionGemma generation is not bit-deterministic, so results vary slightly between runs:
git clone https://github.com/Introspective-Diffusion/ORL orl && cd orl/evaluation
export ORL_EVAL_WORK=/path/to/eval-work
bash scripts/build_images.sh && bash scripts/prepare.sh
hf download yifanyu/DiffusionGemma-26B-A4B-it-ORL --local-dir $ORL_EVAL_WORK/hf/DiffusionGemma-26B-A4B-it-ORL
bash scripts/main_table.sh dg-orl $ORL_EVAL_WORK/hf/DiffusionGemma-26B-A4B-it-ORL
Serve it as the evaluation does (one 80 GB GPU; an OpenAI-compatible server on 127.0.0.1:8000, model name dg,
with the GSM8K context length and sampler):
apptainer exec --nv -B "$PWD,$ORL_EVAL_WORK" --env PYTHONPATH=$PWD $ORL_EVAL_WORK/images/vllm-dg-orl.sif \
python3 -m runtime.vllm.serve --model-root $ORL_EVAL_WORK/hf/DiffusionGemma-26B-A4B-it-ORL --role orl \
--benchmark gsm8k --out $ORL_EVAL_WORK/dg-server --execute
ORL trains on fresh, verified trajectories of the current model, replays the exact residual inputs each denoising
step consumed, and adds adjacent entropy contraction (AEC) so that refinement gets faster, not only more accurate.
This checkpoint is step 900 of the paper run on a mixture of 819 GSM8K, 819 MATH and 819 Python problems, on two
nodes of 8 Γ H100 (actor and rollout). training/scripts/reproduce_diffusion_gemma.sh in the code repository reruns
the recipe; MoE kernels accumulate in a nondeterministic order, so reruns differ slightly.
Paper role dg-orl, training step 900. checkpoint_manifest.json records the hashes of the weights, tokenizer and
configuration, and paper_decoding.json the engine and benchmark-specific decoding settings, which downloading the
model does not apply.
| Model | Hugging Face | Description |
|---|---|---|
| DiffusionGemma-26B-A4B | google/diffusiongemma-26B-A4B-it | Start model of this checkpoint |
| QwenDLM-4B | yifanyu/QwenDLM-4B | Qwen3-4B-Thinking-2507 converted to block diffusion; start model of QwenDLM-4B-ORL |
| QwenDLM-4B-ORL | yifanyu/QwenDLM-4B-ORL | ORL on QwenDLM-4B |
| LLaDA2.1-mini-ORL | yifanyu/LLaDA2.1-mini-ORL | ORL on LLaDA-2.1-mini |
| LLaDA2.1-mini-ORL-NVFP4 | yifanyu/LLaDA2.1-mini-ORL-NVFP4 | NVFP4 quantization of LLaDA2.1-mini-ORL |
| DiffusionGemma-26B-A4B-it-ORL | yifanyu/DiffusionGemma-26B-A4B-it-ORL | This model |
| DiffusionGemma-26B-A4B-it-ORL-NVFP4 | yifanyu/DiffusionGemma-26B-A4B-it-ORL-NVFP4 | NVFP4 quantization of DiffusionGemma-26B-A4B-it-ORL |
| ORL-training-data | yifanyu/ORL-training-data | Dataset of the three ORL training runs |
@misc{yu2026orl,
title = {On-Policy Residual Learning for Diffusion Language Models},
author = {Yu, Yifan and Jian, Yuqing and Li, Jisen and Hu, Yuezhou and Zhang, Tianyi and Wu, Xiaoxia and
Zhu, Rui-Jie and Wang, Junxiong and Zhou, Zhongzhu and Lai, Fan and Zou, James and Xu, Chenfeng},
year = {2026},
eprint = {2610.20687},
archivePrefix = {arXiv},
primaryClass = {cs.LG},
url = {https://arxiv.org/abs/2610.20687}
}