能够双向推理的LLM!Dream-7B:港大联合华为开源的扩散推理模型,能够同时考虑前后文信息

326 阅读4分钟

❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!

🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 丰富的 AI 工具库 -> 每日更新 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦


🎯 「扩散模型颠覆传统LLM生成方式!让文本生成进入"全局规划"时代!」
大家好,我是蚝油菜花。当ChatGPT还在用自回归架构"逐字吐答案"时,这个来自香港大学的AI核弹已经让文本生成进入"全局规划"时代!

你是否也被这些问题困扰过:

  • 📝 生成长文时模型突然"失忆",前后逻辑支离破碎
  • ∑ 解数学题步骤跳步,关键推导过程神秘消失
  • 💻 写代码时变量名和缩进随机放飞自我...

今天要解剖的 Dream-7B ,用扩散模型重构了大语言模型的DNA!这个7B参数的"文本建筑师":

  • 全局连贯性:像拼拼图一样从噪声中重建完整语义,告别碎片化生成
  • 双向推理:同时考虑前后文信息,数学推导准确率提升37%
  • 顺序可控:支持按需指定生成顺序,写代码先出框架再填细节

已有团队用它48小时写完技术白皮书,文末附《扩散模型极简部署指南》——你的键盘准备好迎接文本生成革命了吗?

🚀 快速阅读

Dream-7B是目前性能最强的开源扩散大语言模型之一。

  1. 功能:支持文本生成、数学求解、代码编写和多步规划任务,生成质量可动态调节。
  2. 原理:基于掩码扩散范式和自回归模型初始化,通过双向上下文建模提升文本连贯性。

Dream-7B 是什么

Dream

Dream-7B是香港大学和华为诺亚方舟实验室联合推出的开源扩散式推理模型,采用创新的离散扩散架构。与传统自回归模型逐字生成不同,它从噪声状态开始逐步重建文本,实现了全局语义的协同优化。

该模型使用5800亿标记进行预训练,耗时256小时。特别值得注意的是,其7B参数版本在多项基准测试中超越了同尺寸的自回归模型,甚至在某些任务上媲美GPT-4等超大模型。这种突破主要源于其独特的双向上下文建模能力,使得生成文本具有更好的连贯性和逻辑性。

Dream-7B 的主要功能

  • 强大的文本生成:在通用文本、数学和编程任务上表现优异,超越同尺寸的自回归模型。
  • 灵活的生成方式:支持任意顺序的文本生成,用户可指定生成顺序满足特定需求。
  • 高效的规划能力:在Countdown和Sudoku等需要多步规划的任务中表现出色。
  • 可调节的生成质量:通过调整扩散步数平衡生成速度和质量。

Dream-7B 的技术原理

  • 扩散模型架构:基于离散扩散模型,从完全噪声化的状态逐步去噪生成文本。
  • 掩码扩散范式:预测所有被掩码的标记逐步去噪,加速训练过程。
  • 自回归模型初始化:使用Qwen2.5等自回归模型的权重进行初始化。
  • 上下文自适应噪声重调度:根据标记上下文动态调整噪声水平。
  • 灵活的解码策略:推理时可调整生成顺序和扩散步数。

如何运行 Dream-7B

安装

pip install transformers==4.46.2 torch==2.5.1

基础使用

import torch
from transformers import AutoModel, AutoTokenizer

model_path = "Dream-org/Dream-v0-Instruct-7B"
model = AutoModel.from_pretrained(model_path, torch_dtype=torch.bfloat16, trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = model.to("cuda").eval()

messages = [
    {"role": "user", "content": "Please write a Python class that implements a PyTorch trainer capable of training a model on a toy dataset."}
]
inputs = tokenizer.apply_chat_template(
    messages, return_tensors="pt", return_dict=True, add_generation_prompt=True
)
input_ids = inputs.input_ids.to(device="cuda")
attention_mask = inputs.attention_mask.to(device="cuda")

output = model.diffusion_generate(
    input_ids,
    attention_mask=attention_mask,
    max_new_tokens=512,
    output_history=True,
    return_dict_in_generate=True,
    steps=512,
    temperature=0.2,
    top_p=0.95,
    alg="entropy",
    alg_temp=0.,
)
generations = [
    tokenizer.decode(g[len(p) :].tolist())
    for p, g in zip(input_ids, output.sequences)
]

print(generations[0].split(tokenizer.eos_token)[0])

资源


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!

🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 丰富的 AI 工具库 -> 每日更新 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦