上一篇文章中,我們已明確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的性能提升與實現復雜性、成本,并結合具體應用場景、性能瓶頸和對復雜度的接受程度來綜合決策。