DeepSeek突襲公布成本利潤率:545%
五連開源后,DeepSeek還有One More Thing!
就在剛剛,DeepSeek官方親自揭秘了DeepSeek-V3/R1推理系統(tǒng)。
重點(diǎn)包括,優(yōu)化吞吐量和延遲的方法:
- 跨節(jié)點(diǎn)EP驅(qū)動(dòng)的批量擴(kuò)展
- 計(jì)算與通信重疊
- 負(fù)載均衡
還公布了DeepSeek的在線服務(wù)數(shù)據(jù)統(tǒng)計(jì):
- 每個(gè)H800節(jié)點(diǎn)每秒有73.7k/14.8k個(gè)輸入/輸出token
- 成本利潤率545%
更多細(xì)節(jié),一起來看官方原文↓
更大的吞吐,更低的延遲
DeepSeek-V3/R1推理系統(tǒng)的優(yōu)化目標(biāo)是:更大的吞吐,更低的延遲。
為了實(shí)現(xiàn)這兩個(gè)目標(biāo),我們的方案是使用大規(guī)??绻?jié)點(diǎn)專家并行(ExpertParallelism/EP)。
首先EP使得batch size大大增加,從而提高GPU矩陣乘法的效率,提高吞吐。其次EP使得專家分散在不同的GPU上,每個(gè)GPU只需要計(jì)算很少的專家(因此更少的訪存需求),從而降低延遲。
但EP同時(shí)也增加了系統(tǒng)的復(fù)雜性。復(fù)雜性主要體現(xiàn)在兩個(gè)方面:
- EP引入跨節(jié)點(diǎn)的傳輸。為了優(yōu)化吞吐,需要設(shè)計(jì)合適的計(jì)算流程使得傳輸和計(jì)算可以同步進(jìn)行。
- EP涉及多個(gè)節(jié)點(diǎn),因此天然需要Data Parallelism(DP),不同的DP之間需要進(jìn)行負(fù)載均衡。
因此,本文的主要內(nèi)容是如何使用EP增大batch size,如何隱藏傳輸?shù)暮臅r(shí),如何進(jìn)行負(fù)載均衡。
大規(guī)??绻?jié)點(diǎn)專家并行(Expert Parallelism/EP)
由于DeepSeek-V3/R1的專家數(shù)量眾多,并且每層256個(gè)專家中僅激活其中8個(gè)。模型的高度稀疏性決定了我們必須采用很大的overall batch size,才能給每個(gè)專家提供足夠的expert batch size,從而實(shí)現(xiàn)更大的吞吐、更低的延時(shí)。需要大規(guī)??绻?jié)點(diǎn)專家并行(Expert Parallelism/EP)。
我們采用多機(jī)多卡間的專家并行策略來達(dá)到以下目的:
- Prefill:路由專家EP32、MLA和共享專家DP32,一個(gè)部署單元是4節(jié)點(diǎn),32個(gè)冗余路由專家,每張卡9個(gè)路由專家和1個(gè)共享專家
- Decode:路由專家EP144、MLA和共享專家DP144,一個(gè)部署單元是18節(jié)點(diǎn),32個(gè)冗余路由專家,每張卡2個(gè)路由專家和1個(gè)共享專家
計(jì)算通信重疊
多機(jī)多卡的專家并行會(huì)引入比較大的通信開銷,所以我們使用了雙batch重疊來掩蓋通信開銷,提高整體吞吐。
對(duì)于prefill階段,兩個(gè)batch的計(jì)算和通信交錯(cuò)進(jìn)行,一個(gè)batch在進(jìn)行計(jì)算的時(shí)候可以去掩蓋另一個(gè)batch的通信開銷;
△Prefill階段的雙batch重疊
對(duì)于decode階段,不同階段的執(zhí)行時(shí)間有所差別,所以我們把a(bǔ)ttention部分拆成了兩個(gè)stage,共計(jì)5個(gè)stage的流水線來實(shí)現(xiàn)計(jì)算和通信的重疊。
△Decode階段的雙batch重疊
關(guān)于更多雙batch重疊的細(xì)節(jié),可以參考我們的profiling數(shù)據(jù)的GitHub倉庫:https://github.com/deepseek-ai/profile-data。
盡可能地負(fù)載均衡
由于采用了很大規(guī)模的并行(包括數(shù)據(jù)并行和專家并行),如果某個(gè)GPU的計(jì)算或通信負(fù)載過重,將成為性能瓶頸,拖慢整個(gè)系統(tǒng);同時(shí)其他GPU因?yàn)榈却辙D(zhuǎn),造成整體利用率下降。因此我們需要盡可能地為每個(gè)GPU分配均衡的計(jì)算負(fù)載、通信負(fù)載。
- Prefill Load Balancer
a.核心問題:不同數(shù)據(jù)并行(DP)實(shí)例上的請(qǐng)求個(gè)數(shù)、長度不同,導(dǎo)致core-attention計(jì)算量、dispatch發(fā)送量也不同
b.優(yōu)化目標(biāo):各GPU的計(jì)算量盡量相同(core-attention計(jì)算負(fù)載均衡)、輸入的token數(shù)量也盡量相同(dispatch發(fā)送量負(fù)載均衡),避免部分GPU處理時(shí)間過長
- Decode Load Balancer
- 核心問題:不同數(shù)據(jù)并行(DP)實(shí)例上的請(qǐng)求數(shù)量、長度不同,導(dǎo)致core-attention計(jì)算量(與KVCache占用量相關(guān))、dispatch發(fā)送量不同
- 優(yōu)化目標(biāo):各GPU的KVCache占用量盡量相同(core-attention計(jì)算負(fù)載均衡)、請(qǐng)求數(shù)量盡量相同(dispatch發(fā)送量負(fù)載均衡)
- Expert-Parallel Load Balancer
- 核心問題:對(duì)于給定MoE模型,存在一些天然的高負(fù)載專家(expert),導(dǎo)致不同GPU的專家計(jì)算負(fù)載不均衡
- 優(yōu)化目標(biāo):每個(gè)GPU上的專家計(jì)算量均衡(即最小化所有GPU的dispatch接收量的最大值)
參考架構(gòu)圖
線上系統(tǒng)的實(shí)際統(tǒng)計(jì)數(shù)據(jù)
DeepSeekV3和R1的所有服務(wù)均使用H800 GPU,使用和訓(xùn)練一致的精度,即矩陣計(jì)算和dispatch傳輸采用和訓(xùn)練一致的FP8格式,core-attention計(jì)算和combine傳輸采用和訓(xùn)練一致的BF16,最大程度保證了服務(wù)效果。
另外,由于白天的服務(wù)負(fù)荷高,晚上的服務(wù)負(fù)荷低,因此我們實(shí)現(xiàn)了一套機(jī)制,在白天負(fù)荷高的時(shí)候,用所有節(jié)點(diǎn)部署推理服務(wù)。晚上負(fù)荷低的時(shí)候,減少推理節(jié)點(diǎn),以用來做研究和訓(xùn)練。在最近的24小時(shí)里(北京時(shí)間2025/02/27 12:00至2025/02/28 12:00),DeepSeekV3和R1推理服務(wù)占用節(jié)點(diǎn)總和,峰值占用為278個(gè)節(jié)點(diǎn),平均占用226.75個(gè)節(jié)點(diǎn)(每個(gè)節(jié)點(diǎn)為8個(gè)H800 GPU)。假定GPU租賃成本為2美金/小時(shí),總成本為$87,072/天。
在24小時(shí)統(tǒng)計(jì)時(shí)段內(nèi),DeepSeekV3和R1:
輸入token總數(shù)為608B,其中342B tokens(56.3%)命中KVCache硬盤緩存。
輸出token總數(shù)為168B。平均輸出速率為20~22tps,平均每輸出一個(gè)token的KVCache長度是4989。
平均每臺(tái)H800的吞吐量為:對(duì)于prefill任務(wù),輸入吞吐約73.7k tokens/s(含緩存命中);對(duì)于decode任務(wù),輸出吞吐約14.8k tokens/s。
以上統(tǒng)計(jì)包括了網(wǎng)頁、APP和API的所有負(fù)載。如果所有tokens全部按照DeepSeek R1的定價(jià)*計(jì)算,理論上一天的總收入為$562,027,成本利潤率545%。
*DeepSeek R1的定價(jià):$0.14/百萬輸入tokens(緩存命中),$0.55/百萬輸入tokens(緩存未命中),$2.19/百萬輸出tokens。
當(dāng)然我們實(shí)際上沒有這么多收入,因?yàn)閂3的定價(jià)更低,同時(shí)收費(fèi)服務(wù)只占了一部分,另外夜間還會(huì)有折扣。