去年十月,美商務部禁令的出現,使中國客戶無法使用NVIDIA H100/H200旗艦芯片。一時間,各種NV存貨、中國限定卡型、其他廠商NPU紛至沓來。在大模型推理場景中,如何客觀比較不同硬件的能力,成為一大難題,比如:
Q1:輸入輸出都很長,應該選H20還是A800?
Q2:高并發情況下,用L20還是RTX 4090?
最直接的解決方法是,使用SOTA推理服務框架,對不同硬件X不同負載做全面的評估。但是,大模型任務推理的負載變化范圍很大,導致全面評估耗時耗力。主要來源以下幾個方面:
輸入參數batch size、input sequence length、output sequence length變化多樣。
大模型種類很多,從7B到170B,不同尺寸模型都有。
硬件種類很多。參考許欣然的文章,備選的NVIDIA GPU就有15種,而且還有其他廠商的硬件。
如何在繁重的benchmark任務前,對不同硬件在不同推理任務上的表現有一個直觀的認識?為此,我做了一個簡單的性能評估工具LLMRoofline,它使用Roofline模型,不需要運行程序,來簡單比較不同硬件。
Roofline模型
Roofline模型是一種非常簡化的性能模型,但可以清晰地展示出應用程序的硬件性能極限。
在Roofline模型可以直觀展示一張曲線圖,其中x軸表示AI(Arithmetic Intensity),即每個內存操作對應的浮點運算次數;y軸表示性能,通常以每秒浮點運算次數(Tflops)表示。圖中的“屋頂”(Roofline)由兩部分組成:一部分是峰值內存帶寬(Memory Bandwidth)限制的斜線,另一部分是峰值計算性能(Peak Performance)限制的水平線。這兩部分相交的點是應用程序從內存帶寬受限轉變為計算性能受限的轉折點。
下圖繪制了多個不同GPU(包括NVIDIA的A100、H20、A800、L40S、L20和4090)的Roofline模型。如果一個硬件的屋頂Roof越高,那么它在處理計算密集型任務時的性能更好;如果屋頂的Line斜率越高,表示它的HBM帶寬越高,處理訪存密集型任務時,性能越好。
圖1,不同GPU的Roofline模型
LLM推理性能模型
方法一:全局Roofline模型
基于Roofline模型,可以計算出不同LLM模型推理任務的AI。我們用Decode階段的AI來代表整體推理階段的AI,因為Prefill階段,是計算密集的,且在一次推理任務中只算一次,時間占比很小。因為LLM的Transformers layer數比較大,所以只考慮Transformers的計算和訪存,忽略包括Embedding在內的前后處理開銷。
AI = 總計算量FLOPS/(總參數大小+總KVCache大小)
為了簡化,沒考慮中間activation的內存讀取,因為它的占比通常很小,而且可以被FlashAttention之類的Kernel Fusion方法優化掉。
總計算量和參數量可以參考如下文章,文章中的數據還是針對GPT2的,這里在LLAMA2模型下進行一些修改,主要包括取消intermediate_size=4*hidden_size限制,并考慮GQA和MoE等模型結構的優化。
這里約定,bs(batch size),in_len(輸入序列長度,Decoder階段一直是1),kv_len(KVCache長度),h(hidden_size),i(intermediate_size)。
總計算量
總參數量
KVCache參數量
如果使用MoE結構,我們計算參數時對ffn 乘以 #Expert,計算量對ffn乘以topk。
有了任務的AI,可以在圖1中,min(peak_flops, ai * bandwidth)查找對應位置的Tflops性能,從而比較兩個硬件上該任務的性能優劣。
使用多卡Tensor Parallel并行,分子分母都近似除以GPU數目,因此AI幾乎不變。使用FP8會增加Roof高度,但是Line的斜率不變。
方法二:算子Roofline模型
上述方法還是將整個Transformers看成整體算出AI,還可以對Decoder中每一個算子算出它的AI,然后使用Roofline模型計算該算子的延遲。計算算子的AI可以考慮Activation的讀寫開銷,相比方法一訪存計算會更加精確。
我找到了一個現成的項目LLM-Viewer做了上述計算,該項目也是剛發布不久。
https://github.com/hahnyuan/LLM-Viewergithub.com/hahnyuan/LLM-Viewer
值得注意的是,目前無論方法一還是方法二都無法精確估計運行的延遲。比如,我們用LLM-Viewer估計A100的延遲,并和TensorRT-LLM的數據對比,可見最后兩列差距還是比較大的。因為Roofline模型只能估計性能上限,并不是實際的性能。
Model | Batch Size | Input Length | Output Length |
TRT-LLM Throughput (token/sec) |
LLM-Viewer Throughput (token/sec) |
LLaMA 7B | 256 | 128 | 128 | 5,353 | 8,934 |
LLaMA 7B | 32 | 128 | 2048 | 1,518 | 2,796 |
LLaMA 7B | 32 | 2048 | 128 | 547 | 788 |
LLaMA 7B | 16 | 2048 | 2048 | 613 | 1,169 |
但是,應該可以基于LLM-Viewer的數據進行一些擬合來精確估計不同GPU的性能,不過據我了解還沒有對LLM做精確Performance Model的工作。
效果
LLMRoofline可以使用上述兩種方式比較不同硬件的性能。它會畫出一個Mesh,橫軸時序列長度(可以看成生成任務的平均KVCache length),縱軸時Batch Size。
比如,我們比較NVIDIA H20 rumors和A100在推理任務上的差異。這兩款芯片一個帶寬很高4TBps vs 2 TBps,一個峰值性能高 312 Tflops vs 148 Flops。
使用LLAMA2 13B時,左圖是方法二、右圖是方法一的A100/H20的比較結果,大于1表示有優勢。兩張圖有差異,但是分布近似。A100比H20的優勢區域在網格的左上角。當序列長度越短、Batch Size越大,A100相比H20越有優勢。這是因為,此時任務更偏計算密集型的,A100的峰值性能相比H20更具優勢。
借助性能模型,我們可以澄清一些誤解。例如,有人可能會認為在H20上增大Batch Size會使任務變得更加計算密集,且由于H20的計算能力非常低,因此增大Batch Size是無效的。這里忽略了序列長度對AI的影響,對于處理長序列的任務來說,任務一直是訪存密集的,增大Batch Size仍然是一種有效的優化策略。
當使用LLAMA2 70B時,A100相比H20優勢區域擴大。這是因為LLAMA2 13B沒有用GQA,但LLAMA2 70B用了GQA,這讓推理任務更偏計算密集,對A100更有利。
當使用Mistral 7B時,LLM-Viewer目前還沒有登記模型信息,我們只有方法一的結果,A100相比H20的優勢區域相比13B縮小。這說明hidden size越大,越偏計算密集。
Mixtral 8X7B時,可見A100相比H20一致保持劣勢,說明MoE把推理任務推向訪存密集的深淵,H20的帶寬優勢發揮明顯作用。
通過使用 LLMRoofline,我們能夠制作出許多兩個硬件比較的 Mesh,從而清晰地觀察到一些類似上述的簡單結論。
總結
大模型推理任務的復雜性和多變性使得對不同型號GPU的適用范圍的理解變得尤為重要。為了幫助大家直觀地感知這些差異,本文介紹了一款名為LLMRoofline的性能分析工具。該工具采用Roofline模型,能夠直觀地對比不同硬件的性能和適用范圍。具體而言,影響硬件選擇的因素包括任務的序列長度、批處理大小(Batch Size),以及是否使用了MoE/GQA等優化技巧,它們相互作用可以在LLMRoofline中得到體現。
審核編輯:黃飛
-
NVIDIA
+關注
關注
14文章
5076瀏覽量
103737 -
gpu
+關注
關注
28文章
4779瀏覽量
129367 -
LLM
+關注
關注
0文章
299瀏覽量
402
原文標題:如何為LLM推理任務選擇正確的GPU
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論