幾個人來問這個UE8M0 FP8,我仔細解釋下,不是很容易懂_風聞
陈经-亚洲视觉科技研发总监-13分钟前
1. AI大模型和神經網絡都是係數,是浮點數。最簡單就是C語言編程的float,4個字節。這是原始版本,32個bit,也叫FP32。那32個bit怎麼表示浮點數?正負要1個符號bit,指數位(exponent)是8bit,尾數位(mantissa)是23個bit。8bit的指數值範圍是-126到127,是説拿尾數乘以2的這麼多次方,負的次方是來表示0.0156這種小數。尾數位多精度高,它是23個bit表示的2進制正整數,乘以指數次方就是最終float的數值。有個細節,指數位全0代表數值0,全1代表無窮大。
2. 同理,FP16就是1個bit正負符號,5個bit指數值範圍-14到15,10個bit尾數。這能表示的數值大小和精度小多了,FP16的最大數值是65504,而FP32最大是3.4X10^38。但是很多神經網絡用FP16就夠了。谷歌還搞了一種適合神經網絡訓練的BF16,是8個bit指數,7個bit尾數。BF16能表示的數值範圍大,但是精度低一些,一些深度學習訓練環節合適。
3. 還有種非常管用的神經網絡技術,叫“量化”(Quantization),如把網絡係數從浮點數整體變為整數,應用效果一樣或者稍微差一點點,但是計算速度快多了,因為芯片整數計算比浮點數快多了。這非常實用,在NPU低成本神經網絡芯片裏都要用,大模型用來加快推理速度。量化是把FP32和FP16的係數,壓縮成INT8、INT16、INT4、甚至可以二值。INT8就是8個bit,INT16是16個bit。實踐中INT8成為事實上的標準,英偉達等一堆公司都把它作為指令集第一選擇。INT8取值範圍-128到127,一般精度就夠用了,如果還不夠就用INT16。要注意,訓練時不能用INT8,範圍和精度不夠,一般都是推理時用。所以訓練需要的算力比推理時高多了,要浮點數。
4. 但是量化在訓練中其實也很有用,如將32與16個bit代表的數值,降維用8bit表示,精度下降,但效果維持,就能對訓練加速。如大模型訓練加速,一種辦法就是用FP8,連FP16都嫌慢。具體技術是“混合精度”,與FP16、BF16 乃至FP32混合使用。如GEMM矩陣乘法佔了90%算力,就用FP8加速,效果很好。其它的激活函數、softmax、LayerNorm,這些就用BF16與FP16。Loss、學習率要求精度,要用FP32。GPU設計一個大招就是搞這些,FP8操作怎麼搞得極快。
5. FP8有兩種,一種是5bit指數2bit尾數,一種是4bit指數3bit尾數,分別叫E5M2、E4M3,都要1個符號bit。E4M3精度高一點適合前向傳播計算,E5M2數值範圍大一點適合反向傳播計算。當然FP8精度和範圍都很小了,大模型矩陣係數弄成這樣,還行不行?國內外好多家試了真很難,都搞不出來,訓練一會就崩了,好多人失去信心認為做不出來。DeepSeek之所以厲害,就是在國內第一家用FP8把大模型訓練成功了,確實可行,加速效果很好。
6. 現在終於可以説DeepSeek V3.1用的UE8M0 FP8是什麼了。首先它是FP8,是浮點數,看樣子是用在大模型矩陣係數的。U就是unsigned,就是無符號的,省掉一個bit。E8M0就是8個bit全部都是指數,尾數位是0個!那這怎麼表示數值?其實尾數位為0,意思就是默認尾數是1,值的範圍就是2的-128次方至127次方。
7. 注意在大模型應用中,還有一個8bit或者16bit的scale參數。這裏的創新是,128個係數的group,或者128*128的tile,共用一個scale!先選一個scale除它,把tile裏的數值“量化”到FP8,算完了再用這個scaler乘“反量化”恢復到原值範圍。至於FP8,就有三種選擇,E4M3、E5M2、UE8M0,各有優缺點。UE8M0速度快,表示範圍大,缺點是精度低、不能表示負數。E4M3、E5M2能表示負數,有一點精度, 但範圍小。
8. DeepSeek説,“UE8M0 FP8是針對即將發佈的下一代國產芯片設計”,我的理解是和英偉達技術路線有關。英偉達設計GPU,從Hopper系列到Blackwell系列都重點優化FP8支持,但主打的是E4M3、E5M2!裏面一堆很難的技術細節,在芯片設計、製程與CUDA配合上,有不少很細的活。國內GPU設計者,對這些技術就不太掌握。看意思,國內摩爾線程、寒武紀這些芯片設計商,設計出UE8M0幹得不錯的FP8電路是可以的,UE8M0計算用的功耗低,適合國產芯片設計與製造平台。
9. 具體技術細節肯定不少,但感覺是“技術分叉”了,不按英偉達與CUDA路線走。國產AI體系,軟硬件配合動起來了,DeepSeek等大模型公司搞軟件,GPU設計公司搞硬件,以符合自身技術體系特性的辦法,自主創新發展軟硬件技術。

