导读
本文提出了KVShare,一种基于语义相似性的多用户键值(KV)缓存共享技术,旨在提升大语言模型(LLMs)和多模态大语言模型(MLLMs)的推理效率。针对现有前缀缓存(严格文本前缀匹配)和语义缓存(响应多样性损失)的局限性,KVShare通过语义对齐算法和差异编辑操作实现了细粒度的KV缓存重用。
在真实世界用户对话数据集上的实验表明,KVShare将KV缓存命中率提高了超过60%,同时保持了与全计算相当的输出质量(BLEU和Rouge-L指标没有显著下降)。该方法有效降低了GPU资源消耗,适用于具有重复 Query 的场景,如医疗和教育领域。
1 引言
近年来,大语言模型(LLMs)在人工智能领域极为流行。它们生成类似人类文本的能力使得它们在多个应用场景中得到了广泛应用,包括多模态理解和生成、对话系统、文本摘要、机器翻译、创意写作和教育。然而,运行LLMs需要大量的资源。训练过程涉及对大量数据进行处理的巨大计算负载,而推理则需要快速处理用户请求。GPU由于其并行计算性能至关重要。例如,部署一个1300亿参数的模型,使用fp16精度,需要大约31.2GB的GPU内存,单个80GB内存的NVIDIA A100 GPU可能不足以满足需求,对于具有许多用户的更大规模LLMs,通常需要多个GPU或GPU集群。
从广泛的应用场景视角来看,在医疗、教育、金融等领域,存在大量重复和相似文本(例如,体检报告、试卷),这些文本通常仅在关键数据上存在差异,如数值、个人信息和个性化信息(个人签名、考试答案)。正是这些关键信息的细微差异会导致大语言模型生成的输出产生显著变化。例如,在典型的医疗报告中,检查内容通常一致,只有最终的数值指标在医生的判断中起决定性作用。在批改试卷的过程中,教师仅考虑根据学生答案的质量给予评分,通常不会反复阅读试卷上的问题。如果作者广泛使用大语言模型来完成各种任务,将会有大量语义和文本上相似的需求,作者需要一种技术来提高大语言模型对语义和文本上相似请求的计算效率。
近年来,一些用于提升大语言模型(LLM)响应效率的技术正在发展。其中典型的包括语义缓存技术和上下文缓存技术。语义缓存会导致用户从LLM收到的响应多样性降低。现有的前缀上下文缓存技术严格依赖于精确的前缀文本匹配,而Cacheblend、Epic等则更适合RAG场景。
语义缓存主要实现了对具有相同语义的问题的直接返回LLM的回答。上下文缓存技术主要通过复用相同文本的KV缓存,来降低LLM在预填充阶段的GPU计算压力。
如图1所示,用户Elon正在使用大语言模型(LLM)来分析《冰与火之歌》中的主要角色Jon Snow的性格特征。另一位用户Nancy也在使用LLM来分析《红楼梦》中林黛玉的行人特征。从 Query 请求来看,Elon和Nancy使用了相似的 Prompt 词。进一步观察文本内容,他们 Prompt 词之间的唯一区别在于关键角色的名字、书籍的名字以及响应中的单词数量。然而,对于Prefix Cache技术,它只能缓存两个文本的共同前缀部分。而对于CacheBlend等类似技术,它们无法处理类似的文本请求,因为它们更适合预先缓存大量文本的RAG场景。因此,如果作者能够正确处理和计算类似 Query 中不同和差异部分的KV Cache,那么作者可以将上下文缓存技术的应用场景扩展到更广泛的范围。
对于多模态大型模型,当用户的问题在内容和表达上相似,且涉及的多模态信息(如图像和音频)及其组合相同时,KV缓存的重用是可行的。在智能客服场景中,例如,如果多个用户询问手机的造型设计并上传相同角度的手机图片,为第一个用户 Query 计算出的KV缓存可以直接用于后续的相同 Query 。
因此,本文主要关注如何通过在多个LLM和MLLM的Prompt Level 进行语义识别,以更细粒度地重用过去的KV Cache,从而最大化LLM的响应速度,并减少GPU资源的使用,而不需要用户的参与。作者提出了一种用户感知的多人KV Cache共享技术。它通过语义分析Prompt,实现了更高效和准确的KV Cache,同时不影响LLM的输出准确性。作者称之为KVShare。
KVShare主要解决以下问题:
(1) 如何高效且准确地从语义层面识别 Prompt 词之间的相似性?
(2) 如何在不影响LLM输出准确性的情况下重用KV缓存?
(3) 如何调度和管理大规模的KV缓存和 Prompt ?
2 相关工作
2.1 长短时记忆语言模型(LLM)与多长时记忆语言模型(MLLM)
大语言模型(LLMs)是基于深度学习的人工智能模型。它们在大量文本数据上训练,能够理解和生成自然语言,处理各种语言任务,如文本生成、问答、翻译和摘要。例如,GPT-3、ChatGPT和Llama。多模态大语言模型(MLLMs)是LLMs的扩展。它们不仅能处理文本,还能接收、推理和生成多种模态(如图像、音频和视频)的信息,并输出其他模态的文本或内容。例如,GPT-4o可以处理图像和音频输入并生成文本响应。
在Transformer架构中,KV缓存用于存储由注意力机制计算出的 Key-Value 向量,以加速模型推理过程。在生成下一个 Token 时,模型无需重新计算已生成 Token 的注意力,可以直接从KV缓存中获取相应的 Key-Value 向量,减少计算量和推理时间。LLMs和MLLMs的KV缓存机制在基本目的上是一致的,即加速模型推理过程并显著提高模型的运行效率。两者都基于Transformer架构中的注意力机制。通过使用缓存存储和重用已计算出的 Key-Value 向量,可以避免每次推理过程中的重复注意力计算。尽管MLLMs面临数据格式转换、存储和融合策略等复杂问题,但如果设计出一套通用的 Key-Value 向量存储和检索机制,能够适应不同的数据格式,将多模态数据统一转换为适合缓存处理的格式,同时优化融合策略以使其能够处理文本和其他模态数据的 Key-Value 向量融合,那么就有可能将相同的KV缓存重用技术应用于LLMs和MLLMs。通过统一的缓存管理和计算逻辑,可以降低开发和维护成本,并提高模型的整体性能。
2.2 上下文缓存
在追求提升大语言模型(LLMs)的响应速度的过程中,已经提出了几种显著的方法。vLLM引入了一种策略,即分配一定量的内存来存储系统 Prompt 的关 Key-Value (KV)缓存。这种机制旨在加速LLM的响应,因为它使模型能够快速访问与这些 Prompt 相关的预计算信息。另一方面,SGLang设计了RadixAttention方法。通过利用前缀树数据结构,RadixAttention可以高效地匹配KV缓存,从而在推理过程中快速检索相关信息。此外,某些LLM云服务,如Kimi和Gemini,提供了应用程序编程接口(API)。这些API使用户能够上传文本并预先存储KV缓存,从而加速LLM在对话中的计算速度。总体而言,这些努力有效地降低了LLM服务的首次Token(TTFT)响应时间,提升了整体用户体验。然而,之前的Prefix缓存技术受限于其对严格前缀匹配的依赖。这种限制意味着输入序列中间或末尾的文本段无法匹配缓存,导致错过了优化机会。为了解决这些问题,CacheBlend和Epic等作品提出,用户输入可以被分割成多个文本块进行单独处理。随后,只需要重新计算一小部分Token。这种方法不仅解决了上下文位置顺序的问题,还保持了LLM的输出准确性,为优化LLM推理提供了一个更加灵活和高效的解决方案。
2.3 语义缓存
GPTCache[2]通过嵌入算法将 Query 转换为嵌入表示,借助向量存储进行相似性搜索,并采用模块化设计,涵盖LLM Adapter 和预处理程序等多个组件,支持多种数据存储和处理方法。它主要解决在调用API应用大语言模型时,成本高、响应时间长、可扩展性差和可用性低等问题。然而,它也存在一些缺点。例如,嵌入模型的选择对缓存效果有显著影响,缓存命中率有限。
GPT语义缓存[9]旨在解决大语言模型(LLMs)中频繁调用API导致的高计算成本和延迟问题,尤其是在处理重复 Query 时的低效。研究行人提出了GPT语义缓存方法。该方法将用户 Query 转换为数值嵌入表示,并存储在内存缓存(Redis)中,并使用近似最近邻(ANN)技术进行相似度搜索。如果找到语义相似的 Query ,则直接返回预先生成的响应,避免对LLM进行重复的API调用。该工作的创新之处在于采用了语义嵌入缓存机制,有效降低了运营成本,提高了响应速度,并支持多种嵌入模型,具有灵活性和可扩展性。然而,这种方法也存在一些问题。例如,固定的相似度阈值(0.8)不能适用于所有场景,处理更复杂和多样化的 Query 时,缓存命中率会下降。维护大规模数据集的ANN索引会带来计算开销,可能导致延迟和一致性问题的出现。依赖TTL进行缓存管理可能无法处理快速变化的数据,并且难以处理与上下文相关的多轮交互。
3 动机
3.1 通过语义相似性重用 KV 缓存:机遇
如图2所示,在现实世界的人类-大语言模型对话数据集中,对话中是否存在许多相似文本内容?在WildChat-1M[14]中,最多有的对话至少包含一个其他相似 Prompt 内容。例如,“Redo that answer, but this time, be concise”和“Redo that answer, but this time, it should be concise”;“List 1oo Fan-Made Powerful sCP God Transformations for Enoch Chandler… but maintains complete control over it.”和“List 1oo Fan-Made Powerful Spider-Mans God Transformations for Enoch Chandler… but maintains complete control over it”。不同的用户请求可能使用不同的措辞风格,但具有相似的 Prompt ,或者可能存在词语的细微变化。
语义相似度的匹配可以以更细粒度的形式影响LLM或MLLM的KV缓存。在Transformer模型中,每个 Token 将在自注意力中生成一对kv,这可以加速后续 Token 的生成。作者可以重用 Prompt 中相同 Token 的kv缓存,并重新计算 Prompt 中不同 Token 的kv缓存。这可以结合语义缓存和上下文缓存的技术特性。LLM的响应速度得到提升,输出质量也能保持创造性和多样性。
3.2 当前上下文缓存为何低效?
两种常见的LLM推理服务系统,vLLM[6]和SGLang[16],都内置了Prefix Cache技术,允许某些请求重用具有相同前缀的先前请求的KV Cache。LLM可以通过KV Cache减少Prefill阶段的计算开销。一方面,它缓解了服务提供商的GPU资源压力,同时使用户能够更快地获得LLM响应。然而,Prefix Cache的缺点也非常明显。当不同请求的文本相同部分不在非常开头时,Prefix Cache将失败,无法命中任何token的KV。
Cacheblend[12]和Epic[5]指出,在RAG中计算前缀缓存会导致显著的性能下降,因为RAG会将来自不同上下文文本段组合起来提供给LLM以帮助回答问题。这可以有效缓解LLM的幻觉并提高答案质量。CacheBlend和其他研究工作发现,对应于不同上下文文本段的关键缓存具有不同的位置编码,并且段之间的键值对缺乏交叉注意力。CacheBlend、Epic等通过选择一些 Token 重新计算 Key和Value 来恢复交叉注意力,从而确保LLM的答案准确性。同时,由于这种显式上下文需要用户手动上传未来将重复使用的文本以进行预缓存,这降低了用户的积极性。现有的显式CC工作也没有考虑多用户请求场景。例如,在CacheBlend中,多个用户上传了相同或相似的上下文,但CacheBlend和EPIC没有考虑用户之间相同上下文的复用。
近期出现的语义缓存技术,如GPTCache[2],可以通过检查 Prompt (文本、图像、音频)之间的相似度来确定是使用缓存响应还是调用LLM API重新计算响应。这项技术可以有效减少对LLM API的调用次数,降低用户提问的成本,并提高响应速度。从LLM的输出质量来看,这会导致所有用户的相同 Query 得到相同的结果,从而丧失了答案的多样性和创造性。在写作、翻译和搜索等场景中,这项技术反而产生了负面影响。
4 KV共享
4.1 概述
作者提出了KVShare方法。如图所示,该方法首先检查用户的实际请求,选择几个最相似的请求,通过基于DELTA Tree和编辑操作的运算确定最相似的请求,然后选择最相似请求的KV Cache进行计算。为确保结果的正确性,KVShare提出了KV Editor机制。通过向KV Cache添加占位符张量,将最相似请求的KV Cache语义与实际用户请求对齐。最后,通过PartialAttention的计算获得正确的LLM输出。
4.2 KV编辑器
如何找到与用户请求最相似的文字片段?作者受到了RAG应用(Retrieval-Augmented Generation)的启发。在RAG系统中,针对用户请求的相关内容会在向量数据库中进行搜索,并将其拼接至用户请求的上下文中。通过这种额外的上下文信息,LLM(大语言模型)输出的内容可以更加符合事实。作者将过去的请求和KV缓存存储在向量数据库中。作者使用文本嵌入模型将用户的实际请求转换为向量信息,然后 Query 向量数据库以找到最接近的文字内容(作者简单称之为相似请求)。作者将为相似请求计算的KV缓存作为实际请求的预-KV缓存。
直接参与相似请求的KV缓存到实际请求的计算中会导致LLM输出错误。如图1所示,如果作者把Elon的请求视为实际请求,Nancy的请求视为相似请求。尽管它们的内容非常相似,Elon想要获取《冰与火之歌》中琼恩·雪诺的信息,而Nancy的KV缓存中只包含林黛玉的信息。显然,LLM的输出将会是错误的。
作者提出了KV编辑器。它能够语义对齐相似请求的KV缓存与真实请求的缓存。其核心是修改相似请求相关的KV缓存,将其语义对齐到真实请求,以获取LLM生成正确响应所需的真实KV缓存。首先,KV编辑器将 Query 向量数据库以获取N个相似请求。作者设计了一种语义对齐算法,从这些相似请求中提取与真实请求中相同的或相似的 Token 。然后,KV编辑器将结合并修改这些 Token 的KV缓存,包括插入新 Token 、删除旧 Token 和替换 Token 。基于这些编辑操作,作者可以修改相似键值(KV)缓存中的相应位置,插入新添加 Token 的键值对,删除已删除 Token 的键值对,以及替换替换 Token 的键值对。作者将这部分操作称为语义对齐。
这提出了新的关键问题。新增和替换的 Token 的关键值对从何而来,以及为什么结果可以正确计算?作者将新增和替换的 Token 的关键值对视为占位符张量,作者将在后续计算中计算这些实际的关键值对。如果有更多新增和替换的 Token ,那么需要随后计算更多 Token 。因此,作者的KV编辑器算法需要适当地选择相似请求,以避免计算量的增加。
作者设计了一种DELTA树结构来记录不同请求之间需要修改的 Token (删除、添加、替换)操作,以及对应添加或替换操作计算出的KV缓存位置。差异树只需记录操作和位置,无需反复存储某些结构,这与一些GPU内存管理方案(如PageAttention)不冲突。如图所示,差异树的优势在于作者可以快速找到最有效的KV编辑解决方案。例如,从节点req1修改到节点req3需要添加15个 Token ,而从req1修改到req2则需要10个 Token 。如果KV编辑器选择从req2到req3的解决方案,作者只需计算5个 Token 的添加。此外,当GPU内存使用过高时,作者可以选择将存储在中间节点的KV缓存驱逐到CPU或通过合并过长的编辑操作链直接清理。
4.3 部分注意力
如图3所示,部分注意力机制在LLM的不同层中选择性计算某些 Token 的Q、K、V张量。由于KV编辑器的计算,在预填充阶段,实际请求的KV缓存中存在一些占位符张量(键、值)。部分注意力机制只能计算这些占位符KV张量,以确保注意力计算结果的正确性。
如何确保正确计算注意力?当KV缓存中存在新增或替换的token时,作者认为这些token对LLM的输出影响最大。这些token的Q、K、V需要进行计算。这些token通过与其他可复用token的KV计算,以获得最终的交叉注意力结果。
5 实验
在本节中,作者首先在第5.1节讨论了作者的实验设置。在第5.2节中,作者不仅展示了KVshare在真实用户对话数据集上实现了高KV缓存命中率,而且还表明KVshare在各个数据集上保持了良好的准确性。此外,作者在第5.3节中将KVshare与现有的最先进的KV缓存匹配方法进行了比较,作者的工作在首次 Token 时间(TTFT)和准确性之间取得了良好的平衡。
5.1 实验设置
模型与硬件设置。作者在Qwen2.5 7B[11]和Llama3-8B[1]上评估KVShare。作者的端到端实验在2块NVIDIA L40S GPU和512GB RAM上运行。
数据集。作者的评估涵盖了WMT19[3]和SAMSum[4]。作者选择这些数据集的原因是作者关注真实世界用户对话和 Prompt 复用场景。WMT19[3]主要评估LLM的多语言能力,通过机器翻译进行。它主要使用BLEU指标来衡量翻译质量。SAMSum[4]数据集包含约16k条带有摘要的短信风格对话,由英语流利的语言学家创建,以反映多样化的真实生活对话风格。它要求LLM对对话输出摘要。其目的是测试语言模型的少样本学习能力。
指标。作者的评估指标主要分为性能指标和质量指标。为了衡量生成质量,作者采用了以下标准指标:使用BLEU分数[8]来评估WMT19[3],使用Rouge-L分数[7]来评估SAMSum[4]。至于性能指标,作者采用了首次输出 Token 时间(TTFT)和KV缓存命中率。首次输出 Token 时间(TTFT)指的是第一个 Token 的延迟,即从输入到第一个 Token 输出的延迟。在在线流媒体应用中,TTFT是最关键的指标,因为它决定了用户体验。KV缓存命中率表示在所有用户请求中,成功命中系统提供的KV缓存的请求比例。KV缓存命中率越高,系统的缓存效果越好,并且可以有效减轻GPU的运行压力。
Baseline 。作者将KVShare与之前的KV缓存重用方法进行比较。所有方法在程度不同的范围内重用KV缓存。完全KV重计算方法是将原始文本输入到LLM作为输入。LLM在预填充期间计算所有 Token 的KV缓存。VLLM[6]使用前缀缓存技术。作者使用显式上下文缓存技术进行测试,主要采用CacheBlend[12]和
Epic[5]。此外,作者采用GPTCache[2]技术来比较作者的技术与语义缓存技术之间的性能。
5.2 质量与性能
KV缓存命中率。为了测试KVShare在真实用户对话中的有效性,作者对WildChat-1M [14]、ShareGPT-90K [10]和LMSYSChat-1M [15]进行了去重和过滤。结果,作者获得了高质量的实时对话请求,分别命名为WildChat-Similar、ShareGPT-Similar和LMSYSChat-Similar。如图4所示,当WildChat-Similar、ShareGPT-Similar和LMSYSChat-Similar中的用户对话连续提交给vllm时,使用kvshare机制可以有效地提高相似请求的kvcache命中率。KVShare机制使得在WildChat-Similar上,至少60%的请求且90%的token不需要重新计算。对于ShareGPT-Similar和LMSYSChat-Similar数据,比例分别超过50%和超过20%。
质量。为了测试KVShare是否能够有效确保LLM获得正确的计算结果,作者测试了基于Qwen2.5和LLama3架构的LLM,即Qwen2.5-7B和LLama3-8B。作者测试了三种 Baseline 方法。如表1所示,对于KVShare,它在保持准确率方面表现良好,与全计算和前缀缓存相比,没有出现显著的下降。至于GPTCache,由于它直接返回相似请求的响应而不进行重新计算,这导致在翻译和摘要任务中的准确率显著下降。
6 结论
作者提出了KVShare方法,该方法利用多用户请求之间的语义相关性来实现KV缓存的复用。KVShare有效地降低了LLM在服务期间对GPU的计算负载压力,使得KV缓存能够为高达60%的用户请求实现高效复用。同时,与PrefixCache相比,KVShare不会造成任何精度损失。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。