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

大模型应用技术系列(四): 为RAG应用设计的缓存RAGCache

前言

        在之前的文章中,我们已经了解过一些Cache相关的内容:比如KVCache、PageAttention、GPTCache等。这些Cache基于推理特点或业务特点对关键数据进行Cache, 从而加速端到端应用的生成过程。本文将介绍一个最新的Cache:RAGCache,它是针对RAG应用的特点设计了一套分层的缓存系统,通过它可以提升应用的吞吐量,加速了应用的处理。

背景

RAG 基本流程

        为了最小成本的减少模型幻觉,给模型注入新的知识,业界目前最通用的方法是使用RAG技术来对模型训练时未学习的知识进行注入。大致流程如下(更详细的介绍参考之前的文章):

LLM 推理过程

        LLM的推导一般分为两个步骤:prefill和decode。在prefill阶段,会对输入的token计算KV tensor(如图所示, K matrix和V matrix中的每个行向量表示一个token的语义表示)。之后,在decode阶段,会根据之前的KV向量信息不断推导next token的。可以看到,在prefill阶段是非常耗时的,因为他需要为请求中的所有token生成向量。请求越长,处理时间越长。尤其在RAG的场景下,会携带外部检索到的更多的文档信息,进一步增大了处理时间。

        由于新知识注入,会将原问题进行扩充,从而导致LLM生成时引入长序列生成问题(序列越长,生成的处理时间越长),导致生成答案时的延迟增加。

优化思路

        生成步骤的主要耗时主要在attention模块中处理长序列的KV tensor中,那一个自然而然的优化想法就是:把之前检索过的文档的KV tensor的信息缓存下来。如果cache命中了,那么直接使用cache中的kv tensor信息,从而避免重新


http://www.kler.cn/a/453216.html

相关文章:

  • 机器视觉检测相机基础知识 | 颜色 | 光源 | 镜头 | 分辨率 / 精度 / 公差
  • 7.C语言 宏(Macro) 宏定义,宏函数
  • 在 Java 项目中集成和使用 dl4j 实现通过扫描图片识别快递单信息
  • vscode插件更新特别慢的问题
  • 构建一个rust生产应用读书笔记7-确认邮件2
  • leetcode-80.删除有序数组的重复项II-day12
  • 【嵌入式C语言】指针数组结构体
  • Spring Boot项目开发常见问题及解决方案(下)
  • 《战神:诸神黄昏》游戏运行时提示mss32.dll丢失怎么办?
  • 【LeetCode】LCR 175.计算二叉树的深度
  • Halcon例程代码解读:安全环检测(附源码|图像下载链接)
  • windows nmake 安装openssl
  • Java 中压缩图片并应用 EXIF 旋转信息
  • .NET能做什么?全面解析.NET的应用领域
  • MPLS小实验:利用LDP动态建立LSP
  • c# 线程 AutoResetEvent 的Set()函数多次调用
  • JavaWeb 开发基础入门
  • VIVO C++开发面试题及参考答案
  • 穷举vs暴搜vs深搜vs回溯vs剪枝系列一>电话号码的字母组合
  • 一文大白话讲清楚javascript单点登录
  • Vue.js 高级组件开发:设计模式与实践
  • Huggingface下载模型的几种方式
  • 文件解析漏洞中间件(iis和Apache)
  • 01-linux基础命令
  • Android 13 非 Launcher 应用开机启动:通过监听开机广播实现
  • linux下搭建lamp环境(dvwa)