背景:为什么需要Prompt缓存模块?

在大模型问答多轮对话应用场景中,不同请求的 Prompt 往往有相同的前缀,比如:

第一次问答:

你是一名专业的电子产品客服,负责回答客户关于手机产品的咨询。请根据以下问题提供准确、友好的回答。
当前产品库支持查询的品牌包括:Apple、华为、小米、三星。用户问题:
iPhone 16 的电池容量是多少?
模型回答:
iPhone 16 的电池容量为 3227 mAh。

第二次问答:

(保留之前所有上下文)
你是一名专业的电子产品客服...(同上)用户问题:
iPhone 16 的电池容量是多少?
模型回答:
iPhone 16 的电池容量为 3227 mAh.用户新问题:
那它的快充功率呢?
模型回答:
iPhone 16 支持 20W 快充。

两轮问答请求中,系统预设的客服角色描述、产品库范围等前缀内容完全一致,这就会导致模型推理流程:

  • 每次都从头计算整个 Prompt 的 attention

  • 重复计算前缀浪费算力

Prefix Cache 通过缓存这个已计算好的 Prompt 编码结果(KV 对)直接复用,前面的结果会存储在GPU缓存中,生成时只算后半部分。

这里说的Prompt缓存实际是vLLM中Prefix Cache的实现

vLLM 的 Prefix Cache 原理

vLLM 中的 Prefix Cache 是基于 KV Cache 的静态共享机制,主要思路:

  1. 前缀哈希(Prefix Hashing)

    • 将 Prompt 转成 token 序列后计算哈希值

    • 相同 token 序列的哈希值相同

    • 哈希值作为缓存 key

  2. 存储 KV 对(Key/Value Tensors)

    • KV 对是 attention 层计算后的结果

    • 存在 GPU 显存中(或部分放在 CPU 内存)

  3. 复用机制(Reuse)

    • 当新的请求到来时,如果前缀哈希匹配,就直接加载已有的 KV 对

    • 只需对新增的 token 做计算

  4. 分页管理(PagedAttention 兼容)

    • Prefix Cache 依旧用 page(block)方式管理

    • 可与普通 KV Cache 混用,不影响批处理

工作流程:

以一次批处理请求为例:

Prefill 阶段

  1. Tokenizer 将输入文本转成 token 序列

  2. 对序列做哈希(如 MurmurHash)

  3. 检查哈希表:

    • 命中:直接取 KV 对 → 进入生成阶段

    • 未命中:计算 KV 对并存入哈希表

Decode 阶段

  • 使用已缓存的 KV 对作为上下文

  • 新 token 持续追加到 KV Cache

这样的好处是可以减少重复计算:多个请求共享相同前缀的计算结果,同时加速批处理:常见系统提示(system prompt)复用率很高

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93067.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93067.shtml
英文地址,请注明出处:http://en.pswp.cn/web/93067.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python之Django使用技巧(附视频教程)

概述 Django 是一个高级的 Python Web 框架,遵循 “batteries-included”(内置电池)理念,提供了构建 Web 应用所需的大部分组件,让开发者可以专注于业务逻辑而不是底层细节。视频教程:https://pan.quark.cn…

sqli-labs通关笔记-第44关 POST字符型堆叠注入(单引号闭合 手工注入+脚本注入3种方法)

目录 一、堆叠注入 二、源码分析 1、代码审计 2、SQL注入安全性分析 三、堆叠手注法 1、进入靶场 2、正确用户名密码登录 3、堆叠注入 4、查看数据库 四、联合手注法 1、获取列数 2、确认回显位 3、获取数据库名 4、获取表名 5、获取列名 6、获取字段 7、总结…

从深度伪造到深度信任:AI安全的三场攻防战

前言当大模型开始“睁眼”看世界,伪造者也开始“闭眼”造世界。2025 WAIC释放出的信号很明确:没有AI安全底座,就没有产业智能化的高楼。WAIC 把“安全”摆在与“创新”同等重要的位置,形成了“1 份共识框架+2 份重磅报…

【C++】哈希的应用:位图和布隆过滤器

目录 一、位图 1.1 位图的概念 1.2 位图的实现 1.3 位图的应用 二、布隆过滤器 2.1 布隆过滤器的提出 2.2 布隆过滤器的概念 2.3 布隆过滤器的插入和查找 2.4 布隆过滤器的删除 2.5 布隆过滤器的优点 2.6 布隆过滤器的缺点 一、位图 1.1 位图的概念 1. 面试题 给4…

C语言:指针(4)

1. 回调函数回调函数就是指通过函数指针调用的函数。如果将函数指针作为参数传递给另一个函数,另一个函数根据指针来调这个函数,那么被调用的函数就是回调函数。回调函数不是由这个函数的实现方直接调用,而是在特定的条件下由另一方调用的。例…

vue--video使用动态src时,视频不更新

问题描述 在 Vue项目中&#xff0c;尝试动态更新 标签的 元素 src 属性来切换视频时&#xff0c;遇到了一个问题&#xff1a;即使 src 已更改&#xff0c;浏览器仍不显示视频。 <template><video width"100%" height"100%" controlspause"…

计算机视觉--opencv(代码详细教程)(一)

在计算机视觉的广袤领域中&#xff0c;OpenCV 是一座极为关键的里程碑。无论是在前沿的学术研究&#xff0c;还是在蓬勃发展的工业界&#xff0c;OpenCV 凭借其强大的功能与高效的性能&#xff0c;为开发者提供了丰富的图像处理和计算机视觉算法&#xff0c;助力无数项目落地。…

物联网通讯协议-MQTT、Modbus、OPC

引言在物联网迅速发展的今天&#xff0c;设备间的通信协议扮演着至关重要的角色。它们是不同设备、系统之间实现数据交换的桥梁。本文将详细介绍三种在物联网领域广泛应用的通讯协议——MQTT、Modbus和OPC&#xff0c;包括它们的基础概念、特点及在C#中的实现方法。一、MQTT协议…

牛客周赛R104 小红的矩阵不动点

D-小红的矩阵不动点_牛客周赛 Round 104 赛时这道题卡了一段时间&#xff0c;赛时代码如下&#xff1a; #include<bits/stdc.h> using namespace std; int ans,h; int a[505][505]; signed main(){ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int n,m;cin>…

Rust面试题及详细答案120道(19-26)-- 所有权与借用

《前后端面试题》专栏集合了前后端各个知识模块的面试题&#xff0c;包括html&#xff0c;javascript&#xff0c;css&#xff0c;vue&#xff0c;react&#xff0c;java&#xff0c;Openlayers&#xff0c;leaflet&#xff0c;cesium&#xff0c;mapboxGL&#xff0c;threejs&…

Jenkins + SonarQube 从原理到实战三:SonarQube 打通 Windows AD(LDAP)认证与踩坑记录

前言 在前两篇文章中&#xff0c;已经介绍了 SonarQube 的部署 以及 通过 sonar-cxx 插件实现 C/C 代码扫描。 本篇将重点讲 如何让 SonarQube 对接 Windows AD&#xff08;LDAP&#xff09;&#xff0c;实现域账号登录和基于 AD 组的权限管理。 一、背景与需求分析 需求分析…

[AI React Web] 包与依赖管理 | `axios`库 | `framer-motion`库

第七章&#xff1a;包与依赖管理 在我们使用open-lovable的旅程中&#xff0c;已经探索了它如何管理对话状态&#xff08;第一章&#xff1a;对话状态管理&#xff09;、将创意转化为可运行代码&#xff08;第二章&#xff1a;AI代码生成管道&#xff09;、如何在安全的虚拟环…

PanSou 一款开源网盘搜索项目,集成前后端,一键部署,开箱即用

PanSou 网盘搜索API PanSou是一个高性能的网盘资源搜索API服务&#xff0c;支持TG搜索和自定义插件搜索。系统设计以性能和可扩展性为核心&#xff0c;支持并发搜索、结果智能排序和网盘类型分类。 项目地址&#xff1a;https://github.com/fish2018/pansou 特性&#xff08…

java爬虫实战

本人目前在做鱼皮的《智能协同云图库》&#xff0c;涉及到了以图搜图图片爬取&#xff0c;虽然以前有爬过图片&#xff0c;但是用的都是别人现成的代码&#xff0c;不怎么去理解为什么要这样做&#xff0c;这次有在尝试理解每一个步骤。本人基础极差&#xff0c;属于一点基础也…

深入详解C语言的循环结构:while循环、do-while循环、for循环,结合实例,讲透C语言的循环结构

&#x1f525;个人主页&#xff1a;艾莉丝努力练剑 ❄专栏传送门&#xff1a;《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题、C/C干货分享&学习过程记录 &#x1f349;学习方向&#xff1a;C/C方向 ⭐️人生格言&#xff1a;为天地立心&#…

北京-4年功能测试2年空窗-报培训班学测开-第七十四天-线下面试-聊的很满意但可能有风险-等信吧

今天没去教室&#xff0c;因为下午有个线下面试。其实是可以去教室的&#xff0c;但我实在太焦虑了&#xff0c;我觉得去了教室我心情会更不好&#xff0c;什么都干不下去&#xff0c;所以我选择不去早上依旧是带着满满焦虑起来的&#xff0c;会觉得自己的一切都不令自己满意&a…

在ubuntu服务器下安装cuda和cudnn(笔记)

目录 0 引言 1 相关环境查询 2 安装cuda 2.1 下载并安装 2.2 安装选项配置 2.3 验证安装 3 安装cudnn 3.1 下载 3.2 解压 3.3 删除旧版本 cuDNN 3.4 复制新文件到 CUDA 目录 3.5 设置文件权限 3.6 创建软链接 3.7 验证安装 0 引言 我在使用服务器的cuda11.8的时…

docker安装centos

docker库地址https://hub.docker.com/ 尝试使用centos7试了几次超时 换了个版本就可以了 docker pull centos:centos7.9.2009有时候需要更新资源地址 可以使用 vim /etc/docker/daemon.json配置其他资源地址 {"registry-mirrors": ["http://hub-mirror.c.163…

内容索引之word转md工具 - markitdown

切分文档构建RAG库过程中&#xff0c;langchain、llamaindex更期望处理latex、md类带有显式结构文档。 langchain、llamaindex切分word&#xff0c;有可能将段落中间截断&#xff0c;导致切分后的块语义不完整。 所以&#xff0c;需要先将word转化为md格式&#xff0c;然后再…

MaxKB+合合信息TextIn:通过API实现PDF扫描件的文档审核

上海合合信息科技股份有限公司&#xff08;以下简称为合合信息&#xff09;是一家深耕人工智能、OCR&#xff08;光学字符识别&#xff09;及商业大数据技术领域的科技企业。该公司拥有领先的智能文字识别技术&#xff0c;其名片全能王&#xff08;CamCard&#xff09;、扫描全…