KV Cache 怎么存:两个 id 锁一条缓存

小白爱摸鱼 @chaozuoye
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/…↗ 已改写,非原文转载 纳米AI (@antiAIvo) on X 大模型推理优化02:「KV Cache 」 来思考下 K和V ,怎么存? 1. 先区分下名字 K、V指 Transformer注意力机制的QKV 缓存通常有key和value 2. cache的key怎么定义? 有两个唯一id: 每个token有一个id 每一层block有一个id 这两个组合可以确定唯一id 也就是cache的key 3. cache的value 简单了 就是存对应bl X (formerly Twitter)
175 浏览 0 评论 0 反应
登录 后参与评论
还没有评论,来抢沙发。
查看完整榜单
查看完整榜单
查看完整榜单