dLLM:复用自回归模型权重快速训练扩散语言模型

简介: dLLM是一个开源Python框架,统一了扩散语言模型的训练、微调、推理与评估流程。它支持将任意自回归大模型(如LLaMA、BERT)转化为扩散模型,提供LoRA、4-bit量化等高效训练能力,并兼容Hugging Face生态。通过Masked Diffusion、Edit Flows等方法,实现文本全局优化生成与编辑,在复杂推理、结构化输出等任务中表现优异,推动扩散语言模型迈向实用化。

大语言模型的文本生成方式一直都是以自回归为主:一个token接一个token,从左往右,生成完就定了。

但现在有个不太一样的思路开始在研究圈里流行起来,那就是扩散语言模型(Diffusion LMs)。扩散模型在图像生成领域已经证明了自己的可行性,但是问题是把这套东西用到文本上一直很麻烦——训练难、评估难、更别提怎么集成到现有的LLM工作流里了。


dLLM是一个开源的Python库,它把扩散语言模型的训练、微调、推理、评估这一整套流程都统一了起来,而且号称任何的自回归LLM都能通过dLLM转成扩散模型

扩散模型用在语言上有什么不同

做过图像扩散模型的应该能理解这个思路。

传统自回归是顺序生成,扩散模型的玩法不一样:先从噪声或者masked tokens开始,然后一步步把整个序列细化出来。它不是一个token一个token往后走,而是对整个输出做全局优化。

扩散模型在几个场景下表现特别好:需要复杂推理的任务、文本编辑重写、结构化生成,还有需要多轮迭代优化的场景。

dLLM提供了什么

dLLM不是某个具体模型它是个框架,包括了下面的功能:

统一的训练流程

底层用的是Hugging Face的

Trainer

,所以常见的那些东西都支持:LoRA微调、DeepSpeed、FSDP、多节点Slurm集群、4-bit量化。

训练扩散模型和训练transformer没什么区别用的都是同一套工具链。

统一的评估体系

评估部分基于

lm-evaluation-harness

搭建,好处是不同benchmark用同一套接口,不需要针对每个模型写推理代码,结果也能复现。

把AR模型转成扩散模型

这是dLLM最核心的功能,LLaMA系列模型、instruction-tuned的LLM,甚至BERT这种encoder,都能拿来微调成扩散模型。而且支持的方法包括:Masked Diffusion(MDLM)、Block Diffusion(BD3LM)和Edit Flows。

支持的模型和训练方式

dLLM自带了几个参考实现:LLaDA/LLaDA-MoE、Dream、BERT-Chat、Edit Flow模型。训练示例覆盖预训练、监督微调(SFT)、评估这几个阶段。

 # Create environment
conda create -n dllm python=3.10 -y
conda activate dllm

# Install PyTorch (CUDA 12.4 example)
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
# Install dLLM
 pip install -e .

如果要跑评估:

 git submodule update --init --recursive
 pip install -e "lm-evaluation-harness[ifeval,math]"

训练代码实际长什么样

最简单的训练脚本:

 import transformers
import dllm

model = dllm.utils.get_model(model_args)
tokenizer = dllm.utils.get_tokenizer(model_args)
trainer = dllm.core.trainers.MDLMTrainer(
    model=model,
    tokenizer=tokenizer,
    train_dataset=train_data,
    eval_dataset=eval_data,
    args=training_args,
    data_collator=transformers.DataCollatorForSeq2Seq(
        tokenizer,
        padding=True,
        return_tensors="pt",
    ),
)
 trainer.train()

就这些,不用写自定义loss,不用手动搞扩散循环,也不是那种只能在论文里跑的代码。

还可以使用LoRA + 4-bit量化微调

 accelerate launch \
   --config_file scripts/accelerate_configs/zero2.yaml \
   examples/llada/sft.py \
   --num_train_epochs 4 \
   --load_in_4bit True \
   --lora True

推理怎么做

扩散推理是分步骤迭代的和自回归的greedy decoding完全是不同的概念,dLLM用统一的sampler把这层抽象掉了:

 import dllm

model = dllm.utils.get_model(model_args).eval()
tokenizer = dllm.utils.get_tokenizer(model_args)
sampler = dllm.core.samplers.MDLMSampler(
    model=model,
    tokenizer=tokenizer
)
inputs = tokenizer.apply_chat_template(
    [{"role": "user", "content": "Explain diffusion models simply."}],
    add_generation_prompt=True,
    tokenize=True,
)
 outputs = sampler.sample(inputs)

sampler会处理mask schedule、refinement steps、decoding、output cleanup这些细节。

Edit Flows:拿扩散做文本编辑

Edit Flows算是dLLM里比较有意思的一个方向。模型不是从零生成文本,而是学会对现有文本做操作:插入token、删除token、替换token。这种方式特别适合代码重构、文档编辑、可控的文本改写这类任务,而dLLM提供了从头训练Edit Flow模型的完整教程。

评估

评估扩散模型确实有点麻烦,dLLM用标准化的脚本解决这个问题。

在MMLU-Pro上跑个评估的示例如下:

 accelerate launch --num_processes 4 \
   dllm/pipelines/llada/eval.py \
   --tasks "mmlu_pro" \
   --model "llada" \
   --apply_chat_template \
   --num_fewshot 0

总结

扩散语言模型之前一直停留在研究阶段,dLLM把它变成了能实际用起来的工程工具。现有的LLM可以直接复用,微调需要的算力也不夸张,模型之间的对比有了统一标准,想做实验也不用把整套东西重新搞一遍。

自回归LLM能占主导地位,很大原因是它足够实用。扩散模型要是想在语言领域站稳脚,就要做到训练简单、评估方便、容易集成,dLLM在这个方向上走了不小一步。

对于在做next-gen语言模型的人来说,这个框架确实值得研究一下。

https://avoid.overfit.cn/post/5dc5d844044d404d868bf9512bca2f9b

作者:Sonu Yadav

目录
相关文章
|
2月前
|
存储 缓存 NoSQL
阿里云 Tair 联手 SGLang 共建 HiCache,构建面向“智能体式推理”的缓存新范式
针对智能体式推理对KVCache的挑战,阿里云Tair KVCache团队联合SGLang社区推出HiCache技术,通过多级存储卸载与全局共享机制,实现缓存命中率翻倍、TTFT降低56%、QPS提升2倍,构建面向长上下文、高并发、多智能体协作的下一代推理缓存基础设施。
436 27
阿里云 Tair 联手 SGLang 共建 HiCache,构建面向“智能体式推理”的缓存新范式
|
2月前
|
消息中间件 人工智能 NoSQL
AgentScope x RocketMQ:打造企业级高可靠 A2A 智能体通信基座
Apache RocketMQ 推出轻量级通信模型 LiteTopic,专为 AI 场景设计,结合 A2A 协议与 AgentScope 框架,实现多智能体高效、可靠协作,支持海量会话持久化、断点续传与动态订阅,重塑企业级 AI 应用架构。
244 28
|
2月前
|
数据可视化 安全 测试技术
Anthropic 开源 Bloom:基于 LLM 的自动化行为评估框架
Anthropic推出开源框架Bloom,可自动化评估大语言模型是否阿谀奉承、有政治倾向或绕过监管等行为。不同于传统基准,Bloom基于配置动态生成测试场景,支持多模型、多样化评估,并提供可视化分析,助力模型安全与对齐研究。(237字)
210 12
Anthropic 开源 Bloom:基于 LLM 的自动化行为评估框架
|
2月前
|
人工智能 安全 前端开发
Pydantic-DeepAgents:基于 Pydantic-AI 的轻量级生产级 Agent 框架
Pydantic-DeepAgents 是受 LangChain deepagents 启发的极简自主智能体框架,基于 Pydantic-AI 构建,强调类型安全与生产可用性。它轻量无冗余,内置 Docker 沙箱、文件操作、子智能体委托与人机协同机制,支持流式输出与 Markdown 定义能力,专为高效、安全的 AI Agent 落地而生。
338 0
Pydantic-DeepAgents:基于 Pydantic-AI 的轻量级生产级 Agent 框架
|
4天前
|
人工智能 自然语言处理 网络安全
OpenClaw Skills是什么:一文读懂OpenClaw Skills+一键部署全教程,新手零代码上手
本文结合2026年最新版本特性、阿里云官方实操指南、OpenClaw官方Skills文档及开发者社区经验,全面解答“OpenClaw Skills是什么、能做什么”,详细拆解阿里云OpenClaw(Clawdbot)一键部署完整流程(含简单速记步骤),补充Skills安装、使用、管理全教程,搭配可直接复制的代码命令,语言通俗易懂、步骤清晰可落地,,确保新手小白既能吃透Skills核心逻辑,也能跟着步骤完成部署、灵活运用各类技能,真正让OpenClaw成为提升效率的“专属数字员工”。
693 5
|
17天前
|
SQL 安全 API
Invicti Enterprise On-Premises v26.1.0 发布,新增功能简介
Invicti Enterprise On-Premises v26.1.0 - 企业级应用安全
76 3
Invicti Enterprise On-Premises v26.1.0 发布,新增功能简介
|
20天前
|
人工智能 JSON 安全
用 PydanticAI 让 LLM 输出变成可信赖的 Python 对象
本文介绍PydanticAI——专治LLM输出“差不多但不对”的类型安全方案。它将AI响应直接转为经验证的Python对象,杜绝字段错、类型乱、key多等顽疾;与CrewAI深度协同,前者保障数据契约,后者专注任务编排,显著提升Agent系统稳定性与可维护性。
54 3
用 PydanticAI 让 LLM 输出变成可信赖的 Python 对象
|
2月前
|
机器学习/深度学习 数据采集 算法
机器学习时间特征处理:循环编码(Cyclical Encoding)与其在预测模型中的应用
处理时间特征时,直接使用线性数值会引发“午夜悖论”,导致模型在时间断点处表现失真。本文详解如何用正弦和余弦函数将时间映射为循环特征,解决23:59与00:01的断裂问题,提升模型对周期性模式的理解,适用于小时、星期、月份等场景,显著优化预测效果。
100 7
|
17天前
|
数据采集 人工智能 前端开发
爬虫与反爬技术深度解析:攻防博弈中的技术演进
本文系统解析爬虫与反爬技术的动态博弈,涵盖技术原理(静态采集→动态渲染)、反爬矩阵(基础防护→智能风控)及反反爬演进(规则对抗→AI赋能),并探讨联邦学习、大模型、隐私计算等未来趋势,强调合规生态构建。(239字)
|
缓存 JavaScript Java
常见java OOM异常分析排查思路分析
Java虚拟机(JVM)遇到内存不足时会抛出OutOfMemoryError(OOM)异常。常见OOM情况包括:1) **Java堆空间不足**:大量对象未被及时回收或内存泄漏;2) **线程栈空间不足**:递归过深或大量线程创建;3) **方法区溢出**:类信息过多,如CGLib代理类生成过多;4) **本机内存不足**:JNI调用消耗大量内存;5) **GC造成的内存不足**:频繁GC但效果不佳。解决方法包括调整JVM参数(如-Xmx、-Xss)、优化代码及使用高效垃圾回收器。
794 15
常见java OOM异常分析排查思路分析