← 关联知识节点:本地部署与量化:把模型跑在自己机器上
交互工具 · 原理

前缀缓存复用树

引擎层三强的地基(分页缓存、连续批处理)已经互相趋同,竞争上移到「缓存复用谁更聪明」:vLLM 靠默认开的前缀缓存,SGLang 靠看家本领 RadixAttention。下面把这道题演出来——每条请求沿缓存树逐块匹配,公共前缀命中复用、分叉后新算,看「每轮重发历史」的负载怎么几乎免费。

纯前端确定记账:请求 = 词块序列(示意 token,真实引擎按 KV block 切粒度,vLLM 常见 16 token/块),逐词块节点走树(RadixAttention 的路径压缩版不影响记账),命中/新算与节省比例全是真实计算;步进 = 截断序列重跑,与缓存树按到达顺序生长的时序性严格一致。场景锚点 Agent 多轮省 66%(33/50 块)、共享系统提示 50%(18/36)、并行分支 44%(12/27)、零命中 0%。文章引用口径(vLLM 零命中损失 <1%、SGLang 实测约三成)为实测数字,本页不做吞吐模拟。零 API、零随机。

引擎层三强(vLLM / SGLang / TensorRT-LLM)的地基已互相趋同,竞争上移到「缓存复用谁更聪明」: vLLM 前缀缓存默认开、SGLang 看家本领 RadixAttention——同一道题的两种解法。下面把这道题演出来: 每条请求沿缓存树逐块匹配,公共前缀命中复用、分叉后新算。
青 = 命中复用(免 prefill)· 灰 = 新算

请求账本(宽度 = 块数)

每条请求沿树匹配后的命中/新算分段

还没有请求进树——点「下一请求」开始。

词块 = 示意 token(真实引擎按 KV block 切粒度,vLLM 常见 16 token/块);段上的字是命中的前缀内容,悬停可看全文。

已处理请求
0/4
树按到达顺序生长
复用块(命中)
0
免 prefill 的 token
新算块(实际成本)
0
无缓存时要算 50 块
prefill 节省
—
= 复用 ÷ 无缓存总量

缓存树(RadixAttention 的「基数树」)

×n = 被几条请求走过

树是空的——每条请求的新路径都会插进来。

汇合的地方共享,分叉的地方各算——「Radix」(基数)说的就是这棵前缀树。演示按逐词块节点走;SGLang 真实实现带路径压缩,命中/新算的记账结果一致。

点「下一请求」逐条喂进缓存树:每条请求沿树逐块匹配——公共前缀命中(青,KV 复用免 prefill),分叉之后新算(灰,真金白银的 prefill),新路径随后插进树里给后来的请求用。

和 kv-cache / paged-attention 工具什么关系?那边管的是「KV 缓存放哪、放不放得下」(显存账、分页租借),这边管的是「已算好的 KV 怎么被下一条请求复用」(过程账)—— 三家引擎的地基(分页缓存、连续批处理)已互相趋同,竞争上移到这层复用的聪明度上(文章原文)。

文章引用口径:vLLM V1 前缀缓存默认开、零命中率吞吐损失不到 1%;SGLang 多轮 Agent 负载实测吞吐领先约三成(首 token 延迟偏高)。 本页只演命中/新算的记账过程,不做吞吐模拟——吞吐数是实测引用,不是公式。