JetAstra/SDAR
SDAR (Synergy of Diffusion and AutoRegression), a large diffusion language model(1.7B, 4B, 8B, 30B)
🚀 什么是 SDAR?
SDAR(扩散与自回归的协同)是一系列大规模语言模型,结合了两种不同的生成范式:
- 自回归(AR) – 经典的从左到右逐 token 解码方式,训练成本低。
- 离散扩散 – 一种并行解码技术,可一次性生成多个 token。
通过融合 AR 模型的训练效率与扩散模型的高吞吐解码能力,SDAR 实现了 2~4倍的推理速度提升,同时保持与最先进开源 AR 模型相当的准确性。该项目定位为通用 LLM,同时在科学推理任务(如 GPQA、ChemBench)上展现出强大的专业能力。
📦 可用模型(截至 README)
| 模型 | 大小 | 类型 | Hugging Face 链接 |
|---|---|---|---|
| SDAR‑1.7B‑Chat | 1.7 B | 对话 | https://huggingface.co/JetLM/SDAR-1.7B-Chat |
| SDAR‑4B‑Chat | 4 B | 对话 | https://huggingface.co/JetLM/SDAR-4B-Chat |
| SDAR‑8B‑Chat | 8 B | 对话 | https://huggingface.co/JetLM/SDAR-8B-Chat |
| SDAR‑30B‑A3B‑Chat | 30 B(MoE) | 对话 | https://huggingface.co/JetLM/SDAR-30B-A3B-Chat |
| SDAR‑30B‑A3B‑Sci | 30 B(MoE) | 科学推理专用 | https://huggingface.co/JetLM/SDAR-30B-A3B-Sci |
所有模型均支持 块大小 4、8、16、32 或 64(块大小控制每步扩散生成的 token 数量)。
⚙️ 如何使用 SDAR
1. 快速启动推理(内置脚本)
python generate.py \
--model_dir=JetLM/SDAR-1.7B-Chat \
--trust_remote_code
该脚本从 Hugging Face 拉取模型,使用 🤗 Transformers(>= 4.52.4)加载,并运行贪婪生成。
2. 使用 JetEngine 进行高性能批量推理
JetEngine 是基于 nano‑vllm 构建的轻量级引擎,支持密集型和 MoE 型 SDAR 模型、张量并行和 FlashAttention‑2。示例(Python):
from jetengine import LLM, SamplingParams
from transformers import AutoTokenizer
model_path = "/path/to/model"
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
llm = LLM(
model_path,
enforce_eager=True,
tensor_parallel_size=1,
mask_token_id=151669,
block_length=4,
)
params = SamplingParams(
temperature=1.0,
topk=0,
topp=1.0,
max_tokens=256,
remasking_strategy="low_confidence_dynamic",
block_length=4,
denoising_steps=4,
dynamic_threshold=0.9,
)
prompt = tokenizer.apply_chat_template(
[{"role": "user", "content": "用简单的话解释强化学习。"}],
tokenize=False,
add_generation_prompt=True,
)
for out in llm.generate_streaming([prompt], params):
print(out)
基准测试(SDAR‑4B,块大小 4,批量 128):
- NVIDIA A800 – > 1800 tokens/s
- NVIDIA H200 – > 3700 tokens/s(FlashAttention‑2 + Triton)
3. 使用 LMDeploy 实现生产级服务
LMDeploy(InternLM)提供完整的张量并行推理管道。README 包含一个最小示例,设置 dllm_block_length、dllm_denoising_steps 和自定义去掩码策略。
📊 报告性能
| 基准测试 | 模型(大小) | 解码方式 | 分数(越高越好) |
|---|---|---|---|
| GPQA(科学问答) | SDAR‑30B‑A3B‑Sci | 贪婪(块大小 4,4 步) | 优于 AR‑30B‑A3B‑Sci |
| ChemBench | SDAR‑30B‑A3B‑Sci | 贪婪 | 优于 AR 对应模型 |
| 通用语言任务(如 MMLU、HELM) | SDAR‑1.7B‑Chat | 贪婪 | 与 Qwen3‑1.7B‑AR‑SFT 相当 |
| 4B / 8B / 30B 同样适用 | SDAR‑4B‑Chat、SDAR‑8B‑Chat、SDAR‑30B‑A3B‑Chat | 贪婪 | 与 Qwen3‑AR 基线相当 |
速度 – 使用 动态解码(当置信度超过阈值时提前停止块生成)相比静态块解码可实现 >2倍加速,精度损失可忽略。模型越大,速度优势越明显。
🛠️ 开发与生态
- 训练框架 – 微调脚本位于
training/目录,依赖 LLaMA‑Factory 代码库。 - 推理引擎 – 两个官方选项:
- JetEngine(基于 nano‑vllm,GitHub 开源)
- LMDeploy(InternLM 的生产服务器)
- 路线图 – 技术报告已发布;下一步包括添加更多功能(未指定)和扩展模型库。
📜 许可与联系
- 许可:MIT(见
LICENSE)。 - 联系:程双(上海 AI 实验室) – chengshuang@pjlab.org.cn;祁碧清(通讯作者) – qibiqing@pjlab.org.cn。
- 社区:提供 WeChat 群组用于非正式讨论。
TL;DR
SDAR 是一个开源的扩散增强型语言模型家族,保留了经典自回归 LLM 的低成本训练优势,同时通过并行扩散解码实现 2~4倍的生成加速。仓库提供预训练权重(1.7 B – 30 B)、简单的 generate.py 脚本,以及两个高性能推理后端(JetEngine 和 LMDeploy)。项目持续维护,尤其适用于科学推理任务。
相关
- Dispatch
- Dispatch
- Dispatch
- 项目
- Dispatch