模型推理的Goodput指标、Prefilling和Decode阶段物理分离、DistServe

论文:

https://arxiv.org/html/2401.09670v1

博客:

https://hao-ai-lab.github.io/blogs/distserve/

中文翻译:

LLM Serving有效吞吐量的最大化实现

Goodput: 满足用户时延要求的request/秒;有可能小于throughtput;

Continue batching, 新的request的prefilling耗时太长,使得同batch的老request延迟明显增大:

解决方案:

干Prefilling的GPU,和干Decoding的GPU,分开,各做各的;

调整灵活:如果input prompt长,那就增加Prefilling的GPU数目;如果output sequence长,那就增加decoding的GPU数目;

开销:KV-Cache在2个阶段的GPU之间传输。但,该开销<1个token的decoding耗时,很小。

局限性:只要得有2个GPU,1个GPU玩儿不转。

在trtllm build的int8 LLama70B模型上,单卡,实测延迟:
1000个字的prefilling: 1秒

10个字的decoding: 0.1秒

结论:平均到一个字,prefilling大约比decoding快10倍

DistServe论文

结论:将Prefilling和Decoding分离,可以获得更高的goodput。

背景知识:1. Prefilling是Compute-bound的;2. Decoding是Memory-bound的;

好处1:分离,可以在两阶段使用不同的batching策略

prefill阶段:随着batch size的增加,吞吐量的增长趋势却趋于平缓。这正是因为prefill阶段是compute-bound的,当batch中的总tokens数大于一个阈值的时候,prefill阶段产生compute-bound,使得吞吐量的增长趋势变缓。
decode阶段:随着batch size的增加,吞吐量的增长趋势越来越显著。这是因为decode阶段是memory-bound的,即相比于计算,读写数据的时间要更多。所以在decode阶段中,如果我们能提升batch size,就能把计算强度提起来,吞吐量就上去了。

好处2:分离,可以在两阶段使用不同的tp/pp模型并行策略

(1)对prefill和decode分别做goodput最大化,也就是对他们分别寻找最佳的并行策略(确定一个实例/一个模型副本要怎么分割)
(2)根据系统中的流量大小确定prefill/decode各自要部署多少个实例,然后按照(1)中确定的并行方式做实例部署

如何确定prefill、decode阶段的tp/pp数目?答:网格搜索,尝试,取最优的goodput那个:

论文解释:图解大模型计算加速系列:分离式推理架构1,从DistServe谈起 - 知乎

VLLM中,PD分离叫做"disaggregated prefilling"

PD分离的优点:

1. 可以独立的调优prefill架构和decode架构。用不同的TP、PP并行策略。通过增加实例数,达到任务所需的TTFT和TPOT。

2. 可以很好的控制decode阶段的运行不被新到的prefill所大大延后。进而提升了Goodput。(调优chunked-prefill也可达到同样目的,但chunk-size较难调到最优)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值