用户名 立即注册找回密码

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

手机动态码快速登录

手机号快速注册登录

文章

图文播报

查看: 279|回复: 0

[讨论] NVIDIA Dynamo的PD分离有问题?我们提出的大模型推理系统"肾上腺素",是良药!

[复制链接]
发表于 2025-3-29 13:23 | 显示全部楼层 |阅读模式

登陆有奖并可浏览互动!

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录 手机动态码快速登录

×
上周,NVIDIA在GTC 2025大会上重磅发布了NVIDIA Dynamo大模型推理系统,该系统主要包含两项关键技术,Context Caching和PD分离。
关于Context Caching: 早在2024年初,我们团队发表在USENIX ATC'2024会议上的 CachedAttention 论文就已经提出了Context Caching以存代算技术及配套的KV Cache分级存储系统 AttentionStore。NVIDIA Dynamo系统中的HBM-DRAM-SSD分级存储、按层的KV Cache读写等技术点与我们CachedAttention论文中的提出的完全匹配
关于PD分离: 最近1年多,我们团队也在致力于PD分离技术的研究,我们发现在大模型推理系统中PD分离并不是最优的部署策略,因为PD分离会带来严重的GPU资源浪费问题——Prefill实例的HBM带宽和容量利用率低,而Decode实例的NPU算力利用率低。为了解决这个问题,我们团队和来自中山大学的实习生及其老师一起完成了Adrenaline工作,Adrenaline是“Attention disaggregation and offloading mechanism”的缩写,即注意力分离和卸载机制。Adrenaline的翻译为肾上腺素,意在为大模型推理系统注入“肾上腺素”大幅提升其资源利用率和吞吐量。Adrenaline巧妙地将Decode阶段内存密集的Attention计算操作卸载一部分到Prefill节点上执行。这样不仅提升了Prefill节点的内存利用率,同时也提升了Decode节点的算力利用率——大道至简,一举两得!下面给大家详细介绍Adrenaline工作,欢迎大家一起探讨!
Adrenaline论文链接(Injecting Adrenaline into LLM Serving: Boosting Resource Utilization and Throughput via Attention Disaggregation):https://arxiv.org/pdf/2503.20552
<hr/>如果您对我们团队其它硬核技术也感兴趣,请阅读:
<hr/>TL;DR

在大语言模型(LLM)推理服务系统中,执行每个请求包含两个阶段:计算密集型的Prefill阶段和内存密集型的Decode阶段。为了防止这两个阶段之间的性能干扰,当前的LLM服务系统通常采用Prefill-Decode (PD)分离部署策略,就是将这两个阶段分配到不同的机器上执行。然而,我们观察到PD分离导致了严重的GPU资源浪费的问题。具体来说,计算密集型的Prefill实例内存利用率低,而内存密集型的Decode实例算力利用率低。为了解决这一问题,本文提出了Adrenaline,一种注意力分离和卸载机制,旨在提高LLM服务系统的资源利用率和性能。Adrenaline的核心思想是将Decode阶段的部分注意力计算分离出来,并将其卸载到Prefill实例上。由于Decode Attention内存密集型的特点,Adrenaline提高了Prefill实例的内存容量和带宽利用率,同时也增加了Decode的批处理大小以提升Decode实例的计算利用率,共同提升了端到端推理吞吐。Adrenaline通过三种关键技术实现这一目标:负载感知的卸载调度、低延迟的Decode同步以及资源高效的Prefill共置。实验结果表明,与最先进的PD分离推理系统相比,Adrenaline将Prefill实例的内存容量利用率、内存带宽利用率和Decode实例的算力利用率分别提高了最高2.3倍、2.07和1.67倍,同时提升了1.68倍的Decode吞吐量。
1 PD分离的背景

在LLM推理服务系统中,执行每个请求涉及两个连续的阶段。Prefill阶段并行计算所有Prompt以生成KV Cache和第一个Token。Decode阶段则基于先前生成的KV Cache迭代地输出Token。由于Prefill阶段并行处理许多Token,因此是计算密集型的,其延迟通过首Token时延(TTFT)来衡量。相比之下,Decode阶段由于频繁加载不断增长的KV Cache而成为内存密集型,其时延通过TPOT来衡量。
由于Prefill步骤通常比Decode步骤产生更高的延迟,在同一GPU上运行这两个阶段会导致显著的干扰,从而增加同一批次内Prefill阶段的TTFT和Decode阶段的TPOT。为了减少Prefill和Decode阶段之间的干扰,LLM服务系统通常采用PD分离部署策略。通过将Prefill和Decode阶段分配到不同的GPU上,PD分离消除了这两个阶段之间的干扰,使每个阶段能够独立满足其服务级别目标(SLOs)。此外,将Prefill和Decode阶段分离到不同的GPU池中,可以实现自动和灵活的资源扩展,以适应每个阶段的不同资源需求。
2 PD分离的问题

尽管PD分离提供了灵活性,但是我们观察到,LLM服务系统中的PD分离导致了严重的GPU资源浪费的问题。具体来说,运行计算密集型Prefill阶段的GPU的HBM容量和带宽的利用率较低。内存密集型的Decode阶段则面临算力资源利用率低的问题。如图1a和1c所示,我们实测发现Prefill实例中的HBM带宽利用率低于25%,HBM容量利用率低于20%。同时,如图1b所示,Decode实例中的算力利用率低于20%。鉴于GPU的高成本,这种低资源利用率导致了推理成本的增加。      



  图1:Prefill和Decode阶段的算力、内存带宽和内存容量利用率

为了探究这种利用率不足的原因,我们测量了Prefill和Decode阶段内部不同Kernel的资源消耗。如图2a所示,Prefill阶段中的四个主要Kernel——包括QKV Projection、Attention、O Projection和FFN,都是计算密集型的,导致内存带宽利用率不足。此外,Prefill阶段的批处理大小通常较小以减少TTFT,这限制了KV缓存的大小,从而导致内存容量利用率低。而在Decode阶段,Attention Kernel主导了HBM容量和带宽的消耗。注意力的高内存资源消耗主要来自于KV缓存的存储和访问。



图2:Prefill和Decode阶段中各个Kernel的算力和内存带宽利用率

3 Adrenaline方法论

为了解决上述问题,我们提出Adrenaline,一种注意力分离和卸载机制,旨在提高LLM服务系统的资源利用率和性能。Adrenaline的核心思想是将Decode阶段的部分Attention计算任务分离并卸载到Prefill实例中。通过卸载这些内存密集型的Attention计算任务,Prefill实例的HBM容量和带宽利用率得到了提高。此外,这也使得Decode实例中的总批处理大小得以增加,从而提高了Decode实例的算力资源利用率 —— 一举两得。
图3展示了传统PD分离和Adrenaline方案的区别。在图3a中的PD分离方案中,由于Decode实例上的HBM带宽和容量限制,Decode的批大小只能跑到 M。在图3b中的Adrenaline方案中,我们将 N 个Attention计算请求卸载到Prefill实例上执行,Decode的总批大小从 M 提升到 M+N,从而大幅提升了推理系统的整体吞吐量。



图3:传统PD分离和Adrenaline的方案对比

4 Adrenaline系统设计

4.1 Challenges

然而,在现在的PD分离推理系统中实现Adrenaline方案面临三个主要挑战。
1. Decode阶段的Attention同步开销:卸载Attention会在Decode阶段的每个Transformer层中引入额外的同步步骤。如图3b所示,为了卸载Attention计算,Decode实例必须将输入参数(即qkv)发送到Prefill实例。一旦卸载的Attention计算完成,输出(即attn_out)必须发送回Decode实例进行下一步的处理。这些额外的步骤——发送qkv、执行卸载的Attention计算并接收输出——必须与Decode实例中的本地Attention计算完美重叠,才能不影响TPOT。
2. Prefill实例上的性能干扰:在Prefill实例上的同一张卡上,并行运行卸载的Attention计算任务和Prefill计算任务可能会导致资源竞争、运行调度等方面的干扰,而影响TTFT。
3. 准确地控制卸载率:准确控制要卸载的Attention计算任务的数量非常重要(也就是图3b中的N)。一个好的卸载比率必须平衡Prefill和Decode实例中的计算和内存资源利用率,如果卸载比率设置的不好反而会导致推理性能恶化。
4.2 System Overview

我们设计和实现的Adrenaline的系统架构如图4所示。Adrenaline由三个主要模块组成:Proxy、Prefill实例和Decode实例。Proxy模块将Prefill或Decode计算任务路由到适当的Prefill和Decode实例。Prefill和Decode实例分别用于执行Prefill和Decode计算任务。然而,与现有设计不同的是,Adrenaline引入了部分Decode Attention计算任务的分离和卸载,将其分配到位于Prefill实例的远程Attention Executor中。Attention Executor专门用于利用Prefill实例中未充分使用的GPU内存资源来执行卸载的Decode Attention计算任务。
为了解决4.1章中提到的技术挑战,Adrenaline在LLM推理工作流中采用了以下3项关键技术。

  • 首先,在Decode阶段,Adrenaline引入了 Low-latency Decode Synchornization机制(第4.3章),以最小化远程Attention Executor与本地Decode引擎之间的同步开销。
  • 其次,通过Resource-efficient Prefill Colocation设计(第4.4章),Adrenaline提高了Prefill实例中的GPU内存利用率,同时确保Prefill计算有足够的计算资源。这消除了性能干扰,使系统能够满足所需的SLOs。
  • 第三,Adrenaline利用Load-aware Offloading Scheduling策略(第4.5章)自适应地确定最优的Attention卸载率。



图4:Adrenaline系统架构图

4.3 Low-latency Decode Synchronization

为了减少Prefill实例中的Attention Executor与Decode实例之间的同步开销,Adrenaline通过精心编排Attention卸载工作流和Kernel启动来实现低延迟的Decode同步。图5比较了有和没有Attention卸载时的Decode工作流。



图5:使用和不使用Adrenaline的Deocde工作流对比

Attention卸载工作流的关键路径包括从发送qkv开始到接收Attention输出结束的操作。为了缩短关键路径:

  • 首先,执行Attention卸载相关的元数据和内存管理操作被移到关键路径之外。如图5b所示,当Proxy确定某个Decode请求的Attention需要卸载时,会提前告知给Attention Executor。这使得Attention Executor可以在进入关键路径之前为新请求初始化运行时的元数据。同样,资源管理操作(如分配和回收KV Block)也在关键路径之外执行。
  • 其次,Adrenaline将多个请求的分散的Attention输入(qkv)合并在一次操作中发送,从而减少通信延迟。
  • 第三,Proxy中的调度算法确保Attention Executor中的Attention Kernel与Decode实例中的本地Attention Kernel的执行时间重叠,从而减少空闲等待时间并提高GPU资源利用率。
另外,Attention卸载涉及每个Transformer层的多个小Kernel的执行,例如分组qkv、发送qkv、接收Attention输出、以及合并来自两个Attention Kernel的输出。尽管这些小Kernel在GPU上执行迅速,但CPU按顺序启动它们的开销不可忽视。为了减少内核启动开销,Adrenaline采用了二维CUDA Graph技术进行Attention卸载。
4.4 Resource-efficient Prefill Colocation

Prefill任务和Attention Executor并行执行,虽然这种Colocation提高了GPU利用率,但也带来了资源竞争挑战,可能产生性能干扰。为了解决潜在的性能干扰,我们对资源划分时Prefill计算和Attention计算进行了Profiling,基于该Profiling,提出了一种资源高效的Colocation机制,以确保性能隔离并提高整体系统性能。
资源使用Profiling
为了研究资源划分对LLM推理的影响,我们评估了Prefill阶段和Attention计算在不同计算资源(SM)比例下的表现。具体来说,采用NVIDIA MPS技术来限制目标计算任务的SM数量。在Profiling中,我们发现两个现象:
1. 随着SM Core数量的增加,Attention Kernel的HBM带宽使用是超线性的。我们使用Llama-2 7B模型测量了不同SM核比例下的Attention计算的HBM带宽使用。如图6a所示,由于Attention Kernel是内存密集型的,即使部分SM也能够实现高内存带宽使用。由于现代GPU中的多级并行性(例如SM并行、warp并行和线程并行执行),注意力内核表现出卓越的效率。例如,20%的SM核心可以获得A100的60%的HBM带宽。
2. 随着SM Core数量的减少,Prefill时延的降低是亚线性的。我们限制了SM核数量并评估Llama-2 7B模型推理的TTFT,如图6b所示。我们发现,当减少Prefill使用的部分SM Core时,TTFT并不会线性增长。这是因为,在PD分离系统中,Prefill阶段的许多子步骤(例如请求路由、调度和KV缓存传输)不依赖于GPU计算资源。



图6:Attention和Prefill计算任务使用不同数量SM Core时的资源使用Profiling

自适应资源划分
基于上述两个发现,我们可以看到,将Prefill计算和Attention Executor共置,使用少部分的SM Core执行Attention Executor就可以占据大部分的HBM带宽,并且Prefill的TTFT不会增长很多。Adrenaline通过离线分析和在线服务两个阶段来实时地确定具体分配给Attention Executor的SM Core比例,以最大化用于Attention卸载的SM,同时保证TTFT SLO。
在离线分析阶段,我们会测量不同Prompt长度下不同SM分配比例的TTFT。在在线服务阶段,Adrenaline提供了一个可配置的参数用于设置SM的分配比例。根据TTFT SLO和离线性能分析阶段获取的统计数据,Adrenaline 计算出满足需求的最小SM比例,并通过NVIDIA MPS对后续Prefill阶段的计算资源进行调整和约束。
4.5 Load-aware Offloading Scheduling

在Adrenaline的调度中,关键设计目标是在最小化Attention卸载开销的同时实现最大的性能提升。卸载策略中需要回答两个问题:
1. 可以卸载多少Decode Attention任务?较低的卸载比率不能充分利用Prefill实例中的空闲GPU内存资源,导致整体性能提升微乎其微。相反,过多的卸载可能会因过多的同步开销而导致Deocde阶段的生成停滞,阻碍整体性能。
2. 在理想的卸载比率下,如何在动态工作负载中高效确定是否需要对某个Decode请求进行Attention卸载?在实际场景中,不同请求的Prompt和Output长度各不相同。此外,用户请求的到达率可能会波动。因此,设计一种低开销且细粒度的调度机制至关重要,该机制能够适应这些动态条件并做出高效的卸载决策。
为了解决第一个问题——确定适当的卸载比率,我们设计了一个上限算法来确定在不影响系统效率的情况下最大化Attention卸载任务数量的上限。该算法通过考虑Prefill实例中的可用内存资源和Decode实例中用于额外Deocde请求的可用计算资源来实现。该算法较长,想了解具体的算法请直接阅读我们的Paper,在这里就不详细介绍了。
为了解决第二个问题——确定某个Decode的Attention是否应该卸载执行,我们也设计了一个决策算法,该算法根据Proxy中的运行时元数据来自适应地调度每个请求,详细的算法在Paper中。
5 性能评估

我们把Adrenaline方案实现在了vLLM中,下面我们对比使用PD分离的vLLM和Adrenaline的端到端性能和资源利用率。
5.1 端到端性能对比




图7:在1P1D配置下,vLLM和Adrenaline运行Llama-2 13B的端到端性能对比(ShareGPT数据集)

TTFT:我们测量了Llama 2-13B模型在不同请求率下的TTFT,如图7a所示。当请求率较低时 (< 1.5),Adrenaline的TTFT与vLLM接近。然而,随着请求率的增加,vLLM的Decode实例耗尽了HBM资源,从而阻塞了新的Decode请求,显著增加了排队时间,这个排队时间会算入请求的TTFT中。当请求率增加到3.5时,vLLM的TTFT比Adrenaline高出5倍。Adrenaline通过卸载一些Decode Attention任务,增加了Decode阶段的最大批处理大小,从而降低了请求的排队时间,最终降低了TTFT。
TPOT:如图7b和7c所示,在相同请求率下,Adrenaline的TPOT通常接近于vLLM。
Decode吞吐量:如图7d所示,在低请求率下,两种方案的吞吐量相近。随着请求率的增加,由于Decode实例中HBM空间和带宽的限制,vLLM的吞吐量达到了一个平台期。而Adrenaline通过利用Prefill实例的HBM资源来卸载Decode Attention任务,提升了1.63倍的Decode吞吐量
5.2 资源利用率对比




图8:对比vLLM和Adrenaline在Prefill阶段的内存带宽&容量利用率和Deocde阶段的算力利用率

HBM带宽利用率:如图8a所示,通过卸载注意力计算任务,Adrenaline显著提升了Prefill实例中的HBM带宽利用率。与vLLM方案相比,Adrenaline在Llama-2 7B模型的Prefill实例中实现了1.49-2.07倍的HBM带宽利用率提升,Llama-2 13B模型也呈现相似趋势(相较vLLM提升1.37-1.93倍)。
算力利用率:如图8b所示,通过解耦和卸载Attention计算任务,Adrenaline显著提升了Decode的Batch Size,相较于vLLM实现了1.67倍的算力利用率提升。
HBM容量利用率:如图8c所示,在加载模型权重后,vLLM中Prefill实例的HBM容量利用率保持在20%左右,剩余80%的HBM容量未被使用。Adrenaline的Attention Executor利用Prefill实例的空闲HBM来存储卸载注意力的KV缓存。因此,在预热阶段后,与默认的PD解耦方案相比,Adrenaline在Prefill实例中实现了2.3倍的HBM利用率提升。
<hr/>实习生招聘

相信能看到这里的同学一定是对LLM Systems有着浓厚的兴趣,我就在这里做一个定向招聘:我司今年的AI专项实习生招聘开始啦!如果您对工业界大模型系统中的真实问题感兴趣,并有志于做可商用落地的前沿技术、发表有影响力的学术成果,请联系我,名额有限,先投先录,招满为止,有任何问题欢迎咨询: pengfei.zuo@huawei.com 。

原文地址:https://zhuanlan.zhihu.com/p/1888519961636487325
楼主热帖
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册 微信登录 手机动态码快速登录

本版积分规则

关闭

官方推荐 上一条 2/3 下一条

IVD业界薪资调查(月薪/税前)
IVD业界薪资调查(月薪/税前)
长期活动,投票后可见结果!看看咱们这个行业个人的前景如何。请热爱行业的桔友们积极参与!

查看 »

快速回复 返回列表 客服中心 搜索 官方QQ群 洽谈合作
快速回复返回顶部 返回列表