返回课堂

完全相同的前缀,只留一份

V05/b0 · 先看重复

三请求共享同一个 4,096 token 前缀,各有 2,048 token 独有后缀;沿用 128 KiB/token
相同前缀
0.5 GiB
A 独有后缀
0.25 GiB
相同前缀
0.5 GiB
B 独有后缀
0.25 GiB
相同前缀
0.5 GiB
C 独有后缀
0.25 GiB
3 × (0.5 + 0.25) = 2.25 GiB

这里共享的是精确前缀对应状态。后缀不同,仍需分别计算和保存。

先看重复

三个请求都先放同一段四千零九十六 token 的材料,后面各接两千零四十八个独有 token。沿用刚才每 token 一百二十八 KiB 的配置,如果分别保存,就是三份六千一百四十四,总共二点二五 GiB。图中相同颜色的前缀出现三次,那里正是重复工作和重复状态。

教师备课:指图与模拟问答

指图与推进 · 不朗读教师指向当前高亮对象,随后推进。

V05/b1 · 前缀共享,后缀分叉

三请求共享同一个 4,096 token 前缀,各有 2,048 token 独有后缀;沿用 128 KiB/token
一份共享前缀 KV · 0.5 GiB
三个引用,按相同 token 前缀查找
A 独有后缀
0.25 GiB
B 独有后缀
0.25 GiB
C 独有后缀
0.25 GiB
0.5 + 3 × 0.25 = 1.25 GiB · 节省 1 GiB

这里共享的是精确前缀对应状态。后缀不同,仍需分别计算和保存。

前缀共享,后缀分叉

现在把三份相同前缀连到同一组缓存块,再让后面不同的内容各自分叉。容量变成一份四千零九十六,加三份两千零四十八,乘相同的每 token 大小,是一点二五 GiB,节省一 GiB。SGLang 的 RadixAttention 用前缀结构查找、组织这类复用,vLLM 也有自动前缀缓存。名称出现是因为我们已经看到它们要管理什么。

教师备课:指图与模拟问答

指图与推进 · 不朗读教师指向当前高亮对象,随后推进。

V05/b2 · 相同计算才可复用

三请求共享同一个 4,096 token 前缀,各有 2,048 token 独有后缀;沿用 128 KiB/token
一份共享前缀 KV · 0.5 GiB
三个引用,按相同 token 前缀查找
A 独有后缀
0.25 GiB
B 独有后缀
0.25 GiB
C 独有后缀
0.25 GiB
0.5 + 3 × 0.25 = 1.25 GiB · 节省 1 GiB

SGLang / RadixAttention 管理前缀查找与复用。模型、token、位置等计算条件须一致;语义相似不是命中,也没有取消 decode。

相同计算才可复用

这里的“相同”是计算条件相同,不能把意思相近就当作命中。token 前缀、模型及位置处理等都要对得上,否则缓存未必是这次本来会算出的状态。后缀仍需计算,新输出仍需一步步生成。也不能把两篇文档分别算出的 KV 直接拼起来,就假设等于把两篇连续输入得到的结果,因为后篇可能要读取前篇。共享减少的是可以确认重复的部分。

教师备课:指图与模拟问答

指图与推进 · 不朗读教师指向当前高亮对象,随后推进。

补充推导、边界与来源

三个请求都以同一段 4096 token 开始,各自再有 2048 token 独有后缀。沿用每 token 128 KiB 的配置,不共享时为 3×6144×128 KiB=2.25 GiB;共享前缀时为 (4096+3×2048)×128 KiB=1.25 GiB,节省 1 GiB。共享块需维护引用与生命周期,分叉后各请求的独有内容仍独立计算和保存。

复用的前提是精确 token 前缀及模型、适配器、位置处理等相关计算条件一致,而非自然语言“意思差不多”。RadixAttention 用前缀树等组织管理可复用 token 前缀;vLLM 也提供自动前缀缓存。命中可减少重复 prefill,后续 decode 仍存在。一般不能把两份独立计算的文档 KV 随意拼接,因为后面文档的表示可能依赖前面上下文。

本页证据与条件

A13;A14;W01;W02

进入主题正文