首页/AI/大模型部署与运维速查/前缀缓存:复用相同前缀的 KV
推理参数与优化50 条

前缀缓存:复用相同前缀的 KV

相同前缀(系统提示、模板、few-shot 示例)的 KV 缓存直接复用、跳过重复 prefill:多请求共享同一系统提示的网关场景收益明显,命中率可从服务指标观察。

前缀缓存是什么

前缀缓存(automatic prefix caching)把多个请求里完全相同的 prompt 前缀算出的 KV 直接复用,跳过重复的 prefill 计算。系统提示、固定模板、few-shot 示例这类每次请求都一模一样的前缀,是收益的主要来源。vLLM 用 --enable-prefix-caching 开启,较新版本可能已默认开启,以所用版本文档为准。

基本信息

启用vLLM:--enable-prefix-caching(部分版本默认开启)
匹配粒度以 KV 块为单位做前缀匹配,不足一个块的前缀无法命中
收益场景大批请求共享同一段长前缀
代价缓存占用 KV 显存,与并发请求共享同一份预算
观察前缀缓存命中率相关指标,名称以本机 /metrics 实际输出为准

典型使用场景

  • 网关统一注入长系统提示:所有请求共享同一前缀,命中率高、收益最直接
  • 固定 few-shot 示例的分类或抽取任务:示例文本不变,前缀天然可复用
  • Agent 与工具调用场景:工具描述与协议说明写在系统提示里,每次请求都重复,缓存收益明显
  • 多轮对话共享同一系统提示:每轮只增长尾部内容,头部可复用
  • RAG 固定模板:检索内容前的那段指令格式保持不变

启用与观察

启用与观察
# 启动时开启(部分版本已默认开启,以版本文档为准)
vllm serve <模型路径> --enable-prefix-caching

# 观察命中情况:指标名随版本微调,先看实际输出再写表达式
curl -s http://127.0.0.1:8000/metrics | grep -i prefix_cache

# 对照压测:同一提示词并发 1 与并发 32 各跑一轮,比较 TTFT 与 prefill 耗时
# 结论要固定提示词、并发档位与数据集,否则差异无法归因

什么会让命中率垮掉

写入前缀的内容后果规避办法
时间戳、请求 ID、随机数每个请求前缀都不同,几乎无法命中把这类内容移到前缀之后或尾部
每次重排顺序的 few-shot 示例前缀逐字节不同即视为不匹配固定示例顺序
前缀短于一个 KV 块块粒度的匹配无从建立把稳定内容集中放在提示开头
命中率高不等于端到端变快:缓存省下的是 prefill 部分,若瓶颈在排队或 decode,加速有限。看收益要同时对照 TTFT 与排队时长。
缓存会长期占用显存,挤占可用于并发的 KV 空间:上线后要一并观察 KV 水位,确认并发能力没有因此被压到低于预期。

易错点

  • 前缀里放逐请求变化的内容(用户 ID、时间戳):差一个字符就全部重算,命中率崩掉
  • 开启前缀缓存后不复测并发容量:缓存挤占显存,KV 池变小,原先的并发结论失效
  • 把日志里的前缀缓存计数当成全局性能指标:它只反映复用比例,不反映排队与解码阶段的瓶颈
  • 多租户场景共享前缀缓存时不评估隔离:不同租户内容进入同一前缀,存在信息串扰的隐患

数据来源与参考

  • vLLM 官方文档:Automatic Prefix Caching(docs.vllm.ai)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌