上一篇文章中,我们已明确P-GPU/D-CPU模式相较于PD-GPU模式时,Decode阶段性能会显著下降。但P-GPU/D-CPU模式通过GPU快速完成Prefill阶段,从而能快速释放GPU资源以处理更多新请求的Prefill阶段,可能提升系统整体的TTFT(首个词元生成时间)和并发能力,在特定场景下仍具应用价值。
这些讨论默认GPU参与是既定事实。 但在完整的技术选型和成本效益分析中,不能仅停留在“有GPU时怎么做得更好”。一个更根本的问题是:当我们考虑将Prefill和Decode阶段完全交由CPU处理(即PD-CPU模式)时,P-GPU/D-CPU这种引入GPU硬件和跨设备复杂性的方案,其性能提升是否显著到足以让我们放弃纯CPU方案的简洁与便捷?尤其是在处理长输入、短输出(LISO)这类对首个词元生成时间(TTFT)和GPU周转率要求较高的场景时,P-GPU/D-CPU模式的潜力值得深入探究。
换句话说,之前的实验只将P-GPU/D-CPU方案与全GPU的方案进行了对比,但没有与全CPU方案进行对比。本文正是要补齐这一环,通过新的实验数据,考察P-GPU/D-CPU模式在面对纯CPU方案时,其性能表现和应用价值究竟如何。
关于Prefill阶段和Decode阶段吞吐量的巨大差异的内容,可以阅读本篇文章
关于PD阶段在CPU上运行分析的内容,可以阅读本篇文章
实验设计与对比方案
本次实验的核心设计思路是分别测试长输入长输出(LILO)、长输入短输出(LISO)、短输入长输出(SILO)和短输入短输出(SISO)四种情况下,PD都在GPU上运行、P在GPU,D在CPU上运行,以及PD都在CPU上运行的耗时。本文将重点分析长输入短输出(LISO)的数据,以评估P-GPU/D-CPU模式的特定优势。
实验使用gpt2模型,模拟 100 个并发用户请求,长输入、长输出对应的是512个token,而短输入、短输出都是对应的64个token。
实验代码已开源。可以使用本链接:
https://github.com/chen-ace/LLM-Prefill-Decode-Benchmark。开源库中提供了英伟达CUDA的脚本和Apple M系列芯片的代码。方便苹果笔记本的用户也能运行测试脚本。但由于Apple M系列设备的硬件资源有限,因此MPS版本的测试代码只是用了gpt2模型进行测试。
实验所要探究的核心问题是:P-GPU/D-CPU模式在与纯CPU(PD-CPU)模式的对比中,是否依然保有足够的性能优势以证明其应用价值。
P阶段
我们将整个过程分两阶段分析,首先关注单独的P阶段数据。
如上图所示,PD分离后,P阶段可以充分利用GPU资源,在运行效率上获得了较大的提升,具体数值如表一所示,LILO模式下,P-GPU比P-CPU节省了4.59s;LISO模式下,P-GPU比P-CPU节省了5.51s;SILO模式下,P-GPU比P-CPU节省了0.56s;SISO模式下,P-GPU比P-CPU节省了0.72s;
表一 四种情况下P阶段所消耗时间统计表
PD-GPU
P-GPU/D-CPU
PD-CPU
P阶段在GPU比在CPU上节省的时间
LILO模式P阶段耗时(s)
0.8322
0.797
5.3853
4.5883
LISO模式P阶段耗时(s)
0.8158
0.8076
6.3184
5.5108
SILO模式P阶段耗时(s)
0.1008
0.1083
0.6658
0.5575
SISO模式P阶段耗时(s)
0.1008
0.1082
0.8291
0.7209
完整阶段
从P阶段的数据来看,即使是在CPU上运行,最长耗时也就6.32s,对于GPU资源的宝贵性醒来说,还是可以接受的范围。但是如果加上D阶段的耗时就是另外一回事了,数据如下表所示:
表二 四种情况下PD各阶段所消耗时间统计表(比值均为PD-CPU与P-GPU/D-CPU的倍率)
PD-GPU
总耗时
P-GPU/D-CPU
总耗时
PD-CPU
总耗时
各阶段倍率
总耗时倍率
LILO模式P阶段耗时(s)
0.83
23.14
0.80
100.57
(含KV转移时间)
5.39
162.02
6.76
1.61
LILO模式D阶段耗时(s)
22.31
98.52
156.63
1.59
LISO模式P阶段耗时(s)
0.82
2.06
0.81
18.47
(含KV转移时间)
6.32
26.47
7.82
1.43
LISO模式D阶段耗时(s)
1.24
16.40
20.15
1.23
SILO模式P阶段耗时(s)
0.10
10.69
0.11
59.94
(含KV转移时间)
0.67
55.02
6.15
0.92
SILO模式D阶段耗时(s)
10.58
59.65
54.35
0.91
SISO模式P阶段耗时(s)
0.10
0.56
0.11
6.40
(含KV转移时间)
0.83
4.77
7.66
0.75
SISO模式D阶段耗时(s)
0.46
6.16
3.94
0.64
实验数据如上图所示:在SILO以及SISO模式下,P阶段在GPU上的提升在整个PD过程中性能的提升可以忽略不计。但是在LISO模式下,P阶段在P-GPU/D-CPU模式中消耗时间为0.8076s,而在PD-CPU模式中则消耗了6.3184s,速度提升了7.82倍,D阶段在P-GPU/D-CPU模式中,消耗时间为16.3957s,PD-CPU模式中,D阶段消耗时间为20.1514,速度提升了1.23倍。
从实验的数据中可以很明显地得出以下结论:
LISO场景性能更优
面对长输入序列(如512词元),GPU在Prefill阶段拥有显著的速度优势。这一巨大优势足以弥补CPU Decode阶段的相对缓慢,使得P-GPU/D-CPU模式在处理长输入时,总耗时明显优于纯CPU模式,例如在长输入长输出时,实测速度提升可达约1.61倍,在长输入短输出时也达到了约1.43倍的提升。
GPU资源紧张时,优化TTFT与并发能力
当GPU资源成为瓶颈时,P-GPU/D-CPU模式的价值尤为突出。它允许GPU在快速完成计算密集的Prefill阶段后,立即将后续的Decode任务卸载给CPU处理。这样能迅速释放宝贵的GPU资源,使其能够服务于更多新的并发请求,从而有效缩短用户感知的首个词元生成时间(TTFT)并提升系统的整体并发处理能力。这对于那些需要优先保证众多用户快速获得初步响应,而非追求单用户极致长序列生成速度的场景,是一个极具吸引力的平衡策略。
总结
P-GPU/D-CPU部署策略在处理LISO任务时表现最佳,能显著优化首个词元生成时间(TTFT)和并发处理能力,尤其适合GPU资源瓶颈的场景。其优势源于GPU对Prefill阶段的极致加速及后续CPU Decode阶段的相对高效,总体性能明显优于纯CPU方案。
尽管此策略也能加速LILO任务,但考虑到LILO本身耗时较长可能影响交互体验,LISO更能发挥P-GPU/D-CPU在提升即时响应方面的特长。
但是P-GPU/D-CPU并非普适方案。对于短输入任务,纯CPU因其简洁和低开销反而更具优势。
因此,选择部署策略时,需权衡P-GPU/D-CPU的性能提升与实现复杂性、成本,并结合具体应用场景、性能瓶颈和对复杂度的接受程度来综合决策。