Long-context attention · MiniMax M3

MiniMax Sparse Attention(MSA)

MSA 不是把 softmax 换成近似公式,而是先用廉价索引器决定“值得精确计算的 KV 块”,再只在这些块上运行标准注意力。本文面向已经理解 GQA 与 KV cache 的读者。

128 tokenMiniMax M3 的公开配置以 128 token 为一个 KV block,并为每个 GQA group 选择 Top-16 blocks。
问题机制算例对比证据边界资料

一、为什么按块稀疏,而不是继续缩小 KV 头数

GQA 已经通过让多个 query heads 共用 KV heads 降低缓存,但每个 query 仍要扫描全部历史位置;上下文长度 (L) 增大时,注意力计算仍按 (L^2) 增长。

滑动窗口只看邻近 token,便宜而稳定,却可能漏掉远处定义、函数签名或早期约束。MSA 的目标是在“固定局部窗口”和“全量扫描”之间增加一条内容寻址路径:远处信息只要被索引器判为相关,仍能进入精确 softmax。

二、MSA 的两条分支

Index Branch先把 KV 序列切成固定大小的块,为当前 query 和每个 GQA group 计算块相关度;Main Branch读取入选块的原始 K/V,并在这些位置上做精确 scaled-dot-product attention。索引器只负责“选哪里”,不替代主注意力的 value 聚合。

MSA 两阶段数据流查询先经过块索引器选择 KV blocks,再由主分支执行精确稀疏注意力。Query当前 tokenIndex Branch块相关度Top-k每组 16 块Main Branch精确 softmaxOutput加权 V
概念图:对应 MiniMax Sparse Attention 论文的双分支结构。每个 GQA group 可以选择不同的历史块;实际内核会把索引、读取和矩阵乘融合。
selected(g,t) = TopK(score(q[g,t], K_blocks), 16)
output[g,t] = Attention(q[g,t], K[selected], V[selected])

M3 配置还保留当前 local block,避免索引器漏掉紧邻上下文。公开配置为 4 个 KV heads,也就是 4 个 GQA groups;每组拥有自己的 index query head。

三、一个注意力预算算例

假设上下文恰好为 1,048,576 tokens,每块 128 tokens,共有 8,192 个历史块。若每组选择 16 块,主注意力最多读取 (16×128=2,048) 个历史 token,约为全上下文的 0.195%。

8,1921M 上下文中的 KV block 数
16每个 GQA group 选择的块数
2,048主注意力的名义 token 预算

这不等于总成本只有全注意力的 0.195%:索引器仍要扫描候选块,还存在 Top-k、非连续 KV 读取与 kernel 调度开销。真实收益取决于硬件和实现。

四、MSA、DSA 与滑动窗口差在哪

方法选择粒度远程访问主要代价
滑动窗口固定连续窗口通常不能最规则、最容易优化
DSA单个 token内容相关 Top-k索引更细,但访问更碎
MSA128-token block按 GQA group 选块牺牲选择精度换取更规则的 GPU 访问

因此,MSA 的设计重点不是理论上最细的稀疏模式,而是让稀疏性真正转化为 GPU 上的连续块计算。

五、论文结果不能直接等同于 M3 端到端结果

两个实验口径必须分开。

MSA 论文报告的 109B 总参数、6B 激活实验模型,在 1M context 上相对 GQA 减少 28.4 倍注意力计算,并在 H800 上报告 14.2 倍 prefill、7.6 倍 decode 加速。这是受控实验模型,不是完整 M3。

MiniMax M3 模型卡另行报告相对 M2 的部署结果。它们的模型、内核和基线都不同,不能互换。还要注意:稀疏注意力减少的是注意力部分,MoE、投影、通信和采样仍在端到端延迟里。

评论加载中...