瘋了!居然有人試圖讓我搞懂,什么是 DeepGEMM
DeepSeek開源周,繼DeepEP之后,開源了第三彈DeepGEMM。
今天簡單來說說:
- 吃瓜:DeepGMEE是干嘛的?
- 技術(shù):DeepGMEE是怎么做到的?
- 普通人有什么用:對寫提示詞有什么啟示?
DeepGMEE是干嘛的?
DeepGMEE,General Matrix Multiplication,一個FP8通用矩陣乘法庫(library)。
畫外音,F(xiàn)P8:8-bit Floating Point,8位浮點格式。
關(guān)于FP8通用矩陣乘法
一個矩陣乘法的優(yōu)化而已,寫了這么多年代碼都沒用過矩陣乘法,值得這么吹流弊嗎?
額,我竟無言以對。
矩陣乘法是現(xiàn)代AI計算的基石。
- 矩陣是數(shù)據(jù)表示的核心工具:神經(jīng)網(wǎng)絡(luò)中的權(quán)重,特征,參數(shù)傳遞等都使用矩陣表示;
- 矩陣乘法占大模型中90%的計算量:Transformer基操Q(mào)KV運算,卷積計算,分層全連接計算等;
- 硬件優(yōu)化的核心目標就是矩陣乘法計算;
傳統(tǒng)AI的矩陣乘法怎么算?
傳統(tǒng)一般使用NVIDIA開源的CUDA C++模板庫CUTLASS。
傳統(tǒng)方法通常采用FP16/FP32,存在一些潛在的不足:
- 占顯存資源:FP32占顯存是FP8的4倍;
- 資源利用率低:強制要求矩陣為2次冪尺寸(例如:128*128),容易出現(xiàn)顯存碎片;
- 不支持MOE模型的分組矩陣計算;
- 部署復雜度高:需要編譯,需要配置;
那為什么之前不直接采用FP8呢?
FP8雖然占用資源少,資源利用率高,但會帶來精度損失。
這個問題程序員最好理解。
高精度乘法:1.2 * 3.4 = 4.08
如果直接降低精讀,用整數(shù)表示浮點數(shù),變?yōu)? * 3 = 3,精讀損失是無法接受的。
那有沒有彌補精讀不足的問題?
我們可以對浮點數(shù)進行整數(shù)化編碼處理:
- 步驟一:1.2用(12, 1)表示,其中1是小數(shù)位數(shù);
- 步驟二:3.4用(34, 1)表示;
- 步驟三:1.2 * 3.4 = (12, 1) * (34, 1) = (12*34, 1+1) = (408, 2)
如此一來,就沒有精度損失啦。
當然,矩陣乘法的精度補償比這個復雜,其核心思路是:使用低精度乘法矩陣快速計算,高精度加法補足。
結(jié)論就是:deepseek使用FP8就能完成FP16/FP32的計算,降低顯存占用+提高顯存利用率的同時,仍然能夠保持高精度。
DeepGMEE的特點
Git介紹中對DeepGMEE有三個關(guān)鍵形容詞:
- 簡潔(clean)
- 高效(efficient)
- 高精度(fine-grained scaling)
為什么說DeepGMEE簡潔?
- 核心代碼300行,而CUTLASS數(shù)千行;
- 零依賴(除CUDA),無需預編譯,無需復雜環(huán)境配置;
- 注釋清晰,便于學習與二次開發(fā);
畫外音:我看了一下,調(diào)整數(shù)據(jù)分塊策略,只需要修改10-20行代碼。
為什么說DeepGMEE高效?
這是FP8對比FP16/FP32的天然優(yōu)勢,相比GUTLASS:
- 顯存占用下降50%+;
- MOE推理延時下降60%+;
- 計算密度(TFLOPS)提升了270%+;
為什么說DeepGEMM高精度?
采用FP8矩陣乘法加速計算,BF16累加修正精讀的方法,平衡了速度與精讀。
除此之外,DeepGEMM還有不少特色:
- 針對MOE優(yōu)化,支持MOE分組矩陣乘法;
- 針對硬件加速;
- 動態(tài)編譯JIT:運行時根據(jù)矩陣大小與硬件條件優(yōu)化;
- 矩陣靈活尺寸對齊(例如:可以支持112*128矩陣);
上面種種,DeepGMEE本次最大的創(chuàng)新,我認為是:FP8優(yōu)化,JIT優(yōu)化,以及MOE優(yōu)化。
DeepGMEE是怎么做到的?
信息密度太大,頭疼,有點學不過來了,感興趣的同學去官網(wǎng)看吧,我Copy一下git的信息:
- Persistent warp-specialization
- Hopper TMA features
- A unified and optimized block scheduler
- Fully JIT design
- Unaligned block sizes
- FFMA SASS interleaving
- Common detail optimizations
畫外音:其實你也不想知道這些how?
了解GEMM對普通人寫提示詞有什么啟示?
沒有啟示,這東西和提示詞沒關(guān)系。
結(jié)尾
對于DeepGEMM,我的思考是:
- 之前各大玩家都卷硬件,而忽略了軟件的優(yōu)化;
- 僵化思維真的很要命,一直以來都是FP16/FP32,大家也都用CUTLASS,它就一定是最優(yōu)嗎?
- 寫代碼,搞架構(gòu),少即是多:多寫這類300行優(yōu)美的代碼,而不要在垃圾公司堆shi山;
先睡了,共勉!
畫外音:球球deepseek,明天不要開源新東西了。