Skip to main content

为什么要做PD分离

定义

整个LLM推理过程由Prefill和多轮迭代的Decode组成:

  • 计算密集型的Prefill阶段,LLM处理所有用户的input,计算出对应的KV Cache

  • 显存密集型的Decode阶段,顺序的产生一个个的token,每次访存只计算一个token

指标

Prefill性能评估指标

  • TTFT(Time To First Token)表示生成第 1token 所用的时间

    P90 TTFT SLO = 0.4s,意味着我们对该系统的要求是:90%requestTTFT值都必须<=0.4

Decode性能评估指标

  • TPOT(Time Per Output Token)表示产出每一个response token 所用的时间

    P90 TPOT SLO = 0.04s,意味着我们对该系统的要求是,在 90%requestTPOT 值都必须<=0.04s

  • TBT(Token By Token)表示增量Token时延,即连续生成两个token之间的时间间隔。这是衡量用户体验流畅度的重要指标,TBT越稳定,用户感知到的响应就越连贯。在PD分离架构中,保持稳定的TBT是一个关键目标。

Continuing Batching

alt text

  • Prefill阶段:因为Prefill阶段是计算密集型,随着Batch Size的增加,算力受限,吞吐量的增长趋势趋于平缓。

  • Decode阶段:因为Decode阶段是带宽、内存密集,随着Batch Size的增加,吞吐量的增长趋势越来越显著。

想要在Decode阶段实现Continuing Batching的前提是,每个被调度的request需要空闲算力完成Prefill计算。按现有的部署模式,当PrefillDecode部署在一起时,当有新的Prefill请求时,会被优先处理,从而导致Decode的执行流程被影响,增量Token时延(TBT)无法得到有效保障。

例如下图,当request5request6到来时,系统可能会优先执行request5request6Prefill,此时request2/3/4的响应时延会受到一定影响,从而导致TBT不稳定。

alt text

在实际的深度学习模型部署中,由于PrefillDecode两阶段的计算/通信特征的差异特点,为了提升性能和资源利用效率,通过PD分离部署方案将PrefillDecode分别部署在不同规格和架构的集群中,并且配合服务层的任务调度,在满足TTFTTBT指标范围内,结合Continuous batching机制尽可能提高Decode阶段的batch并发数,在提供更好用户体验的前提下,提升算力利用率。

基于该方案,结合下图可以看到PrefillDecode的执行互不影响,系统能够提供给用户一个稳定的TBT

alt text

PD分离带来的优势

long context背景下,PrefillDecode阶段对计算和显存的需求非常不平衡。PD分离架构能够带来以下显著优势:

资源分配与利用的优化

  • 充分利用异构设备资源Prefill阶段计算密集,可采用高算力的 GPU(如A100H100等高端计算卡);而Decode阶段显存密集,可采用低算力大显存的 GPU(如大内存的L40等)。这种分配方式能够显著降低硬件成本,提高资源利用率。

  • 动态资源伸缩:可以根据负载情况独立地为PrefillDecode集群进行扩缩容,在高峰期可以为瓶颈阶段分配更多资源,提高系统的弹性和成本效益。

性能指标的优化

  • 分开优化,同时提升多项指标:在Prefill阶段应该限制Batch Size大小以减少TTFT,而在Decode阶段则应该增大Batch Size以提高并发处理能力。这种分离优化策略能同时改善TTFTTPOT指标,而不必在两者之间做折中。

  • 稳定的TBT保障:通过将PrefillDecode分离,新请求的Prefill计算不会占用Decode阶段的资源,从而保证了稳定的TBT,提供更流畅的用户体验。

技术实现的灵活性

  • 模型优化的灵活性:可以对PrefillDecode阶段分别采用不同的模型优化技术,如在Prefill阶段采用量化、矩阵分解等技术,而在Decode阶段使用Continuous BatchingKV Cache管理优化。

  • 不同硬件加速器的支持:可以在Prefill阶段使用GPU,而在Decode阶段尝试使用其他类型的加速器(如专用的推理芯片),进一步降低成本和提高效率。

系统可靠性提升

  • 故障隔离:当PrefillDecode集群中的某个节点出现故障时,不会直接影响另一阶段的处理,提高了系统的整体可靠性。

  • 版本升级的灵活性:可以独立地升级PrefillDecode集群,减少系统维护和升级对服务的影响。