6.2 KiB
6.2 KiB
长上下文与高效注意力:研究账本
最后核验:2026-07-28
研究问题
“上下文窗口变长”至少包含五个彼此独立的问题:
- 二次计算:标准 softmax attention 的配对计算随序列长度平方增长。
- KV Cache:自回归推理需要为历史 Token 保存逐层 K/V,缓存宽度和序列长度共同决定显存。
- 位置外推:能接受更长输入不等于能在训练长度之外正确使用位置。
- 有限状态表达:线性注意力或 SSM 用固定状态压缩历史,获得常数缓存,也因此存在容量上限。
- 系统实现:单算子变快以后,跨设备序列切分、状态传递、前缀缓存和请求调度仍可能成为瓶颈。
正文必须分别记账,不能把“更省显存”“更少 FLOPs”“更快墙钟时间”和“更强长程检索”混成一个“高效”。
已核验的一手来源
本地只读研究缓存位于 research/sources/long-context/,PDF 与抽取文本不进入 Git。
| 论文 | 本地原文 | 本轮核验重点 |
|---|---|---|
| FlashAttention (2205.14135) | 34 页 | exact attention;减少 HBM IO;仍有二次算术,反向重算甚至增加 FLOPs |
| DeepSeek-V2 (2405.04434) | 52 页 | MLA 低秩联合 KV 压缩、权重吸收、decoupled RoPE、缓存维度 |
| Gated DeltaNet (2412.06464) | 22 页 | delta rule 与 scalar gate 的组合 |
| Kimi Linear (2510.26692) | 28 页 | KDA、3:1 KDA/MLA、NoPE、混合比例消融、1M 解码实验 |
| DeepSeek-V3.2 (2512.02556) | 23 页 | Lightning Indexer、top-k=2048、两阶段稀疏训练 |
| DeepSeek-V4 (2606.19348) | 58 页 | CSA/HCA、压缩率、top-k、局部窗口、Partial RoPE、1M 成本 |
| Kimi K3 (2607.24653) | 47 页 | 69 KDA + 24 Gated MLA、NoPE、1M curriculum、FlashKDA/KCP/服务 |
辅助检索使用 Grok CLI Headless 模式扩大覆盖;正文数字只采纳上述论文、arXiv 元数据或作者官方仓库能够回查的内容。
关键事实与边界
FlashAttention
- 它是 IO-aware exact attention,不是近似注意力。
- 它不把完整
N × Nattention matrix 写入 HBM,使用分块和 online softmax 在 SRAM 中累计。 - 理论 attention 算术仍为二次;论文明确说明反向重算会增加 FLOPs。
- 论文报告的
7.6×是 GPT-2 上 attention kernel 的加速,不应写成所有模型端到端都快 7.6×。 - 同文端到端数字包括 GPT-2 约
3×、Long Range Arena 约2.4×,必须带实验语境。
MQA / GQA / MLA
- MQA/GQA 缩小 KV 头数,历史 Token 数仍是
L。 - MLA 为每个 Token 缓存联合低秩 latent
c_t^KV,内容 K/V 的 up-projection 可分别吸收到 Query 与输出投影。 - 如果直接对内容 Key 使用 RoPE,位置相关旋转矩阵会阻断权重吸收。因此 DeepSeek-V2 用单独的 RoPE Query/共享 Key 分支。
- DeepSeek-V2 的缓存为每层每 Token
(d_c + d_h^R)个元素;报告配置为d_c=512、d_h^R=64。 KV Cache −93.3%与最大生成吞吐 5.76×是相对 DeepSeek 67B 的整模型报告数字,不是 MLA 对所有 MHA 的普适常数。
线性注意力、Delta Rule 与 KDA
- 核化线性注意力把历史压进固定矩阵状态,解码缓存不再随
L增长。 - 固定状态不是无损的全历史表;精确检索和多关系绑定会受有限容量约束。
- Delta Rule 先擦除状态中与当前 Key 对齐的旧预测,再写入 Key—Value 关系。
- Gated DeltaNet 加入遗忘 gate;KDA 进一步把 gate 细化到 Key 通道。
- Kimi Linear 的原文消融支持
3 KDA : 1 MLA:训练/验证 PPL 为9.23 / 5.65,优于测试的0:1、1:1、7:1、15:1。 - Kimi Linear 报告同时区分了约
2.3×的单请求 1M 解码加速和通过缓存节省扩大 batch 后最高约6.3×的理论吞吐;正文不可混写。
DeepSeek Sparse / Compressed Attention
- DeepSeek-V3.2 的 DSA 用 Lightning Indexer 为主 MLA 选择历史 Token;主 attention 每 Query 选择
2048个 KV。 - Indexer 先在 dense attention 下单独训练
2.1BToken,再与主模型稀疏续训943.7BToken。 - V3.2 窗口是
128K,不是1M。 - DeepSeek-V4 的 CSA 先每
m=4个历史条目压成一个,再稀疏选择;V4-Flash top-k 为512,V4-Pro 为1024。 - HCA 每
m'=128个条目压成一个,不再做稀疏选择。 - 两者都增加
128Token 的未压缩滑窗分支,并只在向量末64维使用 Partial RoPE。 - V4-Pro 为
61层、1.6T/49B activated;V4-Flash 为43层、284B/13B activated。 - 在 1M 语境下,报告给出 V4-Pro 相对 V3.2 的单 Token FLOPs
27%、KV Cache10%;V4-Flash 分别为10%和7%。
Kimi K3
- K3 的 93 个主干层由
69 KDA + 24 Gated MLA构成;基本节奏是三层 KDA 后一层 MLA,并以 MLA 收尾。 - 全部 MLA 使用 NoPE。位置和近因偏置主要由 KDA 的递归 gate/decay 提供,MLA 专注全局内容寻址。
- 上下文 curriculum:预训练从
8K → 64K,cooldown 从256K → 1M。 - KDA 用固定大小状态替代增长 KV;24 个 MLA 层仍保留随长度增长的压缩缓存,所以 K3 不是“完全无 KV Cache”。
- 系统侧必须同时阅读 FlashKDA、KDA Context Parallelism、混合 KDA/MLA prefix cache、外置 KV Pool 和 cache-aware scheduling。
因果主线
全连接注意力
├─ 计算太重:局部/稀疏 → Flash(IO) → DSA → CSA/HCA
├─ 缓存太宽:MQA → GQA → MLA
├─ 位置外推:相对位置 → RoPE/ALiBi → PI/YaRN → NoPE+递归位置
├─ 历史太长:线性 attention → fast weight → DeltaNet/GDN → KDA
└─ 单卡装不下:Transformer-XL → Ring/Context Parallel → KCP/服务缓存
汇流:
Kimi K3 = 3×固定状态 KDA + 1×NoPE 全局 MLA + KDA 系统协同
DeepSeek-V4 = CSA 压缩后稀疏 + HCA 重压缩后稠密 + 局部窗口
正文的证据标注
论文事实:公式、结构或数字可在对应原文定位。教学估算:用统一假设计算的 KV/状态大小,不等于作者报告的生产显存。机制推断:从公开结构推出的代价或能力边界,必须明确写“推断”。未知:训练数据配比、未公开 kernel 细节和线上集群参数不猜测。