開源周進行到第三天,DeepSeek 不僅帶來了技術,還傳出 R2 在路上的好訊息。
作為使用者,一邊見識著 DeepSeek 丟擲來的一個個技術庫,還能看到應用了這些技術的模型,怎麼不算一種見證巨星的誕生。
今天出場的是 DeepGEMM,是一個專為乾淨、高效的 FP8 通用矩陣乘法 (GEMM) 而設計的庫,具有細粒度縮放功能。
如 DeepSeek-V3 中所述,它支援普通和混合專家 (MoE) 分組 GEMM。該庫用 CUDA 編寫,在安裝過程中無需編譯,而是使用輕量級即時 (JIT) 模組在執行時編譯所有核心。
沒有說 DeepSeek 不厲害的意思,但這三天的開源都能看出,即便背靠幻方,他們始終不像大廠那樣資源雄厚,必須在壓榨計算資源方面狠下功夫。
包括這次的 GeepGEMM 仍然沒有離開這個主旋律,相比於之前的技術,DeepGEMM 的優勢在於:
更高的效率:透過 FP8 和兩級累積降低了計算和記憶體開銷
針對性最佳化:支援 MoE 並深度適配 Hopper 張量核心
更簡潔的設計:核心程式碼少,避免複雜依賴,便於學習和最佳化
這些特性使其在現代 AI 計算中脫穎而出,尤其是在需要高效推理和低功耗的場景下。
DeepSeek 開源周,APPSO 將持續帶來最新動態和解讀,往期回顧👇
更高的效率和更靈活的部署,是 DeepGEMM 的亮點,核心邏輯僅約 300 行程式碼,卻在大多數矩陣尺寸上超越了專家級別調優的核心。Hopper GPUs 上最高可達 1350+ FP8 TFLOPS。
FP8 是一種壓縮數字的方法,相當於把原本需要 32 位或 16 位儲存的數字,精簡成 8 位儲存。就像你用更小的便利貼記筆記,雖然每張紙能寫的內容少了,但攜帶和傳遞更快。
這種壓縮計算的好處是記憶體佔用減少——同樣大小的任務,需要的「便利貼」更少,搬運小紙片比大檔案快,因此計算速度也更快。但挑戰是很容易出錯。
為了解決 FP8 精度問題,DeepGEMM 用了巧妙的「兩步法」:用 FP8 進行大批次乘法,像用計算器快速按出一串結果。這個步驟裡,誤差在所難免。
但沒關係,還有第二步:高精度彙總。每隔一段時間,就把這些結果轉成更精確的 32 位數累加,像用草稿紙仔細核對總和,避免誤差積累。
先跑,再透過兩級累積防錯。透過這種設計,DeepGEMM 讓 AI 模型在手機、電腦等裝置上執行得更流暢,同時減少耗電,適合未來更復雜的應用場景。
包括對 JIT 編譯的應用,也是類似的思路。JIT 編譯,全稱是「Just-In-Time」編譯,中文可以叫即時編譯,相對應的概念是靜態編譯。
一般的程式在你用之前就得全部寫好、編譯好,變成電腦能懂的語言,但 JIT 編譯不一樣,它是程式執行的時候才把程式碼變成電腦能執行的指令。
它可以根據你的電腦情況現場調整程式碼,量身定製出最適合的指令,不像提前編譯那樣死板,這樣程式就能跑得更順暢。只編譯當下要用的部分,不浪費時間和空間,讓一切都變得剛剛好。
Hopper 張量核心和 JIT 編譯是最佳搭檔。JIT 編譯可以在執行時根據你的 Hopper 顯示卡情況,現場生成最優的程式碼,讓張量核心的計算效率拉滿。
DeepGEMM 支援普通 GEMM 和混合專家(MoE)分組 GEMM,這些任務的計算需求各不相同。JIT 編譯能根據任務特點,臨時調整程式碼,直接調動張量核心的FP8計算或變換引擎功能,減少浪費,提高速度。
對於廣大開發者來說,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。
CUDA 12.3 及以上版本(強烈推薦使用 12.8 及以上版本以獲得最佳效能)
CUTLASS 3.6 及以上版本(可透過 Git 子模組克隆)
# Submodule must be cloned
# Make symbolic links for third-party (CUTLASS and CuTe) include directories
# Test all GEMM implements (normal, contiguous-grouped and masked-grouped)
python tests/test_core.py
然後,在你的 Python 專案中匯入 deep_gemm,盡情使用吧!
附上 GitHub 開源地址:
https://github.com/deepseek-ai/DeepGEMM
我們正在招募夥伴
✉️ 郵件標題「姓名+崗位名稱」(請隨簡歷附上專案/作品或相關連結)