DeepSeek開源第三彈:驚人的300行代碼驅(qū)動R1和V3的訓(xùn)練與推理,超越各種專家內(nèi)核
DeepSeek開源周第三彈!DeepSeek-AI 重磅發(fā)布高效FP8 GEMM庫 DeepGEMM:極致性能,代碼精簡,助力V3/R1模型訓(xùn)練與推理!
簡單來說這是由 DeepSeek-AI 團(tuán)隊精心打造的 FP8 通用矩陣乘法 (GEMM) 加速庫,專為追求極致性能和代碼簡潔而生
我們一起來扒一扒:
Hopper GPU 上狂飆 1350+ FP8 TFLOPS!
在算力為王的 AI 時代,矩陣乘法 (GEMM) 的效率至關(guān)重要。DeepGEMM 正是為了解決這一痛點!它充分利用 NVIDIA Hopper 架構(gòu) GPU的強(qiáng)大算力,在 FP8 精度下,性能 高達(dá) 1350+ TFLOPS!這意味著更快的模型訓(xùn)練速度,更流暢的推理體驗,以及更低的計算成本!
DeepGEMM 不僅適用于傳統(tǒng)的 稠密模型,更完美支持 混合專家模型 (MoE) 的 GEMM 計算,無論是 DeepSeek-V3 還是 R1 模型,都能得到強(qiáng)力加速!
代碼極簡!核心邏輯僅 300 行,堪比教程級!
你沒聽錯!DeepGEMM 的核心 kernel 函數(shù)代碼量僅有 驚人的 ~300 行! DeepSeek-AI 團(tuán)隊秉持著 “大道至簡” 的設(shè)計理念,在保證極致性能的同時,力求代碼的 可讀性 和 可維護(hù)性。 即使是剛?cè)腴T CUDA 開發(fā)的同學(xué),也能輕松理解 DeepGEMM 的實現(xiàn)原理,甚至可以作為學(xué)習(xí) Hopper FP8 矩陣乘法和優(yōu)化的絕佳教程!
? 無需編譯!完全 Just-In-Time (JIT) 編譯,即裝即用! ?
告別繁瑣的編譯過程!DeepGEMM 采用了 全 Just-In-Time (JIT) 編譯 技術(shù),所有 kernel 都在運(yùn)行時動態(tài)編譯,無需在安裝時進(jìn)行任何預(yù)編譯。 這意味著你可以 即裝即用 DeepGEMM,省去了大量的配置和編譯時間,讓你可以更專注于模型開發(fā)和實驗。
DeepGEMM 的 JIT 設(shè)計還帶來了額外的優(yōu)勢:它可以根據(jù)不同的 GEMM 形狀、block size 等參數(shù)進(jìn)行 動態(tài)優(yōu)化,始終選擇最佳的 kernel 配置,保證在各種場景下都能發(fā)揮出最佳性能。
?? 硬核技術(shù)解析:DeepGEMM 的性能秘訣
DeepGEMM 在代碼簡潔的同時,性能卻能比肩甚至超越一些專家調(diào)優(yōu)的庫,這背后離不開一系列硬核技術(shù)的加持:
- ? 精細(xì)粒度 Scaling (Fine-grained Scaling): DeepGEMM 采用了 DeepSeek-V3 論文中提出的精細(xì)粒度 scaling 技術(shù),更有效地利用 FP8 的動態(tài)范圍,提升計算精度和性能
- ? CUDA-core 雙層累加 (Two-level Accumulation): 為了解決 FP8 tensor core 累加精度不足的問題,DeepGEMM 巧妙地使用了 CUDA-core 雙層累加技術(shù),保證了計算結(jié)果的準(zhǔn)確性
- ? Persistent Warp-specialization (持久 Warp 特化): 借鑒 CUTLASS 的設(shè)計思想,DeepGEMM 的 kernel 進(jìn)行了 warp 特化,實現(xiàn)了數(shù)據(jù)移動、tensor-core MMA 指令和 CUDA-core promotion 的高效重疊,最大化利用硬件資源
- ? Tensor Memory Accelerator (TMA): DeepGEMM 充分利用 Hopper 架構(gòu)引入的 TMA 特性,加速 LHS、RHS 矩陣和 scaling factor 的加載,以及輸出矩陣的存儲,實現(xiàn)更快的數(shù)據(jù)訪問速度
- ? 統(tǒng)一優(yōu)化 Block Scheduler 和 Rasterization (柵格化): DeepGEMM 采用統(tǒng)一的 block scheduler,并結(jié)合 Rasterization 技術(shù),提升 L2 cache 的復(fù)用率,進(jìn)一步優(yōu)化性能
- ? FFMA SASS Interleaving: DeepGEMM 甚至深入到 SASS 匯編層面進(jìn)行優(yōu)化,通過調(diào)整 FFMA 指令的 interleaving 模式,提升 warp 級別的并行度,榨干硬件的每一絲潛力
DeepGEMM 雖然借鑒了 CUTLASS 和 CuTe 的一些概念,但它并沒有過度依賴于復(fù)雜的模板或代數(shù)庫,而是更加注重 簡潔性 和 易用性。 這使得 DeepGEMM 不僅是一個高性能的計算庫,更是一個學(xué)習(xí) Hopper FP8 矩陣乘法和優(yōu)化的優(yōu)秀資源
?? 實測性能數(shù)據(jù):實力說話! ??
DeepGEMM 的性能究竟如何?我們用數(shù)據(jù)說話!在 DeepSeek-V3/R1 模型常用的各種 shape 上,DeepGEMM 都展現(xiàn)出了驚人的性能:
- ? Normal GEMMs for dense models (稠密模型 GEMM)
M | N | K | Computation | Memory bandwidth | Speedup |
64 | 2112 | 7168 | 206 TFLOPS | 1688 GB/s | 2.7x |
64 | 24576 | 1536 | 289 TFLOPS | 2455 GB/s | 1.7x |
... | ... | ... | ... | ... | ... |
4096 | 7168 | 2048 | 1025 TFLOPS | 697 GB/s | 1.1x |
- ? Grouped GEMMs for MoE models (contiguous layout) (MoE 模型 GEMM - 連續(xù)布局)
#Groups | M per group | N | K | Computation | Memory bandwidth | Speedup |
4 | 8192 | 4096 | 7168 | 1297 TFLOPS | 418 GB/s | 1.2x |
4 | 8192 | 7168 | 2048 | 1099 TFLOPS | 681 GB/s | 1.2x |
... | ... | ... | ... | ... | ... | ... |
8 | 4096 | 7168 | 2048 | 1093 TFLOPS | 743 GB/s | 1.1x |
- ? Grouped GEMMs for MoE models (masked layout) (MoE 模型 GEMM - Masked 布局)
#Groups | M per group | N | K | Computation | Memory bandwidth | Speedup |
1 | 1024 | 4096 | 7168 | 1233 TFLOPS | 924 GB/s | 1.2x |
1 | 1024 | 7168 | 2048 | 925 TFLOPS | 968 GB/s | 1.2x |
... | ... | ... | ... | ... | ... | ... |
4 | 256 | 7168 | 2048 | 815 TFLOPS | 2047 GB/s | 1.2x |
從數(shù)據(jù)中可以看出,DeepGEMM 在各種矩陣 shape 下都表現(xiàn)出色,速度提升明顯! ??
快速上手 DeepGEMM:只需幾步!
想要體驗 DeepGEMM 的強(qiáng)大性能? 上手非常簡單!
環(huán)境要求:
- ? NVIDIA Hopper 架構(gòu) GPU (sm_90a)
- ? Python 3.8+
- ? CUDA 12.3+ (推薦 12.8+ 獲得最佳性能)
- ? PyTorch 2.1+
- ? CUTLASS 3.6+ (可以通過 Git submodule 克隆)
安裝步驟:
- 1. 克隆 DeepGEMM 代碼庫 (需要遞歸克隆 submodule):
git clone --recursive https://github.com/deepseek-ai/DeepGEMM.git
- 2. 創(chuàng)建 third-party 庫的符號鏈接 (CUTLASS 和 CuTe):
python setup.py develop
- 3. 測試 JIT 編譯:
python tests/test_jit.py
- 4. 測試所有 GEMM 實現(xiàn) (normal, contiguous-grouped, masked-grouped):
python tests/test_core.py
- 5. 安裝 DeepGEMM:
python setup.py install
安裝完成后,只需在你的 Python 項目中 import deep_gemm
即可開始使用!
寫在最后:
?? 項目地址:
https://github.com/deepseek-ai/DeepGEMM
DeepGEMM 現(xiàn)已以MIT許可方式正式開源!
DeepGEMM 的靈感來自 CUTLASS 項目