KV Cache 的存储结构,其实就一句话。
大模型推理优化这个系列我追到第二篇,前面讲完背景,这次落到 KV Cache 本身。问题很实:K 和 V 到底怎么存?
先把名字认清楚。K、V 指 Transformer 注意力机制里的 QKV,缓存里通常存的是 key 和 value。名字容易混,先分清再往下走。
关键在 key 怎么定。每个 token 有一个 id,每一层 block 有一个 id,两个组合起来就是唯一 id,也就是 cache 的 key。写成式子就是 key = (block_id, token_id)。
value 就简单了,存对应 block 和 token 的 attention 里的 KV。合起来看:cache 的 key 是 (block_id, token_id),cache 的 value 是该 token 在该层注意力里的 K 和 V。一层一份,一个 token 一份,两者对上,定位到唯一一条缓存。
这个结构我以前一直没串起来。知道要缓存,不知道缓存的地址长什么样,于是看到各种推理优化方案只能背结论。现在明白了地址规则,再看那些"跳过重复计算"的招数,逻辑立刻清楚:key 能对上,就说明这条 KV 已经算过,直接取;对不上才真正跑一遍 attention。省下的正是重复算的钱。
再往深处想一步。既然 key 是按层和 token 拆的,那么多轮对话里前面轮次的 KV 天然可以复用,前缀完全相同的请求更是整段都能命中。这解释了为什么框架都爱在前缀缓存上下功夫。
我会拿这个理解去做的第一件事,是翻一遍手头推理框架的显存占用日志,看 cache 到底吃掉多少。数字摆出来,才知道优化该往哪使劲。
话题来源 @antiAIvo
4.9K阅读 ❤️17 x.com/…↗ 已改写,非原文转载
176 浏览 0 评论
0 反应















