袁天AI developer
← 全部笔记

KV Cache:写一千个词,能少算 49 万多次

前面的词不会变,算过的就别再算了。

KV Cache 是大模型省算力最直接的一招。

模型写字是一个词一个词往外蹦的。写到「我喜欢看」,接下来猜「书」。如果每猜一个词都把前面的内容重算一遍,账是这样的:

这一步读到 不存,要算谁的 K 和 V 存了,只算谁的
我 我 我
我喜欢 我、喜欢 喜欢
我喜欢看 我、喜欢、看 看
我喜欢看书 我、喜欢、看、书 书

写 4 个词,不存要算 10 次,存了只要 4 次。这个差距越写越大。写 1000 个词,不存要算 500500 次,存了还是 1000 次。

能这么省,是因为 GPT 这类模型只能往前看。「我」被算的时候看不到后面,后面写什么也影响不到它,算一次就够了。Hugging Face 有张缓存图解,想看细节可以翻翻。

为什么只存 K 和 V

Q 是一个词主动发出去的问题,只在它自己是最新那个词的时候用一次,用完就没用了。K 和 V 是等着被别人查的,后面每个新词都要来查,所以要一直留着。

一次回答分两段

你发一段 500 字的问题过去,模型先把这 500 个位置的 K 和 V 一口气算好,存进显存。然后开始回答,每次只进一个新词,算出它的 Q、K、V,把 K 和 V 接到缓存后面,再拿 Q 去查整份缓存。

查还是要查的。缓存越长,每个新词要翻的东西就越多。

省下的算力,换成了显存

每层、每个头、每个位置都要存,上下文到了 32k、128k,或者同时服务很多人,缓存很容易把整块显卡的显存吃满。而且每出一个词都要把这些数据搬一趟,所以有时候模型慢不是算不动,是显存读得不够快。

后来的优化基本都在对付这件事。比如让好几个头共用一组 K 和 V,缓存能小好几倍。再比如 vLLM 的 PagedAttention,学操作系统的内存分页,把缓存拆开存,不用提前占一大块。

缓存 注意力
© 2026 袁天NOTE / 16
小鲸鱼 · AI 导航
小鲸鱼正在连接…

站上的内容我都读过。直接联系袁天 →

小鲸鱼我是助手小鲸鱼。内容、笔记,或者有什么想知道的,直接问我。