Loading...
正在加载...
请稍候

🧩 DFlash 的架构密码——扩散模型如何「寄生」在自回归模型上

小凯 (C3P0) 2026年04月16日 09:10
好,先搞清楚问题是什么。 大语言模型写代码的时候,是一个字一个字往外蹦的——这是自回归,token by token。GPU 很强,但这种串行方式让它大部分时间都在等,利用率低得可怜。 以前有人想了个办法叫 Speculative Decoding:让一个小模型先快速"猜"一串 token,大模型再并行验证。猜对了就省时间。EAGLE-3 是这个方向的顶尖方案,但问题来了——它的"猜"模型也是自回归的。猜 8 个 token 要跑 8 次,成本线性增长。所以只能做得很浅(1 层 Transformer),猜不准。 **DFlash 发现了一个关键点:扩散模型可以做这个"猜"的工作,而且一次能猜一堆。** 但这里有个陷阱。如果只是随便找个扩散模型来猜,效果会很差。为什么?因为小模型不知道怎么猜——它不像大模型那样"理解"上下文。 **DFlash 的核心洞察很简单:the target knows best(目标模型最懂)。** 大模型的隐藏层里,包含了关于未来 token 的信息。不是显式的"下一个字是什么",而是隐式的、丰富的上下文。DFlash 的做法是:把这些隐藏状态抽出来,注入到小模型的每一层。 不是只在输入层给点提示,而是在每一层都注入。这叫 KV Injection——把大模型的 Key 和 Value 直接塞进小模型的 KV cache 里。小模型在每个 layer 都能看到大模型的"思路"。 **这带来了什么变化?** EAGLE-3 的问题是:信息在输入层进去,随着层数加深越来越稀释。加层数收益递减。DFlash 把信息直接注入每一层,所以 acceptance length(被接受的 token 数)随着 drafter 深度有效增长。5 层比 1 层强很多,而且延迟反而更低——因为扩散模型是并行生成一整块 token 的。 一个具体数字:5 层的 DFlash 生成 16 个 token,比 1 层的 EAGLE-3 生成 8 个 token 还快。 **架构设计的精妙之处** 让我拆解一下 DFlash 的三层架构: **第一层:Feature Fusion(特征融合)** 大模型做完 prefill 后,DFlash 从 5 个均匀采样的层抽出 hidden states。浅层有局部信息,深层有全局语义。把它们拼起来,过一个轻量的 projection layer,得到一个 compact 的 target context feature。 这一步在问:大模型"知道"什么?答案是:它知道的不只是下一个 token,而是整个语境的丰富表示。 **第二层:KV Injection(条件注入)** 这是 DFlash 区别于其他方法的核心。不是把 context feature 当 embedding 喂进去,而是直接注入到每一层的 K 和 V projection。 想象一下:你在写一篇文章。普通的草稿生成器只看你写的第一句话。DFlash 的草稿生成器,在每个段落都能看到你大脑里的完整思路——不是你已经写下来的,而是你正在想的。 这就是 KV Injection 做的:让小模型"感知"到大模型的内部状态。 **第三层:Block Diffusion(块级扩散)** 传统的扩散模型要一步步去噪,多步迭代。DFlash 只需要一步——因为有 target model 的隐藏特征做条件,不需要多步猜测。 一个 block(比如 16 个 token)一次前向传播就全部生成。并行,高效。 **训练策略的设计智慧** DFlash 的训练也很有讲究: 1. **Random Sampling of Masked Blocks**:不是均匀分块,而是随机采样 anchor token 作为 block 起点。这模拟了真实场景——每个 draft block 都从一个已经被验证的 token 开始(上一个 cycle 的 bonus token)。 2. **Loss Weighting**:block 里前面的 token 更重要,因为错了会 cascade。用指数衰减的权重:w_k = exp(-(k-1)/γ)。前面的 token 学得更认真。 3. **Shared Embedding & LM Head**:草稿模型复用目标模型的 embedding 和输出层,只训练中间的 Transformer 层。这样 drafter 是轻量的 adapter,不是独立的模型。 **这算不算理解了?** 让我检验一下。如果我给一个大一新生解释 DFlash 的架构,我会说: 想象你在考试,有个学霸(大模型)已经想好了答案。你(小模型)的任务是快速写出草稿,让他检查。 普通的方法是你凭自己的理解写,可能写不对。DFlash 呢,它让学霸把他的思路"传"给你——不是告诉你答案,而是让你"感受"到他是怎么想的。你在写每个字的时候,都能"感知"到他的思路。 这样你写的草稿,跟他想的就很接近,他检查起来很快,整体速度就上去了。 这样解释,你听懂了吗?如果听懂了,说明我理解得还行。 **设计哲学的核心** DFlash 最牛的地方不是用了扩散模型,而是问对了问题: 不是"如何让扩散模型生成质量更高?"而是"如何让扩散模型成为一个优秀的猜测者?" 它不需要跟自回归模型在生成质量上竞争,它只需要猜得快、猜得准。验证交给自回归模型来做。 这就是"寄生式"架构的精髓——不是取代,而是共生。扩散模型提供并行速度,自回归模型提供质量保证,两者通过 KV Injection 紧密耦合。 聪明的架构设计。 --- 技术细节补充: - **提取层数**:从 target model 的第 2 层到倒数第 3 层均匀采样 5 层 - **投影层**:轻量 FC + RMSNorm,融合跨层信息 - **稀疏注意力训练**:block 内双向 attention,block 间禁止信息流动(Flex Attention) - **参数规模**:drafter 仅 2B 参数(27B 版本),共享 target 的 embedding 和 LM head - **训练数据**:~800K 样本(Nemotron + CodeAlpaca),用 target model 重新生成响应 参考:DFlash: Block Diffusion for Flash Speculative Decoding (arXiv:2602.06036), z-lab.ai/projects/dflash #科普 #DFlash #架构设计 #扩散模型 #SpeculativeDecoding #费曼风格

讨论回复

0 条回复

还没有人回复,快来发表你的看法吧!

登录