dllm

GitHub
2.3k 226 中等 1 次阅读 2天前Apache-2.0语言模型图像开发框架
AI 解读 由 AI 自动生成,仅供参考

dLLM 是一个专注于简化扩散语言模型(Diffusion Language Models)开发与评估的开源库。它致力于解决当前扩散模型领域训练流程复杂、复现困难以及评估标准不统一的痛点,为整个研发链路提供了透明且可复现的解决方案。

该工具主要面向 AI 研究人员和开发者,特别是那些希望探索非自回归生成范式、复现前沿论文或构建自定义扩散模型的团队。dLLM 基于 Hugging Face transformers 构建了可扩展的训练管道,原生支持 LoRA、DeepSpeed 和 FSDP 等高效训练技术,大幅降低了大规模模型训练的门槛。同时,它集成了统一的评估框架,屏蔽了复杂的推理细节,让定制化测试变得简单直观。

在技术亮点方面,dLLM 不仅提供了 LLaDA、Dream 等开源权重模型的完整训练与微调食谱,还实现了掩码扩散(MDLM)、块扩散(BD3LM)等多种先进算法。近期更新更引入了 Fast-dLLM 加速推理技术,并支持将任意自回归模型(如 Qwen、LLaMA)或 BERT 编码器转化为扩散模型,为社区提供了极具价值的参考实现与实验基线。

使用场景

某 AI 实验室的研究团队正致力于将成熟的自回归模型(如 LLaMA 或 Qwen)转化为扩散语言模型,以探索其在文本生成多样性上的新潜力。

没有 dllm 时

  • 复现门槛极高:研究人员需手动拼凑分散的代码片段来实现掩码扩散(MDLM)或块扩散(BD3LM)等复杂算法,极易因细节疏漏导致训练失败。
  • 评估流程割裂:缺乏统一的评估框架,每次实验后需编写定制化脚本对接 lm-evaluation-harness,耗时且难以保证结果的可比性。
  • 资源适配困难:在大规模集群上部署时,需自行配置 DeepSpeed 或 FSDP 等并行策略,调试分布式训练环境往往占据数周时间。
  • 模型转换黑盒:将任意自回归模型转换为扩散模型缺乏标准食谱(Recipe),团队需反复试错调整超参数,研发周期漫长。

使用 dllm 后

  • 算法开箱即用:dllm 内置了 MDLM、BD3LM 等主流训练算法的实现,团队可直接调用标准化接口,将算法验证时间从数周缩短至数天。
  • 评估一键自动化:依托集成的统一评估流水线,研究人员只需简单配置即可自动完成推理与性能打分,确保不同实验间的数据严格可比。
  • 弹性扩展无忧:dllm 原生支持 LoRA、DeepSpeed 及 FSDP,团队能无缝利用现有算力集群进行大规模训练,无需关注底层并行细节。
  • 转换路径清晰:借助 dllm 提供的开放食谱(如 Tiny-A2D 案例),团队成功将现有的 Qwen 模型快速转化为扩散模型,并复现了 SOTA 效果。

dllm 通过统一训练、推理与评估的全链路标准,让扩散语言模型的研发从“手工造轮子”转变为高效的“标准化生产”。

运行环境要求

操作系统
  • Linux
GPU

必需 NVIDIA GPU,支持 CUDA 12.4(文档示例),建议使用多卡环境(如 8 卡)进行分布式训练

内存

未说明

依赖
notes1. 官方安装指南基于 Conda 环境管理。2. 默认示例使用 CUDA 12.4 和 PyTorch 2.6.0,但注明其他版本也可行。3. 支持多种分布式训练策略(DeepSpeed ZeRO, FSDP, DDP)。4. 若需运行评估脚本,需初始化并安装 lm-evaluation-harness 子模块。5. 提供了 Slurm 集群提交脚本的配置示例。
python3.10
torch==2.6.0
transformers
accelerate
peft
deepspeed
lm-evaluation-harness
dllm hero image

快速开始

dLLM

简单扩散语言建模

📃 报告 | 🤗 模型

dLLM logo

概述

dLLM 是一个统一 扩散语言模型 训练与评估的库,为整个开发流程带来透明性和可复现性:

  • dLLM 提供基于 transformers Trainer 的可扩展训练流水线,支持 LoRADeepSpeedFSDP 等。

  • dLLM 基于 lm-evaluation-harness 提供统一的评估流水线,抽象了推理细节,使自定义变得简单。

  • 在这些组件的基础上,dLLM 提供针对开放权重模型(如 LLaDADream)的最小化 训练/推理/评估 流程,并实现了多种训练算法(如 MDLM(掩码扩散)、BD3LM(块扩散)、Edit Flows 等)。

新闻

[2026/02] ⚡Fast-dLLM:我们通过 Fast-dLLM(缓存、置信度阈值解码等)支持加速推理和评估 LLaDADream。请参阅 examples/fastdllm 获取推理/评估说明。

[2025/12] 🤗Tiny-A2D:我们发布了一系列基于 AR 模型改造而来的 SOTA 小型(0.5B/0.6B)扩散模型,并提供了将 任意 AR 模型(如 Qwen、LLaMA、GPT-2 等)转换为扩散模型的完整开源流程。请参阅 examples/a2d 获取训练/推理/评估说明。

[2025/11] 🤗BERT-Chat:我们发布了一系列微调后可用于对话的 BERT 模型,提供了将 任意 BERT 编码器(如 BERT、RoBERTa、ModernBERT 等)转化为扩散模型的开源流程。请参阅 examples/bert 获取训练/推理/评估说明。

目录

功能

设置

安装

# 创建并激活 conda 环境
conda create -n dllm python=3.10 -y
conda activate dllm

# 安装带有 CUDA 12.4 的 PyTorch(其他版本的 PyTorch/CUDA 也应适用)
conda install cuda=12.4 -c nvidia
pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 \
    --index-url https://download.pytorch.org/whl/cu124

# 安装 dllm 包
pip install -e .

(可选)评估设置

# 初始化 `lm-evaluation-harness` 子模块
git submodule update --init --recursive

# 以可编辑模式安装子模块,并包含 IFEval 和 Math 依赖项
pip install -e "lm-evaluation-harness[ifeval,math]"

(可选)Slurm 设置

对于 Slurm 用户,请根据您的集群更新 scripts/train.slurm.sh

- #SBATCH --partition=mllm_safety # 注意:请根据您的集群调整此项
- #SBATCH --quotatype=spot        # 注意:请根据您的集群调整此项
+ #SBATCH --partition=YOUR_PARTITION
+ #SBATCH --quotatype=YOUR_QUOTATYPE

接下来,为您的作业日志创建一个目录:

mkdir .logs

该文件夹将存储您通过 sbatch 提交的作业生成的日志文件。

文件


# 用于训练/采样的模块
dllm
├── core                   # 核心可重用模块,供 `dllm/pipelines` 共享
│   ├── samplers
│   ├── schedulers
│   └── trainers
├── data
├── pipelines              # 针对特定应用的训练与推理流水线
|   ├── bert
│   ├── dream
│   ├── editflow
│   ├── fastdllm
│   └── llada
│       ├── models         # 模型架构与配置
│       ├── sampler.py     # 推理模块
│       ├── trainer.py     # 训练模块
│       └── eval.py        # 评估模块
├── tools
└── utils

# 训练/采样的入口点
examples
├── bert
├── dream
├── editflow
├── fastdllm
└── llada
    ├── chat.py            # 交互式推理示例
    ├── sample.py          # 推理示例
    ├── pt.py              # 预训练示例
    ├── README.md          # 文档(您当前所在)
    ├── sft.py             # 监督微调示例
    └── eval.sh            # 评估脚本

训练

典型的训练入口脚本(例如 examples/llada/sft.py)如下所示:

import transformers

import dllm

model_args, data_args, training_args = parser.parse_args_into_dataclasses()
# ----- 模型 ------------------------------------------------------------------
模型 = dllm.utils.get_model(model_args=model_args)
# ----- 分词器 --------------------------------------------------------------
分词器 = dllm.utils.get_tokenizer(model_args=model_args)
# ----- 数据集 ----------------------------------------------------------------
数据集 = "..."

# ----- 训练 --------------------------------------------------------------
trainer = dllm.core.trainers.MDLMTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=dataset["train"],
    eval_dataset=dataset["test"],
    args=training_args,
    data_collator=transformers.DataCollatorForSeq2Seq(
        tokenizer,
        return_tensors="pt",
        padding=True,
        label_pad_token_id=tokenizer.pad_token_id, 
    ),
)
trainer.train()

您可以在本地使用 accelerate 启动训练任务,或通过 sbatch 将其提交到 Slurm 集群。

# 在本地运行(8 张 GPU 上启用 ZeRO-2、4bit 量化和 LoRA)
accelerate launch \
    --config_file scripts/accelerate_configs/zero2.yaml \
    examples/llada/sft.py \
    --num_train_epochs 4 \
    --load_in_4bit True --lora True
# 提交到 Slurm 集群(单节点 8 张 GPU 上启用 FSDP)
sbatch --gres=gpu:8 scripts/train.slurm.sh \
    --accelerate_config "fsdp" \
    --script_path "examples/llada/sft.py" \
    --num_train_epochs 4

# 提交到 Slurm 集群(双节点 16 张 GPU 上启用 FSDP)
sbatch --nodes=2 --gres=gpu:8 scripts/train.slurm.sh \
    --accelerate_config "fsdp" \
    --script_path "examples/llada/sft.py" \
    --num_train_epochs 4

具体训练方案请参阅 Features

有用的训练技巧:

  • 使用数据子集: --dataset_args "allenai/tulu-3-sft-mixture[train:10000,test:1000]"
  • 拼接多个数据集: --dataset_args "allenai/tulu-3-sft-mixture+HuggingFaceTB/smoltalk"
  • 结合 LoRA 和 4bit 量化进行训练: --load_in_4bit True --lora True
  • 使用不同的分布式训练方法: --accelerate_config "ddp,zero-{1,2,3},fsdp"
  • 以流式方式加载预训练数据集: --streaming True
  • 在训练前预处理 SFT 数据集(例如 LLaDA):
    # 预处理 SFT 数据
    + python dllm/tools/preprocess_sft_dataset.py \
    +     --model_name_or_path "GSAI-ML/LLaDA-8B-Base" \
    +     --sft_map_fn_path "dllm.utils.default_sft_map_fn" \
    +     --dataset_args "allenai/tulu-3-sft-mixture" \
    +     --output_dir ".data/sft/llada/tulu-3-sft-mixture" \
    +     --num_proc 64
    
    # 使用预处理后的数据进行 SFT
    accelerate launch \
        --config_file scripts/accelerate_configs/fsdp.yaml \
        examples/llada/sft.py \
        --model_name_or_path "GSAI-ML/LLaDA-8B-Base" \
    -   --dataset_args "allenai/tulu-3-sft-mixture" \
    +   --dataset_args ".data/sft/llada/tulu-3-sft-mixture" \
    +   --load_preprocessed_data True \
        ...
    

推理

我们提供了统一的 samplers,用于抽象化推理细节。 典型的推理入口脚本(例如 examples/llada/sample.py)如下所示:

import dllm

模型 = dllm.utils.get_model(model_args=script_args).eval()
分词器 = dllm.utils.get_tokenizer(model_args=script_args)
采样器 = dllm.core.samplers.MDLMSampler(model=model, tokenizer=tokenizer)

messages = [
    [{"role": "user", "content": "莉莉以每小时 12 公里的速度跑了 4 小时。那么 8 小时能跑多远?"}],
    [{"role": "user", "content": "请编写一个教育性的 Python 函数。"}],
]

inputs = tokenizer.apply_chat_template(
    messages,
    add_generation_prompt=True,
    tokenize=True,
)

outputs = sampler.sample(inputs, return_dict=True)
sequences = dllm.utils.sample_trim(tokenizer, outputs.sequences.tolist(), inputs)

您还可以尝试交互式聊天脚本(例如 examples/llada/chat.py),以可视化多轮对话:

python -u examples/llada/chat.py --model_name_or_path "GSAI-ML/LLaDA-8B-Instruct"

借助 Fast-dLLM,您可以加速 LLaDADream 的推理。

python examples/fastdllm/llada/sample.py --model_name_or_path "GSAI-ML/LLaDA-8B-Instruct" --use_cache prefix --threshold 0.9

chat

评估

在运行评估之前,请阅读(可选) 评估设置

例如,要在 MMLU_Pro 数据集上使用 4 张 GPU 评估 LLaDA-8B-Instruct,请运行:

accelerate launch --num_processes 4 \
    dllm/pipelines/llada/eval.py \
    --tasks "mmlu_pro" \
    --model "llada" \
    --apply_chat_template \
    --num_fewshot 0 \
    --model_args "pretrained=GSAI-ML/LLaDA-8B-Instruct,is_check_greedy=False,mc_num=1,max_new_tokens=256,steps=256,block_size=256,cfg_scale=0.0"

我们还提供了脚本,用于在所有基准测试上自动评估 LLaDADreamBERT-Chat。例如,您可以直接使用以下命令运行 examples/llada/eval.sh

bash examples/llada/eval.sh --model_name_or_path "GSAI-ML/LLaDA-8B-Instruct" --instruct True
bash examples/llada/eval.sh --model_name_or_path "GSAI-ML/LLaDA-8B-Base" --instruct False

我们还提供了使用 Fast-dLLM 评估 LLaDADream 的脚本:

bash examples/fastdllm/llada/eval.sh --model_name_or_path "GSAI-ML/LLaDA-8B-Instruct" --instruct True --num_gpu 1
bash examples/fastdllm/dream/eval.sh --model_name_or_path "Dream-org/Dream-v0-Base-7B" --instruct False --num_gpu 1

引用

@misc{zhou2026dllm,
      title={dLLM: 简单的扩散语言建模}, 
      author={Zhanhui Zhou 和 Lingjie Chen 和 Hanghang Tong 和 Dawn Song},
      year={2026},
      eprint={2602.22661},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2602.22661}, 
}

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架