一、为什么按块稀疏,而不是继续缩小 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 聚合。
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%。
这不等于总成本只有全注意力的 0.195%:索引器仍要扫描候选块,还存在 Top-k、非连续 KV 读取与 kernel 调度开销。真实收益取决于硬件和实现。
四、MSA、DSA 与滑动窗口差在哪
| 方法 | 选择粒度 | 远程访问 | 主要代价 |
|---|---|---|---|
| 滑动窗口 | 固定连续窗口 | 通常不能 | 最规则、最容易优化 |
| DSA | 单个 token | 内容相关 Top-k | 索引更细,但访问更碎 |
| MSA | 128-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、投影、通信和采样仍在端到端延迟里。
评论加载中...