LLM · PREFIX CACHE LAB

缓存命中率为什么会变化?

把提示词切成若干前缀块:如果某块对应的 KV 已在显存中,就直接复用;遇到第一个不同的块后,后续内容必须重新进行 Prefill。

命中率 = 命中的提示词块数 ÷ 访问的总块数
本次请求命中率0%0 / 6 块
累计缓存命中率0%尚未访问
本次避免的 Prefill0 块命中的 KV 不再重新计算
缓存状态0 / 8LRU:优先淘汰最久未使用块

请求如何匹配已有 KV 前缀

绿色表示缓存命中,橙色表示必须计算。前缀一旦分叉,后续即使命令相同也不能沿用旧路径。
等待发送请求Request 0 / 6
查找前缀根据已有 token 路径检索
复用命中 KV从显存直接读取 K / V
计算未命中部分执行 Transformer Prefill
先发送一个请求

第一次访问没有缓存,所有提示词块都会 Miss;以后出现相同前缀时才可能 Hit。

请求历史

单个请求内部的 KV Cache

生成新 token 时复用本请求的历史 KV。通常直接描述为“KV 复用”,不一定专门计算命中率。

多个请求之间的 Prefix Cache

系统提示词、公共文档或对话前缀重复时,可复用先前计算的 KV;这里的缓存命中率最直观。

教学模型:每个彩色方块代表一个 token block,并非单个 token;未模拟 PagedAttention、Radix Tree、GQA 和缓存量化。