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)。專案持續維護,尤其適用於科學推理任務。

相關