feat: publish long-context deep dive

This commit is contained in:
wuyang
2026-07-28 22:49:04 +08:00
parent 8dc62bfaec
commit 761a75d5af
13 changed files with 2788 additions and 24 deletions
+99
View File
@@ -0,0 +1,99 @@
# 长上下文与高效注意力:研究账本
最后核验:2026-07-28
## 研究问题
“上下文窗口变长”至少包含五个彼此独立的问题:
1. **二次计算**:标准 softmax attention 的配对计算随序列长度平方增长。
2. **KV Cache**:自回归推理需要为历史 Token 保存逐层 K/V,缓存宽度和序列长度共同决定显存。
3. **位置外推**:能接受更长输入不等于能在训练长度之外正确使用位置。
4. **有限状态表达**:线性注意力或 SSM 用固定状态压缩历史,获得常数缓存,也因此存在容量上限。
5. **系统实现**:单算子变快以后,跨设备序列切分、状态传递、前缀缓存和请求调度仍可能成为瓶颈。
正文必须分别记账,不能把“更省显存”“更少 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 × N` attention 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 加入遗忘 gateKDA 进一步把 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.1B` Token,再与主模型稀疏续训 `943.7B` Token。
- V3.2 窗口是 `128K`,不是 `1M`
- DeepSeek-V4 的 CSA 先每 `m=4` 个历史条目压成一个,再稀疏选择;V4-Flash top-k 为 `512`V4-Pro 为 `1024`
- HCA 每 `m'=128` 个条目压成一个,不再做稀疏选择。
- 两者都增加 `128` Token 的未压缩滑窗分支,并只在向量末 `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 Cache `10%`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。
## 因果主线
```text
全连接注意力
├─ 计算太重:局部/稀疏 → 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 细节和线上集群参数不猜测。