让视频生成快 1.58 倍,却不改一行模型代码:CalibAtt 的"注意力考古学"
生成一段 720p、5 秒的视频,Wan 2.1 14B 要跑 20 分 44 秒。其中大部分时间花在哪?不是采样循环,不是 VAE 解码——是 attention。那些密密麻麻的 token-to-token 乘法,像一场没人看的演唱会,99% 的座位都是空的。
2026 年 3 月,Apple 和特拉维夫大学的一篇论文给出了一个训练无关的加速方案:CalibAtt(Calibrated Sparse Attention)。它在 Wan 2.1 14B 上把 720p 视频生成从 1244 秒压到 785 秒——1.58 倍加速,VBench 质量分不降反升。不需要微调,不需要改架构,不需要换 checkpoint,插进现有推理管线就行。
但真正有意思的不是"又快了多少",而是这篇论文揭示的一件事:视频扩散模型里的注意力,比你想象的要规律得多——只是这种规律藏在你看不到的地方。
一、问题:FlashAttention 不够,稀疏化才行
先说清楚瓶颈在哪。视频扩散模型(Wan 2.1、Mochi 1)用的是 Transformer backbone,自注意力的复杂度是 $O(N^2)$。生成 720p 视频,序列长度 $N$ 轻松超过 3 万。FlashAttention 解决了内存问题(不再 materialize 完整的 $N \times N$ 矩阵),但乘法次数没减少——每个 query 还是要和每个 key 算一遍。
所以下一波工作都在做"稀疏注意力":跳过那些不重要的 query-key 连接。问题是怎么判断哪些"不重要":
- 固定模式(如 Radial Attention):假设注意力随空间距离衰减。简单但死板,不同层/头/时间步的注意力模式差异很大。
- 在线决策(如 SpargeAttention):推理时实时估计哪些 block 重要。灵活但有运行时开销。
- 微调(如 VSA、SLA):训练时让模型学会稀疏。效果好但需要算力和数据。
二、四个观察:注意力的隐藏结构
论文最精彩的部分是第二节——对 Wan 2.1 14B 注意力图的"考古调查"。作者发现四个规律:
观察一:大部分注意力是稀疏的。 在 post-softmax 注意力矩阵 $\mathbf{P}$ 里,绝大多数 token-to-token 连接的权重接近零。更重要的是,这种稀疏性在 block 级别($B \times B$,$B=128$)依然成立——这意味着跳过整个 block 不会影响硬件效率,和 FlashAttention 的分块计算天然兼容。
观察二:模式在不同层/头/时间步之间不一致。 同一层不同头、不同层同一时间步、同一层不同时间步——注意力模式都不一样。这意味着不能用一个全局 mask,必须为每个 $(t, l, h)$ 组合单独校准。Radial Attention 用一个固定 mask 覆盖所有情况,效果自然打折。
观察三:模式在不同输入之间高度一致。 换 prompt、换初始噪声,同一个 $(t, l, h)$ 的稀疏模式几乎不变。这是 CalibAtt 能工作的根本前提——如果每个输入的稀疏模式都不一样,离线校准就没意义。作者用 64 个校准 prompt 验证:block 的 keep-rate 直方图呈双峰分布,大部分 block 要么"几乎总被保留"要么"几乎总被跳过"。
观察四:部分注意力图在空间行之间重复。 视频帧内,同一帧的不同空间行(pixel rows)的注意力模式高度相似。这意味着不需要为每一行都算 attention——算几行"锚点行",广播给其他行就行。
最反直觉的发现:观察四和观察一是互补的。 空间重复性高的注意力图,block 稀疏度往往低;反之亦然。负相关。这意味着两种加速策略可以叠加,不会打架。
三、方法:离线校准 + 在线查表
CalibAtt 的流程分两步:
离线校准(一次性,约 10-20 分钟):
对每个 $(t, l, h)$ 组合,用 64 个校准 prompt 跑一遍。对每个 prompt:
1. 计算 post-softmax attention $\mathbf{P}$ 2. 划分成 $B \times B$ block,计算每个 block 的"能量":$\mathbf{E}_{r,c} = \frac{1}{B} \sum_{i \in \mathcal{I}_r} \sum_{j \in \mathcal{J}_c} \mathbf{P}_{ij}$ 3. 对每个 query block-row $r$,贪心地选最少的 key block 使累计能量达到阈值 $\epsilon(t)$
然后跨 prompt 聚合:$\bar{\mathbf{M}}^{(t,l,h)} = \frac{1}{|\mathcal{D}|} \sum_p \mathbf{M}_p^{(t,l,h)}$,用阈值 $\rho = 0.5$ 二值化。
能量阈值 $\epsilon(t)$ 是时间步相关的——早期时间步(高噪声)用高阈值(0.99),后期可以放松(0.84)。指数衰减调度:$\epsilon(t) = A + (C-A) \exp(-kt/T)$。这符合已知规律:早期时间步的误差会传播放大,不能太激进。
同时,对每个 $(t, l, h)$ 计算空间相似度分数 $s^{(t,l,h)}$——如果超过 $\gamma = 0.87$,标记为"空间重复"head,推理时只算 $k=5$ 个锚点行。
在线推理(每次生成):
查表。根据当前 $(t, l, h)$ 取出对应的 mask 或重复标记:
- 非重复 head:用预计算的 skip list 告诉 FlashAttention3 kernel 哪些 block 要算、哪些跳过
- 重复 head:只算 $k=5$ 个锚点行的 attention,广播给同帧其他行
四、实验:1.58 倍加速,质量不降
在三个模型上的结果:
| 模型 | 分辨率 | 方法 | VBench Total | 稀疏度 | 延迟 | 加速比 |
|---|---|---|---|---|---|---|
| Wan 2.1 14B | 720p | Dense (FA3) | 79.35 | 0% | 1244s | 1.00× |
| SpargeAttention | 78.85 | 49.9% | 930s | 1.33× | ||
| RadialAttention | 77.95 | 54.7% | 936s | 1.32× | ||
| SVG2 | 79.30 | 46.3% | 846s | 1.47× | ||
| CalibAtt | 79.69 | 62.5% | 785s | 1.58× | ||
| Wan 2.1 14B | 480p | Dense (FA3) | 80.29 | 0% | 363s | 1.00× |
| CalibAtt | 80.40 | 68.1% | 250s | 1.45× | ||
| Mochi 1 | 480p | Dense (FA3) | 74.54 | 0% | 188s | 1.00× |
| CalibAtt | 74.57 | 69.1% | 161s | 1.16× |
质量不降反升。 CalibAtt 在 Wan 2.1 14B 480p 上的 VBench Total 是 80.40,比 dense baseline 的 80.29 还高一点。720p 上 79.69 vs 79.35,同样略升。这不是误差——稀疏化相当于一种隐式正则化,跳过的那些"低能量"连接可能本身就携带噪声。
稀疏度远高于对手。 62.5% vs SVG2 的 46.3% vs SpargeAttention 的 49.9%。CalibAtt 跳过的 block 多出 15-35%,但质量更好——说明它的 mask 更"准确"。
在 Mochi 1 上加速有限。 1.16×,远低于 Wan 2.1。原因是 Mochi 1 的 attention 在总推理时间里占比更小(VAE 和其他计算占比更大),所以 attention 加速的收益被稀释了。
在少步蒸馏模型上也有效。 LightX2V(4 步 Wan 2.1)上 CalibAtt 依然有效,虽然加速比略低——因为只有 4 个时间步,校准的粒度变粗了。
五、为什么 CalibAtt 比固定 mask 好
Radial Attention 的假设是"注意力随空间距离指数衰减"——一个先验,对所有 $(t, l, h)$ 一视同仁。但论文的观察二明确否定了这个假设:不同层、头、时间步的注意力模式差异巨大。
CalibAtt 的哲学是:不要假设,去测量。 每个模型有自己的注意力习惯,用 64 个 prompt 跑一遍就知道了。这种"测量驱动"的方法还有一个好处——超参数不敏感。论文附录显示,$\rho$ 从 0.3 到 0.7、$\epsilon$ 的调度参数大幅变化,效果波动都很小。因为一旦你测出了真实的稀疏模式,怎么阈值化都是水到渠成。
相比之下,SVG2 需要手动排除某些层和时间步("这些地方不能稀疏化"),RadialAttention 需要调窗口大小——都是模型相关的启发式。CalibAtt 的校准是自动的,换模型只需要重新跑一遍校准。
六、空间重复:被忽视的加速维度
观察四(空间行重复)是这篇论文的隐藏彩蛋。在此之前,没有人系统性地指出"视频注意力在帧内空间行之间重复"。这个现象的本质是什么?
视频帧的 token 排列是 row-major:一帧 $H \times W$ 个 token,按行展开。如果注意力主要捕捉的是"帧间"关系(当前帧的 token 关注其他帧的 token),那么同一帧内不同行的注意力模式确实应该相似——因为它们关注的是同一组"其他帧",只是 query 位置不同。
这解释了为什么空间重复和 block 稀疏负相关:block 稀疏的 head 主要在做帧内注意力(不同行关注不同位置),空间重复的 head 主要在做帧间注意力(所有行关注同一组其他帧)。两种模式对应两种不同的注意力功能,所以加速策略不冲突。
这个洞察对未来的工作有启发意义:如果能在训练时显式分离"帧内"和"帧间"注意力头,可能不需要校准就能直接应用不同的加速策略。
七、局限与展望
论文诚实地列出了局限:
1. 校准成本:一次性 10-20 分钟,但需要 GPU 和代表性 prompt 集 2. 对 KV cache 的兼容性未验证:当前实验在 diffusion 模型上,自回归模型的 KV cache 场景需要额外研究 3. 空间重复的广播操作:当前实现用 PyTorch 的 gather/scatter,不是最优的 CUDA kernel
从更宏观的角度看,CalibAtt 代表了一类"测量而非假设"的加速方法。在 LLM 时代,我们习惯了用先验(locality、decay、sparsity pattern)来设计加速方案。但模型越来越大、越来越复杂,先验越来越不可靠。CalibAtt 的做法是:花 20 分钟测一下,比你猜 20 小时强。
论文没有提供公开代码仓库,但方法描述足够详细,有 CUDA kernel 经验的团队应该可以复现。对于在跑视频扩散模型推理的团队来说,这是一个几乎零成本的 1.5 倍加速——值得认真读。
---
*论文:arXiv:2603.05503 — Accelerating Text-to-Video Generation with Calibrated Sparse Attention (Yehezkel et al., Apple & Tel Aviv University, 2026)*