LLM Serving有效吞吐量的最大化实现
内容提要
本文介绍了一种优化低延迟语言模型(LLM)serving性能的方法,通过引入预填充-解码解耦的方法,构建了一个系统原型DistServe,显著提高了吞吐量并满足时延约束。DistServe正在集成到vLLM中。
延伸解读
有效吞吐量:比吞吐量更贴近实际体验的指标
文章指出,传统吞吐量只统计每秒完成的请求数,却忽略时延要求。有效吞吐量则要求请求同时满足TTFT和TPOT等SLO,例如90%请求的TTFT<200ms且TPOT<50ms。这意味着高吞吐量不等于高有效吞吐量:一个系统可能每秒处理10个请求,但只有3个满足时延约束,有效吞吐量仅为3。对用户而言,后者才真正反映服务质量。
合并预填充与解码为何拖累有效吞吐量
预填充计算密集,解码受内存带宽限制,两者特性不同。合并批处理时,预填充会干扰解码,导致解码时延增加;同时资源分配和并行策略被耦合,难以各自优化。为满足严格SLO,系统不得不过度配置资源。文章用实验说明,在单GPU上合并处理时,有效吞吐量受限于两个阶段中较低者,例如仅1.6 RPS。
解耦策略的收益与KV缓存传输开销
将预填充和解码分离到不同GPU,可消除干扰并独立选择并行策略。文章实验显示,2P1D配置下有效吞吐量可达约3.3 reqs/s per GPU,是合并方案的2倍。解耦需传输KV缓存,但借助高速网络如PCIe 5.0或NVLink,传输时延可低于一个解码步数时间,从而被有效隐藏。
与分块预填充的对比及适用场景
分块预填充通过将长预填充切块并与解码拼批,旨在提高GPU利用率,但可能增加TTFT和TPOT,且无法完全解耦资源争用。文章认为,当应用需要同时遵守TTFT和TPOT、不能权衡时,解耦是更优选择。DistServe在聊天机器人、代码补全等负载上相比vLLM实现了更高吞吐量和更严格的SLO。
Q&A
什么是有效吞吐量,它与吞吐量有什么区别?
有效吞吐量是指在满足服务等级目标(SLO)的情况下,每秒完成的请求数量,而吞吐量是每秒处理的完成请求数量。有效吞吐量更能反映用户体验和成本效益。
DistServe系统是如何优化LLM serving性能的?
DistServe通过预填充-解码解耦的方法,将预填充和解码分离到不同的GPU中,从而优化了有效吞吐量,显著提高了吞吐量并满足了严格的时延约束。
为什么现有的LLM serving系统无法实现高有效吞吐量?
现有系统将预填充和解码合并处理,导致资源争用和时延增加,无法有效满足不同的时延要求,从而影响有效吞吐量。
预填充-解码解耦的优势是什么?
预填充-解码解耦可以消除预填充和解码之间的干扰,使得每个阶段都能独立优化,从而提高整体性能和有效吞吐量。
DistServe在不同工作负载上的表现如何?
DistServe在聊天机器人和代码补全等工作负载上表现优异,其吞吐量比现有系统vLLM高出2.0倍至4.48倍,且在严格的SLO下表现更佳。
KV Cache的传输开销如何影响LLM serving?
KV Cache的传输开销可以通过高带宽网络有效最小化,甚至低于单个解码步数的时间,从而不显著影响整体性能。