項目地址:https://github.com/deepseek-ai/DeepEP
開源日歷:2025-02-24起 每日9AM(北京時間)更新,持續五天 (2/5)!
?
?
引言
在大模型訓練中,混合專家模型(Mixture-of-Experts, MoE)因其動態路由和高效計算特性備受關注。然而,隨著模型規模的擴大,GPU 間的數據通信成為關鍵瓶頸——尤其是在專家并行(Expert Parallelism, EP)場景中,數據需要在多個 GPU 間高效分發與合并。傳統通信庫往往難以兼顧高吞吐與低延遲,而 DeepEP 的誕生正是為了解決這一難題。
核心功能與設計理念
1. 什么是 DeepEP?
DeepEP 是由 DeepSeek 開源的高性能通信庫,專為 MoE/EP 場景設計。其核心目標是通過優化 GPU 間數據傳輸,實現:
- 訓練加速:提升多 GPU 協作效率
- 推理降延遲:支持實時推理任務(如 ChatGPT)
- 資源高效利用:減少 GPU 閑置時間
2. 技術亮點解析
(1)域間帶寬優化
針對 MoE 的非對稱通信場景(如 NVLink 域到 RDMA 域)深度優化:
- NVLink(節點內 GPU 互聯):帶寬達 160 GB/s
- RDMA(跨節點 GPU 互聯):帶寬達 50 GB/s
通過定制內核實現數據轉發路徑優化,避免帶寬浪費。
(2)低精度計算支持
- FP8 分發 + BF16 合并:在保證精度的同時減少 50% 顯存占用
- 動態精度切換:適應不同階段的計算需求
(3)通信-計算重疊
?
通過 Hook 機制實現:
- 前向傳播時后臺預加載數據
- 反向傳播時異步傳輸梯度
關鍵優勢:零額外 SM 資源占用,最大化 GPU 利用率
性能實測
測試環境
- 硬件:NVIDIA H800 GPU + CX7 InfiniBand 400Gb/s RDMA 網卡
- 軟件:CUDA 12.3 + PyTorch 2.1
性能數據
常規模式(訓練/預填充推理)
場景 | 通信類型 | 吞吐量 |
---|---|---|
節點內(8卡) | NVLink | 153 GB/s |
跨節點(64卡) | RDMA | 46 GB/s |
低延遲模式(推理生成)
專家數 | 延遲 | RDMA 帶寬 |
---|---|---|
8 | 163 μs | 46 GB/s |
128 | 192 μs | 39 GB/s |
注:在 128 token 批處理下,延遲僅增加 18%,展現極強的擴展性
架構設計與關鍵技術
1. 分層通信模型
- 分發階段:通過原子操作動態分配 token 到專家
- 組合階段:基于元數據快速聚合結果
2. 推理優化黑科技
def low_latency_dispatch(hidden_states, topk_idx):# 后臺啟動 RDMA 傳輸recv_hidden, hook = _buffer.low_latency_dispatch(...)# 立即返回控制權,計算與傳輸并行return recv_hidden, hook
通過 純 RDMA 傳輸 + 雙緩沖機制,實現:
- 163 μs 端到端延遲
- 零 CUDA 核占用
快速入門指南
1. 環境要求
組件 | 版本要求 |
---|---|
GPU | Hopper 架構(H100/H800) |
Python | 3.8+ |
CUDA | 12.3+ |
PyTorch | 2.1+ |
網絡 | NVLink + RDMA |
- CUDA安裝指南
- GPU-pytorch 安裝指南
2. 安裝步驟
# 安裝定制版 NVSHMEM
git clone https://github.com/NVIDIA/nvshmem
cd nvshmem && git apply DeepEP/third-party/nvshmem.patch
make -j 16 && make install# 安裝 DeepEP
NVSHMEM_DIR=/path/to/nvshmem python setup.py install
3. 基礎使用示例
import deep_ep# 初始化通信緩沖區
buffer = deep_ep.Buffer(group=dist.group.WORLD,num_nvl_bytes=1e9, # NVLink 緩沖區 1GBnum_rdma_bytes=2e9 # RDMA 緩沖區 2GB
)# MoE 分發數據
recv_data, metadata = buffer.dispatch(input_tensor, expert_indices, num_experts=64
)# 執行專家計算
expert_output = experts[metadata.expert_id](recv_data)# 合并結果
combined_result = buffer.combine(expert_output)
高級調優建議
1. 網絡配置優化
參數 | 推薦值 | 說明 |
---|---|---|
?NVSHMEM_IB_SL? | 1-3 | 隔離不同類型流量 |
自適應路由 | 高負載時啟用 | 避免網絡擁塞 |
擁塞控制 | 關閉 | DeepSeek 實測無顯著影響 |
2. SM 資源分配
# 設置 24 個 SM 專供通信
Buffer.set_num_sms(24)
通過動態調整 SM 數量,平衡計算與通信資源。
應用場景與案例
1. 千卡級訓練加速
在 2048 卡集群中:
- 線性擴展效率 >92%
- 訓練吞吐量提升 3.8 倍(對比 Megatron-LM)
2. 實時推理服務
- 70B 參數 MoE 模型
- 單請求延遲 <200 ms(端到端)
- 吞吐量 1200 token/s
注意事項
- 硬件限制:目前僅支持 Hopper 架構 GPU
- PTX 指令:使用未公開指令 ld.global.nc.L1::no_allocate? 實現極致性能,可通過 DISABLE_AGGRESSIVE_PTX_INSTRS=1? 禁用
- 緩沖區管理:低延遲模式需預留更大 RDMA 緩沖區
開源生態
- GitHub Star:開源 3 小時即破 2k
- 生態整合:vLLM 等框架正在適配
??
- 許可證:核心代碼 MIT 許可,NVSHMEM 部分遵循 NVIDIA SLA
參考引用:
- Github - DeepEP
- 開源周第二天 - DeepEP
- DeepEP 詳解,GPU壓榨計劃啟動!
- DeepSeek開源周第二天-DeepEP
-
DeepSeek最新開源DeepEP技術深入分析
專業術語解釋
- 混合專家模型(Mixture-of-Experts, MoE)
一種將復雜任務分配給多個專家模塊進行處理的模型架構。類似于一個大型項目被分解給多個專業團隊分別完成。 - 專家并行(Expert Parallelism, EP)
一種在模型訓練中多個專家模塊同時進行計算的模式。類似于多個工作小組同時開展不同部分的工作。 - 非對稱通信場景
指通信雙方在數據傳輸量、傳輸方向或性能要求等方面存在差異的情況。類似于兩人交流時一方說得多另一方說得少。 - NVLink
用于節點內 GPU 互聯的高速通信技術,具有高帶寬。類似于房間內不同家具之間的快速通道。 - RDMA
一種跨節點 GPU 互聯的通信技術。類似于不同房間之間的快捷通道。 - 數據轉發路徑優化
對數據傳輸的路徑進行改進以提高效率和減少浪費。類似于優化物流運輸的路線。 - FP8 分發 + BF16 合并
數據分發和合并時采用的不同精度格式,以平衡精度和資源占用。類似于根據物品的重要性選擇不同大小的盒子來裝。 - 通信-計算重疊
讓數據通信和計算過程同時進行,以提高效率。類似于一邊做飯一邊收拾廚房。 - 分層通信模型
將通信過程分為不同層次進行處理和優化的模型。類似于把一個大工程分為不同的施工階段。 - 雙緩沖機制
使用兩個緩沖區交替工作來提高數據傳輸效率。類似于兩個工人交替工作,一個工作時另一個準備。 - SM 資源
指 GPU 中的流多處理器(Streaming Multiprocessor)相關的資源。類似于工廠里的生產車間資源。
DeepEP 的推出標志著 MoE 訓練進入新紀元。通過硬件級通信優化,它成功將 GPU 集群的潛力壓榨到極致——正如網友所言:"這才是真正的 GPU 起飛!"。隨著生態的完善,我們有理由期待更多千億級模型將借此突破訓練效率的邊界。