深入剖析大模型推理PD分离技术
一、背景 随着大型语言模型(LLM)在搜索、内容生成、AI助手等领域的广泛应用 ,对模型推理服务的并发能力、响应延迟和资源利用效率提出了前所未有的高要求。与模型训练相比,推理是一个持续进行、资源消耗巨大的任务。尤其在实际业务中,推理服务需要同时支持大量用户请求,保证实时性和稳定性。在传统架构中,LLM的输入处理(Prefill)和输出生成(Decode)阶段往往混合部署在同一批GPU上。这种“统一架构”虽然实现简单,但很快暴露出严重的性能瓶颈和资源调度困境。 Prefill阶段负责并行处理输入提示中的所有词元,生成第一个输出词元,并计算初始的键值缓存(Key-Value Cache, KV Cache)。其主要特征是计算密集型,通常受限于计算资源,尤其是在处理较长提示时。在此阶段,模型对输入序列中的每个词元进行并行计算,通常涉及大规模的矩阵 - 矩阵运算,能够充分利用GPU的并行计算能力,甚至使其达到饱和状态。 Decode阶段以自回归的方式逐个生成后续的输出词元。在Decode的每一步中,模型仅处理最新生成的那个词元,并结合先前存储在KV Cache中的上下文信息来预测下一个词元。与Prefill阶段不同,Decode阶段每个词元的计算量相对较小,但其主要瓶颈在于内存带宽。这是因为每个解码步骤都需要频繁访问和读取不断增长的KV Cache,涉及的操作主要是矩阵 - 向量运算。尽管只处理一个新词元,但其对模型权重和KV Cache的I/O需求与Prefill阶段相似。自回归生成的顺序性决定了Decode难以高并发,访问KV Cache的效率成为系统瓶颈。 Prefill阶段计算密集、耗时长,容易阻塞Decode阶段对低延迟的需求,导致整体吞吐和响应速度下降;而Decode阶段则受制于KV Cache带宽和访问延迟,难以并发扩展 ,并且Prefill(计算密集)和Decode(内存密集)两个阶段的资源需求和计算特性差异大,在同一组GPU上运行时容易相互干扰,导致GPU资源利用率不均衡。因此,为了提升推理服务的性能和资源利用率,大模型推理PD分离技术应运而生。
二、什么是PD分离 PD分离(Prefill-Decode Separation),即预填充-解码分离,是一种针对大语言模型推理过程的架构优化技术,其核心思想在于深刻理解并严格区分Prefill与Decode阶段的本质差异,并在资源分配、任务调度及优化算法上实施明确的、差异化的策略。简单来说,就是将大模型推理中的Prefill阶段和Decode阶段分开,部署在不同的计算资源上,各自独立进行处理。 在传统的推理架构中,这两个阶段在同一组GPU上混合执行,而PD分离打破了这种模式。在PD分离的架构下,当用户请求到达时,首先进入Prefill工作节点,在这个节点上完成Prefill阶段,即并行处理所有输入token,填充KV缓存,并生成第一个输出token。完成Prefill阶段后,系统将其中间状态(主要是KV缓存)迁移到Decode工作节点,然后在Decode工作节点进行多个解码步骤,通过自回归方式生成后续token,直到完成整个输出序列。 三、为什么要做PD分离 (一)解决阶段间干扰问题 Prefill阶段是计算密集型,即使是一个小批量的预填充,或者仅仅是一个足够长的预填充,也会迅速饱和GPU计算资源;而Decode阶段需要更大的批量来达到计算瓶颈,且更容易受到GPU内存带宽限制的影响。当这两个阶段在同一GPU上运行时,会相互干扰,导致性能下降。例如,Prefill阶段的长时间计算会阻塞Decode阶段对低延迟的需求,使得Decode阶段的响应时间变长;而Decode阶段对KV Cache的频繁访问又会影响Prefill阶段的计算效率。PD分离将两个阶段分开,避免了这种干扰,使得两个阶段都可以更快完成,并更容易满足各自的服务级别目标(SLO)。 (二)优化资源分配和并行策略 由于Prefill和Decode阶段的计算模式和延迟目标不同,它们的最优并行策略也不一样。比如,当首次token延迟(TTFT)要求严格时,Prefill阶段适合用张量并行(TP)来满足紧凑的延迟目标,而Decode阶段则更倾向于数据并行或流水线并行来提升吞吐量。在传统的混合部署中,资源分配和并行策略是耦合的,难以针对两个阶段分别进行优化。而PD分离使得资源分配和并行策略解耦,开发者可以为Prefill和Decode分别定制最适合的优化方案,从而提高整体的性能和资源利用率。 (三)提升系统整体性能指标 1. 降低响应时间:通过为Prefill和Decode两个阶段量身定制优化策略,PD分离直接降低了用户感知的首次响应时间(TTFT)和后续生成时间(TPOT),使得交互体验更快、更流畅。在聊天机器人场景中,快速的首次响应时间可以让用户感受到更及时的交互,而较低的后续生成时间可以保证对话的连贯性。
2. 提高吞吐量:得益于更高的资源利用率和更优化的调度,系统的整体吞吐量也得到大幅提升,能够高效处理更多的并发请求。对于搜索引擎中的大模型推理服务,更高的吞吐量意味着可以同时处理更多用户的搜索请求,提高服务的可用性和效率。
3. 改善成本效益:统一处理常导致资源浪费(例如Decode阶段计算单元空闲),而PD分离的差异化管理则能确保昂贵的GPU等硬件资源在Prefill和Decode这两个特性迥异的阶段都得到更充分、更有效的利用。这样不仅减少了硬件闲置,也提升了整体的计算效率与成本效益。在大规模的推理服务部署中,成本的降低对于企业来说具有重要意义。 四、PD分离关键技术 (一)高效的KV缓存迁移技术 在PD分离中,完成Prefill阶段后需要将KV缓存从Prefill工作节点迁移到Decode工作节点,如何高效地进行KV缓存迁移是关键技术之一。这涉及到如何优化数据传输的带宽利用,减少传输时间。可以采用一些先进的网络技术,如NVLink和PCI - e 5.0等高速接口来加速数据传输。同时,需要设计合理的缓存迁移算法,例如根据KV缓存的访问频率和重要性进行优先级排序,优先迁移重要且常用的缓存数据,以减少Decode阶段因等待缓存数据而造成的延迟。 (二)负载均衡与任务调度算法 1. 负载均衡:在PD分离架构中,存在多个Prefill工作节点和Decode工作节点,需要实现负载均衡,确保每个节点的负载相对均匀,避免出现某些节点负载过高而某些节点空闲的情况。可以采用基于流量监测和预测的负载均衡算法,实时监测各个节点的负载情况,根据预测的请求流量动态地分配任务。如果预测到某个时间段内某个区域的请求量会增加,可以提前将任务分配到负载较低的节点上。
2. 任务调度:任务调度算法需要根据Prefill和Decode阶段的特点,合理地安排任务的执行顺序和资源分配。对于Prefill阶段,可以采用优先调度长请求的策略,因为长请求的计算量更大,先处理长请求可以充分利用GPU的计算资源;对于Decode阶段,可以根据请求的优先级和生成token的紧迫性进行调度,优先处理高优先级和需要快速生成token的请求。还可以结合连续批量处理等技术,将多个请求组合成批次进行处理,提高处理效率。 (三)针对性的优化技术应用 1. Prefill阶段优化:由于Prefill阶段是计算密集型,可以应用一些针对计算优化的技术,如特定的矩阵运算优化算法,利用GPU的并行计算能力,提高计算效率。还可以采用模型量化技术,在不损失过多精度的前提下,减少模型参数的存储和计算量,进一步加速Prefill阶段的处理。
2. Decode阶段优化:针对Decode阶段内存带宽受限的问题,可以采用内存管理优化方案,如优化KV缓存的存储结构,减少内存访问冲突,提高内存访问效率。也可以探索一些新的注意力机制变体,降低Decode阶段对内存带宽的需求,提升解码速度。 五、PD分离实践 (一)学术研究中的实践验证 UCSD的华人团队搭建了系统原型DistServe来验证PD分离的效果。在实验中,他们在单个A100 - 80GB GPU上运行一个13B的LLM,使用一个输入长度为512、输出长度为64的合成工作负载,并假设请求按泊松分布到达。通过逐渐增加请求速率,测量P90 TTFT和P90 TPOT的变化。实验结果表明,在相同的资源配置下,采用PD分离的DistServe系统相比现有共同处理系统,在满足SLO的情况下,有效吞吐量提升显著。在为预填充分配2个GPU、为解码分配1个GPU(2P1D)时,有效吞吐量达到了原来的2倍(3.3rps VS 1.6rps) 。这一实践验证了PD分离在提升大模型推理性能方面的有效性,为后续的研究和应用提供了有力的支持。 (二)工业界的应用案例 1. Mooncake公司:Mooncake公司采用PD分离技术来优化大模型的推理服务。在实际应用中,他们发现通过将Prefill和Decode阶段分离到不同的GPU集群上,系统的响应速度和吞吐量都得到了大幅提升。在处理大量用户的聊天请求时,采用PD分离后的系统能够更快地响应用户的首次请求,并且在生成后续对话内容时也更加流畅,用户体验得到了极大的改善。同时,由于资源利用率的提高,公司的硬件成本也得到了有效的控制。
2. 华为云:华为云在其AI开发平台MODELARTS中应用了PD分离技术。大模型推理的Prefill阶段(全量推理)和Decode阶段(增量推理)分别实例化部署在不同的推理卡资源上同时进行推理。通过调节PD节点数量配比,充分发挥了NPU卡的算力,提升了集群整体吞吐。在Decode平均低时延约束场景下,PD分离相比PD混合部署,更加能够发挥性能优势。这使得华为云在为用户提供大模型推理服务时,能够满足不同用户对于性能和延迟的要求,提高了服务的竞争力。
页:
[1]
