8 月 15 日上线 arXiv 的预印本 Dual-Flow Transformers(arXiv:2608.12385,佐治亚理工团队 Liming Liu、Mingze Wang、Tuo Zhao)提出一种把 prefill 与 decode 计算解耦的 Transformer。它的主流程照常处理 prompt 并写 KV cache,额外的一路辅助计算只在 decode 阶段激活、不写缓存也不影响主流程。在 MoE 模型里,这带来一个此前并行流设计没有的调节维度:主流程与辅助流程的专家 fan-out 可以各自独立设定。一个具体结果是,在较大的专家总预算下,把 prompt 侧的专家激活数砍到四分之一、decode 侧预算保持不变,验证损失反而优于标准 top-K 基线。
两个阶段,两种瓶颈,同一个粗旋钮
Transformer 的推理天然分成两个硬件特征相反的阶段。prefill 阶段所有 prompt token 并行处理,矩阵乘足够大、权重能被批量复用,瓶颈落在算术吞吐上;decode 阶段 token 必须顺序生成,每生成一个 token 都要重新遍历一遍权重、读取不断增长的 KV cache,单位计算量要搬运的数据多,瓶颈往往落在内存带宽上。用一个简化下界表达,就是阶段耗时约等于 max(算术量 / 计算吞吐, 数据搬运量 / 内存带宽) 取较大者。长上下文和交互式 Agent 场景下这种分化尤其突出——一个很长的 prompt 后面跟着几十次顺序调用。
问题在于,现有的扩展手段是在同时拧两个阶段。加深或加宽会让每一层在两个阶段都被执行,prefill 和 decode 的成本同步上涨;MoE 加专家虽然让总参数容量与单 token 算术解耦,但 top-k 的 k 在 prefill 和 decode 里是同一个选择,单 token 激活的专家数仍然耦合。
把额外计算留给生成阶段本身不新鲜:思维链、自一致性、重复采样、pause token 等方法都证明,预测前的额外计算能提升能力。但这些方法大多把预算花在外部——生成更长的推理轨迹、采样多个候选、插入延迟 token——而不是改变单个 decode 步内部的网络计算。近来的并行流设计(Parallel Scaling、Hidden Decoding、PHD、Parallel Loop Transformer 等)把额外计算搬进模型内部,但它们的附加流要么也参与 prompt 处理,要么保留自己的状态,于是 prompt 成本、持久状态或两者都会随扩展而增长。Dual-Flow 的目标是同时满足四个性质:主路径完整独立、没有额外持久状态、额外计算只花在续写预测、主辅计算共享权重与缓存。
辅助流程只在续写时启动,不碰 KV cache
Dual-Flow 的实现很克制。主流程就是一条完整的因果语言模型路径,它单独处理 prompt、写出 KV cache,并且永远不读取辅助流程——辅助流程存在与否都不改变主路径。辅助流程是一条同位置的残差轨迹,用独立的 token embedding 初始化,但共享主流程全部的注意力、MLP 和输出矩阵;它只在最后一个 prompt 位置和之后的每个 decode 位置被评估,跨越整个 prompt 时被省略。
两个流程靠三组可学习的逐层耦合向量连接。在注意力查询层面,辅助流程只产生一个新查询 Q₂,与主查询 Q₁ 加权叠加后去读主流程的 K、V(即共享 KV 注意力);在 MLP 层面,辅助的中间表示与输出也分别叠加主流程的对应项。因为辅助流程只用标准因果注意力、不引入特殊掩码,它可以直接跑在 FlashAttention 这类现成内核上。这套耦合是非对称的——信息只从主流程流向辅助流程,主路径保持不变。
输出端用混合分布做下一 token 预测:−log(α·p + (1−α)·q),其中 p、q 分别是主、辅助流程的分布,α 取主分布「碰撞概率」(两次独立采样命中同一 token 的概率)并在 0.5 到 1 之间截断。主分布越自信,权重越大,且权重恒不低于 0.5,保证推理时使用的分布始终以主流程为主。唯一的额外非 embedding 参数就是这些耦合向量,占比不足 0.1%;额外成本来自把同一套共享骨干跑在两个状态上。
对 MoE,作者用「router replay」让辅助流程复用主流程选中的专家:辅助 router 自己算 logits,但只在这些已被选中的专家索引上取权重,于是两个流程执行同一组专家、只是组合权重不同。这样既保留了辅助流程自己的路由信号,又不扩大需要加载的专家权重集合。
同 token 预算下,验证损失更低
验证分三条轴:NanoGPT 数据扩展、dense LLaMA 规模扩展、稀疏 MoE。
在 modded-NanoGPT Track 3 的设定(12 层、宽度 768、词表 50,257,FineWeb 数据,3,800 步约 2B token 为一个数据预算单位)下,标准 Transformer 在目标预算达到 3.28 的验证损失;Dual-Flow 在从 1× 到 5×、并延展到 10×、20× 的每个数据预算都更低,且差距随预算增长保持。用 Chinchilla 定律的固定模型尺寸切片拟合后,渐近损失从 Transformer 的 2.9416 降到 Dual-Flow 的 2.9013。
消融验证了每一块的作用:去掉所有耦合、只从辅助流读出的「最小 Dual」在低预算下与最接近的前作 PHD-2 打平、高预算下反超;加上三组耦合带来小幅稳定提升;再加上混合读出达到最好。dense LLaMA(0.12B 到 0.5B,数据量固定为参数量的 80 倍)和 Qwen 式稀疏 MoE(路由专家 + 共享专家)上,Dual-Flow 相对对应基线都有稳定增益;MoE 里 router replay 保留了独立路由的大部分收益,同时维持专家集合不变。
一个更严格的对比是训练算力对齐:训练时两个流程在每个位置都被评估,一步 Dual-Flow 约占两倍共享骨干 FLOPs,所以 D=10 的 Dual-Flow 与 D=20 的 Transformer 算力近似匹配,前者仍取得更低验证损失——把训练算力分给两条交互的流,比全花在单条流的更多 token 上更划算。
MoE 的相位旋钮:prefill 与 decode 各调各的
这篇工作最实质的增量在 MoE。此前并行流设计对流之间一视同仁:每条流用同一套骨干规则、同样的单流计算预算,流的身份只改变表示,不改变激活哪个子网络、也不改变算多少。Dual-Flow 打破了这种对称:让主流程激活 k₁ 个路由专家、辅助流程激活 k₂ 个,那么(忽略共享专家)prefill 的专家算术正比于 k₁,decode 的专家算术正比于 k₁+k₂。于是 k₁、k₂ 和验证损失共同构成一张 prefill–decode–质量的三维权衡面,服务系统可以按工作负载选点。
作者研究了这张面的两个切片。第一个切片固定 prefill 预算、只加大辅助专家数 k₂:在两个模型规模上,验证损失随 k₂ 单调下降——当 prompt 成本是硬约束时,把算力加到续写侧能直接换质量。第二个切片固定 decode 总预算 k₁+k₂=K,在两条流之间重新分配:相对于标准 top-K MoE,把 prefill 专家占比降到一半(k₁/K=1/2)在两个总预算下都优于基线;降到四分之一时,在较小预算(K=4)下保持竞争力、在较大预算(K=8)下仍优于基线——即只用四分之一的 prompt 侧专家算术,decode 侧算力不变,质量反而更好。有趣的是最优解不一定在端点:在较大预算切片里,质量在约四分之三 prefill 占比处最好,把专家全推给主流程反而略降。这意味着存在一个「prefill 省下来的算力花到 decode 上去更值」的中间地带。
边界:这不是训练上的免费午餐
需要把这篇工作放回它尚未证明的地方。第一,prompt 侧的节省是纯推理属性:训练时两个流程在每个 token 位置都被评估,训练 FLOPs 约翻倍、激活内存也约翻倍,第二套 token embedding 还会增加参数与优化器内存,对训练成本敏感的场景是实打实的代价。第二,decode 阶段算术约翻倍;论文论证的是「共享权重 + 共享 KV cache 让分组执行可以复用已加载的权重与缓存」,但这是一个内存流量的机会,不是已实现的节省——它依赖服务端实现(如 vLLM、SGLang)如何分组调度,论文没有给出真实推理框架下的端到端测量。第三,所有质量结论都建立在验证损失(next-token 困惑度)上,没有下游任务或基准分数,验证损失下降与真实任务能力之间的对应关系未被展开。第四,这是未经同行评审的预印本,来自佐治亚理工单一团队,尚无第三方复现。
对正在为推理成本头疼的服务方,Dual-Flow 提供的不是一个现成的更快推理方案,而是一个新的调控维度:当 prefill 与 decode 的负载不均衡时,可以用独立的 fan-out 把预算从一端挪到另一端。下一个可观察的变量是,这套分组执行的带宽节省能否在真实服务内核里兑现,以及验证损失的增益能否在独立复现中转化为下游任务收益——这两点成立之前,它是一份清晰的机制论证,还不是一份可采购的推理方案。

