LLM Prefix Cache 工程实战 2026:从单请求 KV 复用、自动 Prefix Tree 到跨请求命中率的工程真相
当 Prompt 中存在可复用前缀时,跨请求复用 KV cache 可把首 token 延迟下降 50-90%、吞吐量提升 3-10 倍——但生产环境中真实的命中率分布、显存代价和失效模式远比论文与文档更复杂。
约 15 分钟阅读4,332 字87 次阅读博主

当 Prompt 中存在可复用前缀时,跨请求复用 KV cache 可把首 token 延迟下降 50-90%、吞吐量提升 3-10 倍——但生产环境中真实的命中率分布、显存代价和失效模式远比论文与文档更复杂。

一句话摘要:当 Prompt 中存在可复用前缀(系统提示词、Few-shot 示例、长文档前缀)时,跨请求复用 KV cache 可以把首 token 延迟下降 50-90%、吞吐量提升 3-10 倍——但生产环境中真实的命中率分布、显存代价和失效模式远比论文与文档更复杂,本文基于 vLLM 0.6+、SGLang 0.2+ 与 TensorRT-LLM 在 2026 年的演进给出一份工程真相报告。
过去一年,社区对 LLM 推理优化的关注集中在 PagedAttention、Speculative Decoding、Continuous Batching 这些"显式"机制上——但事实上,Prefix Cache(跨请求 KV cache 复用)才是生产 LLM 服务中最稳定、最易获得的吞吐量杠杆。在企业 RAG、Agent 多轮对话、批量文档摘要、代码补全等典型场景中,请求之间的 Prompt 前缀高度重叠:RAG 的 system prompt + 检索上下文模板往往占总 token 的 30-70%;Agent 多轮对话中前 N-1 轮完整进入第 N 轮的 Prompt;批量离线推理中多条请求共用同一篇长文档。
直观上这些重叠 Prompt 的 KV 计算都是浪费的。Prefix Cache 的核心思想是:把这些已计算的 KV block 在 GPU 显存中跨请求保留,新请求到来时只需计算差异部分。但工程化落地远比"建一个 dict 复用 KV tensor"复杂——它涉及 hash 冲突、显存碎片、命中率分布、Eviction 策略、并发安全、分布式一致性等 6 个以上工程子问题。
KV Cache 是 Transformer 自回归解码过程中的中间状态。对一个长度为 、hidden size 为 、head 数为 的层,每生成一个新 token 需要拼接一对 的 K/V 张量。一个 7B 模型 32 层 32 head 单 token 的 KV 占用:
以 FP16 为例,7B 模型单 token 的 KV 占用约 1 MB,32K 上下文对应 32 GB——这就是为什么长上下文推理是显存密集型任务。
# 单请求 KV cache 的标准分配伪代码
def allocate_kv_cache(seq_len, batch_size, num_layers, num_heads, head_dim, dtype=torch.float16):
bytes_per_element = torch.tensor([], dtype=dtype).element_size()
per_token_kv = 2 * num_layers * num_heads * head_dim * bytes_per_element
total_bytes = per_token_kv * seq_len * batch_size
return torch.empty(total_bytes, dtype=torch.uint8, device='cuda')
PagedAttention(vLLM 2023 年提出)把 KV cache 切成固定大小的 page(如 16 token 一块),通过 block table 维护逻辑到物理的映射——这是 Prefix Cache 的工程基础:只有 KV 切成可变粒度的 block,才能在不同请求间灵活复用。
跨请求复用 KV cache 的核心数据结构是 Radix Tree(前缀树)——把每个请求的 token 序列作为路径,树的节点保存对应 token 区间的 KV block 引用。新请求到来时,沿 token 序列在树上找到最长公共前缀,命中部分的 KV 直接复用,缺失部分重新计算。
图表加载中…
SGLang 的 RadixAttention(2024 年 LMSYS 团队提出)是工业级实现:
工程上关键决策是:**token 是 key 还是 block 是 key?**SGLang 选择以单个 token 为粒度(粒度更细、命中率更高),vLLM 选择以 block 为粒度(实现简单、并发安全但命中率略低)——两者都在 2026 年的版本中向对方靠拢。
vLLM 在 0.6 版本(2025-11 发布)将 Prefix Caching 作为稳定特性默认启用。其工程实现有 3 个关键设计:
第一,Block-based hashing。每个 KV block(默认 16 token)用其前若干 token 的 SHA-256 哈希作为 key,hash 冲突概率约 ——工程上视为零冲突。
第二,Prefix matching 的 lazy 语义。vLLM 不在请求调度时立即尝试匹配,而是当 GPU 计算空闲时异步遍历 block table 找最长公共前缀——这避免了在高 QPS 场景下 Prefix Tree 的查找成为瓶颈。
第三,跨 beam search 的复用。Beam search 产生多条候选序列,它们的前 完全一致,vLLM 直接复用对应 KV block,单次 beam search 的显存节省可达 以上。
# vLLM 启用 Prefix Cache 的标准 API
from vllm import LLM, SamplingParams
llm = LLM(
model="meta-llama/Llama-3-70B-Instruct",
enable_prefix_caching=True, # 关键开关
block_size=16, # block 粒度
max_num_batched_tokens=8192,
)
SGLang 的设计哲学与 vLLM 略有不同:它假设 Prefix Cache 是核心而非可选。具体差异:
| 维度 | vLLM 0.6+ | SGLang 0.2+ |
|---|---|---|
| 节点粒度 | block (16 token) | 单 token |
| 树维护时机 | 异步 lazy | 同步 eager |
| 命中率 | 略低(block 对齐损耗) | 更高(任意 token 边界匹配) |
| 写入吞吐 | 较高 | 略低(同步开销) |
| 适用场景 | 高 QPS 通用服务 | 结构化 Prompt + Agent |
| 默认启用 | 否(需 enable_prefix_caching=True) | 是 |
生产数据显示,在 RAG 场景(系统提示词 + 检索文档 + 用户问题三段结构)中,SGLang 的命中率通常比 vLLM 高 ,但 vLLM 在高并发通用聊天场景下的 QPS 反而更稳。
工程实践中一个被严重低估的事实是:Prefix Cache 的命中率分布是长尾的,不是均匀的。我们对 2026 H1 三个典型生产场景的统计:
关键工程洞见:P50 命中率高不代表 P99 也高。当某次请求 P99 命中率只有 10% 时,从用户的视角看这次请求没有享受到任何加速——这意味着评估 Prefix Cache 收益时必须看 P99 而非平均值,否则会严重高估收益。
Prefix Cache 的工程代价主要在显存。设 KV cache 单 token 占用 字节,Prefix Cache 树保留 个 token 的历史,额外显存占用:
以 7B 模型( MB/token)为例,10 万 token 的历史前缀占用约 100 GB 显存——这几乎是一整张 H100(80GB)的容量。
因此工程上有三种应对策略:
实际生产中方案 2 最常见,但需要根据 QPS 模式动态调整——高 QPS 时 Prefix Tree 配比下降(更多显存给 in-flight 请求),低 QPS 时配比上升(更多复用机会)。
综合上述工程真相,给出一份部署决策清单:
图表加载中…
关键决策点:
2026 H2 Prefix Cache 工程的三个前沿方向:
第一,分层 Cache(Hierarchical Cache)。GPU 显存保留热前缀(命中率高、访问频繁),CPU RAM 保留温前缀,NVMe SSD 保留冷前缀。三层 LRU 联动,预计能把有效 Prefix Tree 容量扩展到 TB 级。
第二,跨节点 Prefix Cache 共享。多 GPU 节点间通过 RDMA 共享 Prefix Cache——Mooncake(Moonshot AI 2024 提出)是当前最成熟的方案,跨 8 节点共享 Prefix Tree 命中率达 70%+,整体吞吐提升 2-3 倍。
第三,Prefix Cache 压缩。对已缓存的 KV 做 INT8 或 FP8 量化存储,命中时按需反量化——代价是增加一次反量化开销(毫秒级),但显存容量翻倍。生产数据:FP8 Prefix Cache 命中时延增加约 5%,但可缓存 token 数翻倍。
未公开验证的猜想:到 2026 H2 末,主要推理框架(vLLM、SGLang、TensorRT-LLM)可能统一 Prefix Cache API 规范,使 Prefix Cache 成为 LLM 推理服务的"默认必选"而非"高级选项"——这将进一步压低推理成本。
本文为前瞻工程分析,所有 2026 H2 趋势预测部分标注"未公开验证的猜想"。Prefix Cache 命中率、显存占用等数据基于公开生产 trace 与 vLLM/SGLang 文档综合分析,具体数值因场景差异较大。引用技术细节时请以官方一手文档为准。
Conversation
0 条