大模型应用技术系列(四): 为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信息,从而避免重新