家家都有DeepSeek服務,如何謊稱速度快?

不是人人都有「鈔能力」,我們的故事,

從用單節點方案部署DeepSeek-R1開始。

為什麼是單節點呢?

因為H200單卡有140GB顯存,可用單節點(8卡)方案部署。

而H800和HI00顯存80GB,需要雙節點方案。

有卡了,就可以來玩DeepSeek。

世界是場遊戲,是遊戲就有作弊的玩家。

怎麼作弊呢?等下說,

先看看晶元廠商AMD的官網技術博客。

網址在此:https://rocm.blogs.amd.com/artificial-intelligence/DeepSeekR1_Perf/README.html

時間是25年2月21日。

我相信哪怕是這幾天的時間,AMD的性能指標也還在增長。

沒辦法,AI就是這麼卷。

換個角度,這篇可以說是,

從AMD官網博客中學習大模型推理性能知識點

下圖是兩種晶元,英偉達H200和AMD MI300X,

用一個節點(8卡)跑出來的性能。


為什麼要學這些知識點呢?

答案很簡單,以防被忽悠。

話說,性能指標是一個非常關鍵的數值,

背後都是技術實力,

甚至可以說性能是技術實力的終極體現。

騾子是馬,你拉出來溜溜。

不過,現在是技術向上震蕩期,

很多人對大模型性能指標不熟悉,

會有人藉機在這個指標上面作弊。

別著急知道作弊手法,

在看懂作弊之前我們先了解如何公平,

對,公平比較兩種晶元性能

我們先看懂圖上的「已知條件」

圖上都有什麼信息呢?

我們都知道,

大模型推理分為兩個關鍵任務,

有各自的生成時間:

一個是輸入(Prefill任務)所用時間,

另一個是輸出(decode任務)所用時間。

其實所有的性能幾乎都可以分這兩個階段來觀察。

大模型推理中有兩個關鍵指標,

兩個關鍵指標是:

吞吐量(Throughput)和延遲(Latency)

吞吐量通常指每秒生成的token數量,

而延遲是從輸入到輸出的時間。

時間非常關鍵,

每秒吞吐量越高,意味著計算機系統能在單位時間內處理更多的請求。

就是單位時間乾的活越多越好。

當然,牛馬也一樣。

這張圖告訴我們:

圖中有兩種晶元,

英偉達H200型號和AMD的MI300X型號,

為了公平比較兩種晶元的性能,要統一測試,

為什麼要統一測試?

這樣才能看出處理相同工作量時,

哪個晶元速度更快、效果更好。

我們要用相同的「題目量」和「回答量」來進行測試,

也就是,統一處理4000個token(題目和回答加在一起)。

圖中原話是:輸入3200個token和輸出800個token。

這樣,兩個系統都各自處理4000個token的信息量,

而且圖中已知,每個推理請求中,平均向系統問出500個問題。

這樣,測試「系統處理token數量」統一了。

這張圖還想告訴我們幾個技術概念,

吞吐量(單位:token/秒)

延遲(單位:毫秒)

下面,我們會把毫秒換算成秒。

而最大並發數(Max Concurrency)是什麼呢?

就是衡量系統在同一時刻能同時服務多少個請求,

能讓我們了解AI 系統在真實環境下對大量請求的抗壓能力,

就像考場里同一時間安排多少考生一起考試的道理一樣。

最大並發數,用Batch Size表示:

我們要根據不同的請求數量,觀察系統性能分別是多少。

因為是測試,所以非常細緻,

能讓我們了解 AI 系統在真實環境下對大量請求的適應能力,

就像考場里同一時間安排多少考生一起考試的道理一樣。

當推理請求數量(Batch Size),

分別是是1,2,4……128,

Batch Size1是只有1個請求,

Batch Size2,同時處理2個請求,

Batch Size4,同時處理4個請求,

以此類推,直到Batch Size128,

就是同時處理128個請求。

打個比方,當我們說Batch Size1,

代表只有1個人在考試,1個人用考試系統;

Batch Size2,代表有2個人一起考試;

以此類推,Batch Size128 ,

就意味著128個人同時在考試。

如果只有1 個人在考試(Batch Size1),

系統專心為一個考生服務,一般來說,速度慢不了;

如果有128 個考生一起考試(Batch Size128),

系統就要同時對128 個人的題目進行閱讀、思考、回答,負擔變大,

可能會增加等待時間。

我們再來看圖,

在圖上左下方讀到的第一個數字是170,

單位tokens/s。

意味著:

已知總共4000個token的信息量,

當BatchSize1的時候,每秒處理170個token,

以這種速度來處理,

那需要的時間就是4000除以170等於23.5秒。

就是用23.5秒就能把這4000個token算完。

23.5秒在時間軸橫軸上處於2萬毫秒右邊一點的位置。

沒有明確寫出來,但我們讀圖能讀出來。




圖片試圖說明AMD晶元性能很好,

然而,我對AMD的這種廣告沒有什麼興趣。

我感興趣的是:AMD這個廠商很良心,

他們的性能數據很清楚地告訴我們,

輸入和輸出的字數是多少(輸入3200個token和輸出800個token),

3200+800就是系統總處理的token數,

4000除以170等於23.5秒,

也就是說,decode任務時間是23秒,

也是恆定的塞進去的信息量就這麼多。

好比,東西放進大模型裡面多長時間能「出鍋」,

需要測量一個客觀的時間,

也就是,系統跑出來是幾秒就是幾秒。

生成速度,也就是多少秒生成多少token是一個硬指標,

是用總吞吐量除以測量出得時間得出來的。

這裡要稍微計算一下了:

用圖上的已知信息倒著推理兩個信息。

當我們跑8張卡的H200的系統(單節點),

在Batch Size1的時候,情況如下:

情況一:輸入3200,輸出800,4000=3200+800

4000tokens除以170tokens/s等於23.53秒

估計decode時間大約為23秒,

再看decode的信息處理量是800token,

decode800tokens除以23秒等於35tokens/s。

看好了,這時候我要來「作弊」了,把輸入和輸出的數據互換一下。

情況二:輸入800,輸出3200,4000=800+3200

3200tokens除以34.78tokens/s,

就是每秒跑出來34.78個token,

雖然同樣還是處理總共4000個token,

但是,用3200除以35okens/s等於91秒,

decode時間就會變得很長,91秒。

都是處理同樣的信息量,調整輸入和輸出,

decode的時間從23秒變成了91秒。

這個技術細節非常重要。

有時候,廠商提供的測試數據是prefill和decode加在一起的,

當然,也可以說混在一起。

既然「混了」,「摸魚」的機會就來了,

好比兩個長跑運動員,

一個叫prefill,一個叫decode,

prefill跑得快,decode跑得慢,

至於為什麼decode慢,

這個你的去問「注意力機制」這個傢伙了,

都是它乾的好事,這裡不展開。

同樣的一段長跑運動,

prefill和decode的速度應該分別記錄,

假如想作弊,就把盡量長的路程給prefill跑,

它速度快,時間肯定就縮短了。

要是不懂,猛一看性能,覺得還挺快嘞。

還是那句話,性能是和採購決策相關的關鍵指標。

廠商AMD很客觀,告訴你比例了(輸入3200,輸出800),

有人會把prefill的比例調高點,數值就更好看了,

因為decode跑得慢,讓decode少跑,也就是少干點活。

請注意,有些性能指標旁邊標著「僅輸出」(decode only)

這不是不可以,而是,拿「僅輸出」的指標和整個推理的吞吐指標對比,

不講武德。

總結一下:寫性能,請把prefill和decode處理的工作量標清楚,謝謝。

最後預告下,過幾天發的文章,

我會把圖上所有的指標都算出來,會有新結論。

上一篇回顧:

《DeepSeek:為了這口醋,包了這頓餃子,為了數據,我造了模型》