腾讯MC-Sparse论文:稀疏注意力丢掉的精度,该怎么补回来
你有没有想过,一部14秒的AI生成视频,背后要算多少次"谁该看谁"的账?答案是惊人的。生成一个768p、14.4秒的视频,模型里的注意力机制要处理几十万个token,每个token都要和其他所有token算一遍相关性。这个计算量是平方级增长的,画面越长、分辨率越高,算力消耗就越恐怖。腾讯这篇论文里提到,用满血的密集注意
14秒的AI生成视频,背后要算多少次“谁该看谁”的账?这个问题很少有人细想。
数字很吓人。一段768p、14.4秒的视频,模型里的注意力机制要处理几十万个token,每个token都得和其他所有token算一遍相关性。计算量按平方级往上走,画面越长、分辨率越高,算力开销就越夸张。腾讯这篇论文里提到,用满血的密集注意力生成这样一段视频要1062秒,接近18分钟。这还只算了去噪部分,编码和解码都没算进去。
业界的应对办法是稀疏注意力:注意力通常集中在少数几个关键token上,那就别全算,只算重要的那部分。听着挺合理。可稀疏到一定程度,视频就开始出毛病,画面糊、细节丢,和密集计算的结果差得明显。这篇论文要弄清楚的,正是“稀疏到底丢了什么”。
密集和稀疏之间,到底差在哪
目前主流的稀疏注意力方法,操作单位大多是“块”。
块稀疏注意力*:把一堆query(提出问题的token)和一堆key(被查询的token)分别打成固定大小的“块”,对每组query块,只留下整体上看比较重要的几个key块,剩下的全扔。
这么设计有它的道理,GPU天生喜欢批量处理规整大小的数据块。要是每个token都单独决定自己看谁,内存访问会乱成一团,效率反倒更低。问题也恰恰在这儿:一个块里塞了好几个token,它们未必关心同一组key。强行让它们共享一次选择,有些token该看的没看到,不该看的倒被塞了进来。
论文作者没急着改选择算法,先做了一件更基础的事:把误差来源拆开来看。他们设计了三种“oracle”(理想情况下的最优选择器,用来对照实际方法差多少)当对照组。
第一种是块oracle,每组query块选出整体上最优的几个key块。第二种是token oracle,还是共享一次选择,但选择的最小单位从块变成了单个token。第三种是per-query oracle,每个query都能单独挑自己的key token,不再和同组其他query共享。
三组一对比,结果很清楚。从块oracle到token oracle,精度明显往上走,说明“把不相关的邻居token硬塞进来”这件事本身就带来了损失,论文管它叫KV绑定误差。从token oracle再到per-query oracle,精度又涨了一截,说明“逼着不同query共享同一次选择”同样在拖后腿,这是query绑定误差。两种误差加在一起,就是论文说的结构性绑定误差。
另外还有两种误差。普通的块稀疏方法用均值池化打分,先把一个块里所有query和key各自取平均,再拿平均值算相关性分数。取平均这个动作本身就丢信息,选出来的块未必是真正该选的,这叫选择误差。还有一种更隐蔽:就算选得再准,被丢弃的那些token依然带着一点注意力权重,零零碎碎加起来也会让输出偏掉,论文称之为丢弃尾部误差。
拿图书馆找资料打比方。图书馆规定“只能按整个书架借”,你只需要架子上第三本书,也得把旁边十几本不相关的书一起搬走占精力,这是结构性绑定误差。找资料靠的是书架标签上的笼统分类,而不是翻每本书的实际内容,那就经常找错架子,这是选择误差。就算你精准找到了最该看的那几本,图书馆其他角落里那些零散的、不起眼的参考资料也可能藏着一两条有用信息,你全放弃不看,积少成多,研究照样出偏差,这是丢弃尾部误差。三类误差不分开,你永远不知道该优化选择算法、该换数据结构,还是该想办法补偿被丢的那部分。
拆清楚之后,论文的结论很直接:想缩小密集和稀疏的差距,三件事得同时做到,选择更细粒度,打分更精确,被丢掉的部分要有补偿机制。这三条原则直接催生了他们提出的新方法,叫MC-Sparse。
MC-Sparse:三管齐下的解法
MC-Sparse*(Meta-Cached Sparse Attention,元缓存稀疏注意力)的核心思路,是把前面三个问题逐个攻破,同时还得照顾GPU执行效率。
先看结构绑定误差怎么解。论文的做法是让KV(key和value,也就是被查询的内容)选择精确到单个token,不再被块结构捆住。但query(提问方)这边不能完全放开,GPU批量计算需要规整的数据块,每个query都单独跑一次,计算效率会掉得厉害。于是论文把相似的query聚成固定大小的组,组内共享一次KV选择,但KV选择的粒度精确到token级别,不受块边界限制。
这就像公司开会。让每个员工单独找老板汇报,效率太低,老板根本忙不过来,这是query完全自由带来的效率灾难。可把所有人塞进一个大会议室,不管议题相不相关都强行一起听,那又是典型的结构绑定误差。折中的办法是把议题相近的人分成几个小组,每组单独开会,但会上讨论的内容不再是笼统的“部门报告”,而是精确到每个具体问题,效率和针对性都保住了。
那怎么把相似的query分成等大小的组?常见的k-means聚类做不到严格等大小,聚类结果天然不规则,强行拉齐就得靠填充,填充意味着浪费算力去处理没有实际意义的占位数据。论文采用的方法叫快速主方向分裂划分(Fast PDDP,一种递归二分聚类算法,通过沿数据主方向做中值切分来保证分组大小完全相等),原理是把一组query投影到它们的主方向上,按中位数切成两半,反复切下去,直到每组恰好包含目标数量的query。这样组内相似性比较高,组的大小天然均等,不用填充。
实验数据说明这套设计有效。算上填充浪费、实际执行密度相同时,Fast PDDP分组加token级选择的注意力召回率为92.3%,k-means分组配合token选择只有87.6%;输出相对误差也从3.8%降至2.6%。
第二个问题是选择误差。论文提出的“精确选择”目标很直接:针对每组query,挑出能令这组query累积注意力权重最大的那批KV token。做法是先跑一遍完整的密集注意力,取得真实注意力分数再据此筛选,而非像均值池化那样拿粗糙近似值去猜。
问题是密集注意力本身就贵。若每一步去噪都重算一次精确选择,开销跟直接跑密集注意力相差无几,稀疏化就失去意义。论文在此观察到一点:视频生成的扩散模型去噪分很多步,相邻步骤间注意力关注的模式变动很小。
扩散模型*:一类通过多步迭代、从随机噪声逐步还原出清晰图像或视频的生成模型,每一步称为一个去噪步骤。
相邻步骤的注意力模式既差不多,就没必要每步都重新精确计算。论文因此设计了“锚点步”与“重用步”:只在少数锚点步骤跑完整的密集注意力,精确算出该选哪些KV token,把选择结果缓存;之后若干重用步骤直接复用这份选择,实际计算只用当前步骤最新的Q、K、V。
这有点像每天通勤走同一条路。路况短时间内变化不大,不必每天早上重新规划最优路线,隔几天按实际路况校准一次就行,其余日子沿用上次的规划。每天都重新规划,花在规划上的时间可能比省下的通勤时间还多;但从不校准,路况真变了(比如突然封路),你会一直走一条不合适的路线,绕了远路还毫不知情。锚点步和重用步,就是在“每步都算”和“从来不算”之间找平衡点。
实验显示,这种复用策略甚至比“每步都用均值池化重新算一次”更准。论文图表里,哪怕是25步之前缓存的精确选择结果,拿到当前步骤复用,表现依然好于当前步骤临时用均值池化算出的选择。“陈旧但精确”的信息,比“新鲜但粗糙”的更可靠。
第三个问题是丢弃尾部误差怎么补偿。传统块稀疏方法用“块的平均值”近似补偿被丢弃部分的贡献,可MC-Sparse的选择精确到单个token,不再对齐块结构,块级别的补偿方式用不上了。
论文把解法转向时间维度。他们发现密集注意力与稀疏注意力输出的差值(即残差)在相邻去噪步骤间变化很小,比输出结果本身还稳定;而且用精确选择算出的残差,比均值池化算出的更稳定。
补偿机制因此很简单:锚点步把密集注意力的完整输出与稀疏注意力输出相减,得到残差并缓存;后续重用步骤里,稀疏注意力算完结果,直接把缓存的残差加回去,等于给每次稀疏计算打一个“误差补丁”。
这思路类似修补老家具的损耗。每次用完都重新测量损耗再修补,费时费力;若损耗量短期内基本不变,不如先测一次损耗模式,之后按这个固定补丁修补,省掉重复测量。完全不打补丁,瑕疵一直在;每次都重新测量,省下的时间又全搭进去。
三个设计合起来就是MC-Sparse的完整流程:锚点步跑一次密集注意力,顺带完成query分组、精确KV选择、残差计算三件事,结果打包缓存;后续重用步骤直接复用缓存的分组方案和选择索引,只用新的Q、K、V做实际稀疏注意力计算,再把缓存的残差加回去。
要让流程真正跑得快,论文还做了几件工程上的硬功夫。他们用CuTeDSL(NVIDIA提供的底层GPU核函数编程框架,用于编写高性能张量计算代码)手写了一个token级稀疏注意力核函数,支持按索引异步抓取被选中的key和value,无需先打包成规整块结构。另外设计了两阶段的精确选择核函数:标准FlashAttention计算时用“在线softmax”技巧,不会暴露完整注意力矩阵,所以精确选择要先跑一遍拿到归一化所需统计量,再跑第二遍还原分数并直接完成分组聚合与筛选,避免把整个密集注意力矩阵存进显存。
实测效果怎么样
设计说了这么多,实际效果到底如何?
论文在多个视频生成模型和一个3D资产生成模型上做了测试。先看视频生成这块的核心数据。
Minimax-H3-Base模型上,768p分辨率、15%的注意力密度(即只保留15%的query-key交互对)下,MC-Sparse的PSNR达到27.30分贝,SSIM为0.882;同密度区间表现最好的对比方法Sol-Attn在32.4%密度下只有23.66分贝,PISA在30%密度下是23.45分贝。密度更低、精度反而更高,速度还提升到1.80倍。
PSNR*(峰值信噪比,数值越高说明生成结果和参照结果越接近),SSIM*(结构相似性指数,衡量两张图像结构上的相似程度,数值越接近1越好),这两个指标衡量稀疏计算结果与密集计算结果之间的差距,数值越高说明稀疏方法越逼真。
HunyuanVideo-13B这个720p模型上,25%密度时MC-Sparse的PSNR达到32.89分贝,15%密度时达到30.78分贝,速度分别提升到1.82倍和2.00倍,全面超过Sol-Attn和PISA两个基线方法。
Wan2.1-14B这个720p模型上,无论文生视频还是图生视频任务,MC-Sparse在PSNR、SSIM、LPIPS三个指标上都拿到最佳成绩,速度也达到1.52到1.53倍。
LPIPS*是一种学习感知图像相似度指标,靠深度网络特征来计算,数值越低,两张图在人眼看来就越接近。
3D资产生成这块的差距更明显。在HY3D-Internal内部模型上,15%密度时MC-Sparse的Chamfer距离只有0.177,Chamfer距离是衡量两个三维形状差异的几何指标,数值越低形状越接近;PISA在25%密度时是0.976,Sol-Attn在36.1%密度时是1.901。速度上MC-Sparse拿到2.32倍提升,Sol-Attn只有1.57倍。论文配的3D模型渲染图里,PISA和Sol-Attn生成的表面能看到明显断裂、细节缺失,MC-Sparse的表面仍然连续、细节完整,而它用的注意力密度还更低。
| 模型 | 方法 | PSNR↑ | 密度↓ | 加速比↑ |
|---|---|---|---|---|
| Minimax-H3-Base | Sol-Attn | 23.66 | 32.4% | 1.59× |
| Minimax-H3-Base | **MC-Sparse** | **27.30** | **15.0%** | **1.80×** |
| HunyuanVideo-13B | PISA | 27.65 | 30.0% | 1.70× |
| HunyuanVideo-13B | **MC-Sparse** | **30.78** | **15.0%** | **2.00×** |
| Wan2.1-14B-T2V | SVG-EAR | 27.61 | 25.3% | 1.38× |
| Wan2.1-14B-T2V | **MC-Sparse** | **28.81** | **25.0%** | **1.53×** |
消融实验做得很细,各个组件是一层层往基础块稀疏方法上叠的。最原始的均值池化块稀疏方法PSNR只有20.96分贝;加上带缓存复用的精确KV选择,升到21.60分贝;再加token级粒度,到22.57分贝;再加query分组,到23.51分贝;最后加残差补偿,一下跳到27.05分贝。残差补偿这一步贡献最大,整整三点五个分贝,丢弃尾部误差这件事确实被低估了。
有个细节挺有意思。残差补偿同样加上去,直接套最原始的均值池化方法只涨1.25分贝,套到PISA上只涨0.49分贝。可见这个机制得跟前面的精确选择和分组设计配合,才能把效果榨出来,单拎出来用作用有限。论文开头那个判断也由此得到印证:三类误差并不各自独立,解法要联动。
核函数本身的执行效率也被单独测过,为的是避免“稀疏是稀疏了,GPU跑起来反倒更慢”。在Hopper GPU上,20%密度时MC-Sparse的核函数跑到理论加速比的96%,PISA的核函数是82%,SVG2的核函数是80%。MC-Sparse的token级选择看着更“碎”,但靠异步抓取和warp专精的工程设计,数据不规整并没有拖慢实际执行。
写在后面
这篇论文读下来,印象最深的不是最终的加速比数字,而是它处理问题的路子。
不少稀疏注意力论文拿到新想法就直奔实验、报指标。这篇先花大篇幅拆误差来源,用三种oracle对照组把“哪个环节在拖后腿”量化出来。先诊断再开药,工程论文里这么干的其实不多,多数工作更愿意直接给方案。
另一个意外的细节是,残差补偿这个看着简单的加法操作,在消融实验里贡献了最大的单项提升。这说明被丢掉的那些“不重要”token,累积影响一直被低估。直觉上注意力权重小的token可以忽略,数据却证明忽略的代价比想象中大,高密度稀疏的场景下尤其如此。
还有一处值得琢磨。“锚点步复用”策略说到底是用时间上的信息冗余,去换空间上的计算精度。视频生成领域已经有不少论文走这条路,扩散模型的特征缓存技术就是一例;把这思路同时用在稀疏选择和误差补偿上,算是这篇论文比较巧的组合。
论文没展开的一点是,稀疏密度压到更极端(比如低于10%)时,这套方法会不会出现明显的精度断崖。锚点步间隔拉长之后,精确选择的“过期”程度会不会突然失效,这个问题留给后续工作。
Q&A
Q1:MC-Sparse是什么?
A:MC-Sparse是腾讯提出的训练无需的稀疏注意力框架。核心做法有三样:对KV token做精确的单个级别选择;把相似的query打包成等大小分组;通过缓存跨去噪步骤复用选择结果和误差补偿残差。计算量降下来了,生成质量仍接近密集注意力。
Q2:MC-Sparse相比其他稀疏注意力方法有什么优势?
A:跟Sol-Attn、PISA等方法比,MC-Sparse在同等甚至更低的注意力密度下,PSNR和SSIM指标更高,去噪速度也更快。Minimax-H3-Base上加速1.80倍,3D资产生成模型HY3D-Internal上加速2.32倍,视觉质量的损失几乎察觉不到。
Q3:为什么传统的块稀疏注意力会导致生成质量下降?
A:传统块稀疏方法有三类误差。一是把不相关的KV token硬绑进一个块,一起保留或一起丢弃;二是用均值池化这类粗糙方式打分,选择不准;三是被丢弃的token仍带少量注意力权重,累积起来让输出偏掉。MC-Sparse分别用token级选择、精确打分和残差补偿对应这三类误差。