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

CANN-昇腾NPU-前缀缓存-PrefixCaching怎么让相同prompt零计算

很多推理场景的 prompt 前缀是固定的系统提示词、角色设定、Few-shot 示例。PrefixCaching 把前缀的 KV Cache 缓存起来相同前缀的请求直接复用省掉 Prefill 计算。CANN 的 ATB 从 8.5 版本开始原生支持 PrefixCaching。原理普通推理请求1: [系统提示 500 token 用户输入 50 token] → Prefill 550 token → Decode 请求2: [系统提示 500 token 用户输入 80 token] → Prefill 580 token → Decode重复计算前 500 tokenPrefixCaching请求1: [系统提示 500 token 用户输入 50 token] → Prefill 550 token → 缓存前 500 token 的 KV 请求2: [系统提示 500 token 用户输入 80 token] → 只 Prefill 后 80 token复用前 500 token 的 KV前缀命中时Prefill 计算量从 580 token 降到 80 tokenTTFT 降 86%。ATB 的 PrefixCaching 配置fromatbimportLLM,PrefixCachingConfig modelLLM(meta-llama/Llama-2-7b-hf,devicenpu:0,prefix_cachingPrefixCachingConfig(enableTrue,max_prefix_length4096,# 最大缓存前缀长度cache_capacity48,# KV Cache 显存上限GB))显式指定前缀最可靠的方式是显式告诉 ATB 哪部分是前缀system_prompt你是一个专业的AI助手请用中文回答问题。以下是几个示例\n示例1: ...\n示例2: ...# 把系统提示注册为前缀prefix_idmodel.register_prefix(system_prompt)# 推理时指定前缀 IDresultmodel.generate(请解释什么是昇腾NPU,prefix_idprefix_id,# 自动复用系统提示的 KV Cache)register_prefix只做一次 Prefill后续所有请求复用。自动前缀检测不显式指定前缀时ATB 自动检测公共前缀modelLLM(meta-llama/Llama-2-7b-hf,devicenpu:0,prefix_cachingPrefixCachingConfig(enableTrue,auto_detectTrue,# 自动检测公共前缀))# 这两个请求会自动复用公共前缀result1model.generate(系统你是AI助手\n用户什么是CANN)result2model.generate(系统你是AI助手\n用户什么是Ascend C)# 系统你是AI助手\n 是公共前缀只计算一次自动检测的原理对 prompt 做 token-level 的 hash 比对找到最长公共前缀。KV Cache 生命周期缓存的 KV Cache 需要管理生命周期# 注册前缀永久缓存直到手动释放prefix_idmodel.register_prefix(system_prompt)# 使用前缀resultmodel.generate(问题,prefix_idprefix_id)# 释放前缀显存不够时model.release_prefix(prefix_id)# LRU 策略自动淘汰最久未用的前缀modelLLM(model_id,prefix_cachingPrefixCachingConfig(enableTrue,eviction_policylru,# LRU 淘汰策略max_cached_prefixes64,# 最多缓存 64 个前缀))多轮对话的前缀复用多轮对话天然适合 PrefixCaching——每一轮都是在前一轮基础上追加轮次1: [系统提示 500 用户输入 50] → 缓存 550 token 轮次2: [系统提示 500 用户输入 50 模型回复 200 用户输入 60] → 复用前 550新增 260 轮次3: [系统提示 500 用户输入 50 模型回复 200 用户输入 60 模型回复 300 用户输入 40] → 复用前 810新增 340# ATB 自动处理多轮对话的前缀复用messages[{role:system,content:system_prompt},{role:user,content:什么是CANN},]# 每轮对话自动复用之前的 KV Cacheresult1model.chat(messages)messages.append({role:assistant,content:result1})messages.append({role:user,content:它和CUDA是什么关系})result2model.chat(messages)# 自动复用前缀实测效果Llama2-7BAtlas 800I A2系统提示 500 token场景TTFT (ms)Prefill 计算 (token)显存节省无 PrefixCaching1805500PrefixCaching命中255089%PrefixCaching未命中1805500500 token 前缀命中时TTFT 从 180ms 降到 25ms7 倍提速。显存预算PrefixCaching 的 KV Cache 占用显存。7B 模型4096 token 前缀KV Cache 大小 2 (KV) × num_layers × hidden_dim × seq_len × dtype_size 2 × 32 × 4096 × 4096 × 2 (bf16) 2 GB64GB 显存中缓存 10 个不同前缀 20GB。剩余 44GB 给 decode KV Cache还能服务约 20 个并发请求。PrefixCaching 是在线对话服务的关键优化。相同系统提示的请求只 Prefill 一次后续直接复用 KV Cache。ATB 8.5 原生支持TTFT 降 7 倍。显存预算要提前规划。仓库在这里https://atomgit.com/cann/ATB
http://www.zskr.cn/news/1383122.html

相关文章:

  • 中山南岸声学:23 年技术沉淀 定义汽车音响改装行业四大天花板 - 汽车音响改装
  • DeepSeek注释生成卡在v0.9.3?RAG增强+AST感知双引擎升级方案已上线,仅剩最后47个企业内测名额
  • day-006-列表入门
  • 界面好看又懂命理的AI软件?第三方深度观察数字玄学底座的视觉美学与算法硬实力
  • 新手必看:用Vulfocus在线靶场复现MACCMS RCE漏洞
  • Taotoken CLI工具使用指南,一键配置开发环境与多个AI工具
  • 从T-Board到L-Board:零遮挡面包板载板的设计与实战
  • 为什么大厂都不用XGBoost?聊聊背后的大坑
  • 程序员相亲,我说用AI写代码,对方以为我吹牛
  • 3. RNN及其变体
  • 缓存与数据库双写不一致问题及终极解决方案(高频面试题)
  • Joy-Con Toolkit深度解析:从手柄自定义到传感器校准的完整指南
  • Tomato-Novel-Downloader 终极指南:5步掌握智能小说下载与格式转换
  • PyAutoGUI图像识别翻车?手把手教你提升游戏自动化脚本的点击准确率
  • YOLOv8手势识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置)
  • 终极LaTeX转Word公式神器:3分钟让数学公式在Word中完美呈现
  • 如何用SMUDebugTool深度掌控你的AMD Ryzen处理器性能
  • 2026年静压式液位计国产品牌综合实力排名与深度选型指南 - 仪表品牌榜
  • claude code用户如何迁移到taotoken解决封号与token不足问题
  • Linux文件系统与权限超详解:inode、软硬链接、文件权限、用户组、底层原理
  • Python 入门教程系列
  • 告别手动更新!用Synopsys AXI Slave Agent的Memory模型,让你的验证环境自动响应读写事务
  • 企业内训材料生成场景下Taotoken多模型选型的实践
  • 巴中房屋渗漏与白蚁滋生全解析|本地气候通病成因、避坑要点与专业修缮方案 - 鲁顺
  • 2026述职报告工具横评:4款实用AI工具高效搞定职场述职
  • 创业团队如何借助Taotoken统一管理多个AI项目API成本
  • Spring Ai入门
  • 教育机构在AI课程实验中采用Taotoken管理学生用量
  • 写了一个广告拦截APP
  • Steam成就管理终极指南:5分钟学会修复游戏成就的简单方法