Wave Forcing:把流式视频生成排成一条流水线
每出一块至少两次前向,这才是流式视频的瓶颈
Wave Forcing 做的事可以一句话说完:把流式视频生成里每一块的去噪和缓存刷新拆开,摊到多张卡上错峰执行,稳态下每一轮并发前向产出一块完整分块,质量没有明显让步。5-step 版本在 VBench 上的 Total 是 81.64,与 Rolling Forcing 的 81.15 基本持平,Dynamic Degree 却从 51.39 升到 94.44,长视频上从 36.63 升到 91.45。4-step 版本在 8 张 H200 上达到 147.6 DiT FPS 和 134.8 端到端 FPS,是单卡 rolling 推理基线 19.06 FPS 的 7.07 倍。这组吞吐来自系统效率实验,用的是随机初始化的 DiT 权重,不是训练好的模型,口径留到最后一节再拆。
它要解决的问题不是「生成一块要多久」,而是「出一块要占掉几次前向」。分块自回归生成每个新分块时,会把之前分块干净结果的 K/V 缓存当作条件。这套约定带来一笔隐蔽开销:除了 S 次带历史条件的去噪前向,还得在干净结果上再跑一次整模型前向,只为把 K/V 取出来刷新缓存,预测值直接丢掉。论文把这次前向叫 store,于是每块的总前向数是 N=S+1,串行执行就是 NF1C。原文的措辞很直白:即使一步去噪,也要两次前向。Wave Forcing
所以瓶颈落在排班,而不是单次计算:两次前向里只有一次在推进新内容,另一次在维护条件。论文的骨干是 Wan2.1-T2V-1.3B,一个分块三个潜帧,这决定了每次前向的粒度,也决定了这笔账怎么记。Wan2.1 图 1 把这张排班表连同产出方式一起画了出来。

图注:论文 Fig.1(S=4)三栏。(a) 是分块与去噪阶段的网格,去噪与 store 沿反对角线推进,虚线格标下一轮,宽度上界为 S+1=5(含 store)。(b) 展示 K/V 从更干净的分块流向消费者,其中一条后层边在使用前到达,s=0 一格标 Not read。(c) 同样五轮,单副本的 SF 只产出 1 块,五个 WF 副本产出 5 块。轮次是逻辑单位,不等于墙钟时间。Wave Forcing
图里 (c) 就是 1F1C 的定义:流水线填满之后,一轮并发前向产出一块完成分块,同时保留全部去噪更新。注意它改变的是排班,不是把每块的计算变少,图注也写明墙钟收益取决于各阶段耗时与重叠程度,所以 (c) 不能读成一个固定的加速倍数。
另一条线是长程漂移。串行生成越走越远,主体保持和相机会缓慢失准,这是流式长视频的第二个老问题。论文用 Subject Preservation 与 Camera Drift 两个诊断量把它变成可测的数。
让还没去噪完的分块可读,是整套排班的前提
WF 的排班依赖一条只有一行的注意力规则:一个分块只能读比它更早、也更干净的分块,不能读更晚、更噪的分块。写成掩码就是 $M_{WF}(s,j)=1[j \ge s]$,$s$ 是当前阶段,$j$ 是被读分块的阶段,$j$ 越大表示去噪越充分。可读集合因此是「自己加上所有更干净的前序」,因果性没有松动,松动的是「必须等前序彻底去噪完」这个约定。
把这条规则摊到时间轴上,就得到论文的记账方式。格子 $(i,s)$ 在第 $k=i+s$ 轮把分块 $i$ 从阶段 $s$ 推到 $s+1$,第 $k$ 轮里编号 $i=k-s$ 的分块正好处在阶段 $s$,分块越老,去噪阶段越靠后。store 固定在 $(k-S,S)$,每轮只有一块在刷新缓存,任一时刻的活跃宽度不超过 S+1。画出来就是图 1(a) 的反对角线,每轮推进一条斜线,斜线上每个格子属于不同分块的不同阶段。能这么排还有一个前提:阶段越靠后,要读的历史越短,越有机会提前把 K/V 交出去,图 1(b) 画的就是这条交付路径。
这条规则是相对 Rolling Forcing 改的。RF 在同一个去噪窗口里让不同噪声水平的分块互相读,更干净的一侧也会去读同窗口内更噪的一侧,WF 把这种连接叫 reverse refinement。按 Wave Forcing 的表述,这相当于依赖图上的一条反向边(RF 原文称之为 mutual refinement),等于让走得快的阶段回头等走得慢的阶段,两个方向互相牵制,难以按单向依赖拆成错峰流水。删掉这条边,错峰才成立。代价是条件分布被改写:论文说,不做后训练,短视频的 Quality 和 Dynamic Degree 都会下降。这笔债由三阶段训练来还。Rolling Forcing

图注:Rolling Forcing 的去噪窗口示意(图中 T=4,论文实际配置为 5)。横轴是视频帧,纵轴是去噪过程,窗口内各帧噪声水平逐个递增并由双向注意力相连。红框与绿框只标训练时是否回传梯度,橙色虚线是短期时序缓存,蓝色虚线是常驻的全局锚点。图中格子数不是每个 chunk 的潜帧数。Rolling Forcing
把它和上一章的波前图并排看,差别不在窗口大小,而在允不允许反向边。
改了条件分布就得重训,三阶段各补一处错位
三阶段训练不是三组超参,而是三次把训练条件往推理条件上挪。因果掩码改写条件分布之后,模型原来学到的去噪行为不再匹配,论文的修法是先让它恢复可用,再用教师把运动和画质拉回来,最后换成模型自己生成的历史做适配。

图注:论文 Fig.2 的训练流程三栏。Stage 1 从 RF 与 SF 两条 rollout 中各半采样,用 DMD 训练学生。Stage 2 把教师分块交错重加噪,同一个干净预测 Ŷ_θ 同时进入 DMD 与 0.25 权重的 LPIPS。Stage 3 从自生成历史采一条 RF、WF 或 SF rollout 做 on-policy DMD,右下标注只部署 WF 分支。箭头只表示状态与预测的流动,不表示阶段间的权重传递。Wave Forcing
Stage 1 沿用 RF 的混合噪声联合去噪,同时以各 1/2 的概率采一条 RF rollout 或 SF rollout,用 DMD 训练学生,SF 那一支负责在初始化阶段稳住运动。Stage 2 换成教师分块,把连续教师分块按交错时刻表重新加噪,前面的教师分块作为干净 K/V 历史,得到的是 off-policy 的状态分布,同一个干净预测同时受 DMD 与权重 0.25 的 LPIPS 监督。Stage 3 换成自生成历史,每次迭代均匀采一条 RF、WF 或 SF 的 rollout 做 on-policy DMD,三条分支各占三分之一,另外两条负责提供互补的训练分布,部署的只有 WF 分支。两个学生的起点也不同:4-step 从 Self Forcing 的 ODE 初始化产物起步,5-step 直接复用已发布的 RF 权重并跳过 Stage 1。
三阶段共用的 DMD 是分布匹配蒸馏。它不要求学生逐点复现教师的某条轨迹,而是让学生的输出分布去匹配教师分布,梯度来自真实 score 与在线跟踪的 fake score 之差。DMD
用模型自己生成的历史来训练,治的是训练时看真值、推理时看自己输出的错位。这个论证来自 Self Forcing,它产出的少步因果权重也正是 WF 4-step 学生的起点。Self Forcing
消融能看出每一支补的是什么。4-step 长视频上跳过 Stage 2,Dynamic Degree 从 74.97 掉到 15.73,Quality 从 80.89 掉到 76.68,主体还会移出视野。反过来,去掉 RF 分支后 Dynamic Degree 升到 88.82,但 Subject Preservation 掉到 77.48、Camera Drift 升到 6.24,说明更高的运动分可能只是构图不稳和主体丢失的表现。完整配方在各项指标上都没有出现不可用分数,运动与主体稳定性同时保住,因此论文保留三分支。
波前只是势能,兑现成吞吐靠的是早交付与重叠
波前只说明「可以这么排」,把它变成实测吞吐是另一套工程。WaveRT 让每个去噪阶段和 store 各占一个完整模型副本,8 张卡分成 4+1+3 或 5+1+2,第一个数字是去噪阶段数,中间是 store,最后是流式 VAE 的解码卡。阶段之间不再切分同一次前向,每个副本跑完整的模型,只交换 K/V。
早交付是这套执行的关键。生产者在 QKV 投影与 RoPE 之后立刻把 K/V 发出去,消费者到 attention 之前才检查就绪,并直接写进接收端已经排好序的槽位,不做远端拼接。这样做的效果是把等待挪到真正需要它的位置。早发布隐藏的只是后续等待,依赖本身和第一次等待都还在。论文用 $w_e=\max(0,\tau_e-\Delta_e)$ 描述每条边暴露出来的等待,$\Delta_e$ 是数据就绪到真正被需要的提前量,$\tau_e$ 是排队、传输与信号的总耗时,只有每条边都满足 $\tau_e \le \Delta_e$,通信才会被完全藏住。
这也解释了为什么它和 Ulysses 不是同一类并行。Ulysses 切的是同一次前向,序列维分成 N/P 段,两次 all-to-all 换成按头并行,所以并行度受注意力头数约束,卡必须分到互不重叠的头子集;Ring 则让 K/V 沿环流动。WP 切的是前向的阶段,并行宽度等于去噪步数加一个 store,这就是 4-step 要排成 4+1+3 的原因。Ulysses Ring Attention
代价是总算量一点没少:跨 N_chunk 个分块仍然要跑 N_chunk(S+1) 次完整前向,换来的只是这些前向能同时在途。

图注:论文 Fig.3 关于隐藏 K/V 交付的示意。(a) 层同步交换会把通信暴露在时间轴上,(b) 早发布加用时等待把后续等待藏起来,图例区分暴露等待与屏障空转。(c) 是提交、发布、消费的流程:QKV 与 RoPE 之后本地计算,另一路等待事件、拷贝 K/V、写入接收端的有序槽位,再发布 tick 标志并等齐输入后做 attention,注明不做远端 K/V 拼接。这是等成本下的机制示意,不是实测时间线。Wave Forcing
机制示意只说明等待能被藏在哪里,要和另一种并行方案对照,才看得出 WP 的边界。

图注:DeepSpeed-Ulysses 的序列并行数据流。Q/K/V 投影后经第一次 all-to-all 进入按头并行的注意力计算,再经第二次 all-to-all 切回序列维。维度标注显示本地分片为 N/P,图例给出头数与进程数,并注明示例假设 P = hc = 4。图中没有任何吞吐或延迟数值。Ulysses
所以 WP 的收益是让在途的前向变多,而不是让单次前向变快。这也预告了它的天花板:宽度被步数封顶,加卡不能无限提吞吐。
动态度接近翻倍、吞吐 7 倍,但每个数字都有口径
WF 的两个核心收益都真实存在,但要读对它的表,得先把指标、权重和硬件三套口径分开。VBench 的 Dynamic Degree 不是运动幅度,而是被判为非静态的视频所占比例,天然落在 0 到 1 之间,报出的 94.44 就是约 94% 的样本被判定有运动。VBench 它在 Quality 的 7 个维度里权重只有 0.5,其余都是 1,所以这一列接近翻倍(51.39 → 94.44,约 1.84 倍)并不会让 Total 跟着翻倍:81.15 到 81.64 只挪了 0.49。
| 方法 | Steps | Total | Quality | Dynamic | 长视频 Dynamic | Subject↑ | Drift↓ |
|---|---|---|---|---|---|---|---|
| Rolling Forcing | 5 | 81.15 | 83.77 | 51.39 | 36.63 | 92.75 | 0.17 |
| Causal Forcing | 4 | 79.61 | 82.83 | 100.00 | 96.61 | 71.11 | 11.14 |
| Wave Forcing | 4 | 80.74 | 83.93 | 84.72 | 74.97 | 91.88 | 0.36 |
| Wave Forcing | 5 | 81.64 | 84.40 | 94.44 | 91.45 | 97.10 | 0.37 |
Causal Forcing 是个有用的反例:它拿到 Dynamic 100.00 与长视频 96.61,但 Subject Preservation 只有 71.11、Camera Drift 高达 11.14,论文直接判为不可用,并指出主体在 30 秒与 75 秒处消失。它在本表的 100.00 与 96.61 是 VBench 与 VBench-Long 口径(在 Causal Forcing 自己的代码仓库里、用它发布的 checkpoint 跑出来的);Causal Forcing 论文自报的 Dynamic 68 才来自自建 100 条高动态提示集,那个数不能和 VBench 横比。Causal Forcing
吞吐这边有三个容易踩的坑。第一,147.6 与 134.8 都来自随机初始化的 dummy DiT 权重,VAE 用真实权重,论文也明确没有训过 14B 的 WF 模型,所以 14B 那一档只代表执行成本,不代表生成质量。第二,DiT FPS 不等于端到端 FPS,差额来自每轮暴露出来的 VAE 解码尾部,1.3B 4-step 是 147.58 对 134.81。第三,tick 更短不等于端到端更快:Sage+W8A8 把 tick p50 压到 76.05 ms,端到端反而降到 132.89 FPS。这里的 Sage 与 W8A8 描述的是本地算子精度,不是 K/V 的传输精度。SageAttention
| 1.3B 4-step 配置 | DiT FPS | 端到端 FPS | 相对单卡 |
|---|---|---|---|
| 单卡基线 | 33.86 | 19.06 | 1.00× |
| WaveRT | 147.58 | 134.81 | 7.07× |
| WaveRT + Sage | 147.78 | 134.79 | 7.07× |
| WaveRT + Sage + W8A8 | 145.47 | 132.89 | 6.97× |
2.53 倍这个数也要带着条件读,它同样来自 dummy 权重、关掉 VAE 的 DiT-only 测试。它出现在 1.3B 的 Sage+W8A8 档,对照的是 Ulysses 与 Ring 里更快的那个,两边参数规模、后端档位、GPU 数和去噪步数都对齐。但这个对照同时换了两样东西:上下文并行走的是 RF 的全活跃窗口注意力,WP 走的是分块因果掩码,所以它不是纯粹的执行策略对比。优势还会随规模收窄,9B BF16 上 WP 是 45.70 FPS,Ulysses 是 46.41,WP 反而以 0.985 倍略低。
论文自己划的边界比摘要保守。1F1C 是调度目标,不保证首输出更快,第一个解码输出仍要付 pipeline fill 的延迟。并行宽度由去噪步数决定,固定采样预算下加卡有上限。质量诊断只覆盖 100 条主体聚焦子集,与人类判断的一致性还没建立,而交互、prompt 切换和多流并发服务都不在本文范围内。标题里的 speed-of-light 只是修辞,正文没有给出任何理论下界。交互方向作者点名了 LongLive 的 KV recache 作为起点,同期还有 History Forcing 把历史当成蒸馏监督信号,而不是调度对象。LongLive History Forcing
WF 真正的贡献是承认连续输出是一个流水线问题,并让生成结构、训练配方和执行机制一起为它让路。它换来的是稳态吞吐和更高的动态度(更多样本被判为有运动),代价是训练流程复杂、并行宽度被步数封顶、首输出延迟没有改善。
想深入可以读原文:Wave Forcing: Towards Speed-of-Light Streaming Video Generation,arXiv:2611.00859。
参考文献
- Wave Forcing: Towards Speed-of-Light Streaming Video Generation. https://arxiv.org/abs/2611.00859
- Rolling Forcing: Autoregressive Long Video Diffusion in Real Time. https://arxiv.org/abs/2509.25161
- Self Forcing: Bridging the Train-Test Gap in Autoregressive Video Diffusion. https://arxiv.org/abs/2506.08009
- Causal Forcing: Autoregressive Diffusion Distillation Done Right for High-Quality Real-Time Interactive Video Generation. https://arxiv.org/abs/2602.02214
- Wan: Open and Advanced Large-Scale Video Generative Models. https://arxiv.org/abs/2503.20314
- DeepSpeed-Ulysses: System Optimizations for Enabling Training of Extreme Long Sequence Transformer Models. https://arxiv.org/abs/2309.14509
- Ring Attention with Blockwise Transformers for Near-Infinite Context. https://arxiv.org/abs/2310.01889
- VBench: Comprehensive Benchmark Suite for Video Generative Models. https://arxiv.org/abs/2311.17982
- SageAttention: Accurate 8-Bit Attention for Plug-and-play Inference Acceleration. https://arxiv.org/abs/2410.02367
- One-step Diffusion with Distribution Matching Distillation. https://arxiv.org/abs/2311.18828
- LongLive: Real-time Interactive Long Video Generation. https://arxiv.org/abs/2509.22622
- History Forcing: Distilling History-Dependent Continuations for Long-Horizon Video World Models. https://arxiv.org/abs/2611.02782