当前位置: 首页 > news >正文

Prompt Cache:别再为同样的 System Prompt 重算一遍

多轮对话里 System Prompt 每次都一样——500 Token 的固定前缀,每轮推理都要重跑一遍 Prefill。等于把同一段文字反复"读"几十上百遍。Prompt Cache 就是来省掉这件重复劳动的。

正常推理流程下,一个新请求进来先跑 Prefill(全 Prompt 的 K/V 全部算一次),然后进入 Decode(每步算一个新 Token)。如果 System Prompt 有 500 Token、用户输入 100 Token,Prefill 跑了 600 Token。第二次对话 System Prompt 一样、用户输入变成 80 Token——Prefill 又跑了 580 Token,其中 500 Token 跟上一轮完全一样。


Prefix Cache 的原理

Prompt Cache(也叫 Prefix Cache)不存完整的 KV Cache——它只存 Prompt 前缀部分的 K/V。新请求进来时,先拿 Prompt 的前 N 个 Token 去 Cache 里查——有没有匹配的前缀。有的话,这 N 个 Token 的 K/V 直接复用,Prefill 只算新增的部分。

Prefix Cache 的命中流程: 请求 1:Prompt = [SYS_500] + [USER_100] → Prefill 全部 600 Token → 缓存 [SYS_500] 的 KV → hash(SYS_500) → Cache 条目 请求 2:Prompt = [SYS_500] + [USER_80] → hash(SYS_500) 命中! → 跳过 500 Token 的 Prefill → 只 Prefill USER_80 部分(80 Token) → 500 Token Prefill 时间直接省掉

多轮对话里,第一轮是冷启动(全量 Prefill),第二轮起 Cache 命中率接近 100%。一个客服机器人一天 10 万请求,90% 是第二轮及以后的对话——Prefill 节省的总时间非常可观。


Runtime 如何管理 Prompt Cache

CANN 的 Prompt Cache 实现在 Runtime 层,不在应用层。好处是跟 NPU 显存管理和 HCCL 通信直接打通,不用在 Host 和 Device 之间搬 Cache 数据。

Cache 维护逻辑:

  1. 每个 Prefix 用 Token 序列的 hash 做键,存在 NPU 显存里,不搬回 CPU。
  2. 新请求查 Cache——有命中就跳过对应 Prefill;未命中就完整 Prefill 后把 Prefix 写入 Cache。
  3. Cache 满了走 LRU 淘汰——最久没被命中的条目被清除,释放显存。
# Prompt Cache 管理——Runtime 侧简化逻辑classPromptCache:def__init__(self,max_gb=2):self.pool=acl.rt.malloc(max_gb*1024**3)self.entries={}# {hash: {kv_offset, size, last_access}}deflookup(self,prefix_tokens):key=hash(tuple(prefix_tokens))ifkeyinself.entries:self.entries[key]["last_access"]=now()returnself.entries[key]["kv_offset"]# NPU 显存地址returnNonedefinsert(self,prefix_tokens,kv_data):key=hash(tuple(prefix_tokens))offset=self.pool_alloc(kv_data.nbytes)acl.rt.memcpy(offset,kv_data)# 存进 Poolself.entries[key]={"offset":offset,"size":kv_data.nbytes,"last_access":now()}ifself.pool_free<256*1024**2:# 不足 256MB 时淘汰self.evict_lru()

收益量化

一个 AI 客服:System Prompt 500 Token,每轮用户输入平均 100 Token。1000 并发,每个用户 10 轮对话。

不使用 Prompt Cache:每轮 Prefill 600 Token,总 Prefill Token 数 = 1000 × 10 × 600 = 6M Token。每次 Prefill 约 12ms(500+100 Token),每用户 10 轮 = 120ms Prefill 总时间。

使用 Prompt Cache:第一轮 600 Token Prefill(12ms),后 9 轮只有 100 Token Prefill(约 2ms)。每用户 10 轮 = 12 + 9×2 = 30ms。省了 90ms/用户——1000 用户省了 90 秒 NPU 时间。


什么场景不适合

每个请求 Prefix 都不一样——Cache 命中率接近零。Batch 小导致 Cache 插入即淘汰——Cache 没热起来就被清空。真正的收益集中在"大 Prefix、高频重复"的场景:客服机器人、代码助手(Tool 描述固定)、RAG 的 System Prompt。


参考仓库

cann-recipes-infer 推理 Recipes

Runtime 运行时

ATB Transformer 加速库

CANN 学习中心

http://www.jsqmd.com/news/878315/

相关文章:

  • 2026六盘水金牌黄金回收门店指南:黄金 白银 铂金 彩金回收五家门店实测及联系方式推荐 - 亦辰小黄鸭
  • Mac上Charles抓HTTPS包失败的根源与系统级解决方案
  • 5分钟在Mac上运行Windows应用:Whisky完全指南
  • Wand-Enhancer终极教程:三步解锁WeMod Pro高级功能完整指南
  • 速度的革命:深入解析 HTTP/2.0 的四大核心特性
  • MindSpore 适配 NPU 的全链路解析——从算子注册到端到端性能调优
  • 2026 年 5 月天津继承律所权威测评!专研家族遗产继承 - 资讯纵览
  • 2026荆州金牌黄金回收门店指南:黄金 白银 铂金 彩金回收五家门店实测及联系方式推荐 - 亦辰小黄鸭
  • FortiSandbox 安全加固与真实漏洞防御实践指南
  • 3步搭建高性能Minecraft服务器:CatServer完整部署与优化指南
  • 2026龙岩金牌黄金回收门店指南:黄金 白银 铂金 彩金回收五家门店实测及联系方式推荐 - 亦辰小黄鸭
  • ChatGPT故事化表达的神经科学底层逻辑:基于fMRI验证的3类情感触发点与即时应用公式
  • 3步掌握Translumo:免费高效的跨语言屏幕翻译解决方案
  • 2026年毕业论文AI率过高怎么办?这几招教你高效降低AI率,亲测好用! - 降AI实验室
  • Gemini生命周期价值不是静态指标!20年MLOps老兵首曝动态加权评估矩阵(含Python自动化计算脚本)
  • FlashMLA:把 KV Cache 压缩到原来的八分之一
  • 百度网盘macOS客户端逆向工程深度解析:Method Swizzling技术实现与应用
  • # 2026中国超声波泥位计十大品牌深度评测与技术实力排行榜 - 液体流量液位品牌推荐
  • 2026陇南金牌黄金回收门店指南:黄金 白银 铂金 彩金回收五家门店实测及联系方式推荐 - 亦辰小黄鸭
  • 2026娄底金牌黄金回收门店指南:黄金 白银 铂金 彩金回收五家门店实测及联系方式推荐 - 亦辰小黄鸭
  • 2026权威优选:一体化HMPP泵站/HMPP泵站/HMPP一体化泵站/HMPP高模量聚丙烯一体化泵站专业制造商 - 泵站报价15613348888
  • DeepSeek V3推理集群上线前必须完成的负载压测验证:7类异常流量注入测试+自动扩缩容SLA达标报告(限内部白皮书节选)
  • 2026景德镇金牌黄金回收门店指南:黄金 白银 铂金 彩金回收五家门店实测及联系方式推荐 - 亦辰小黄鸭
  • 深度解析miniblink49浏览器内核架构设计与企业级打印功能实现原理
  • 2026黄石金牌黄金回收门店指南:黄金 白银 铂金 彩金回收五家门店实测及联系方式推荐 - 亦辰小黄鸭
  • PaddlePaddle 适配 NPU 的技术全解析——从算子接入到端到端性能优化
  • OpenClaw新手进阶:从基础操作到自动化流程搭建,7天入门实战计划
  • 因果推断中倾向得分校准:提升双稳健机器学习估计精度的关键
  • 1.认识大模型
  • 2026泸州金牌黄金回收门店指南:黄金 白银 铂金 彩金回收五家门店实测及联系方式推荐 - 亦辰小黄鸭