[
](https://github.com/OpenGVLab/SDLM) [
](https://arxiv.org/abs/2509.24007) 🚀 项目主页 [
](https://huggingface.co/collections/OpenGVLab/sdlm-68ac82709d7c343ad36aa552)
我们提出一种 Sequential Diffusion Language Model(SDLM,顺序扩散语言模型),以较低成本激发扩散模型的并行预测能力。具体而言,SDLM 通过将预测范围限制在固定块长度内来减少分布偏移,并通过最长前缀解码方法保证解码顺序,从而在确保生成质量的同时显著提升预测效率。我们的方法可以看作是对自回归(AR)范式的进一步泛化。因此,可以利用预训练的 AR 权重,仅通过少量指令微调,即可快速迁移至扩散框架。
SDLM 以显著更快的解码速度实现了强劲性能。与可比自回归模型相比,其运行速度约为 2 倍,且精度相当;MATH-500 基准测试结果表明,相比其他扩散语言模型,其最高可实现 5 倍加速。

下表提供了 SDLM 系列的概览。
| 模型名称 | 基础模型 🤗 | HF 链接 🤗 |
|---|---|---|
| SDLM-3B-D4 | Qwen2.5-3B | https://huggingface.co/OpenGVLab/SDLM-3B-D4 |
| SDLM-3B-D8 | Qwen2.5-3B | https://huggingface.co/OpenGVLab/SDLM-3B-D8 |
| SDLM-32B-D4 | Qwen2.5-32B | https://huggingface.co/OpenGVLab/SDLM-32B-D4 |
我们提出一种顺序分块掩码预测方法,以减少基于扩散模型的生成过程中的误差累积。该方法利用了一个观察结果:位置索引较低的 token 预测通常能够受益于更可靠的上下文信息,从而降低偏差并提升准确性。

SDLM 展现出强劲性能,并带来显著更快的解码速度。与可比的自回归模型相比,其运行速度约快 2 倍,同时精度与其相当;MATH-500 基准测试的结果也显示,相比其他扩散语言模型,它可实现最高 5 倍的加速。



SDLM-3B(B=4)与 SDLM-3B(B=8)在不同置信度阈值 τ 下,性能与速度之间的权衡。通过调整 τ,可在速度与性能之间实现可控权衡。SpeedUp 表示每次前向传播输出的平均 token 数。

安装依赖
关键包版本:
transformers==4.37.2
torch>=2.5.0将模型生成脚本 sdlm_inference.py 下载到你的工作目录。
我们提供了示例代码,用于通过 transformers 运行 SDLM-32B-D4。
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from sdlm_inference import SDLM_generate
if __name__ == "__main__":
ckpt_hf = 'OpenGVLab/SDLM-32B-D4'
model = AutoModelForCausalLM.from_pretrained(
ckpt_hf,
attn_implementation="eager",
trust_remote_code=True
).to(dtype=torch.float16)
tokenizer = AutoTokenizer.from_pretrained(ckpt_hf)
prompt = '用 Python 写一个斐波那契函数。'
messages = [
{"role": "system", "content": "你是一个乐于助人的助手。"},
{"role": "user", "content": prompt}
]
text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
response, history = SDLM_generate(
model,
tokenizer,
model_inputs,
max_gen_len = 1024,
temperature = 0,
threshold = 0.5,
n_future_tokens = 4,
alg = 'prob_conf', # prob_conf | entropy_conf | self_speculative
save_history = True,
use_cache = True
)
print('response: ', response[0])
print('=======histroy')
for item in history:
print('cur total token ', item[1])
print(item[0][0])
print('--------')环境准备
git clone https://github.com/OpenGVLab/SDLM.git
cd SDLM安装依赖
关键包版本:
transformers==4.37.2
deepspeed==0.16.5
torch>=2.5.0
accelerate==0.32.1注意:如果使用 Flex Attention,需要进行额外配置。
准备训练数据
我们使用的训练数据集在元文件 meta.json 中指定,并按照 ShareGPT 风格组织,符合 InternVL 聊天数据格式。
该数据集由多个开源数据集组成,结构如下:
| 数据集名称 | 样本数 | 领域 |
|---|---|---|
| ScaleQuest-Math | 1,000K | 数学 |
| Opc-sft-stage2 | 436K | 代码 |
| Smoltalk | 1,100K | 通用 |
| Tulu-3-sft-mixture | 939K | 通用 |
| SciRIFF | 79K | 科学 |
| Table-GPT | 13K | 表格 |
| 总计 | 3,506K | -- |
开始训练
所有训练脚本都位于 shell/train 目录中。关键参数包括:
block_size:扩散窗口的大小。当前配置使用 4,我们也尝试了使用 8;更大的窗口尺寸仍在探索中。attn_implementation:注意力实现类型。可选项包括 sdpa、eager 或 flex_attn。使用 Flex Attention 需要进行额外配置。为了快速开始,建议优先使用 sdpa。causal_attn:是否在窗口内使用因果注意力。当前设置为非因果(False)。有关训练的更多详细信息,请参阅 github。
目前,我们使用 Opencompass 进行评估。更多详情,请参阅评估指南。
我们衷心感谢开源社区所作出的基础性贡献:
如果您认为本项目对您的研究有帮助,请考虑引用:
@article{liu2025sdlm,
title={Sequential Diffusion Language Models},
author={Liu, Yangzhou and Cao, Yue and Li, Hao and Luo, Gen and Chen, Zhe and Wang, Weiyun and Liang, Xiaobo and Qi, Biqing and Wu, Lijun and Tian, Changyao and Zhang, Yanting and Li, Yuqiang and Lu, Tong and Qiao, Yu and Dai, Jifeng and Wang, Wenhai},
journal={arXiv preprint arXiv:2509.24007},
year={2025}
}