模型 / 資料集
ZHZisZZ/dllm avatar
ZHZisZZ/dllm

dLLM:把擴散語言模型的訓練與評測收進同一套管線

dLLM: Simple Diffusion Language Modeling

2,688 個 Star280 個 ForkPythonApache-2.0

秒懂

它是什麼?
dLLM 是 ZHZisZZ 維護的 Python 函式庫,用 transformers Trainer 與 lm-evaluation-harness 包住離散擴散語言模型的訓練、推論與評測。它的價值在於把 LLaDA、Dream、BERT-Chat 等不同路線放進同一組 recipe,代價是你得接受它對「重現官方模型」的保留態度。
適合誰用?
如果你要研究的是離散擴散語言模型的訓練演算法本身,或者需要把既有 BERT、Qwen、LLaMA 權重轉成擴散式生成器,dLLM 的 examples 目錄提供了可直接讀的 recipe,值得先跑 examples/bert 或 examples/a2d 這種規模較小的路徑。如果你要的是能上線的推論服務,dLLM 不是那個工具,它沒有 serving 層,Fast-dLLM 的 cache 與 confidence-threshold decoding 也只是範例形式。
可以商用嗎?
可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫最近一次提交在 60 天前。
用什麼語言寫的?
主要是 Python(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

它要解決的是離散擴散模型沒有共同介面的問題

自回歸語言模型這幾年有一套共識:權重放 Hugging Face、訓練走 transformers Trainer、評測走 lm-evaluation-harness。離散擴散語言模型沒有這層共識。LLaDA、Dream、MDLM、BD3LM 各自發表,各自的訓練腳本、遮罩排程、解碼迴圈、評測方式都不一樣,想比較兩篇論文的方法,往往得先把兩份程式碼都讀過一遍。

dLLM 的定位就是把這層差異收進一個函式庫。README 寫得很直接:它「unifies the training and evaluation of diffusion language models」。目標讀者是研究離散擴散訓練演算法的人,以及想把手上既有的自回歸或編碼器權重改造成擴散式生成器的人。它不是給應用團隊直接接上的推論服務,這點從功能列表全是 examples 路徑就能看出來。

訓練走 Trainer、評測走 harness,中間用 examples 串起來

架構上沒有自研的訓練迴圈。README 說明訓練管線「based on transformers Trainer」,因此 LoRA 走 peft、平行化走 DeepSpeed 與 FSDP,這些都是 Trainer 生態本來就支援的東西。評測管線「based on lm-evaluation-harness」,把推論細節抽掉,自訂任務時只需要處理任務層。

真正承載方法差異的是 examples 目錄。examples/llada 處理 LLaDA 與 LLaDA-MoE 的預訓練、微調與評測;examples/dream 對應 Dream;examples/a2d 把任意自回歸模型(README 舉 Qwen、LLaMA、GPT-2)微調成遮罩擴散或區塊擴散生成器;examples/bert 把 BERT、RoBERTa、ModernBERT 這類編碼器改造成對話模型;examples/editflow 是 Edit Flows 的教學參考,示範如何在既有 DLLM 上加入插入、刪除、替換三種編輯操作;examples/fastdllm 與 examples/rl 分別對應加速推論與 diffu-GRPO 訓練。

這種安排的含義是:共用的是訓練與評測的外殼,方法本身仍然分散在各個 example 裡。你要比較 MDLM 與 BD3LM,得進去讀各自的設定,而不是換一個參數。

安裝與啟動:conda 建環境,其餘交給各 example 的 README

README 給的安裝步驟很簡短。建立 Python 3.10 的 conda 環境:

conda create -n dllm python=3.10 -y conda activate dllm conda install cuda=12.4 -c nvidia pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://down

最後一行在提供的材料裡被截斷,index-url 的完整位址無法確認,實際使用時要回原始 README 對照。README 也註明其他 PyTorch 與 CUDA 版本「should also work」,但這是說明文字,不是驗證過的相容矩陣。

真正決定你能跑什麼的是各 example 目錄下的 README。例如 examples/rl 指向 GRPO 的訓練說明,examples/fastdllm 指向推論與評測指令,examples/a2d 與 examples/bert 各自有訓練、推論、評測三段的說明。這代表函式庫層沒有單一的設定檔可以調,參數散在範例裡。想快速判斷某條路線是否可行,直接讀對應 example 的 README 比讀根目錄快。

README 自己承認不追求與官方模型完全一致

README 裡有一段被註解掉的說明,寫著這個 repository「is primarily for educational purposes and does not aim for 100% exact reproduction of official models (which is impossible)」。雖然被註解掉,這句話仍然是判斷這個專案定位最有用的一條線索。

它的實際後果是:你在 dLLM 上訓練出來的 LLaDA 或 Dream,不保證與論文中報告的數字對齊。遮罩排程、資料前處理、評測提示格式任何一處不同,結果就會漂移。如果你要做的是論文復現,這個專案能幫你省下寫訓練迴圈的時間,但不能取代你自己對齊細節的工作。

第二個限制是範圍。功能列表裡沒有任何 serving、量化、批次推論服務或部署相關的項目,examples/fastdllm 處理的是 cache 與 confidence-threshold decoding 這類解碼層加速,屬於研究性質的推論範例。要把擴散語言模型放進有延遲要求的線上系統,dLLM 不提供那一層。

與其比較的對象是各模型自己的官方實作

dLLM 最直接的替代品不是另一個函式庫,而是每個模型自己的官方程式碼庫。LLaDA、Dream 各自有發表時釋出的訓練與推論腳本,那些腳本通常與論文的超參數綁得最緊,復現結果的機率也最高。差別在於它們彼此不相容:換一個模型就得重學一套流程,評測方式也各寫各的。

dLLM 換來的是統一性。同一套 Trainer 設定、同一套 lm-evaluation-harness 任務定義,可以在 LLaDA 與 Dream 之間切換,A2D 與 BERT-Chat 的轉換 recipe 也放在同一個框架下。代價是抽象層本身可能吃掉一些模型特有的細節,而 README 已經預告了它不打算做到逐位元對齊。

如果你的目標是「用某個特定模型跑出論文數字」,官方實作是更穩的選擇。如果你的目標是「在幾個擴散模型之間做受控比較,或快速試一個新的訓練演算法」,dLLM 的統一介面才是它真正省時間的地方。

授權與維護成本

專案採 Apache-2.0,允許商用與修改,附帶專利授權條款,同時要求保留著作權聲明與變更說明。這裡不涉及法律意見,但如果你要把 dLLM 的程式碼併進內部訓練平台,Apache-2.0 的 NOTICE 處理方式需要先跟法務確認。另外要注意的是,dLLM 本身是 Apache-2.0,它下載與微調的模型權重(LLaDA、Dream、Qwen、LLaMA、ModernBERT 等)各有自己的授權,兩者不能混為一談。

維護面上,材料顯示沒有檢索到任何 release,也代表沒有版本標籤可以鎖定。相依項目包含 transformers、peft、DeepSpeed、FSDP、lm-evaluation-harness,這些上游的介面變動頻率高,尤其是 Trainer 與 harness 兩邊。升級時要預期的是範例腳本可能需要跟著改,而不是換一個版本號就好。

成本還有一塊來自硬體。examples 涵蓋的路線從 0.5B 等級的 Tiny-A2D 到 LLaDA-MoE,後者與 DeepSpeed、FSDP 的組合對多卡環境有要求。先用 examples/bert 或 examples/a2d 這種小規模路徑確認流程能跑通,再往大模型移動,是比較務實的順序。

編輯結論

如果你要研究的是離散擴散語言模型的訓練演算法本身,或者需要把既有 BERT、Qwen、LLaMA 權重轉成擴散式生成器,dLLM 的 examples 目錄提供了可直接讀的 recipe,值得先跑 examples/bert 或 examples/a2d 這種規模較小的路徑。如果你要的是能上線的推論服務,dLLM 不是那個工具,它沒有 serving 層,Fast-dLLM 的 cache 與 confidence-threshold decoding 也只是範例形式。動手前先確認三件事:examples/llada 底下的設定檔對應哪個模型版本、lm-evaluation-harness 的版本是否與你的任務集相容、以及你的硬體是否撐得住 0.5B 以上的權重與 DeepSpeed 或 FSDP 的設定。README 沒有承諾與官方模型逐位元對齊,把它當參考實作而非復現工具,期待才不會落空。

官方來源

  1. Issues
  2. License: Apache-2.0
  3. Project website
  4. README
  5. ZHZisZZ/dllm on GitHub
社群筆記

社群筆記