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、零延迟。
KV 缓存随会话长度增长
4K token 的会话缓存 224.0 MiB,是 7B bf16 权重(13.0 GiB)的 0.02 倍——再聊到 24.4 万 token 就追平权重(按公式计算的演示口径)。
生成全程要算多少 K/V(累计)
生成 4K 个 token:有缓存累计算 4,096 次新 token 的 K/V(每步只算新的);不缓存则每步重算全部历史,累计 8,390,656 次,是前者的 2049 倍。文章口径:1000 词的文章要算 1000 轮全量注意力,绝大部分是重复劳动。(演示口径:以每步需算 K/V 的 token 次数计,非精确 FLOPs。)
2 → 80 层——28 层是 Qwen2-7B;每层都要存一份 K、V
1 组是 MQA 极端、4/8 组是 GQA 常见档——Qwen2-7B 用 4 组
64 → 256——128 维是主流档
512 → 100 万 token——会话越长,笔记越厚
缓存精度独立于权重精度:给笔记瘦身(本档位)不改变模型本身,反之权重压到 4-bit,缓存仍按这里的档位算。
每 token 缓存 = 2(K、V)× 层数 × 键值头数 × 每头维度 × 精度字节
28 层 × 4 组键值头 × 128 维 × 2 字节(K、V 各一份)= 56.0 KiB/token——正是文章实算的 Qwen2-7B 口径 56 KiB,4 个旋钮拧回原位就复现它。