下一代 LLM 架构将是什么样子? 这个问题不断引发辩论——知乎贡献者和开发者 Yuxuan 对 DeepSeek 稀疏注意力(DSA)和原生稀疏注意力(NSA)进行了尖锐的比较,并对使用 TileLang 实现 DSA 操作进行了实用的探讨。 🚀 为什么 DSA > NSA(在长上下文任务中): 通过将 DSA 添加到小模型并与 NSA 进行比较的实验,DSA 一直表现更好——主要归因于两个关键设计选择: 1️⃣ 注意力分数蒸馏 → 对索引选择的显式监督 2️⃣ 令牌级稀疏而非块级稀疏 → 更细粒度,更准确的检索 🔍 1) 注意力分数蒸馏 稀疏注意力依赖于选择正确的键值对。 DSA 直接使用真实的注意力分数对索引模块进行监督,使训练与实际目标对齐:“选择关键令牌。” 而 NSA 仅优化语言模型损失,对索引准确性没有显式约束——这解释了它在长文档检索基准上的较弱表现。 🔍 2) 令牌级与块级稀疏 准确性与计算预算成正比:更精确的索引 → 更好的检索。 令牌级索引(DSA)自然比块级索引(NSA)具有更高的保真度。 从这个角度来看,NSA 的性能瓶颈是可以预期的——一个有趣的问题是:块大小=8 是否能帮助 NSA 赶上 DSA? ⚙️ 真实挑战:高效训练 DSA DSA 训练涉及预热 → 稀疏微调。 挑战在于计算和存储两个分支的注意力分数。 一个简单的实现需要 O(n²) 存储——抵消了 FlashAttention 的内存节省。 即使是预过滤(k=2048,h=512+64)仍然需要大缓冲区。 📎 代码: 🧩 内核融合的救助(图 1) 为了避免存储大量中间注意力分数,DSA 使用融合内核。 一个关键技巧是将索引分数 + 前 k 合并到一个内核中: • 维持一个 2K 缓冲区 • 为每个块计算索引分数...