Every mainstream LLM you have used writes left to right, one token at a time. That is a modeling choice, not a law of nature, and it is the reason decode is the slow, memory-bound half of the serving problem. Diffusion language models (dLLMs) make a different choice: start with a whole block of placeholder tokens and refine all of them in parallel over a few passes. In the last year this went from a research topic to a commercial API (Inception’s Mercury family) and an open-weights release from Google (DiffusionGemma). This is a working note on how the idea works, what the papers show, and what is still only a vendor claim.

TL;DR — Autoregressive decode reads every weight to emit one token, so it is memory-bandwidth-bound. A diffusion LM refines a whole block per pass, so each weight read produces many tokens and the bottleneck moves toward compute. That is why dLLMs are very fast at low concurrency. The costs: a quality gap to the autoregressive model they are derived from, awkward KV caching, and a throughput advantage that fades as concurrency grows: DiffusionGemma’s own report has it ahead of the autoregressive baseline only up to about 32 concurrent users.

Throughout, I rely on papers and first-party technical material, and I label anything that is a vendor claim or my own back-of-envelope reasoning. The interactive figures are marked as toy, illustrative or measured so you can tell which is which.

1. The bottleneck diffusion is aimed at

If you have read Serving LLMs: what actually decides your latency, the setup is familiar. An autoregressive (AR) model generates a token, appends it, and runs the whole network again. Each step reads all (active) weights from GPU memory to produce one token, so the arithmetic units mostly wait on memory. Batching many users together hides this, but a single request still gets one token per forward pass, and the passes are strictly sequential.

Speculative decoding and multi-token prediction attack the same wall from inside the AR framework: guess several tokens, verify them in one pass. Diffusion attacks it from the other side, by changing how the text is produced in the first place. Figure 1 shows the difference on a toy sentence.

Figure 1 · One token per pass vs a block per pass
Autoregressive0 / 12 forward passes
Diffusion (masked)0 / 4 forward passes
Same 12-token sentence, same number of weight reads per pass.
Toy example. The autoregressive model needs one pass per token. The diffusion model starts fully masked and commits its most confident positions together, so this sentence takes 4 passes. Real block-diffusion models do more work per pass: DiffusionGemma uses up to 48 denoising steps (about 12 on average) for a 256-token block.

2. How a text diffusion model works

Image diffusion starts from noise and denoises toward a picture. Text is discrete, so the dominant recipe for language is masked diffusion, studied in D3PM-style discrete diffusion and simplified in MDLM (Sahoo et al., NeurIPS 2024), which shows that a simple masked objective, reducing to a mixture of classical masked-language-modeling losses, approaches AR perplexity. Two stages define the method:

  • Forward (training) process. Take a real sequence $x_0$. Pick a masking ratio $t \in (0, 1]$ at random and replace each token with a special [MASK] with probability $t$. At $t = 1$ everything is masked.
  • Reverse (generation) process. A Transformer reads the partly masked sequence and predicts the original tokens at the masked positions. Generation starts from an all-masked block and repeatedly commits the positions it is most confident about, until nothing is masked.

LLaDA trains an 8B model from scratch this way, optimizing a likelihood bound that is a weighted cross-entropy on the masked positions only:

\[\mathcal{L}(\theta) = -\,\mathbb{E}_{t,\,x_0,\,x_t}\left[\frac{1}{t}\sum_{i=1}^{L} \mathbf{1}[x_t^i = \texttt{[MASK]}]\;\log p_\theta\!\left(x_0^i \mid x_t\right)\right]\]

The LLaDA authors report it competitive with their LLaMA3 8B baseline on in-context learning. Two properties fall out of this and drive everything that follows:

  1. Attention is bidirectional. The model sees the whole block, left and right, while denoising. An AR model only sees the past.
  2. Many tokens can be committed per pass. The sampler can commit several confident positions at once, so you get more than one token per forward pass. Tokens per forward pass (TPF) is the number to watch.
Figure 2 · Masked diffusion: the noise is just [MASK]
Illustrative. Training: pick a noise level t, mask each token independently with probability t, and train the Transformer to predict the original tokens at the masked positions only (the loss marker). Generation: run it in reverse. The model scores every masked position, and the sampler commits the most confident ones first. The bars are example confidences; in a real model they are recomputed after every pass.
  Autoregressive Masked diffusion
Order left to right, fixed any order, chosen by confidence
Tokens per forward pass 1 many (TPF > 1)
Attention causal bidirectional within the block
Can revise earlier output no yes, in some designs
Decode bottleneck memory bandwidth shifts toward compute

3. Why it is fast, and when it stops being fast

Take the AR decode loop and ask what a forward pass costs. The weights are read once either way. AR spends that read on one token; a diffusion model spends it on a whole block. The extra tokens are mostly extra arithmetic on data that is already on-chip, so the GPU stops idling on memory. Google’s developer guide describes DiffusionGemma’s speed-up in exactly these terms: the bottleneck shifts from memory bandwidth to compute.

That framing also tells you when the advantage should disappear. A diffusion pass processes the whole canvas but commits only TPF tokens, so it does roughly $256 / \mathrm{TPF}$ positions of work per committed token (my arithmetic from the report’s numbers: about 13 for a 256-token canvas at TPF of about 20), where AR does 1. When the GPU is idle at batch size 1, that extra work is free. When a batch already saturates the GPU, it is not. Figure 4 is a deliberately simple model of this; play with the batch slider.

Figure 4 · Toy model: why block decoding is fast, and when it stops being fast
Autoregressive pass
read weights
compute
Diffusion pass (256-token canvas)
read weights
compute
Toy model, not a benchmark. A pass takes as long as the slower of reading the weights (once, whatever the batch) and doing the arithmetic (grows with batch and with positions processed). An autoregressive pass processes 1 position per request; a diffusion pass processes a 256-position canvas per request but commits TPF tokens. At batch 1 the weight read dominates and committing many tokens per read wins. As the batch grows, arithmetic dominates and the diffusion model's extra work per committed token (about 256 ÷ TPF positions) starts to cost you. The default ratio of 1.0 is my back-of-envelope for a dense bf16 model on an H100-class GPU (arithmetic-intensity ridge of roughly 300 FLOPs/byte, so a 256-token pass is about one weight read); real kernels, MoE routing and FP8 move it. For reference, the DiffusionGemma report measures TPF of about 20 and a 7.1x speed-up at batch size 1, and finds that it stays ahead of Gemma 4 with MTP on per-user and total throughput up to about 32 concurrent users, after which AR pulls ahead. My defaults cross over at a lower batch size; the model is not calibrated to that result.

Two practical consequences:

  • Diffusion helps most at low concurrency: interactive use, single-user, on-device, latency-sensitive agents.
  • At high concurrency the advantage fades. The DiffusionGemma report’s limitations section says it outperforms Gemma 4 with multi-token prediction on both per-user and total throughput up to about 32 concurrent users; beyond that, “the higher per-token compute cost causes AR models to gain a throughput advantage.” These results are without targeted batch-size optimization, and the authors list analysis under realistic traffic as future work. Figure 4’s toy model crosses over at a similar order of magnitude, but it is not calibrated to this result.

4. The cast, and what each one actually tells us

4.1 Block diffusion: the idea behind the practical models

Pure diffusion over a whole sequence has two practical problems: output length is fixed up front, and the KV cache is hard to use because every token can change at every step. Block Diffusion (Arriola et al., ICLR 2025 oral) interpolates between the two worlds: autoregressive across blocks, diffusion within each block. That gives KV caching, parallel token sampling and arbitrary-length output. Most of the practical systems below use some form of this idea.

4.2 DiffusionGemma (Google): the best-documented practical case

Released in June 2026 under Apache 2.0, DiffusionGemma ships with weights and a technical report.

  • Converted from an AR model, not trained from scratch. It is a fine-tune of the Gemma 4 26B-A4B mixture-of-experts model (about 3.8B active parameters), using less than 10% of the AR model’s training tokens. Dream 7B uses the same trick at smaller scale, initializing a diffusion model from an AR LLM.
  • Block decoding. It denoises a 256-token “canvas” in parallel; finished canvases are appended to the KV cache. Prefill is causal, denoising is bidirectional (Figure 3).
  • Few steps. Up to 48 denoising steps, about 12 on average with adaptive stopping. A second training stage (reward maximization plus sampler distillation) is reported to raise tokens per forward pass from about 5 to nearly 20.
Figure 3 · Block-diffusion decoding, step by step
1 · PREFILLPrompt runs once with causal attention and fills the KV cache.
2 · NEW CANVAS256 placeholder positions for the next block of output.
3 · DENOISESeveral passes with bidirectional attention over the canvas and the cache.
4 · COMMITFinished block is appended to the KV cache like ordinary context.
CANVAS (256 tokens, drawn as 16 cells)
KV CACHE (read-only context for the next canvas)
Schematic of DiffusionGemma-style decoding as described in Google's developer guide and technical report: a 256-token canvas is denoised in parallel, up to 48 steps (about 12 on average with adaptive stopping), and each finished canvas is added to the KV cache before the next one starts. This is the same hybrid idea as Block Diffusion (Arriola et al., ICLR 2025): autoregressive across blocks, diffusion within a block.
  • Speed (measured by the authors). On one H100 (FP8, batch size 1, 4096 input and 1024 output tokens): about 1,479 tokens/s against 204 for AR Gemma 4, which the authors call 7.1x, and 4.8x over Gemma 4 with multi-token prediction. Google’s blog uses the more conservative “up to 4x”.
Figure 6 · Measured decode speed, one H100, batch size 1
Gemma 4 (AR)1 token / pass
Gemma 4 + MTP~1.4 tokens / pass
DiffusionGemma~19.7 tokens / pass
Source: DiffusionGemma technical report (arXiv:2608.00146): FP8, batch size 1, 4096 input and 1024 output tokens. The authors report 7.1x over autoregressive Gemma 4 and 4.8x over Gemma 4 with multi-token prediction (MTP). Same base model, same hardware. These are batch-size-1 numbers: the same report finds the advantage over Gemma 4 with MTP ends at about 32 concurrent users (see Section 3).
  • The price (measured by the authors). In thinking mode it trails the AR model it was converted from:
Benchmark DiffusionGemma Gemma 4 (AR)
AIME 2026 69.1 84.2
GPQA Diamond 73.2 79.8
LiveCodeBench v6 69.1 71.4
HumanEval 94.5 98.2
MMLU-Pro 77.6 78.8
IFEval 97.4 97.2

The report states that the adaptation carries a performance penalty, and Google calls the model experimental. The shape is consistent: a large speed-up, a visible gap on the hardest reasoning tasks, and almost none on easier ones. Its limitations section also lists short, concise outputs and occasional token stuttering.

4.3 LLaDA2.x (Inclusion AI, Ant Group): open research at scale

The LLaDA2.x series is from Inclusion AI at Ant Group, released under Apache 2.0.

  • LLaDA2.0 (paper: Scaling Up Diffusion Language Models to 100B, Nov 2025) ships 16B “mini” and 100B “flash” mixture-of-experts models, presented as the first diffusion LM scaled to the 100B level.
  • LLaDA2.1 (paper: Speeding Up Text Diffusion via Token Editing, Feb 2026) adds token editing. Standard decoding is mask-to-token (M2T); LLaDA2.1 adds token-to-token (T2T) edits, so the model can revise tokens it already wrote. The paper describes a speedy and a quality mode and reports up to 892 tokens/s on HumanEval+ for the 100B model, plus the first large-scale reinforcement-learning framework for dLLMs. The paper evaluates the models on 33 benchmarks.
Figure 5 · Token editing: a diffusion model can take a token back
Illustrative. LLaDA2.1 adds token-to-token (T2T) editing on top of standard mask-to-token (M2T) decoding. A Speedy mode lowers the commit threshold so tokens are committed aggressively and relies on T2T edits to repair mistakes; a Quality mode uses conservative thresholds (LLaDA2.1 paper, arXiv:2602.08676). An autoregressive model cannot do this: once a token is emitted, it is part of the context forever.

The editing idea is the most interesting conceptual step in this space: an AR model can never take back a token, a diffusion model in principle can.

4.4 Mercury (Inception Labs): the commercial family

Mercury is Inception’s closed, API-only family of diffusion LLMs. The Mercury paper (June 2025) describes Transformer-based models trained to predict multiple tokens in parallel. For Mercury Coder it reports throughput on H100 GPUs of 1,109 tokens/s (Mini) and 737 tokens/s (Small), as measured by Artificial Analysis, and up to 10x faster on average than speed-optimized frontier models at comparable quality.

Mercury 3 launched on October 19, 2026. Inception’s announcement claims about 1,068 tokens/s on NVIDIA GPUs and 4 to 8x the speed of GPT-6 Luna and Claude Haiku 5.5 at comparable quality. These are vendor claims: no benchmark scores or training details are published, and I could not find an independent measurement yet.

4.5 Beyond the big three: serving systems and hybrids

  • dInfer (Inclusion AI). An open-source inference framework for dLLMs that splits the pipeline into a model, a diffusion iteration manager, a decoding strategy and a KV-cache manager. On LLaDA-MoE at batch size 1 it reports over 1,100 tokens/s on HumanEval (about 800 averaged over six benchmarks) on 8 H800 GPUs, about 10x faster than Fast-dLLM, and 2 to 3x faster than the autoregressive Qwen2.5-3B served with vLLM. This is the clearest evidence that the serving stack, not only the model, decides how fast a dLLM is.
  • Seed Diffusion. A large-scale discrete diffusion model for code whose authors report 2,146 tokens/s on H20 GPUs while staying competitive on code benchmarks, and claim it is faster than Mercury and Gemini Diffusion. These are the authors’ own measurements, on different hardware from the figures above, so they are not directly comparable.
  • Nemotron-Labs-Diffusion. A tri-mode model (3B, 8B and 14B) trained to decode autoregressively, with diffusion, or in a self-speculation mode where diffusion drafts tokens and the AR path verifies them. The authors report about 6x the tokens per forward pass of Qwen3-8B at similar accuracy, and about 4x higher throughput on SPEED-Bench with SGLang on a GB200 GPU. The design choice is the interesting part: instead of picking a side, one model switches mode to suit the concurrency level, which fits the batch-size picture in Section 3.

5. What gets harder

  • KV caching. AR caching works because past tokens never change. In a bidirectional denoiser, every token’s representation can change at every step, so a naive cache is invalid. Block diffusion caches finished blocks. Fast-dLLM adds a training-free, block-wise approximate KV cache plus confidence-aware parallel decoding to LLaDA and Dream, reporting up to 27.6x throughput with minimal accuracy loss.
  • Quality vs steps. Committing too many tokens in one pass breaks local coherence, because tokens decided simultaneously cannot condition on each other; Fast-dLLM attributes the quality loss to exactly this broken dependency, and fixes it by committing only tokens above a confidence threshold. The DiffusionGemma report mentions repetitive loops at low step counts before its second training stage. Fewer steps is faster and worse; the sampler is the dial.
  • Compute per committed token. As Figure 4 shows, the work you save in memory traffic you partly spend in arithmetic. This is why DiffusionGemma’s throughput advantage ends at moderate concurrency (about 32 users in its report), and it is the main open question for high-concurrency serving.
  • Variable length. An AR model stops by emitting an end token. A fixed canvas has to decide its length up front or pad; block diffusion addresses this by chaining canvases.
  • Serving stacks. Continuous batching, paged KV cache and scheduling were designed around one-token-per-step decode. DiffusionGemma’s developer guide documents serving through vLLM, SGLang, MLX and Transformers, so support is arriving, but high-concurrency behavior is where I would look for surprises.
  • Post-training tooling. RL, structured output and tool calling are mature for AR models. LLaDA2.1’s RL framework shows dLLMs catching up, but expect rougher edges.

6. Where it fits

Diffusion looks strongest where the user feels latency directly and the task tolerates a small quality trade-off:

  • Interactive coding, completion and editing. Infilling and next-edit suit a model that sees both sides of a position.
  • Voice and real-time agents. Time to first token and short end-to-end latency dominate.
  • Agent loops with many sequential calls. Per-call latency multiplies.
  • Small-batch or on-device inference, where compute is spare.

AR models keep the edge when you need the highest reasoning accuracy, when you serve at high concurrency on saturated GPUs, or when you depend on the mature tooling around them.

7. A short checklist

  • Is your bottleneck per-request latency at low concurrency? Diffusion is worth testing. Is it aggregate throughput on a saturated GPU? Expect the advantage to fade: DiffusionGemma’s report puts the crossover with an MTP-accelerated AR model at about 32 concurrent users.
  • Treat vendor speed numbers as ceilings. Ask for batch size, hardware, reasoning setting and sequence lengths.
  • Expect a quality gap on the hardest reasoning tasks relative to the AR model of the same family, and measure it on your tasks.
  • Prefer models with open weights or a technical report if you need to reason about behavior. DiffusionGemma and LLaDA2.x are inspectable; Mercury 3 is not.
  • Watch the serving ecosystem and the caching literature. That is where the batch-size-above-1 question will get answered.

Conclusion

Diffusion does not replace autoregressive decoding; it changes the trade. By committing a block of tokens per pass, it turns a memory-bound loop into a compute-bound one, which buys large speed-ups when the GPU would otherwise sit idle: low concurrency, single users, on-device, latency-sensitive agents. The open models back this up with numbers you can inspect. DiffusionGemma reaches about 7x the speed of its autoregressive parent at batch size 1, and pays for it with a quality gap on hard reasoning and a throughput advantage that ends at around 32 concurrent users.

Three things are still unsettled. Mercury 3’s headline numbers are vendor claims with no independent measurement yet. High-concurrency serving is where the evidence is thinnest. And the most promising direction may be hybrids (block diffusion, token editing, self-speculation) that keep autoregressive strengths while borrowing parallelism. If you build latency-sensitive products, diffusion is worth a benchmark on your own workload today; if you serve saturated GPUs at scale, watch the serving research before betting on it.

Further reading

Papers:

First-party material:

Cite this article

If this note was useful in your own writing, cite it as:

@misc{sharma2026diffusionllms,
  title        = {Diffusion LLMs: what changes when you stop generating one token at a time},
  author       = {Sharma, Rahul},
  year         = {2026},
  month        = {October},
  howpublished = {\url{https://rahulsharmavishwakarma.github.io/blog/2026/diffusion-llms/}},
  note         = {Online; accessed \today}
}

Or in APA style:

Sharma, R. (2026, October 20). Diffusion LLMs: what changes when you stop generating one token at a time. Rahul Sharma. https://rahulsharmavishwakarma.github.io/blog/2026/diffusion-llms/