← 关联知识节点:推理优化:KV Cache → Continuous Batching → PagedAttention
交互工具 · 算账

KV 缓存账与重算对照

逐字生成时,每一步都要「记得」前面所有词的 K、V——记下来就是 KV Cache:省了计算、吃了显存。拧结构旋钮算这本笔记有多重:每 token 56 KiB 从哪来、聊到多少 token 缓存会超过模型权重本身;再切到不缓存的世界看每步全量重算的代价——空间换时间,两边都明码标价。

纯前端算真实公式:每 token 缓存 = 2(K、V)× 层数 × 键值头数 × 每头维度 × 精度字节,与知识库《推理优化》KV Cache 节逐字对齐(Qwen2-7B 56 KiB/token、100 万 token 53.4 GiB 可复现);重算对照倍数与权重交叉点为演示口径(文章未给 FLOPs 公式,以每步需算 K/V 的 token 次数计);本工具算单请求账,并发容量账见量化显存与并发账,零 API、零延迟。

逐字生成时每一步都要「记得」前面所有词的 K、V——记下来就是 KV Cache:省了计算、吃了显存。拧 层数 / 键值头数 / 头维 / 精度 / 会话长度,算这本笔记有多重、不记笔记要多算多少。本工具算「单请求账」:一个会话的缓存有多重、不缓存要多算多少。多路请求抢显存、挑卡反推并发容量的「并发账」见量化显存与并发账工具——两边共享 56 KiB/token 同一公式。
每 token 缓存
56.0 KiB
2 × 28 层 × 4 组 × 128 维 × 2B
当前会话缓存
224.0 MiB
4K token 的「笔记」
不缓存多算
2049×
累计口径(演示)

KV 缓存随会话长度增长

KV 缓存 7B bf16 权重 13.0 GiB
7B 权重 14 GB(13.0 GiB)参照014G4K token:224.0 MiB224.0 MiB01K2K3K4K

4K token 的会话缓存 224.0 MiB,是 7B bf16 权重(13.0 GiB)的 0.02 倍——再聊到 24.4 万 token 就追平权重(按公式计算的演示口径)。

生成全程要算多少 K/V(累计)

有缓存(线性) 无缓存(平方)
无缓存累计:839.1 万 次有缓存累计:4096 次839.1 万 次4096 次0839.1 万第 1 步2K 步4K 步

生成 4K 个 token:有缓存累计算 4,096 次新 token 的 K/V(每步只算新的);不缓存则每步重算全部历史,累计 8,390,656 次,是前者的 2049 倍。文章口径:1000 词的文章要算 1000 轮全量注意力,绝大部分是重复劳动。(演示口径:以每步需算 K/V 的 token 次数计,非精确 FLOPs。)

层数28

2 → 80 层——28 层是 Qwen2-7B;每层都要存一份 K、V

键值头数4

1 组是 MQA 极端、4/8 组是 GQA 常见档——Qwen2-7B 用 4 组

每头维度128

64 → 256——128 维是主流档

会话长度4K

512 → 100 万 token——会话越长,笔记越厚

缓存精度

缓存精度独立于权重精度:给笔记瘦身(本档位)不改变模型本身,反之权重压到 4-bit,缓存仍按这里的档位算。

每 token 缓存 = 2(K、V)× 层数 × 键值头数 × 每头维度 × 精度字节

文章口径,点一下复现

28 层 × 4 组键值头 × 128 维 × 2 字节(K、V 各一份)= 56.0 KiB/token——正是文章实算的 Qwen2-7B 口径 56 KiB,4 个旋钮拧回原位就复现它。

结构压缩的出路(静态注记,承 MLA 篇):128 头 ×128 维的同口径下,MHA 每层每 token 存 32768 个数,GQA 8 组 2048、MQA 256,MLA 只存潜向量 512 + 位置键 64 = 576 个——论文口径较 GQA 前代 DeepSeek 67B 缓存减少 93.3%、最大生成吞吐提升 5.76 倍。你当前结构每层存 1,024 个数(2 × 4 组 × 128 维),量化是压数值,MLA 是换存法。