一种LLM推理调优技术:采用KV缓存重计算来优化CPU-GPU交互

大型语言模型(Large Language Models,简称LLMs)正引领着当今科研和开发领域的重大飞跃。研究目标和方法论经历了显著的转变,越来越倾向于以LLMs为核心的方法。然而,这些模型往往伴随着高昂的成本,使得它们在大规模应用中对许多人而言显得遥不可及。因此,降低操作延迟成为了一个严峻的挑战,尤其是在那些需要快速响应的动态应用场景中。

在LLMs中,键值(Key-Value,简称KV)缓存被用于自回归解码。它在推理的预填充阶段存储了多头注意力机制中的键值对。在解码阶段,新的KV对被添加到内存中。KV缓存存储了注意力机制中的中间键和值激活,将计算复杂度从二次方降低到线性。虽然KV缓存提高了效率,但其内存需求随着批量大小、序列长度和模型大小的增加而线性增长。KV缓存的内存需求不断增长,超出了GPU的处理能力,将其转移到CPU引入了多个瓶颈,这增加了延迟并降低了吞吐量。

在将缓存从CPU传输到GPU进行计算的过程中,PCIe接口成为了一个限制因素。慢速的PCIe接口可能导致延迟超过正常水平一个数量级,导致GPU出现大量空闲时间。

以往的研究尝试解决PCIe性能缓慢的问题,但这些方法常常因为数据传输和GPU计算时间不匹配而失败,尤其是在处理大批量和上下文大小的情况下。其他方法依赖于CPU资源,这再次成为一个限制因素。本文讨论了一种新颖的PCIe和GPU优化方法。

南加州大学的研究人员提出了一种高效的CPU-GPU I/O感知型LLM推理方法(https://arxiv.org/abs/2411.17089),以优化PCIe的利用。这种方法通过部分KV缓存重新计算和异步重叠来解决加载大型KV缓存的系统瓶颈。他们的过程涉及将缓存的较小激活段传输到GPU,而不是传输整个KV缓存。然后GPU从这些较小的激活位重建整个缓存内存。关键在于计算注意力分数,确保信息损失最小。

作者提出了一种完全自动化的方法来确定重新计算和通信分割。这项工作包括三个模块,以最小化GPU延迟:

  1. 分析器模块:收集系统硬件信息,如PCIe带宽和GPU处理速度。

  2. 调度器模块:将问题表述为线性规划任务,使用硬件信息和用户配置来确定最优的KV分割点。目标是最大化计算和通信过程之间的重叠。

  3. 运行时模块:协调两个设备之间的数据传输和管理内存分配。

负责找到最优KV分割的调度器模块有两种工作方式:

逐行调度:通过逐行执行计划减少延迟。在这里,GPU在剩余激活异步加载的同时开始重建KV缓存。

逐列调度:通过在多个批次中重用模型权重来最大化吞吐量,并适应大批量大小的推理。它通过在多个批次中而不是按批次顺序处理每个层,重叠KV缓存和激活的传输与MHA(多头注意力)的计算。进一步使用六进程通信并行策略,运行时模块实现了GPU计算和CPU-GPU通信的并发。

作者使用NVIDIA A100 来做测试,并将GPU通过PCIe 4.0 x16接口连接到CPU,来测试所提出的高效LLM推理框架。实验进行了两个目标,以评估框架的性能:

  • 面向延迟的工作负载:所提出的方法优于基线,减少了35.8%的延迟。

  • 面向吞吐量的工作负载:该方法相对于基线实现了高达29%的改进。

结论

CPU-GPU I/O感知型的LLM推理方法在提高LLM推理吞吐量的同时,有效地降低了延迟。该方法通过部分重新计算KV缓存,并将其与数据传输过程相重叠,从而最大限度地减少GPU的空闲时间,增强了整体效率。

参考论文: https://arxiv.org/abs/2411.17089

相关推荐
fthux7 小时前
装闭 RenoPit 源码解析(09):AnalysisEngine装修闭坑分析主流程
人工智能·ai·开源·github·open source·renopit
敏编程7 小时前
开源项目 NextBand:探索融合健康传感、语音交互与 AI Agent 的下一代可穿戴设备
人工智能
小田学Python7 小时前
Agent 的运行范式:ReAct(Reasoning+Acting)
大模型·react·ai agent·工具调用
ovO7 小时前
我按下“发送”之后:DeepSeek Harness 如何把一次请求变成 1,177 个增量片段
人工智能·开源·deepseek
昨日之日20068 小时前
LTX-2.5:更清晰、更可控、同步音画、多镜头连贯的AI视频神器
人工智能·音视频
九硕智慧建筑一体化厂家8 小时前
数字化管控落地,直流照明构筑安全照明体系
运维·人工智能·笔记·安全·智慧城市
江厌018 小时前
本地部署DeepSeek显卡怎么选?我把显存计算公式和实测记录写下来了
人工智能·百度·联想工作站·代理商推荐·渠道对比·工作站
小席是个热心肠8 小时前
AI相关的自我学习
java·人工智能·学习
FII工业富联科技服务8 小时前
工业AI自治的演进趋势:从内容生成到Agent驱动的工厂运营范式转变
人工智能
程序猿编码8 小时前
不用GPU,不用多线程,我用C++20手写了一个Gemma 3推理引擎
pytorch·语言模型·大模型·c++20·推荐算法