剛剛,DeepSeek又開源!DeepEP詳解,GPU壓榨計劃啟動!

GPU 榨乾計劃正式啟動!
剛剛,DeepSeek 又放出了一款最佳化顯示卡到極限的專案——DeepEP。簡單來說,它能讓DeepSeek V3 在 2048 張顯示卡上跑得飛快,訓練 AI 不再是“顯示卡煉丹”,而是“顯示卡起飛”!
DeepEP 其實是一個 幫助 AI 訓練和推理變快的通訊工具,專門針對 Mixture-of-Experts (MoE) 訓練方法 設計的。它的主要作用是最佳化 GPU 之間的資料傳輸,讓計算任務跑得更快、更流暢。
僅開源2小時,又雙叒叕斬獲了 1k+ Star,開源領域殺瘋了!

開源專案地址:

https://github.com/deepseek-ai/DeepEP
讓廣大網友稱讚不絕,直呼你們才是真正的OpenAI!!

DeepEP 的主要功能與解決的問題

在大模型訓練或推理過程中,資料需要在不同的 GPU 之間來回傳輸,比如:
  1. 訓練時:需要把資料分發給不同的“專家”(Experts),然後再合併計算結果。
  2. 推理時:需要快速找到合適的專家並獲取結果,不能有太多延遲。
普通的 GPU 傳輸速度有限,特別是多個 GPU 之間的通訊會變慢,影響計算效率。DeepEP 就是為了解決這個問題,讓資料傳輸更快、計算更高效,主要透過以下幾種方式:
  1. 讓 GPU 之間傳輸更快
  • 優化了 NVLink(同一臺機器裡的 GPU 傳輸)和 RDMA(不同機器之間的 GPU 傳輸,讓資料能夠更快地在多個 GPU 之間傳輸,不會卡住。
  1. 減少推理時的延遲
  • 使用特殊的 RDMA 技術,可以顯著降低推理過程中的通訊延遲,特別適合大模型的即時推理(比如 ChatGPT 這種)。
  1. 計算和傳輸可以同時進行
  • DeepEP 提供了一種 hook 機制,使 GPU 可以一邊計算,一邊傳輸資料,不會讓計算任務因為資料傳輸而被阻塞,不讓GPU在後面偷偷摸魚。
總結一句話:DeepEP讓訓練和推理更快,透過最佳化 GPU 傳輸、降低推理延遲、平行計算和傳輸,極大提升大規模 MoE 訓練和推理的效率!

DeepEP 到底能讓AI跑的有多快?

在 NVIDIA H800 GPU + 400Gb/s RDMA 的伺服器上測試:
  • 普通模式(訓練 / 預填充推理):NVLink 速度可達 158GB/s,RDMA 速度 43-47GB/s
  • 低延遲模式(推理解碼):延遲可低至163 微秒,RDMA 速度 39-46GB/s

安裝和使用

要用 DeepEP,需要:
  1. Hopper 架構的 GPU(比如 H100 / H800)
  2. Python 3.8+
  3. CUDA 12.3+
  4. PyTorch 2.1+
  5. NVLink + RDMA 裝置
安裝命令:

NVSHMEM_DIR=/path/to/installed/nvshmem python setup.py install

然後就可以在 Python 裡使用:
import

 deep_ep

舉個例子:如何在 MoE 訓練中使用 DeepEP?

假設我們有一個需要分配任務給多個 GPU 計算的 MoE 模型,DeepEP 可以幫我們快速進行 dispatch(分發任務)和 combine(合併結果)
import

 torch

import

 torch.distributed 

as

 dist

from

 deep_ep 

import

 Buffer

# 初始化通訊 buffer

_buffer = 

None

defget_buffer(group, hidden_bytes):
global

 _buffer

if

 _buffer 

isNoneor

 _buffer.group != group:

        _buffer = Buffer(group, hidden_bytes, hidden_bytes)

return

 _buffer

# MoE 分發任務
defdispatch_forward(x, topk_idx, topk_weights, num_experts):
global

 _buffer

    recv_x, recv_topk_idx, recv_topk_weights, handle, event = _buffer.dispatch(x, topk_idx, topk_weights, num_experts)

return

 recv_x, recv_topk_idx, recv_topk_weights, handle, event

這段程式碼的作用:
  • 先建立一個 GPU 之間的“快速通道”
  • 把 MoE 任務分配給不同的 GPU
  • 接收計算結果
以前,這些操作可能需要 更長時間,DeepEP 讓它們變得 更快

在推理解碼階段怎麼用?

在推理時,DeepEP可以讓資料在後臺傳輸,不會影響計算。比如:
import

 torch

import

 torch.distributed 

as

 dist

from

 deep_ep 

import

 Buffer
_buffer = 

None

defget_buffer(group, num_max_tokens, hidden, num_experts):
global

 _buffer

if

 _buffer 

isNoneor

 _buffer.group != group:

        _buffer = Buffer(group, 

0

, num_max_tokens * hidden * num_experts, low_latency_mode=

True

)

return

 _buffer

deflow_latency_dispatch(hidden_states, topk_idx, num_max_tokens, num_experts):
global

 _buffer

    recv_hidden_states, recv_expert_count, handle, event, hook = _buffer.low_latency_dispatch(hidden_states, topk_idx, num_max_tokens, num_experts)

return

 recv_hidden_states, recv_expert_count, handle, event, hook

這段程式碼:
  • 在推理時用 DeepEP 快速分配資料
  • 讓資料在後臺傳輸,不影響 GPU 計算
  • 適合 ChatGPT 這樣的模型
DeepSeek 開源周才剛開始,下一波大招是什麼?評論區大膽預測!

·················END·················


相關文章