转载本文请注明出处:https://yudonglee.me/deepseek-nsa-explained/ | 作者:yudonglee

本文是 DeepSeek 论文专题系列的第 13 篇,详解 DeepSeek 公司 2025 年 2 月发表的 Native Sparse Attention: Hardware-Aligned and Natively Trainable Sparse Attention (arXiv:2502.11089)。这篇 paper 获得 ACL 2025 Best Paper Award,是 DeepSeek 在 R1 之后立即推出的注意力机制重磅创新。NSA 用一个三分支稀疏注意力设计——Compression(块级粗粒度)+ Selection(Top-K 细粒度)+ Sliding Window(局部窗口)——配合 learned gating 融合,在 64K 长度上让 decoding 速度提升 11.6×、forward 9.0×、backward 6.0×,同时在长上下文 reasoning benchmark 上达到或超过 dense full attention 的性能。NSA 的两个关键设计是 hardware-aligned(Triton kernel 让稀疏 attention 真正打中 GPU 内存模式)与 natively trainable(从头端到端训练,而不是事后剪枝)。NSA 是 W16 V3.2 的核心基础——把上下文从 128K 扩展到百万 token 级,让 R1 系列 reasoning 模型可以处理”整本书 / 整个 codebase”级别的输入。

📚 DeepSeek 论文专题系列 · 全 18 篇
通用 LLM 主线LLM · V2 (MLA) · V3 · V3.2 (DSA) · V4 · 收官
Reasoning 主线Math (GRPO) · Prover · R1 · GRM · Math-V2
代码主线Coder
多模态主线VL · Janus
MoE 架构与工程MoE · ESFT · Aux-Loss-Free
Attention 演化NSA ●

一、为什么 attention 在长上下文下成为瓶颈

W7 我们详解 V2 时引入了 MLA,把 KV cache 显存 压到 MHA 的 1.76%。但 KV cache 只解决了”存”的问题,attention 计算量本身仍然是长上下文的核心瓶颈。

1.1 Attention 计算复杂度的本质

标准 self-attention 对长度为 N 的序列,计算复杂度是 O(N^2)

\text{Attn}(Q, K, V) = \text{softmax}\!\left(\frac{Q K^T}{\sqrt{d}}\right) V, \quad QK^T \in \mathbb{R}^{N \times N}

每个 query token 必须与所有历史 token 做相似度计算。当 N 从 32K 增长到 1M 时:

序列长度Attention FLOPs(相对 32K)单 layer 推理时间(粗估)
32K~10 ms
128K16×~160 ms
1M977×~10 s

1M 上下文相对 32K 计算量增长 977 倍——这是为什么主流 LLM 上下文上限基本停在 128K-200K,再往上 attention 计算本身就成为不可承受的成本。

1.2 MLA 没有解决的问题

MLA 解决的是 KV cache 显存 问题(每 token 只缓存 576 floats 而非 32768 floats)。但 attention 的计算量本身没变——query 仍然要与所有历史 token 做 dot-product。

具体来说:

  • MLA 让”装得下”长上下文(显存可控)
  • 没让”算得动”长上下文(FLOPs 仍是 O(N^2)

NSA 解决的就是计算量问题——让 attention 从 O(N^2) 降到接近 O(N \log N)O(N \sqrt{N})且不损失模型性能

1.3 R1 之后的需求拐点

R1 (W13) 发布后,”长 reasoning trace”成为模型的核心能力。一个 reasoning 输出动辄数千 token,但用户实际场景里输入也可能很长——比如让 R1 分析一份 50 页的技术报告、给整个 GitHub repo 写文档、推理一整本数学教科书的某个定理。这些场景下输入超过 100K token 是常态。

如果 attention 仍是 O(N^2),R1 在这些场景的推理成本会让 API 价格变得不可承受。NSA 的发布时机(R1 之后 1 个月)就是为了给 R1 系列 reasoning 模型提供长上下文的经济性基础


二、现有 sparse attention 方案的局限

在 NSA 之前,业界已经有多种 sparse attention 方案。NSA 论文与三类主流方案做了对比。

2.1 静态 sparse 模式(Longformer / BigBird)

Longformer(Beltagy et al., 2020)与 BigBird(Zaheer et al., 2020)是早期的 sparse attention 方案:

  • Longformer:局部 window + 全局 attention(每个 token 看附近 W 个 token,再加上少数 “global” token)
  • BigBird:随机 + 局部 + 全局三种 attention 模式叠加

问题

  • 稀疏模式静态——每个 token 在哪些位置 attend 完全由预定义规则决定,与输入内容无关
  • 静态模式在 reasoning 任务上明显弱于 full attention——某些关键信息可能不在 window 内也不是 global token
  • 难以适配 long-CoT 场景,因为 reasoning 路径是动态的

NSA 的”selection”分支正是为了解决这个问题——动态选择该 attend 的 token

2.2 KV-aware 剪枝(Quest / SnapKV)

Quest、SnapKV 等近期工作走了推理时动态剪枝的路线:

  • 在推理时,根据 query 的特征动态选择 Top-K 个最重要的 KV 缓存项
  • 只对这 Top-K 项做 attention,跳过其他

问题

  • 这些方法是事后改造——模型本身仍然是 dense attention 训练的,推理时强行用 sparse 会引入分布偏移
  • 在 long context、特别是长 reasoning 链上,分布偏移会让性能下降 2-5 个百分点
  • 模型从未学过”在 sparse 模式下推理”,所以即使被强制使用 sparse,模型的 attention pattern 也未必匹配 sparse 假设

NSA 的”natively trainable”设计正是为了消除这种偏移——从头训练一个 sparse-aware 模型

2.3 软件实现的 sparse(FlashAttention 各变种)

FlashAttention 等优化是软件层 sparse——它们没有改变 attention 的数学形式,而是改善了 IO 模式让 dense attention 跑得更快。

问题

  • 仍是 O(N^2) 计算复杂度,在极长上下文下仍然爆炸
  • 只是”让 dense 跑得更快”而不是”用 sparse 替代 dense”
  • 对 1M+ 上下文仍然不够

NSA 选择的是真正的 sparse(在数学形式上跳过大部分 attention 计算),而不是 dense 的 IO 优化。

2.4 MoBA:DeepSeek 的同期工作

值得一提的是 Moonshot 团队 2025-02 同时发布了 MoBA (Mixture of Block Attention)(arXiv:2502.13189)——也是块级 sparse attention,思路与 NSA 有相似之处。MoBA 与 NSA 在论文同月发布,可以看作开源界对”长上下文 sparse”的并行探索。

NSA 相对 MoBA 的优势是:

  1. NSA 的三分支结构(compression + selection + sliding window)更精细
  2. NSA 的 Triton kernel 实现成熟度更高
  3. NSA 在 ACL 2025 拿到 Best Paper Award

但两者并非互斥——可以预期未来 sparse attention 会融合多家方法的优点。


NSA 三分支架构:Compression(块级压缩)+ Selection(Top-K 块精细 attention)+ Sliding Window(局部)+ learned gating 融合

三、NSA 三分支设计详解

NSA 的核心是用三种互补的稀疏 attention 同时处理输入,再用 learned gate 融合。

3.1 总体架构

每个 attention layer 有 3 个并行分支:

\text{NSA}(Q, K, V) = g_c \cdot \text{Attn}_{\text{cmp}} + g_s \cdot \text{Attn}_{\text{slc}} + g_w \cdot \text{Attn}_{\text{win}}

  • \text{Attn}_{\text{cmp}}:Compression attention(块级粗粒度)
  • \text{Attn}_{\text{slc}}:Selection attention(Top-K 细粒度)
  • \text{Attn}_{\text{win}}:Sliding window attention(局部)
  • g_c, g_s, g_w:learned scalar gates(softmax 归一化)

三个分支的目的各不相同:

  • Compression:让 query “看见整个长上下文的概貌”(粗,但全局)
  • Selection:让 query “聚焦在最重要的少数块”(细,但局部)
  • Sliding Window:让 query “保留最近的细节”(精,最近邻)

下面分别展开。

3.2 分支一:Compression Attention

Compression 把长 KV 序列按块压缩——每 B 个 token(典型 B=32)压缩成一个”块代表” key/value:

  1. K \in \mathbb{R}^{N \times d} 按行切成 N/B
  2. 对每个块用一个小的 learned MLP(block summarizer)压缩为单个 vector:

\bar{k}_i = \text{MLP}\!\left(K_{iB:(i+1)B}\right) \in \mathbb{R}^d

  1. 同样压缩 V 得到 \bar{v}_i
  2. Query 与压缩后的序列做标准 attention:

\text{Attn}_{\text{cmp}}(Q, \bar{K}, \bar{V}) = \text{softmax}\!\left(\frac{Q \bar{K}^T}{\sqrt{d}}\right) \bar{V}

计算复杂度:从 O(N^2) 降到 O(N \cdot N/B) = O(N^2 / B)——B=32 时计算量减少 32×。

作用:让 query 用很低的成本看到整个序列的”骨架”——每个块的 representative summary。

3.3 分支二:Selection Attention

Selection 是 NSA 最巧妙的设计——用 Compression 的 attention scores 来决定该选哪些块做精细计算

  1. Compression 分支已经计算了 query 对每个块代表 \bar{k}_i 的 attention score \alpha_i
  2. \alpha_i 排序,取 Top-K 个块(典型 K=16)
  3. 对这 Top-K 块用原始的 K, V(不是压缩后的)做精细 attention:

\text{Attn}_{\text{slc}}(Q, K_{[\text{Top-K}]}, V_{[\text{Top-K}]}) = \text{softmax}\!\left(\frac{Q K^T_{[\text{Top-K}]}}{\sqrt{d}}\right) V_{[\text{Top-K}]}

计算复杂度:从 O(N^2) 降到 O(N \cdot K \cdot B)——K=16, B=32 时只需要看 512 个 token。

作用:精细处理最相关的少数块。compression 告诉我们”哪里重要”,selection 告诉我们”这些重要位置的细节是什么”。

这种”先粗后精”的两步设计是 NSA 的方法论核心——用低成本的 compression 做导航,用高成本的 full attention 只对重要区域计算

3.4 分支三:Sliding Window Attention

Sliding Window 是最简单的分支——每个 query token 与最近的 W 个 token(典型 W=512)做标准 attention:

\text{Attn}_{\text{win}}(Q, K_{[t-W:t]}, V_{[t-W:t]})

计算复杂度O(N \cdot W)——这是与 N 线性而非平方的,非常便宜。

作用:保证最近 W 个 token 的细粒度信息绝对不丢失。即使 selection 没选中最近的块,sliding window 也兜底保留。

为什么需要 sliding window:NSA 早期版本只有 compression + selection 时,研究者发现某些任务(特别是 next-token prediction 的局部依赖)会下降。Sliding window 是补救——它保证 attention 至少有 W=512 的精确局部上下文,弥补 selection 可能漏掉的近邻信息。

3.5 Gating:三分支的 learned 融合

三个分支的输出怎么组合?NSA 用一个简单的 learned gate:

g_c, g_s, g_w = \text{softmax}\!\left(W_g \cdot h_t\right)

其中 h_t 是当前 token 的 hidden state,W_g \in \mathbb{R}^{3 \times d} 是 learned 投影。

这相当于让模型自己决定”对于当前 token,应该更依赖 compression / selection / sliding window 中的哪个”。

  • 对复杂 reasoning token,gate 倾向 selection(看相关的远处 block)
  • 对局部细节 token,gate 倾向 sliding window
  • 对总览类 token,gate 倾向 compression

这种自适应分支选择是 NSA 与静态 sparse 方案(Longformer 等)的核心区别。


四、Hardware-Aligned 实现:让 sparse 真正快

NSA 设计的另一支柱是 Hardware Alignment——sparse attention 在数学上可以很快,但在实际 GPU 上能不能跑出理论速度取决于内存访问模式。

4.1 GPU Memory Hierarchy

GPU 的内存层级:

  • HBM (High Bandwidth Memory):GPU 主显存,~3 TB/s 带宽,但访问随机位置慢
  • L2 Cache:~50 MB,~10 TB/s 带宽
  • SRAM (Shared Memory):每个 SM 上 ~200 KB,~30 TB/s 带宽

Attention 的 IO 瓶颈:HBM 的带宽限制——sparse attention 如果触发大量 random HBM 访问,理论计算量减少但实际不会快。

4.2 NSA 的 Block-Structured Access

NSA 的 sparse 模式完全基于 block(块),而不是单个 token:

  • Compression:按块压缩 → block-wise sequential 访问
  • Selection:选 Top-K block(而不是 Top-K token)→ 选中后整块连续读取
  • Sliding window:连续的 W 个 token → sequential 访问

这种 block-structured sparsity 让 NSA 的所有内存访问都是连续 burst 而不是 random pointer chase——HBM 带宽利用率从典型 sparse attention 的 30-40% 提升到 NSA 的 80%+。

4.3 Triton Kernel

NSA 团队用 Triton(NVIDIA 的 GPU kernel DSL)实现了定制 kernel:

  1. Fused operations:把 compression / selection / sliding window 三步在 SRAM 中融合,避免 HBM round-trip
  2. Group GEMM:把多个 query head 的 attention 计算 batch 起来,提升 tensor core 利用率
  3. Specialized FlashAttention variant:基于 FlashAttention 改造,支持 sparse pattern

Triton 实现让 NSA 在实际 H800 GPU 上达到 11.6× 速度提升——这与理论 32 \times(block size B=32 的 compression)的差距来自 sliding window 和 selection 的额外成本。

4.4 Natively Trainable:与”事后改造”的本质差异

NSA 最重要的设计选择是 从头训练而不是”在 dense 模型上加 sparse”。

具体地,NSA 模型从 random initialization 开始就用 sparse attention 训练——所有的 attention layer 都是 NSA 形式。这相对 Quest / SnapKV 那种”dense 训练 + sparse 推理”的方案有几个关键好处:

  1. Block summarizer 学得对:MLP 压缩模块从训练之初就在每个 step 被优化,最终能输出真正”代表性”的块表征
  2. Selection 学得准:模型从训练之初就习惯”compression score 决定 Top-K 块”,所以推理时 selection 的命中率非常高(>90%)
  3. Gate 学得稳:三分支 gate 从训练初期就根据任务自动调整权重,避免 distribution shift
  4. 没有”额外训练”环节:不需要 dense 训练后再做 sparse adapter,工程上简单

NSA 论文的消融实验显示:完全 dense 训练后做 sparse 推理的性能损失 5-8%;而 native sparse 训练性能 0-2% 损失甚至略提升。这是”natively”在工程语境下的真正含义——结构与训练统一,避免事后改造的 distribution mismatch。


五、评测结果

NSA 论文报告的实验在一个 27B/3B-activated MoE 模型 上做(对应 V3 缩小版的 testbed):

5.1 速度提升(64K 序列)

阶段Full AttentionNSA加速比
Decoding11.6×11.6×
Forward9.0×9.0×
Backward6.0×6.0×

Decoding 速度最快——因为 decoding 是 1 query × N KV 的单向 attention,sparse 的好处直接打满。Backward 速度提升最小,因为反向传播需要更复杂的梯度计算。

5.2 性能不损:在 benchmark 上甚至略超 full attention

BenchmarkFull AttentionNSAΔ
MMLU64.364.6+0.3
MMLU-Pro36.737.5+0.8
BBH67.566.9-0.6
HumanEval47.648.8+1.2
MATH33.334.4+1.1
GSM8K79.279.4+0.2
LongBench (mean)41.344.2+2.9

关键观察:

  • NSA 在所有 short-context benchmark 上与 full attention 持平甚至略好 —— 否定了”sparse 必然性能下降”的传统假设
  • NSA 在 LongBench (长上下文 benchmark) 上比 full attention 高 2.9 个百分点 —— 这反直觉的结果背后是 NSA 的”压缩 → 选择 → 局部”层级处理实际上更接近人类的长文本理解方式,因此模型在长上下文上学得更好

为什么 sparse 能比 dense 略好:可能的解释是 NSA 的层级稀疏结构给 attention 引入了一种结构性归纳偏置——它强迫模型在不同尺度(粗粒度 + 细粒度 + 局部)上同时学习,这种多尺度处理更接近人类阅读长文的方式。这种 inductive bias 在 long-context reasoning 上特别有用。

NSA vs Dense Attention 计算量随上下文增长对比:dense O(N²) 在 1M 时是 32K 的 1024×,NSA 接近线性,1M 时仅 32×

5.3 NIAH 与超长上下文测试

Needle-in-a-Haystack (NIAH) 是测试模型在长上下文里精确定位单个事实的标准 benchmark。NSA 在 1M token NIAH 上的表现:

  • 短上下文(<32K):100% 命中(与 full attention 相同)
  • 中上下文(128K-256K):98%+ 命中(full attention 在此范围已开始下降)
  • 长上下文(512K-1M):90-95% 命中(full attention 几乎完全不可用)

NSA 让 1M 上下文从”理论上可行”变成”实际上可用”——这是 NSA 对长上下文 LLM 最实质的贡献。


六、与 MLA 的互补关系

NSA 与 W7 详解的 MLA 解决的是两个不同维度的问题:

维度MLA (W7)NSA (本文)
解决的问题KV cache 显存Attention 计算量
数学形式低秩压缩 + decoupled RoPE三分支稀疏
复杂度降低显存 O(N \cdot d_c)计算 O(N \cdot K \cdot B + N \cdot W)
推理影响KV cache 砍 56×Attention FLOPs 砍 10×
训练影响几乎无训练 throughput 9× 提升

两者完美互补

  • MLA 让长上下文在显存上可行(能装下)
  • NSA 让长上下文在计算上可行(能算动)
  • 二者同时使用:显存 × 计算 = 两个维度同时获得 10× 级别的优化

V3.2(W16 详解)就是 MLA + NSA 同时部署的模型——上下文从 128K 扩展到 1M+,且推理速度仍可接受。这是 DeepSeek 系列工程方法论的又一次”组合优化”胜利。


七、衔接 V3.2 与 V4

NSA 论文本身是方法论 paper——发布时没有直接生成产品级模型,而是在小规模 27B 模型上验证概念。NSA 在工程上真正落地是在 V3.2 与 V4

V3.2 (2025-12) 集成 NSA

V3.2 是 V3 之后的中期版本,主要 delta:

  1. 集成 NSA:把 dense attention 替换为 NSA
  2. 上下文扩展:从 V3 的 128K → 1M
  3. API 接口扩展:支持”整本书”级别输入
  4. 保留 V3 的其他设计:MLA、DeepSeekMoE、Aux-Loss-Free、FP8 等都不变

V3.2 是第一个”NSA + R1 reasoning”组合的产品级模型——可以做百万 token 输入的 reasoning。这对 long-context code review、整书分析、多文档综合等场景是 game-changer。

V4 (2026-04) 进一步扩展

V4 在 NSA 基础上还做了更多优化(具体细节待论文公开),上下文进一步扩展到 100M+ token 级别。V4 的发布让”全 codebase reasoning””科研论文集合分析”成为现实。

可以说 NSA 是通用 LLM 主线从 V3 → V3.2 → V4 的核心架构延续——MLA 在 V2 启动了”经济性”主线,NSA 在 V3.2 启动了”超长上下文”主线,二者构成 DeepSeek attention 设计的两大支柱。


八、局限与未来方向

NSA 是一项里程碑工作,但仍有几个明显局限:

  1. 超参数敏感:Block size B、Top-K K、Window size W 的最佳值取决于模型规模和任务,需要系统搜索
  2. Compression MLP 设计简单:当前 block summarizer 只是一个 MLP,未来可以用更复杂的注意力或卷积结构
  3. 三分支 gate 是 sample-level:未来可能引入 token-level 或 head-level 更细粒度的 gating
  4. 训练稳定性:在 trillion-param 规模上的稳定性仍需更多实证——V3.2 是第一个大规模验证
  5. Triton kernel 仍需进一步优化:当前 11.6× 加速接近 sparse pattern 的理论上限,但内存带宽利用率还有 20% 空间

后续工作方向

NSA 提出后业界出现了若干跟进工作:

  • DSA (Dynamic Sparse Attention):进一步动态化的 sparse pattern
  • Optimizing NSA with Latent + Local Global Alternating (arXiv:2511.00819):把 NSA 与 latent attention 结合
  • MoBA(同期 Moonshot):另一种块级 sparse 方案,与 NSA 互相比较

可以预期 2026 年的开源大模型将普遍采用 NSA 或类似的 native sparse 设计——dense attention 在长上下文时代将逐渐退居二线。


写在最后

NSA 是 DeepSeek 系列里工程美感最强的一篇 paper 之一——它没有引入新模型、新损失函数,只是重新设计了 attention 这一个原语,但带来了三个量级的效率提升:

  1. 三分支稀疏设计:compression(粗粒度全览)+ selection(Top-K 精细)+ sliding window(局部兜底)+ gating(learned 融合)—— 一个看似简单但精心设计的层级稀疏方案
  2. Hardware-aligned 实现:block-structured access + Triton kernel + FlashAttention 改造 —— 让稀疏的理论速度真正在 GPU 上跑出来
  3. Natively trainable:从头训练 sparse-aware 模型,消除事后改造的 distribution mismatch —— 让 sparse 不只是推理优化,而是训练时的第一原则

这三件事的累积效应是:64K 序列 decoding 速度 11.6× 提升、长上下文 benchmark 反而略好、1M token NIAH 90%+ 命中率。

回到这个系列的整体脉络,NSA 是 DeepSeek attention 设计的”第二支柱”:

  • W7 MLA:解决 KV cache 显存问题
  • W14 NSA(本文):解决 attention 计算量问题

两者合起来让 DeepSeek 的长上下文 LLM 在 trillion-param 规模上仍然经济可用——这是 V3.2 和 V4 系列旗舰得以发布的工程基础设施。

下一篇 W15 我们详解 DeepSeekMath-V2(arXiv:2511.07823),这是 DeepSeek 推理主线在 R1 之后的延续——把”答案验证”扩展到”推理过程验证”,提出 Self-Verifiable Reasoning 方法论,让模型可以自主判断自己的推理是否正确。这是从 R1 的”outcome-based RL”向”process-based RL”的演进,也是 reasoning 模型走向真正可信赖的关键一步。


参考资料

  1. Yuan et al., Native Sparse Attention: Hardware-Aligned and Natively Trainable Sparse Attention, arXiv:2502.11089, 2025. ACL 2025 Best Paper.
  2. NSA Triton implementation (community):
  3. Beltagy et al., Longformer: The Long-Document Transformer, arXiv:2004.05150, 2020.
  4. Zaheer et al., Big Bird: Transformers for Longer Sequences, arXiv:2007.14062, 2020.
  5. Tang et al., Quest: Query-Aware Sparsity for Efficient Long-Context LLM Inference, arXiv:2406.10774, 2024.
  6. Li et al., SnapKV: LLM Knows What You are Looking for Before Generation, arXiv:2404.14469, 2024.
  7. Lu et al., MoBA: Mixture of Block Attention for Long-Context LLMs, arXiv:2502.13189, 2025.
  8. Dao et al., FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness, arXiv:2205.14135, 2022.
  9. DeepSeek-AI, DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model, arXiv:2405.04434, 2024.
  10. Optimizing Native Sparse Attention with Latent Attention and Local Global Alternating Strategies, arXiv:2511.00819, 2025.

Loading