今天小編分享的科技經驗:一文看懂 DeepSeek 開源項目第三彈,300 行代碼揭示 V3/R1 推理效率背後的關鍵,歡迎閱讀。
開源周進行到第三天,DeepSeek 不僅帶來了技術,還傳出 R2 正在路上的好消息。作為用戶,一邊見識着 DeepSeek 抛出來的一個個技術庫,還能看到應用了這些技術的模型,怎麼不算一種見證巨星的誕生。
今天出場的是 DeepGEMM,是一個專為幹淨、高效的 FP8 通用矩陣乘法 ( GEMM ) 而設計的庫,具有細粒度縮放功能,如 DeepSeek-V3 中所述。它支持普通和混合專家 ( MoE ) 分組 GEMM。該庫用 CUDA 編寫,在安裝過程中無需編譯,而是使用輕量級即時 ( JIT ) 模塊在運行時編譯所有内核。
沒有說 DeepSeek 不厲害的意思,但這三天的開源都能看出,即便背靠幻方,他們始終不像大廠那樣資源雄厚,必須在壓榨計算資源方面狠下功夫。
包括這次的 GeepGEMM 仍然沒有離開這個主旋律,相比于之前的技術,DeepGEMM 的優勢在于:
更高的效率:通過 FP8 和兩級累積降低了計算和内存開銷
靈活的部署:JIT 編譯适應性強,減少預編譯負擔
針對性優化:支持 MoE 并深度适配 Hopper 張量核心
更簡潔的設計:核心代碼少,避免復雜依賴,便于學習和優化
這些特性使其在現代 AI 計算中脫穎而出,尤其是在需要高效推理和低功耗的場景下。
為現代 AI 計算而造
更高的效率和更靈活的部署,是 DeepGEMM 的亮點,核心邏輯僅約 300 行代碼,卻在大多數矩陣尺寸上超越了專家級别調優的内核。Hopper GPUs 上最高可達 1350+ FP8 TFLOPS。
FP8 是一種壓縮數字的方法,相當于把原本需要 32 位或 16 位存儲的數字,精簡成 8 位存儲。就像你用更小的便利貼記筆記,雖然每張紙能寫的内容少了,但攜帶和傳遞更快。
這種壓縮計算的好處是内存占用減少——同樣大小的任務,需要的「便利貼」更少,搬運小紙片比大檔案快,因此計算速度也更快。但挑戰是很容易出錯。
為了解決 FP8 精度問題,DeepGEMM 用了巧妙的「兩步法」:用 FP8 進行大批量乘法,像用計算器快速按出一串結果。這個步驟裡,誤差在所難免。
但沒關系,還有第二步:高精度匯總。每隔一段時間,就把這些結果轉成更精确的 32 位數累加,像用草稿紙仔細核對總和,避免誤差積累。
先跑,再通過兩級累積防錯。通過這種設計,DeepGEMM 讓 AI 模型在手機、電腦等設備上運行得更流暢,同時減少耗電,适合未來更復雜的應用場景。
包括對 JIT 編譯的應用,也是類似的思路。JIT 編譯,全稱是「Just-In-Time」編譯,中文可以叫即時編譯,相對應的概念是靜态編譯。
一般的程式在你用之前就得全部寫好、編譯好,變成電腦能懂的語言,但 JIT 編譯不一樣,它是程式運行的時候才把代碼變成電腦能執行的指令。
它可以根據你的電腦情況(比如 NVIDIA Hopper 顯卡)現場調整代碼,量身定制出最适合的指令,不像提前編譯那樣死板,這樣程式就能跑得更順暢。只編譯當下要用的部分,不浪費時間和空間,讓一切都變得剛剛好。
Hopper 張量核心和 JIT 編譯是最佳搭檔。JIT 編譯可以在運行時根據你的 Hopper 顯卡情況,現場生成最優的代碼,讓張量核心的計算效率拉滿。
DeepGEMM 支持普通 GEMM 和混合專家(MoE)分組 GEMM,這些任務的計算需求各不相同。JIT 編譯能根據任務特點,臨時調整代碼,直接調動張量核心的 FP8 計算或變換引擎功能,減少浪費,提高速度。
怎麼形容這樣一種技術路線呢:纖巧、輕量、鋒利。
對于廣大開發者來說,DeepGEMM 可以說是又一個福音。以下是部署相關的信息,大家不妨玩起來。
DeepGEMM 部署指南
DeepGEMM 是一個專為 FP8 通用矩陣乘法(GEMM)優化的庫,具備精細的縮放機制,并在 DeepSeek-V3 中提出。它支持标準 GEMM 和混合專家(MoE)分組 GEMM。該庫采用 CUDA 編寫,無需在安裝時進行預編譯,而是通過輕量級的即時編譯(JIT)模塊在運行時編譯所有核心函數。
目前,DeepGEMM 僅支持 NVIDIA Hopper 張量核心。針對 FP8 張量核心計算精度不足的問題,它采用 CUDA 核心的兩級累積(提升)技術進行優化。盡管借鑑了一些 CUTLASS 和 CuTe 的概念,DeepGEMM 并未過度依賴它們的模板或數學運算,而是以簡潔為目标,僅包含一個核心計算核函數,代碼量約 300 行。這使得 DeepGEMM 成為學習 Hopper FP8 矩陣乘法與優化技術的清晰且易于理解的參考資源。
盡管設計簡潔,DeepGEMM 在各種矩陣形狀下的性能可與專業優化的庫媲美,甚至在某些情況下表現更優。
性能
我們在 H800 上使用 NVCC 12.8 進行測試,涵蓋 DeepSeek-V3/R1 推理過程中可能使用的所有矩陣形狀(包括預填充和解碼,但不涉及張量并行)。所有加速比指标均基于我們内部精心優化的 CUTLASS 3.6 實現進行對比計算。
DeepGEMM 在某些特定矩陣形狀下的表現不夠理想,如果你對優化有興趣,歡迎提交優化相關的 PR。
密集模型的标準 GEMM
MoE 模型的分組 GEMM(連續布局)
MoE 模型的分組 GEMM(掩碼布局)
快速開始
環境要求
Hopper 架構 GPU,需支持 sm_90a
Python 3.8 及以上版本
CUDA 12.3 及以上版本(強烈推薦使用 12.8 及以上版本以獲得最佳性能)
PyTorch 2.1 及以上版本
CUTLASS 3.6 及以上版本(可通過 Git 子模塊克隆)
開發
# Submodule must be cloned
git clone --recursive [email protected]:deepseek-ai/DeepGEMM.git
# Make symbolic links for third-party ( CUTLASS and CuTe ) include directories
python setup.py develop
# Test JIT compilation
python tests/test_jit.py
# Test all GEMM implements ( normal, contiguous-grouped and masked-grouped )
python tests/test_core.py
安裝
python setup.py install
然後,在你的 Python 項目中導入 deep_gemm,盡情使用吧!
附上 GitHub 開源地址:
https://github.com/deepseek-ai/DeepGEMM
作者:劉娅、莫崇宇