动态稀疏选择
用一个便宜的打分器为每个 query 挑出最相关的 key——比固定窗口准,比 dense 省
核心要点:
- 动态稀疏按内容打分选 key,不靠固定位置
- NSA 三分支:压缩覆盖全局、选择挑重点、滑窗顾局部
- NSA 选择分支复用压缩分数,零额外打分且端到端可训
- lightning indexer 低秩 + ReLU 打分,成本仅主注意力约 1.6%
- top-k 是全局排序,分布式须全局视野
本篇是注意力机制章实现卷的**稀疏化(动态)**篇,与按位置选 key 的 07-滑窗与固定稀疏 相对。本篇是 lightning indexer + top-k selection 的唯一主词条——序列压缩篇 09 的 CSA、interconnect 的上下文并行篇都引用本篇,不重写。NSA 整体(含其压缩分支)也在本篇,09 序列压缩篇只在对比时链回。
名词定义
| 名词 | 定义 |
|---|---|
| 动态稀疏 (content-based sparse) | 用打分器按内容为每个 query 选最相关的 key,与位置无关 |
| Lightning indexer | DeepSeek 的轻量打分器:低秩 query + ReLU 加权和,头数与精度远小于主注意力 |
| Index score | indexer 给每个 (query, key) 算的相关性标量分数 |
| top-k selection | 按 index score 选分最高的 $k$ 个 key 进主注意力 |
| 原生稀疏 (natively trainable) | 训练时就用稀疏(端到端可微),而非推理才套稀疏 |
| 块级 gating | 给每个 token 块算亲和分、选 top-k 块(MoBA) |
| 门控融合 (gating) | 多分支输出按 learned 标量权重加权合并 |
| 全局视野 (global view) | top-k 须看到全序列所有 key 的分数才能正确排序 |
@tbl-attn-dyn-glossary 本篇名词定义
动态稀疏和固定稀疏差在哪?
动态稀疏花一点打分成本,按内容为每个 query 选 key,因此能抓固定窗口漏掉的远程相关 token。固定稀疏(07)赌"相关 key 在固定位置",动态稀疏不赌位置——先给候选 key 打分,再选分高的。
代价是多了一个打分器和一次 top-k。本篇的核心问题就是:怎么让打分足够便宜(否则省下的主注意力又被打分吃掉)、怎么让选择端到端可训(否则只能推理时硬套,质量受损)。NSA 和 DSA 给出两条互补答案。
NSA 三分支怎么分工覆盖全局、重点和局部?
NSA(Native Sparse Attention)对每个 query 并行跑压缩、选择、滑窗三条分支,用 learned gate 加权合并[1]。三分支分工明确:
$$\begin{equation} \mathbf{o}_t^* = \sum_{c \in \{\text{cmp},\,\text{slc},\,\text{win}\}} g_t^c \cdot \mathrm{Attn}(q_t,\, \tilde{K}_t^c,\, \tilde{V}_t^c) \label{eq:attn-dyn-nsa-gate} \end{equation}$$每条分支有独立 sigmoid gate $g_t^c = \mathrm{sigmoid}(\mathrm{MLP}(q_t))$,三个 gate 不约束加和为 1,比 softmax 灵活。
压缩分支:粗粒度全局
把历史 token 按重叠块用可学习 MLP $\varphi$ 池化成压缩 token,以 $\sim t/d$ 个 key 覆盖全序列:
$$\begin{equation} \tilde{K}_t^{\text{cmp}} = \{\varphi(\mathbf{k}_{id+1:\,id+l}) \mid 1 \le i \le \lfloor(t-l)/d\rfloor\} \label{eq:attn-dyn-nsa-cmp} \end{equation}$$块长 $l=32$、步长 $d=16$(重叠,防块边界信息碎片化)。$\varphi$ 是 MLP + 块内位置编码,让池化感知顺序而非退化成 bag-of-words。算力从 $O(t^2)$ 降到 $O(t^2/d)$。
选择分支:复用压缩分数挑重点
NSA 的核心创新——不另训重要性网络,直接复用压缩分支已算的 attention 分数估计块重要性[1]。压缩分支的 softmax 输出 $\mathbf{p}_t^{\text{cmp}}$ 直接(或经累加映射)当作选择块的重要性分:
$$\begin{equation} \mathbf{p}_t^{\text{slc}}[j] = \sum_{m=0}^{l'/d-1} \sum_{n=0}^{l/d-1} \mathbf{p}_t^{\text{cmp}}\!\left[\tfrac{l'}{d} j + m + n\right] \label{eq:attn-dyn-nsa-slc} \end{equation}$$再做 blockwise top-$n$ 选出重要块($l'=64$、$n=16$,约 1024 token)。
对比:为什么复用分数而非独立打分器?独立重要性网络(如 k-means 聚类)引入离散操作,梯度回传需 surrogate loss、训练不稳。复用 softmax 分数完全可微,无额外 loss,端到端反传[1]。
滑窗分支:防学习捷径
滑窗分支($w=512$)不是为了覆盖局部(选择分支已会选局部块),而是防止前两支被迫兼顾局部而分工模糊。有了专职滑窗,压缩分支专注全局、选择分支专注跨段跳跃,三者梯度不互相干扰[1]。
原生可训练 + 硬件对齐
NSA 训练时就用稀疏,而非推理才套——这是"native"的含义。三分支全可微:压缩 MLP 梯度正常流、选择的 top-$n$ 是离散但 NSA 不对它求梯度(选择只决定"往哪做 attention",attention softmax 本身可微,选中块梯度照常回传)、gate 可微[1]。
blockwise 设计对 GPU 友好:选中的块是连续段,gather 到 SRAM 是 contiguous read 而非逐 token scatter;配 group-centric loading(GQA 下一次加载同组所有 query head)。
性能(64K 上下文 vs FlashAttention-2):有效 KV 从 65536 降到约 5632,decode 11.6×、prefill 9.0×、训练 6.0×;质量不降反升——LongBench +0.032、AIME@16K +0.054,长上下文与数学推理超 full attention[1]。
lightning indexer 怎么便宜地给全序列打分?
lightning indexer 是 DeepSeek 的轻量打分器,用 ReLU 加权和给每个 (query, key) 算分,成本远小于主注意力[2]。它是 DSA(V3.2)首创、CSA(V4)沿用的选择机制,本节是其唯一主词条。
"lightning"来自三处优化:
- 低秩 query(V4 CSA 的优化):V4 的 indexer 把 query 先降到低维 latent 再上投影出 indexer head,而非直接从 $d$ 维展开(V3.2 DSA 则直接投影)[3]:
- 轻头 + 低精度:indexer 用少量头、小头维、FP8 精度,且所有 indexer head 共享一组 key(MQA 结构);V4 CSA 取 $n_h^I=64$ 头、头维 $c^I=128$[3]。
- ReLU 加权打分(非 softmax):
$w_{t,h}^I$ 是从 $\mathbf{h}_t$ 投影的可学习 per-head 标量权重。
选出 top-$k$($k=2048$)后,主注意力只在这 $k$ 个 key 上做标准 softmax attention,复杂度 $O(n \cdot k)$。
indexer 怎么训:两阶段 continued pre-training[2]。阶段 1 dense warm-up(冻结主模型,只用主注意力分数当目标、KL 散度训 indexer 学会识别重要 token);阶段 2 sparse training(indexer 与主模型同步训,但梯度 detach 分离——indexer 只由 indexer loss 驱动、主模型只由 LM loss 驱动,防互相干扰)。
成本与新瓶颈:indexer 仍要对全部 $n$ 个 key 算分,是 $O(n^2)$ 全量扫描,但常数极小(头数、头维、精度都远低于主注意力)。长序列下这个 $O(n^2)$ 反成新热点——TRT-LLM 为此用 radix-select 替代 torch.topk,top-k 阶段快 7.41×[4]。
为什么打分用 ReLU 不用 softmax?
softmax 把分数归一化为和为 1 的分布,抹平了 key 之间的绝对量级差异——而 top-k 选择恰恰需要绝对量级[2]。
- softmax 的问题:即使一批 key 的绝对相关度都很低,softmax 仍把它们归一成接近均匀的分布,无法区分"都不相关"和"都相关"。top-k 要的是"哪些 key 真正相关"的绝对信号。
- ReLU 的优势:负值置 0、正值保原始大小,高分 key 在聚合 $I_{t,s}$ 中贡献更大,top-k 据此做有意义的全局排序;ReLU 输出非负,FP8/FP4 量化无符号位浪费;逐元素操作无需全序列归约,对 $O(n^2)$ 扫描更友好。
陷阱:ReLU 本身不产生稀疏(多 head 求和后 $I_{t,s}$ 几乎不为 0)。真正的稀疏来自 top-k selector,不是 ReLU。ReLU 只负责让分数可比。
MoBA 怎么把选择粒度放粗到块?
MoBA(Mixture of Block Attention)把序列分块,用 block-level gating 选 top-k 个块,在选中块的 KV 上做 attention——选择粒度从单 token 放粗到块[5]。亲和分用块内 key 均值池化与 query 的内积计算:
$$\begin{equation} s_i = \langle q,\; \mathrm{mean\_pool}(K[\mathcal{I}_i]) \rangle, \qquad g_i = \begin{cases} 1 & s_i \in \mathrm{Top\text{-}k}(\{s_j\}) \\ 0 & \text{otherwise} \end{cases} \label{eq:attn-dyn-moba-gate} \end{equation}$$只在 $g_i=1$ 的块上做 attention,当前块强制参与并施 causal mask。
放粗粒度的权衡:
| 维度 | token 级(DSA) | 块级(MoBA) |
|---|---|---|
| gating 开销 | $O(n)$ 每 query 算 $n$ 个分 | $O(n/B)$ 每 query 算 $n/B$ 个分 |
| 选择粒度 | 单 token(细) | 整块 $B$ token(粗) |
| 硬件友好 | top-k token 不连续,gather 散列 | 选中块连续,复用 FlashAttention tile |
| 表达力 | 块内最优 token 可精确选中 | 块内 token 全入选或全丢弃 |
@tbl-attn-dyn-token-vs-block token 级与块级动态选择的权衡
典型配置:块 $B=512$(8K 上下文,选 3 块)到 $B=4096$(1M 上下文,选 12 块,稀疏度 95.31%);1M token 推理比 full attention 快 6.5×、10M 快 16×[5]。块连续使 gating 复杂度降到 $O(N^2/B)$、主注意力 $O(N \cdot k \cdot B)$。
为什么 top-k 选择必须有全局视野?
top-k 是对全序列所有 key 的 index score 做全局排序,不知道第 $k+1$ 位之前无法确定哪 $k$ 个入选——这是动态稀疏的算子属性,也是它在分布式下不能用 ring 环传、必须先聚合的根因:
$$\begin{equation} C_t^{\text{selected}} = \{ s \mid I_{t,s} \in \mathrm{Top\text{-}k}(I_{t,\,0:n}) \} \label{eq:attn-dyn-topk-global} \end{equation}$$这个属性在算子层面是确定性:top-k 本质是全局 argmax,要求对整条序列每个 key 都算出 $I_{t,s}$ 后才能 row-wise 选,不能提前剪枝、不能按块近似(否则退化成 MoBA 式块级选择)。分布式怎么满足全局视野(AllGather 全量 KV 或全量分数、每卡再本地选)是上下文并行的工程问题,详见 interconnect 章上下文并行篇 — 异构 Attention 下的 CP。本篇只锁定"top-k 需全局视野"这一算子事实,CP 篇引用此处。
Takeaway
| 知识点 | 核心结论 |
|---|---|
| 动态 vs 固定 | 动态按内容打分选 key,抓固定窗口漏掉的远程相关,代价是打分器 + top-k |
| NSA 三分支 | 压缩覆盖全局 / 选择挑重点 / 滑窗顾局部,gate 加权(不约束和为 1) |
| NSA 选择创新 | 复用压缩 softmax 分数估块重要性,零额外打分 + 完全可微 |
| NSA 原生稀疏 | 训练即稀疏,不对 top-n 求梯度但 attention 可微;64K 下 decode 11.6× 且质量超 full |
| lightning indexer | 低秩 query + ReLU 加权 + FP8,成本约 dense 1.6%;DSA/CSA 共用 |
| ReLU 非 softmax | 保留分数绝对量级利于 top-k;稀疏来自 top-k selector 非 ReLU |
| MoBA | 块级 gating(mean-pool 亲和分),开销 $O(n/B)$,硬件友好换粒度粗 |
| top-k 全局视野 | top-k 是全局排序,不能提前剪枝,分布式须先聚合 |
@tbl-attn-dyn-takeaway 动态稀疏选择核心知识点
参考资料
- Yuan et al., Native Sparse Attention: Hardware-Aligned and Natively Trainable Sparse Attention, arXiv:2502.11089, 2025. https://arxiv.org/abs/2502.11089
- DeepSeek-AI, DeepSeek-V3.2, arXiv:2512.02556, 2025. https://arxiv.org/abs/2512.02556
- DeepSeek-AI, DeepSeek-V4 Technical Report, 2026.
- NVIDIA, Optimizing DeepSeek-V3.2 on NVIDIA Blackwell GPUs, TensorRT-LLM Tech Blog 15, 2025. https://nvidia.github.io/TensorRT-LLM/blogs/tech_blog/blog15_Optimizing_DeepSeek_V32_on_NVIDIA_Blackwell_GPUs
- Lu et al., MoBA: Mixture of Block Attention for Long-Context LLMs, arXiv:2502.13189, 2025. https://arxiv.org/abs/2502.13189