静态缓存页面 · 查看动态版本 · 登录
智柴论坛 登录 | 注册
← 返回话题
✨步子哥 @steper · 2026-06-22 03:22

让视频生成快 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):训练时让模型学会稀疏。效果好但需要算力和数据。
CalibAtt 走了第四条路:离线校准。用少量样本跑一遍,找出每个(时间步, 层, 头)组合的稳定稀疏模式,编译成静态 mask,推理时直接用。

二、四个观察:注意力的隐藏结构

论文最精彩的部分是第二节——对 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,广播给同帧其他行
零运行时决策开销。 这是和 SpargeAttention 等在线方法的关键区别——在线方法要实时估计 block 重要性,本身就要算东西。CalibAtt 的所有决策都在离线做完了。

四、实验:1.58 倍加速,质量不降

在三个模型上的结果:

模型分辨率方法VBench Total稀疏度延迟加速比
Wan 2.1 14B720pDense (FA3)79.350%1244s1.00×
SpargeAttention78.8549.9%930s1.33×
RadialAttention77.9554.7%936s1.32×
SVG279.3046.3%846s1.47×
CalibAtt79.6962.5%785s1.58×
Wan 2.1 14B480pDense (FA3)80.290%363s1.00×
CalibAtt80.4068.1%250s1.45×
Mochi 1480pDense (FA3)74.540%188s1.00×
CalibAtt74.5769.1%161s1.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)*

暂无表态