官方詳解 DeepSeek-V3 / R1 推理系統:理論利潤率達 545%
3 月 1 日消息,DeepSeek 官方今日在知乎發布《DeepSeek-V3 / R1 推理系統概覽》一文,詳細介紹如何使用大規模跨節點專家并行(Expert Parallelism / EP)來增大 batch size,如何隱藏傳輸的耗時,如何進行負載均衡。
官方表示,DeepSeek-V3 / R1 推理系統的優化目標是更大的吞吐,更低的延遲。
IT之家附 DeepSeek 提出的方案如下:
大規模跨節點專家并行(Expert Parallelism / EP)
由于 DeepSeek-V3 / R1 的專家數量眾多,并且每層 256 個專家中僅激活其中 8 個。模型的高度稀疏性決定了 DeepSeek 必須采用很大的 overall batch size,才能給每個專家提供足夠的 expert batch size,從而實現更大的吞吐、更低的延時。需要大規模跨節點專家并行(Expert Parallelism / EP)。
DeepSeek 采用多機多卡間的專家并行策略來達到以下目的:
- Prefill:路由專家 EP32、MLA 和共享專家 DP32,一個部署單元是 4 節點,32 個冗余路由專家,每張卡 9 個路由專家和 1 個共享專家
- Decode:路由專家 EP144、MLA 和共享專家 DP144,一個部署單元是 18 節點,32 個冗余路由專家,每張卡 2 個路由專家和 1 個共享專家
計算通信重疊
多機多卡的專家并行會引入比較大的通信開銷,因此使用雙 batch 重疊來掩蓋通信開銷,提高整體吞吐。
對于 prefill 階段,兩個 batch 的計算和通信交錯進行,一個 batch 在進行計算的時候可以去掩蓋另一個 batch 的通信開銷;
Prefill 階段的雙 batch 重疊
對于 decode 階段,不同階段的執行時間有所差別,因此將 attention 部分拆成了兩個 stage,共計 5 個 stage 的流水線來實現計算和通信的重疊。
Decode 階段的雙 batch 重疊
關于更多雙 batch 重疊的細節,可參考 profiling 數據 GitHub 倉庫:https://github.com/deepseek-ai/profile-data。
盡可能地負載均衡
由于采用了很大規模的并行(包括數據并行和專家并行),如果某個 GPU 的計算或通信負載過重,將成為性能瓶頸,拖慢整個系統;同時其他 GPU 因為等待而空轉,造成整體利用率下降。因此需盡可能為每個 GPU 分配均衡的計算負載、通信負載。
Prefill Load Balancer
- 核心問題:不同數據并行(DP)實例上的請求個數、長度不同,導致 core-attention 計算量、dispatch 發送量也不同
- 優化目標:各 GPU 的計算量盡量相同(core-attention 計算負載均衡)、輸入的 token 數量也盡量相同(dispatch 發送量負載均衡),避免部分 GPU 處理時間過長
Decode Load Balancer
- 核心問題:不同數據并行(DP)實例上的請求數量、長度不同,導致 core-attention 計算量(與 KVCache 占用量相關)、dispatch 發送量不同
- 優化目標:各 GPU 的 KVCache 占用量盡量相同(core-attention 計算負載均衡)、請求數量盡量相同(dispatch 發送量負載均衡)
Expert-Parallel Load Balancer
- 核心問題:對于給定 MoE 模型,存在一些天然的高負載專家(expert),導致不同 GPU 的專家計算負載不均衡
- 優化目標:每個 GPU 上的專家計算量均衡(即最小化所有 GPU 的 dispatch 接收量的最大值)
參考架構圖
線上系統的實際統計數據
DeepSeek V3 和 R1 的所有服務均使用 H800 GPU,使用和訓練一致的精度,即矩陣計算和 dispatch 傳輸采用和訓練一致的 FP8 格式,core-attention 計算和 combine 傳輸采用和訓練一致的 BF16,最大程度保證了服務效果。另外,由于白天的服務負荷高,晚上的服務負荷低,因此 DeepSeek 實現了一套機制:
- 白天負荷高時用所有節點部署推理服務。
- 晚上負荷低時,減少推理節點,以用來做研究和訓練。、
在最近的 24 小時里(北京時間 2025/02/27 12:00 至 2025/02/28 12:00),DeepSeek V3 和 R1 推理服務占用節點總和,峰值占用為 278 個節點,平均占用 226.75 個節點(每個節點為 8 個 H800 GPU)。假定 GPU 租賃成本為 2 美金 / 小時,總成本為 $87,072 / 天。
在 24 小時統計時段內,DeepSeek V3 和 R1:
- 輸入 token 總數為 608B,其中 342B tokens(56.3%)命中 KVCache 硬盤緩存。
- 輸出 token 總數為 168B。平均輸出速率為 20~22 tps,平均每輸出一個 token 的 KVCache 長度是 4989。
- 平均每臺 H800 的吞吐量為:對于 prefill 任務,輸入吞吐約 73.7k tokens / s(含緩存命中);對于 decode 任務,輸出吞吐約 14.8k tokens / s。以上統計包括了網頁、APP 和 API 的所有負載。如果所有 tokens 全部按照 DeepSeek R1 的定價計算,理論上一天的總收入為 $562,027,成本利潤率 545%。
“當然我們實際上沒有這么多收入,因為 V3 的定價更低,同時收費服務只占了一部分,另外夜間還會有折扣。”
DeepSeek R1 的定價:$0.14 / 百萬輸入 tokens (緩存命中),$0.55 / 百萬輸入 tokens (緩存未命中),$2.19 / 百萬輸出 tokens。