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

大模型推理框架vLLM 中的Prompt缓存实现原理

背景:为什么需要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.xdnf.cn/news/1290277.html

相关文章:

  • GitHub分支保护介绍(Branch Protection)(git分支保护)(通过设置规则和权限来限制对特定分支的操作的功能)
  • 嵌入式系统学习Day17(文件编程-库函数调用)
  • AuthController类讲解
  • SQL 合并两个时间段的销售数据:FULL OUTER JOIN + COALESCE
  • 测试环境下因网络环境变化导致集群无法正常使用解决办法
  • SQL注入学习笔记
  • LeetCode Day5 -- 栈、队列、堆
  • 前后端分离项目中Spring MVC的请求执行流程
  • 肖臻《区块链技术与应用》第十讲:深入解析硬分叉与软分叉
  • 用 Spring 思维快速上手 DDD——以 Kratos 为例的分层解读
  • provide()函数和inject()函数
  • 数据结构:后缀表达式:结合性 (Associativity) 与一元运算符 (Unary Operators)
  • ZKmall开源商城的容灾之道:多地域部署与故障切换如何守护电商系统
  • 21.Linux HTTPS服务
  • 【GESP】C++一级知识点之【集成开发环境】
  • 备战国赛算法讲解——马尔科夫链,2025国赛数学建模B题详细思路模型更新
  • UE5.3 C++ 动态多播实战总结
  • SQL 生成日期与产品的所有组合:CROSS JOIN(笛卡尔积)
  • JVM宝典
  • 每日五个pyecharts可视化图表-line:从入门到精通 (4)
  • 什么时候用WS(WebSocket),什么使用用SSE(Server-Sent Events)?
  • Pytest项目_day13(usefixture方法、params、ids)
  • 机器学习处理文本数据
  • linux 开机进入initramfs无法开机
  • 串口通信学习
  • 数据分析专栏记录之 -基础数学与统计知识
  • Spring-Cache 缓存数据
  • windows git安装步骤
  • XGBoost 的适用场景以及与 CNN、LSTM 的区别
  • 网络协议——HTTP协议