为纪念 35 周年:《Terminator 2: Judgment Day》将在全球影院重映
2026-07-13
2026-07-14 0
Flash-MSA 是一套面向 MiniMax Sparse Attention(MSA)的开源训练内核,使用CuTeDSL编写,重点优化NVIDIA Hopper与Blackwell架构GPU。项目在租用的H100和B200上开发测试,目标是提高超长上下文训练中的稀疏注意力效率。这是独立研究实现,并非MiniMax官方项目。

标准注意力需要让每个查询位置与全部键值位置计算,序列越长,运算量和显存需求增长越快。MSA先通过成本较低的轻量筛选注意力判断哪些区域重要,再让主注意力只处理被选中的键值块。
MSA采用块级稀疏策略:键值序列按每128个Token组成一块,通过最大池化得到块级分数,再选择得分最高的若干块。连续的数据块更适合GPU内存访问,也能减少零散索引带来的额外开销。

该方案还采用分组查询注意力(GQA),让多个查询头共享键值头。轻量筛选头进一步按组进行专门化,使不同组能够学习不同的检索模式,不必让每个注意力头单独承担完整筛选成本。
整个流程分为轻量筛选注意力、稀疏主注意力和输出三个阶段。筛选阶段生成块分数与Top-K索引,主注意力阶段只访问这些块。前向计算得到的索引会缓存,反向传播可直接复用,因此只有筛选前向仍需进行二次复杂度扫描。

前向内核采用流式Top-K选择,不需要一次保存完整分数矩阵。主注意力部分使用块稀疏版Flash Attention思路,逐块加载被选中的键值数据,并在片上完成归一化和累加,以降低高带宽显存的读写压力。
反向阶段融合轻量筛选和主注意力的部分计算,以减少中间张量存取。项目还利用KL散度梯度可化简为“筛选概率减去主注意力概率”的性质,使训练时不必完整生成两套概率分布。对于百万Token序列,这一点非常关键,因为完整注意力矩阵几乎无法长期保存在显存中。
作者使用BF16数据与PyTorch直接实现进行对照,对前向输出以及查询、键、值等梯度进行余弦相似度检查。测试容差约为0.01,用来确认稀疏选择、数值归一化与反向梯度路径的一致性。
目前反向内核仍有较高的片上资源压力:每个线程约使用138个寄存器,每个线程块共享内存约105KB,理论占用率为12.5%,低于常见Flash Attention实现约18.75%的水平。继续降低寄存器用量、调整线程块布局或拆分流水线,仍可能带来性能提升。
单块GPU也不足以承载真正的百万Token训练,完整系统还需要上下文并行。项目列出的后续方向包括IndexShare、低精度计算、Ring式上下文并行,以及针对不同Top-K比例的细致调优。

Flash-MSA的意义不仅是提供一组可运行内核,也展示了稀疏注意力从算法落到GPU训练系统时必须解决的实际问题:索引生成、块级数据布局、前后向复用、数值稳定性和片上资源分配都不可缺少。