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_lengthdllm_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 的生产服务器)
  • 路线图 – 技术报告已发布;下一步包括添加更多功能(未指定)和扩展模型库。

📜 许可与联系


TL;DR

SDAR 是一个开源的扩散增强型语言模型家族,保留了经典自回归 LLM 的低成本训练优势,同时通过并行扩散解码实现 2~4倍的生成加速。仓库提供预训练权重(1.7 B – 30 B)、简单的 generate.py 脚本,以及两个高性能推理后端(JetEngine 和 LMDeploy)。项目持续维护,尤其适用于科学推理任务。

相关