这一系列从张量和实际计算开始。每一讲都先固定一个具体配置,写清输入与权重的形状,再推导中间结果,最后分别走一遍 Prefill 和 Decode。遇到缓存优化,要同时算驻留容量、每步读取量和额外计算;遇到 NPU 映射,要看矩阵的 M/N/K、片上复用和数据搬运。
当前先完成基础部分与 MLA。后面的内容按下面的路线逐篇展开。
已完成的讲解
- MHA、MQA、GQA 从头推导——从单头 Attention 开始,解释为什么多头、怎样共享 K/V,以及共享后为什么仍需逐 Q head 计算。
- MLA 从低秩缓存到矩阵吸收——沿输入投影、K/V 重建、K 吸收、V 吸收、解耦 RoPE 逐步推导,再展开 Prefill/Decode 的 GEMM 形状。
Attention 的六条路线
| 路线 | 学习顺序 | 要推清楚的问题 | 当前进度 |
|---|---|---|---|
| 1. KV 表示与共享 | MHA → MQA → GQA → MLA → YOCO | head 之间与层之间分别共享什么,线性变换怎样重排,缓存中最终保存什么 | MHA、MQA、GQA、MLA 已写;YOCO 待写 |
| 2. 稀疏 Attention | Sliding Window → Block Sparse → Top-K Sparse → NSA → DSA | 谁产生索引、谁做选择、怎样 Gather、最终跳过了哪些 QK/PV | 待写 |
| 3. 线性 Attention | Linear Transformer → RetNet → Lightning Attention | 全序列求和怎样变成递推,状态多大,分块并行怎样连接前后状态 | 待写 |
| 4. 混合 Attention | Full、Sparse、Linear 的层间与分支组合 | 哪些层保存历史页,哪些层保存固定状态,质量与计算如何取舍 | 待写 |
| 5. 高效精确内核 | Online Softmax → FlashAttention → FA2 → FA3 → FA4 | 分块怎样保持归一化,矩阵运算、指数、归约与搬运如何重叠 | 待写 |
| 6. 长上下文与流式 | PagedAttention → StreamingLLM → Ring Attention | 逻辑位置、物理页、可见历史和设备分片分别怎样组织 | 待写 |
KV Cache 的七条路线
| 路线 | 代表工作或机制 | 要推清楚的问题 | 当前进度 |
|---|---|---|---|
| 1. 架构压缩 | MQA、GQA、MLA | 每 token、每层保存多少元素,TP 分片或复制后单设备占多少 | 基础已包含在前两讲 |
| 2. 量化 | KIVI、KVQuant、FP8/FP4 KV | 量化轴如何选择,scale 和残余区占多少,误差如何影响分数和输出 | 待写 |
| 3. 淘汰与选择 | H₂O、StreamingLLM、SnapKV、PyramidKV | 如何决定保留位置,何时更新,怎样把逻辑淘汰转成物理页回收 | 待写 |
| 4. 共享与复用 | YOCO、Prefix Caching、跨请求共享 | 缓存身份、共享粒度、引用计数和写时复制怎样工作 | 待写 |
| 5. 内存管理 | PagedAttention、vAttention、FlashInfer | 虚拟与物理地址怎么对应,页大小如何影响碎片和访问效率 | 待写 |
| 6. 分层存储与卸载 | SRAM、HBM、DDR、CXL、SSD | 什么数据应当驻留,何时预取,读回和重算的临界点在哪里 | 待写 |
| 7. 分布式管理 | P/D 分离、KV 传输、分布式缓存池 | 每层何时可传、接收端怎样重映射、流水和副本如何影响时延与容量 | 待写 |
同一个工作可能在两条路线中出现。读 MQA/GQA 时先推它的计算;再讨论缓存系统时,使用这些形状去推容量、布局和分片。每次都以本讲需要解决的问题为主。
后续顺序
先接着 MLA 讲 YOCO,把 head 共享、latent 共享和层间共享串起来。之后沿稀疏路线讲滑窗、块稀疏、NSA 和 DSA,再进入线性与混合 Attention。精确内核、长上下文以及缓存系统部分会分别成篇。
每篇的符号在开头重新定义。演示配置和真实模型配置分开列出,理论带宽与 FLOPs 用于解释瓶颈,具体芯片的性能结论需由实测支持。