跳转至

六十二:DeepSeek 后续工作:NSA 与 DSA

来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247484933&idx=1&sn=402975f619c1789cffc24e8d6f530f73&chksm=f01eb57cc7693c6a21059cfcfb6fcdb5073b747fd9ae3b04274ff6e26ba38d75cab4e91426f7#rd

1. 学习范围

本日覆盖 DeepSeek 在长上下文稀疏注意力方向的两项工作: - Native Sparse Attention,NSA从预训练阶段原生采用的硬件友好稀疏注意力,通过压缩、选择和滑动窗口三个分支兼顾全局语义、细粒度检索和局部模式。 img

  • DeepSeek Sparse Attention,DSADeepSeek-V3.2-Exp 在 MLA 上加入的细粒度 token 稀疏注意力,通过 Lightning Indexer 为每个 Query 选出 Top-k 历史 KV token。

img

两者都追求长上下文训练和推理效率,但技术路线不同。NSA 是完整的原生稀疏架构,重点是连续块访问和端到端训练;DSA 是在已有 128K MLA 模型上通过继续训练迁移出的细粒度稀疏机制,重点是低成本索引器与固定数量 token 检索。

2. 长上下文 Attention 的成本

对序列长度 L、每头维度 d,全注意力需要计算约 L(L+1)/2 个因果 Query-Key 对:

training/prefill attention compute: O(L^2 * d)attention score memory without fused kernel: O(L^2)decode per new token: O(L * d)full generation attention pairs: O(L^2)
训练和 prefill 通常具有较大的矩阵,算术强度高,容易偏计算受限。Decode 每次只有一个或少量 Query,却要读取全部历史 KV,更容易偏显存带宽受限。 因此稀疏注意力必须同时回答两个问题: - 训练和 prefill 是否真正减少矩阵计算,并有高效 backward kernel。

  • Decode 是否真正减少 KV 读取,而不是只减少标量乘加次数。

3. 理论稀疏与实际加速

稀疏 Attention 思想:不去计算全部 token 两两相似度,只挑选一部分重要的 Token 做匹配,理论上 FLOPs(运算量)下降。 稀疏 attention 只计算部分 Query-Key 对,但理论 FLOPs 下降不保证实际延迟下降,真实跑起来不一定变快。常见原因包括: - 随机 token 索引导致 HBM 读取不连续。

  • 每个 attention head 选择不同 KV,GQA/MQA 共享缓存却要读取所有 head 选择结果的并集。

  • 选择器本身需要全量打分、聚类或哈希。

  • Prefill 稀疏但 decode 不稀疏,或者反过来。

  • 没有高效 backward,只能在推理阶段使用。

  • Top-k、索引排序和动态 shape 的调度开销吞噬收益。

硬件对齐意味着稀疏模式、数据布局、Tensor Core tile、SRAM 复用和 query grouping 一起设计,而不是只在公式中把 attention mask 置零。

4. 原生稀疏与后置稀疏

后置稀疏通常先训练 Full Attention 模型,推理时再删除或跳过部分 KV。优点是无需重新预训练,缺点是模型从未在该稀疏模式下适应,推理时强行删掉 KV,很容易删掉关键信息,效果暴跌;并且训练阶段得不到任何加速。 原生稀疏从预训练开始就在稀疏拓扑下优化。模型可以学习如何把信息写入压缩表示、如何使用有限检索预算,训练本身也能加速。其代价是需要完整训练基础设施,且稀疏策略设计错误会直接限制模型能力。 NSA 属于原生稀疏路线。DSA 则处于两者之间:它不是从随机初始化开始训练,但也不是零训练的推理插件,而是通过 dense warm-up、近 944B token 的稀疏继续预训练和后训练,让既有模型适应新拓扑。

5. NSA 总体结构

img

对第 t 个 Query q_t,NSA 构造三组更紧凑的 K/V:

C = {cmp, slc, win}

cmp: compressed coarse-grained tokens
slc: selected fine-grained token blocks
win: recent sliding-window tokens

img

三个分支分别计算 attention,再由可学习 gate 加权:

o_t* = sum_{c in C} g_t^c * Attn(q_t, K_t^c, V_t^c)
g_t^c = sigmoid(MLP_c(input_t))

img

每个分支有独立 softmax,最终组合的是三个分支输出,而不是先把三组 K/V 拼起来做一次统一 softmax。NSA 要求总参与元素数远小于完整历史:

N_t = |K_t^cmp| + |K_t^slc| + |K_t^win| << t

为什么「三路独立 softmax」是重要设计选择?

如果先拼接所有 KV 再统一 softmax:久远的大量压缩 token 会稀释近期窗口 token 的注意力权重(长尾历史抢占概率)。 三路分开归一化:窗口分支、精选块、压缩摘要内部各自分配注意力权重;Gate 负责调节三路之间的贡献比例。模型可以自由平衡「近期细节」「选中关键历史」「远古压缩摘要」,不会出现远距 token 压制近距信息。

6. NSA 压缩分支

压缩分支把连续历史块映射为单个粗粒度 K/V。设压缩块长度为 l,相邻块步长为 d

img

K_t^cmp = {
  phi_K(k_(i*d+1 : i*d+l))
  | 0 <= i <= floor((t-l)/d)
}
t = 当前已经处理完成的历史 token 总数
l:压缩块长度(每一块包含 l 个原始 token)d:滑动步长(每次块向前挪动 d 个 token)

img

phi_K 是带块内位置编码的可学习 MLP,Value 使用独立的 phi_V。压缩 token 数为:

N_cmp(t) = floor((t-l)/d) + 1
NSA 设置 d<l,让相邻压缩块重叠,减少语义在块边界被切断的问题。压缩分支以较低分辨率扫描完整历史,提供全局感知,但单个压缩向量不一定保留块内精确 token 信息。

img

7. NSA 选择分支的必要性

只用压缩 token 会丢失数字、变量、代码标识符和精确短语等细节。因此 NSA 根据当前 Query 选择重要的原始连续 token 块,再对块内原始 K/V 做细粒度 attention。

img

选择按连续块进行,而不是随机挑选单 token,原因包括: - 相邻 token 的注意力重要性经常具有空间连续性。

  • 连续 HBM 读取更容易合并访存。

  • Block 可以映射到 Tensor Core tile。

  • 训练 backward 更容易复用 FlashAttention 式分块计算。

块粒度过大时会加载很多无关 token;过小时索引和随机读取开销上升。

8. NSA 复用压缩注意力分数

NSA 不再训练独立 block selector,而是复用压缩分支已经计算的注意力概率:

p_t^cmp = Softmax(q_t^T K_t^cmp)

img

若压缩块与选择块完全一致,即 l'=l=d,可直接令选择块重要度等于 p_t^cmp。如果块大小和步长不同,则依据时间覆盖关系,把相关压缩块概率聚合成选择块分数。 这种复用有两个价值: - 避免额外全量 selector 网络和辅助蒸馏 loss。

  • 压缩分支本身受语言建模目标训练,其全局相关性分数同时服务于粗粒度 attention 和细粒度定位。

Top-n 排名仍是离散操作,所谓“natively trainable”不表示 Top-n 索引本身可微;它表示模型从预训练开始就在该稀疏结构下优化,并且三个分支拥有可训练参数和高效前后向算子。

9. GQA/MQA 下的共享块选择

在 GQA 或 MQA 中,同一组 Query heads 共享 KV cache。如果每个 Query head 独立选择 block,实际要读取这些选择结果的并集,内存访问稀疏度会显著下降。 NSA 将组内 H 个 Query heads 的选择重要度相加:

p_t^slc,shared = sum_{h=1}^H p_t^slc,(h)

img

然后整组 heads 使用相同的 Top-n block 集合。这牺牲一部分逐 head 选择自由度,换取 KV 只加载一次并在组内复用,是算法和硬件共同设计的典型例子。

10. NSA Top-n 连续块选择

设选择块大小为 l',根据共享重要度选择 Top-n block:

I_t = TopNBlocks(p_t^slc,shared, n)

K_t^slc = Cat({k_(i*l'+1 : (i+1)*l') | i in I_t})
V_t^slc = Cat({v_(i*l'+1 : (i+1)*l') | i in I_t})
细粒度分支共激活:

N_slc = n * l'

img

NSA 论文配置为 l'=64、n=16,因此最多加载 1024 个原始选择 token。16 个 block 中包含固定激活的 1 个开头 block 和 2 个局部 block,用于提供 attention sink 和局部稳定性。

11. NSA 滑动窗口分支

滑动窗口保留最近 w 个原始 token:

img

K_t^win = k_(max(1,t-w+1) : t)
V_t^win = v_(max(1,t-w+1) : t)
局部语法、短程共指和当前代码块通常容易学习,并可能形成 shortcut,使压缩与选择分支得不到充分训练。把局部 attention 独立成专用分支,可以让另外两个分支更专注于全局扫描和远程精确检索。 NSA 为三个分支提供独立 K/V 投影,减少不同信息源之间的梯度干扰,再通过 gate 融合输出。NSA 论文配置使用 w=512

12. NSA 论文实验配置

NSA 主要实验使用: 项目 配置 总参数 / 激活参数 27B / 3B Transformer 层数 30 隐藏维度 hidden size 2560 Query heads / GQA groups 64 / 4 dq=dk / dv 192 / 128 Routed / shared experts 72 / 2 MoE Top-k 6 NSA 压缩块长度 l 32 NSA 压缩步长 d 16 NSA 选择块长度 l′ 64 NSA 最大选择块数量 n 16 NSA 滑动窗口大小 w 512 NSA 与 Full Attention 基线都在约 270B 个 8K 文本 token 上预训练,再使用 YaRN 在 32K 文本上继续训练和 SFT。公平比较要求两者都训练到收敛,而不是拿从头训练的 NSA 对比已经成熟的 Full Attention checkpoint。

13. NSA 每个 Query 的访问量

在历史长度 s 处,最后一个 Query 近似需要访问:

N_NSA(s) ~= floor((s-l)/d)+1 + n*l' + w

img

其中压缩分支的 token 数仍随 s 线性增加,只是约缩小为 s/16。因此整个长度为 L 的 NSA 压缩分支总复杂度仍有 O(L^2/d) 项,选择和滑窗分支约为 O(L(nl'+w))。NSA 大幅减少常数并改善硬件效率,但不能简单认为总算法严格为 O(L)

14. NSA 的硬件对齐 Kernel

压缩和滑窗分支可较直接复用 FlashAttention-2 类 kernel。选择分支需要处理每个 Query 不同的稀疏 block,NSA 使用面向 GQA group 的 Triton 设计:

img

  • 对位置 t,把同一 GQA group 的所有 Query heads 一起载入 SRAM。

  • 读取该组共享的连续 KV block 索引。

  • 按索引逐块把连续 K/V tile 从 HBM 载入 SRAM。

  • 在 SRAM 中完成在线 softmax 和 Value 聚合。

  • 把 Query/输出循环交给 Triton grid 调度,使不同工作单元负载接近。

组内共享 KV 避免重复传输,连续块访问提高 coalescing 和 Tensor Core 利用率。Kernel block size 需要整除选择块 l',否则会产生边界和利用率问题。

15. NSA 的训练与推理证据

论文在 8 张 A100、Triton kernel 与 Triton FlashAttention-2 的同后端比较中报告: - 64K 序列上最高约 9.0 倍 forward 加速。

  • 64K 序列上最高约 6.0 倍 backward 加速。

  • 64K decode 的 KV 读取量从等价 65536 token 降至 5632 token,对应约 11.6 倍理论/预期带宽加速。

性能方面:

img

  • 通用 benchmark 平均分 NSA 为 0.456,Full Attention 为 0.443。

  • LongBench 平均分 NSA 为 0.469,Full Attention 为 0.437。

  • 64K Needle-in-a-Haystack 在论文设置中达到全位置正确检索。

  • 使用 10B token 数学推理轨迹 SFT 后,NSA-R 在 AIME 24 的 8K/16K 设置都高于 Full Attention-R。

这些结果支持 NSA 在该训练规模和 kernel 上可兼顾质量与效率,但不是任意模型、硬件和任务上的保证。11.6 倍主要来自读取量估算,不应直接当作所有服务的端到端加速。

16. NSA 探索中暴露的失败路线

论文讨论了若干未采用或效果较差的方向: - 动态聚类聚类本身开销高,cluster 负载不均,MoE 环境会叠加 straggler,还需要周期性重聚类。

  • 独立神经 selector离散选择需要额外辅助监督,增加算子和 loss,可能损伤主任务。

  • 启发式 block 分数不增加参数但召回率不足,冷启动若设计不当仍会比 NSA loss 更高。

  • 单 token 细粒度随机读取理论稀疏高,但不连续访存和 backward 难以利用 Tensor Core。

这些结果说明 selector 的 FLOPs 不是唯一问题,选择粒度、训练信号和数据布局同样决定系统可用性。

17. DSA 的模型定位

NSA:块粒度原生稀疏注意力,三路并行(win/slc/cmp);

DSA(DeepSeek Sparse Attention):依靠独立 Lightning Indexer 先做粗筛选,token 粒度 Top-k 稀疏,基于 MLA 架构。 DeepSeek-V3.2-Exp 是从上下文长度已扩展到 128K 的 DeepSeek-V3.1-Terminus checkpoint 出发,通过继续训练引入 DSA 的实验模型。技术报告称,相对 V3.1-Terminus,唯一的架构修改是 DSA。

img

img

DSA 原型包含: - Lightning Indexer以很低的精度和较小表示对所有历史 token 计算索引分数。

  • Fine-grained Token Selection按索引分数选择 Top-k 单 token KV entry,再执行主 attention。

它没有 NSA 的显式压缩、选择、滑窗三分支,也不是把 NSA 直接安装到 V3 上。

18. Lightning Indexer 公 式

对 Query token 隐藏状态 h_t 和历史 token h_s,索引分数为:

I_t,s = sum_{j=1}^{H_I} w_t,j^I * ReLU(q_t,j^I dot k_s^I)

img

其中: - H_I 是 indexer head 数。

  • q_t,j^I in R^(d_I) 是第 j 个索引 Query head。

  • w_t,j^I 是 Query 相关的 head 聚合权重。

  • k_s^I in R^(d_I) 是历史 token 的共享索引 Key。

官方 DeepSeek-V3.2-Exp 配置为:

H_I = 64
d_I = 128
k = 2048
Indexer 先用 64 个小 Query heads 与一个共享历史 Key 打分,再把各 head 的 ReLU 相似度按 w_t,j^I 汇总成每个 (t,s) 的单一索引分数。

19. Indexer 的低成本实现

论文选择 ReLU 是出于吞吐考虑。官方推理实现还采用: - Index Query:从 MLA 的 Query latent 投影为 [64,128]

  • Index Key:从主隐藏状态投影为共享 [128]

  • Query head 聚合权重:从隐藏状态投影为 [64]

  • 对索引 Q/K 的部分维度施加 RoPE。

  • 对 Q/K 做 Hadamard rotation,改善 FP8 表示与计算条件。

  • Index Q/K 使用 FP8,历史 index key 以 FP8 cache 保存。

  • 使用 DeepGEMM 中的 indexer logit kernel 计算分数。

Indexer 仍对全历史做打分,理论复杂度仍含 O(L^2 H_I d_I),但 head 数、维度、FP8 和 kernel 常数显著小于主 MLA attention。

20. DSA 的细粒度 Top-k Attention

对 Query t,先找出 Top-k 历史位置:

S_t = {s | I_t,s is in Top-k(I_t,:)}
只在对应主模型 KV entries 上执行核心 attention:

u_t = Attn(h_t, {c_s | s in S_t})

img

V3.2-Exp 使用 k=2048。当可见历史短于 2048 时,官方实现取 min(2048, history_length),等价于对全部可见 token 做 attention;随着长度增长,主 attention 预算保持约 2048。 DSA 是 token 级选择,不要求把相邻 token 成块加载,因此分辨率比 NSA block selection 更细;代价是必须使用专门的 indexer 和 sparse MLA kernel 解决不规则访问。

21. DSA 在 MLA 上的实例化

DeepSeek-V3.2-Exp 需要从 V3.1-Terminus 继续训练,因此 DSA 直接建立在 MLA latent KV 上。每个可选择的主 KV entry 对应历史位置的 MLA 压缩 latent,以及主 attention 所需的解耦位置部分。 出于 kernel 效率考虑,同一历史 KV entry 必须被多个 Query heads 共享。DSA 使用 MLA 的 MQA 模式表示: - 所有主 Query heads 对同一个 Query token 共用一组 Top-k 历史位置。

  • 索引器为每个历史 token 产生一个最终标量分数,不为 128 个主 attention heads 各选一套位置。

  • 主 attention 可在 latent 空间计算,避免为全历史展开所有 head 的 K/V。

MLA 的 MHA 模式和 MQA 模式在代数上可以转换;实际 prefill/decode kernel 可采用不同展开方式,但共享选择集合是 DSA 减少 KV 读取的关键。

22. DSA Dense Warm-up 阶段

继续预训练第一阶段只初始化 Lightning Indexer: - 主模型仍使用 dense attention。

  • 冻结所有主模型参数,只训练 indexer。

  • 把主 attention 在所有 heads 上的分数相加。

  • 沿历史序列做 L1 归一化,得到目标分布 p_t,:

  • 用 KL divergence 让 indexer 分布模仿主 attention:

L_I = sum_t KL(
&nbsp; p_t,: || Softmax(I_t,:)
)

img

训练参数为:

learning rate = 1e-3
steps = 1000
sequences per step = 16
sequence length = 128K
tokens ~= 2.1B
这个阶段相当于用原 dense attention 做教师,让索引器先学会召回主模型已有的重要位置,避免直接切换 Top-k 导致能力突变。目标:让 Indexer 打分分布尽量模仿稠密注意力的权重分布

23. DSA Sparse Training 阶段

Warm-up 后启用 Top-2048 稀疏主 attention,并让整个主模型适应稀疏拓扑。索引器继续模仿主 attention,但只在已选择集合 S_t 上计算分布对齐:

L_I = sum_t KL(
&nbsp; p_t,S_t || Softmax(I_t,S_t)
)

img

训练配置为:

training learning rate = 7.3e-6
selected KV per query = 2048
steps = 15000
sequences per step = 480
sequence length = 128K
tokens ~= 943.7B
两个继续预训练阶段的数据分布都与 V3.1-Terminus 的 128K 长上下文扩展数据完全对齐,减少数据变化对架构对比的干扰。

24. DSA 的梯度隔离

稀疏训练时,indexer 输入从主计算图中 detach: - Indexer 参数只由 L_I 更新。

  • 主模型参数只由 language modeling loss 更新。

  • LM loss 不通过离散 Top-k 反向传播到 indexer。

  • L_I 也不通过 indexer 输入改变主隐藏状态。

这种双向隔离避免主模型为了让索引器更容易模仿而扭曲表示,也避免不稳定的离散选择梯度污染语言建模。主模型通过在选定稀疏模式下训练,自身适应选择结果。

25. DSA 的后训练与对照设计

完成继续预训练后,V3.2-Exp 继续使用稀疏 attention 做后训练。为隔离 DSA 的影响,技术报告让它与 V3.1-Terminus 使用相同的后训练 pipeline、算法和数据,包含 specialist distillation 与一次混合 RL。 公开 benchmark 整体接近 V3.1-Terminus,例如: - MMLU-Pro:85.0 对 85.0。

  • AIME 2025:89.3 对 88.4。

  • SWE Verified:67.8 对 68.4。

  • Codeforces rating:2121 对 2046。

部分推理指标下降与 V3.2-Exp 生成更少 reasoning token 有关;报告称在输出长度接近的中间 checkpoint 上差距会缩小。这说明比较稀疏模型时必须控制生成 token 预算。

img

26. DSA 的复杂度与成本边界

Full main attention 的核心复杂度约为:

O(L^2)
DSA 固定每个 Query 选择 k 个 token 后,主 attention 降为:

O(L*k), k=2048 &lt;&lt; L
但 Lightning Indexer 仍对全部 Query-History 对打分,保留 O(L^2) 项。DSA 的总复杂度不能严格写成纯 O(Lk);准确说法是“昂贵的主 MLA attention 降为 O(Lk),剩余二次索引由较小、FP8、优化后的 indexer 承担”。 技术报告在 H800 实际服务上观察到长上下文 prefill 和 decode 成本显著下降,且 token position 越靠后差距越大。短上下文 prefill 则专门使用 masked MHA mode 模拟 DSA,以避免稀疏调度开销得不偿失。

27. 稀疏访问与 KV Cache 容量

NSA 和 DSA 都主要减少每个 Query 实际读取并参与主 attention 的 KV,而不是自动删除所有未选 token: - DSA 的未来 Query 可能重新选中任意历史位置,因此仍需保存全历史 MLA KV entries 和 index keys。

  • NSA 的选择分支未来也可能检索任意原始 block,因此通常仍需保留可检索的原始 K/V,并额外维护压缩表示。

因此二者显著降低每步主 attention 的读取量和计算量,但完整缓存存储仍大体随上下文 O(L) 增长。若要进一步降低容量,需要结合量化、分页、分层存储或不可逆 KV eviction;后者可能损伤未来召回。

28. DSA 的 RoPE 实现陷阱

DeepSeek 官方仓库在 2025-11-17 修复过 indexer RoPE 布局差异: - Indexer 模块需要 non-interleaved layout。

  • MLA 模块使用 interleaved layout。

如果把同一个 RoPE reshape/rotate 函数不加区分地复用,代码可以正常运行,却会得到错误索引分数并降低模型表现。调试时应逐元素对照参考实现,而不是只看 shape、NaN 和吞吐。 官方 demo 还在索引 Q/K 的部分维度使用 RoPE,再进行 Hadamard rotation 和 FP8 quantization。操作顺序和 layout 都属于 checkpoint 语义的一部分。

29. NSA 与 DSA 的系统对比

维度 NSA DSA 发布载体 独立论文,ACL 2025 DeepSeek-V3.2-Exp 技术报告 训练接入方式 从随机初始化开始原生稀疏预训练 基于稠密 128K MLA 模型断点继续预训练(稠密预热→稀疏训练) 稀疏架构 三路并行:cmp 压缩分支 + slc 块选择分支 + win 滑动窗口分支 两阶段流水线:Lightning Indexer 全局打分 → Top-k 筛选 → 单路主 MLA 注意力 选择粒度 连续 64-token 块(Block-level) 独立单 Token(Token-level) 全局粗打分信号 复用 cmp 压缩分支注意力分数,无额外独立网络 单独新增 Lightning Indexer(FP8 轻量化网络) 有效 KV 预算 cmp(随长度线性增长)+ slc 最大 1024token + win 固定 512token 主注意力固定选取 Top-2048 个 token;Indexer 额外遍历全部历史打分 局部上下文保障 独立滑动窗口;选中块内置固定局部块 + 起始 sink 块 无专门独立滑窗分支,依赖 Indexer 自动召回邻近 token GQA 多头优化 同一 GQA 组内所有 Query Head 共享一套选中块集合 全部 Query Head 共用同一套 Top-k token 集合 训练范式 全程稀疏,三路分支联合优化;无额外蒸馏损失 两段式训练:2.1B token 稠密预热 + 943.7B token 稀疏续训;依靠 KL 蒸馏训练索引器 硬件工程重心 连续块访问,适配 FlashAttention/Triton 分块 Tile,访存连续 FP8 Indexer 定制 Kernel + 稀疏 MLA 内核;需处理离散 token 随机访存 两者没有简单的包含关系。NSA 更强调层次化表示和 block 连续性,DSA 更强调既有超大模型可迁移性和 token 级精确检索。

30. 稀疏 Attention 的评测框架

评估不能只报告一个长上下文 benchmark,应至少包含:

30.1 模型质量

  • Validation loss 和困惑度。

  • 通用知识、代码、数学和推理。

  • Needle-in-a-Haystack 与多针检索。

  • LongBench、多跳问答、长代码和长文摘要。

  • 不同信息密度、不同目标位置和干扰项数量。

  • 输出长度受控的推理评测。

30.2 选择质量

  • Top-k 对 Full Attention 高质量 token 的 recall。

  • 选中 attention mass。

  • Indexer 与教师分布的 KL。

  • 不同层、head、位置和领域的召回。

  • 局部、开头、远程 token 的选择比例。

30.3 系统性能

  • Prefill forward/backward 时间。

  • Decode TPOT、吞吐和 P99。

  • 每 Query 实际 KV 读取 bytes。

  • Selector/indexer 占总时间比例。

  • Top-k 排序、索引构造和 kernel launch 开销。

  • 完整 KV cache、index cache 和压缩 cache 容量。

31. 实现与调试原则

NSA 实现应重点检查: - 压缩块起止位置、重叠步长和因果边界。

  • 压缩分数到选择块分数的覆盖映射。

  • GQA group 内是否真正共享 block index。

  • 三分支是否各自 softmax,再由 gate 汇总。

  • 强制开头/局部 block 是否重复计数。

  • Forward 与 backward 的稀疏索引一致性。

DSA 实现应重点检查: - Indexer 的 64 heads、128 维和 Top-2048。

  • w_t,j、ReLU、缩放与 head 聚合顺序。

  • Indexer RoPE 的 non-interleaved layout。

  • FP8 Q/K 的 scale、Hadamard rotation 和 cache 对齐。

  • 所有主 MLA heads 是否使用相同 Top-k。

  • 短于 2048 的上下文是否退化为 dense。

  • KL target、detach 边界和两个 loss 的参数归属。

32. 常见概念误区

32.1 NSA 与 DSA 是同一个算法的两个名字

错误。NSA 是三分支块稀疏架构;DSA 是独立 Lightning Indexer 驱动的 token 级 Top-k MLA。

32.2 Native trainable 表示 Top-k 可微

错误。离散索引仍不可微或只有分段梯度路径。Native 强调从预训练起就在稀疏拓扑下学习,并有训练阶段前后向实现。

32.3 DSA 把总复杂度严格降为 O(Lk)

不完整。主 MLA attention 是 O(Lk),Lightning Indexer 仍有低成本 O(L^2) 全局打分。

32.4 稀疏 Attention 自动把 KV cache 容量从 O(L) 降成 O(k)

错误。查询相关选择需要未来可重新访问历史 token,通常仍保存全部可检索 KV;减少的是每个 Query 的读取和主计算。

32.5 稀疏比例相同就代表速度相同

错误。连续 block、head 共享、数据布局、选择器开销、kernel 和硬件拓扑都影响实际速度。

33. 紧凑知识总结

NSA:
three branches = compression + selected blocks + sliding window
output = gated sum of three separately normalized attentions
l=32, d=16, l'=64, n=16, w=512
selection score reuses compression attention
GQA heads in one group share selected blocks
native sparse pretraining + Triton block kernel
64K: paper reports up to 9x forward / 6x backward;
11.6x is expected decode memory-access speedup

DSA:
DeepSeek-V3.1-Terminus 128K -&gt; continued training -&gt; V3.2-Exp
I_t,s = sum_j w_t,j * ReLU(q_t,j dot k_s)
64 index heads, d_I=128, FP8, Top-k=2048
all MLA query heads share one token selection set
dense warm-up: 1000 steps, 2.1B tokens, only indexer
sparse training: 15000 steps, 943.7B tokens, all model parameters adapt
indexer only KL loss; main model only LM loss; detach at boundary
main attention O(Lk), indexer remains low-cost O(L^2)

34. 参考资料

  • NSA 原论文:https://arxiv.org/abs/2502.11089

  • NSA ACL 2025 版本:https://aclanthology.org/2025.acl-long.1126/

  • NSA 代码解读:https://zhuanlan.zhihu.com/p/27324641560

  • DeepSeek-V3.2-Exp 官方仓库:https://github.com/deepseek-ai/DeepSeek-V3.2-Exp

  • DSA 官方技术报告:https://github.com/deepseek-ai/DeepSeek-V3.2-Exp/blob/main/DeepSeek_V3_2.pdf

  • DeepSeek-V3.2-Exp 官方配置与推理实现:https://huggingface.co/deepseek-ai/DeepSeek-V3.2-Exp/tree/main/inference

  • DeepGEMM Indexer kernels:https://github.com/deepseek-ai/DeepGEMM/pull/200

  • FlashMLA Sparse Attention kernels:https://github.com/deepseek-ai/FlashMLA/pull/98

  • DeepSeek-V2 与 MLA:https://arxiv.org/abs/2405.04434

            预览时标签不可点
    

    <div class="