Stateful Large Language Model Serving with Pensieve

📄 arXiv: 2312.05516v3 📥 PDF

作者: Lingfan Yu, Jinkun Lin, Jinyang Li

分类: cs.LG, cs.DC

发布日期: 2023-12-09 (更新: 2024-10-07)

DOI: 10.1145/3689031.3696086


💡 一句话要点

Pensieve:一种用于多轮对话LLM服务的高效状态保持系统

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 大型语言模型服务 多轮对话 状态保持 缓存策略 PagedAttention GPU加速

📋 核心要点

  1. 现有LLM服务系统在多轮对话中重复处理历史记录,效率低下,成为性能瓶颈。
  2. Pensieve通过缓存先前处理过的历史记录来维护对话状态,避免重复计算,提升效率。
  3. Pensieve利用多层缓存和改进的PagedAttention内核,实验表明吞吐量提升显著,延迟降低。

📝 摘要(中文)

大型语言模型(LLM)如今非常流行,高效地服务它们至关重要。现有的LLM服务系统在请求之间是无状态的。因此,当LLM用于常见的多轮对话场景时,服务系统必须在每一轮处理不断增长的对话历史记录,导致重复处理。本文设计了Pensieve,一个针对多轮对话LLM服务优化的系统。Pensieve通过缓存先前处理过的历史记录来维护跨请求的对话状态,从而避免重复处理。Pensieve的多层缓存策略可以利用GPU和CPU内存来高效地存储和检索缓存数据。Pensieve还将最近的PagedAttention内核推广到支持多个输入token之间的注意力,其GPU缓存分布在非连续内存上。评估表明,Pensieve可以实现vLLM和TensorRT-LLM的1.14-3.0倍的吞吐量,并显著降低延迟。

🔬 方法详解

问题定义:现有的大型语言模型服务系统通常是无状态的,这意味着对于多轮对话,每次请求都需要重新处理整个对话历史。这种重复处理导致了大量的计算冗余,显著降低了系统的吞吐量和增加了延迟,尤其是在对话轮数增加时,问题更加严重。因此,需要一种能够有效利用历史信息,避免重复计算的服务系统。

核心思路:Pensieve的核心思路是通过维护对话状态来避免重复处理历史记录。具体来说,Pensieve缓存先前处理过的对话历史,并在后续请求中重用这些缓存的信息。这样,系统只需要处理新的输入token,而无需重新处理整个对话历史,从而显著减少了计算量。

技术框架:Pensieve的整体架构包含以下几个主要模块:1) 请求接收模块:接收用户的请求,包括当前轮的输入和对话历史的引用。2) 缓存管理模块:负责管理缓存,包括缓存的存储、检索和更新。Pensieve采用多层缓存策略,同时利用GPU和CPU内存来存储缓存数据。3) PagedAttention内核扩展模块:扩展了PagedAttention内核,以支持多个输入token之间的注意力计算,并允许GPU缓存分布在非连续内存上。4) LLM推理模块:使用缓存的历史信息和新的输入token进行LLM推理,生成当前轮的回复。5) 响应返回模块:将生成的回复返回给用户。

关键创新:Pensieve的关键创新在于其状态保持机制和多层缓存策略。状态保持机制通过缓存历史信息避免了重复计算,显著提高了效率。多层缓存策略充分利用了GPU和CPU内存,实现了高效的缓存存储和检索。此外,对PagedAttention内核的扩展使其能够更好地支持多轮对话场景。

关键设计:Pensieve的关键设计包括:1) 多层缓存结构:使用GPU内存作为高速缓存,CPU内存作为二级缓存,根据访问频率和数据大小进行动态调整。2) 缓存淘汰策略:采用LRU(Least Recently Used)等策略来淘汰不常用的缓存数据,保证缓存的有效性。3) PagedAttention内核扩展:允许注意力计算在多个输入token之间进行,并支持GPU缓存分布在非连续内存上,提高了GPU内存的利用率。4) 缓存一致性维护:确保缓存中的历史信息与实际的对话历史保持一致,避免出现错误。

📊 实验亮点

Pensieve的实验结果表明,其性能优于现有的LLM服务系统,如vLLM和TensorRT-LLM。具体来说,Pensieve可以实现1.14-3.0倍的吞吐量提升,并显著降低延迟。这些结果证明了Pensieve的状态保持机制和多层缓存策略的有效性,使其成为多轮对话LLM服务的一个有竞争力的解决方案。

🎯 应用场景

Pensieve适用于各种需要多轮对话的大型语言模型服务场景,例如聊天机器人、智能客服、AI助手等。通过提高LLM服务的吞吐量和降低延迟,Pensieve可以改善用户体验,并降低服务成本。该研究的成果可以推动LLM在实际应用中的更广泛部署,并促进人机交互技术的进一步发展。

📄 摘要(原文)

Large Language Models (LLMs) are wildly popular today and it is important to serve them efficiently. Existing LLM serving systems are stateless across requests. Consequently, when LLMs are used in the common setting of multi-turn conversations, a growing log of the conversation history must be processed alongside any request by the serving system at each turn, resulting in repeated processing. In this paper, we design $Pensieve$, a system optimized for multi-turn conversation LLM serving. $Pensieve$ maintains the conversation state across requests by caching previously processed history to avoid duplicate processing. $Pensieve$'s multi-tier caching strategy can utilize both GPU and CPU memory to efficiently store and retrieve cached data. $Pensieve$ also generalizes the recent PagedAttention kernel to support attention between multiple input tokens with a GPU cache spread over non-contiguous memory. Our evaluation shows that $Pensieve$ can achieve $1.14$-$3.0\times$ the throughput of vLLM and TensorRT-LLM and significantly reduce latency.