记忆的代价:KV Cache 军备竞赛
谱系双栏(架构侧 + 系统侧,统一 KV bytes/token 口径)· 大海捞针只留可回源离散点 · Repeat After Me 的 Dⁿ vs log_D|S| · 可变成本 vs 固定成本交叉点账本
2026-10-19 全量重建:旧版三条题眼(Engram 的「KV 归零」、Mamba-3 的 34%、Repeat After Me 的 2^d)回源后全部口径错位,已按论文正文逐条更正;未能回源的数字一律置灰或留白。
口径更正:旧版一列「复杂度」把三种量混为一谈 —— MHA 标 O(n²) 是 prefill 计算口径,MLA 标 O(n·d_c) 是 decode 口径,MQA/GQA 的 O(n²/h) 更是把 显存当成了 FLOPs。本页统一只给 KV Cache bytes / token;prefill FLOPs 与 decode FLOPs 是另外两个量,不再合成一列。
🧠 架构侧 · 改的是 KV 公式
按真实年份升序排列(旧版把 2023 排在 2024 之后,却画着一条时间轴连接线)
每层每头各存一套 K 与 V。所有 KV 军备竞赛的起点。
2 · L · h · d_h · bL 层数 / h KV 头数 / d_h 每头维度 / b 每元素字节
🔴 旧版错在哪:旧版标 O(n²) 是 prefill 计算口径,不是显存口径
把 KV 压到「头数分之一」。PaLM 系列采用。
2 · L · d_h · b所有 query 头共享 1 套 KV
🔴 旧版错在哪:旧版标 O(n²/h) —— 错把显 存当 FLOPs:MQA/GQA 只减 KV 显存,attention 计算 FLOPs 仍是 O(n²·d)
MHA 与 MQA 的折中。Llama 3 用 32 query 头共享 8 组 KV。
2 · L · g · d_h · bg = KV 组数,1 ≤ g ≤ h
🔴 旧版错在哪:旧版 org 写「Meta (Llama 2)」—— Llama 2 是采用方,提出方是 Google;复杂度同样错用 FLOPs 口径