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

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

多轮对话里 System Prompt 每次都一样——500 Token 的固定前缀每轮推理都要重跑一遍 Prefill。等于把同一段文字反复读几十上百遍。Prompt Cache 就是来省掉这件重复劳动的。正常推理流程下一个新请求进来先跑 Prefill全 Prompt 的 K/V 全部算一次然后进入 Decode每步算一个新 Token。如果 System Prompt 有 500 Token、用户输入 100 TokenPrefill 跑了 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 的命中流程 请求 1Prompt [SYS_500] [USER_100] → Prefill 全部 600 Token → 缓存 [SYS_500] 的 KV → hash(SYS_500) → Cache 条目 请求 2Prompt [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 CacheCANN 的 Prompt Cache 实现在 Runtime 层不在应用层。好处是跟 NPU 显存管理和 HCCL 通信直接打通不用在 Host 和 Device 之间搬 Cache 数据。Cache 维护逻辑每个 Prefix 用 Token 序列的 hash 做键存在 NPU 显存里不搬回 CPU。新请求查 Cache——有命中就跳过对应 Prefill未命中就完整 Prefill 后把 Prefix 写入 Cache。Cache 满了走 LRU 淘汰——最久没被命中的条目被清除释放显存。# Prompt Cache 管理——Runtime 侧简化逻辑classPromptCache:def__init__(self,max_gb2):self.poolacl.rt.malloc(max_gb*1024**3)self.entries{}# {hash: {kv_offset, size, last_access}}deflookup(self,prefix_tokens):keyhash(tuple(prefix_tokens))ifkeyinself.entries:self.entries[key][last_access]now()returnself.entries[key][kv_offset]# NPU 显存地址returnNonedefinsert(self,prefix_tokens,kv_data):keyhash(tuple(prefix_tokens))offsetself.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_free256*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 约 12ms500100 Token每用户 10 轮 120ms Prefill 总时间。使用 Prompt Cache第一轮 600 Token Prefill12ms后 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 推理 RecipesRuntime 运行时ATB Transformer 加速库CANN 学习中心
http://www.gsyq.cn/news/1369868.html

相关文章:

  • 量子玻尔兹曼机:从量子统计力学到生成建模的工程实践
  • 金融级日志不可篡改承诺如何兑现?DeepSeek审计日志的SM3+区块链存证双模架构(含FISCO BCOS对接实测数据)
  • RCWA原理与meent实践:从傅里叶分析到超表面AI设计
  • 基于 Paxos 的 Harness 选主与故障转移
  • JMeter接口测试进阶:从功能验证到生产级性能工程
  • 软件可维护性评估工具对比:从代码行数到AI模型,谁更懂开发者?
  • LayerDivider:3分钟让单张插画变可编辑图层的AI魔法
  • 医疗AI公平性新挑战:交叉性视角如何重塑模型偏见认知
  • 【DeepSeek配额治理黄金标准】:基于127家客户生产环境数据提炼的配额分配SLO模型(含可落地YAML模板)
  • MD-Editor-V3编辑器快捷键查找替换:3个高效技巧提升文本处理效率
  • Unpaywall:5分钟快速安装,轻松解锁付费学术论文的实用指南
  • 踩过100+坑后,我终于搞懂了Redis+Scrapy分布式爬虫的核心原理
  • Hermes Agent工具接入Taotoken作为自定义模型源详细步骤
  • 终极指南:如何5分钟快速掌握MelonLoader游戏模组加载器
  • 如何为经典局域网游戏搭建IPX协议转换层
  • 10分钟掌握AI智能分层:LayerDivider让插画编辑变得简单高效
  • 数据不是石油,是稀土:被误读的具身智能数据竞赛
  • Windows上安装安卓应用的终极解决方案:APK安装器完整指南
  • 3分钟上手d2s-editor:暗黑破坏神2存档修改终极指南
  • 如何让旧iPhone重获新生:终极iOS系统降级与越狱指南
  • 如何3分钟实现网盘下载加速:LinkSwift直链解析工具终极指南
  • AI率总超标?2026年AI论文平台排行榜权威发布,一次过审不是梦!
  • 3步找回加密压缩包密码:开源工具帮你解决遗忘之痛
  • 如何在3分钟内让Chrome浏览器变身微信客户端:wechat-need-web插件完整指南
  • 如何通过SPT-AKI Profile Editor存档编辑器轻松掌控你的塔科夫离线体验
  • 【技术专题】Reloaded-II依赖循环与无限下载问题的系统性解决方案
  • 终极指南:如何使用WarcraftHelper彻底解决魔兽争霸3兼容性问题
  • 集群基础环境搭建(一)
  • Nacos CVE-2021-29442:服务发现接口未鉴权漏洞深度解析
  • 老旧建筑HVAC节能改造:基于ML-MPC物联网框架的实践