| name | dparallel-diffusion-llm-parallel-decoding |
| title | dParallel: Certainty-Forcing for Parallel Decoding in Diffusion LLMs |
| version | 0.0.2 |
| engine | skillxiv-v0.0.2-claude-opus-4.6 |
| license | MIT |
| url | https://arxiv.org/abs/2509.26488 |
| keywords | ["diffusion-language-models","parallel-decoding","inference-optimization","distillation"] |
| description | Enable Diffusion Language Models to achieve 8.5x inference speedup (24-30 steps vs. 256) through certainty-forcing distillation that trains models to achieve simultaneous high confidence across multiple tokens. Use when optimizing inference latency for dLLM deployments. |
dParallel: Certainty-Forcing for Parallel Decoding in Diffusion LLMs
Diffusion Language Models theoretically support parallel token prediction but suffer from sequential token certainty convergence. dParallel enables highly parallel decoding through targeted training that forces simultaneous high confidence across multiple token positions, reducing inference steps from 256 to 24-30.
Core Architecture
- Certainty-forcing distillation: Training objective that penalizes insufficient confidence synchronicity
- Parallel token prediction: Generate multiple tokens per diffusion step with equal confidence
- Self-distillation framework: No external data needed; leverages model's own outputs
- Gradient-efficient training: 10 hours on 8 A5000 GPUs (24GB each)
Implementation Steps
Implement certainty-forcing distillation objective:
from dparallel import CertaintyForcingTrainer
trainer = CertaintyForcingTrainer(
model=your_dllm,
distillation_temperature=0.5,
parallel_tokens=8,
min_confidence_threshold=0.8,
max_steps_reduction=230
)
trainer.setup_self_distillation(
batch_size=32,
num_training_steps=5000,
gradient_accumulation=4
)
Execute training with confidence synchronization:
for step, batch in enumerate(dataloader):
tokens = batch["input_ids"]
logits = model.forward_with_noise(tokens)
loss = trainer.certainty_forcing_loss(
logits=logits,
target_tokens=tokens,
position_group_size=8,
target_variance=,
beta=
)
loss.backward()
optimizer.step()
optimizer.zero_grad()
step % == :
confidence_std = trainer.measure_position_confidence_variance(logits)
()