# Nvidia GTC 2024 提出的 FP8/FP4 如何加速AI訓練及推論 作者:許哲豪(Jack Hsu), 2024/3/24  Fig. 1 GTC 2024 Keynote (Youtube)。[1] 這兩天相信很多人都被老黃GTC 2024演講[1]給震撼到了吧!如果你是剛買了H100的朋友,大概心中不免XXX,眼眶中充滿淚水暗罵老黃「你又跟我說B100更快更便宜了??我的錢錢又被搶了啊」。收拾起心情,想想那些買不到的人,自己還算幸運,還有生意可做啊! 兩個小時的影片中,其中透露出一個加速祕密,新一代 GPU Blackwell B200 在硬體端提供了 FP4 計算能力,單片就可達 20 petaFLOPS(每秒2x10^16=20兆次浮點數計算),二片 B200 組成的 GB200 在訓練性能是前一代 H100 的 4 倍,推論性能更高達 7 倍。若再將 36個 CPU 加上 72 個 GPU 組成「GB200 NVL72」超大型伺服器,則 FP8 訓練能力可高達 720 petaFLOPS, FP4 推論能力更高達1.44 exaFLOPS(1,440 petaFLOPS)。這樣總體訓練及推論運算速度較前一代分別快了22倍及45倍。而究竟什麼是 FP8 / FP4 呢? 接下來就簡單幫大家科普一下。 ## 8位元浮點數(FP8) 一般 AI 模型有很多參數要被訓練,通常每個參數要使用32位元浮點數 (FP32) 來表示,相當於要使用 4 個位元組(Byte),若以 GPT-3 的1750億(175B)個參數來看,就等於要使用 700 (4x175=700) GByte ,這對訓練時的記憶體需要極高。所以為了讓數值動態範圍(可表達最大到最小數字範圍)夠大,且儲存空間變小,同時加快計算速度,於是有了8位元浮點數 (FP8) 格式出現,而這項技術也第一次被 H100 加入硬體設計中。  Fig. 2 AI常用二進制浮點數表示法。(OmniXRI整理製作, 2023/02/13)[2] 從 Fig.2 可看出為了表示浮點數,通常會有符號(表正負值)、指數及尾數三個部份,依需求的動態範圍可配置不同的位數,而 FP8 就是使用8位元來表示浮點數。由於 FP8 位數較少,所以可彈性調整指數和尾數的位元數,用以表現不同的動態範圍及表現精度,如e4m3, e5m2等。 為了讓大家更理解同樣是有號數8位元,不同表達方式的動態範圍及最小表示精數,可參考 Fig.3 所示。整數(INT8,亦可看成e0m7)只能表示 ±127,而 FP8 **e4m3** 動態範圍 ±448, 最小表示精度為 2^-9, **e5m2** 動態範圍則可擴大到 ±57,334 ,最小表示精度可達 2^-16。不過這裡的 FP8 小數點解析度並不像整數空間是線性等距的,因此使用上會產生一些偏差值,要特別注意。  Fig. 3 FP8 e4m3 及 e5m2 數值表示範圍。[3] 一般訓練時需要大一點的動態範圍,數值表達精細度可以差一點沒關係,所以會使用 FP8 e5m2格式,而推理時需要數值精細度高一點而動態範圍小一點亦無妨,因此會選用 FP8 e4m3格式。 ## 4位元浮點數(FP4) 為了讓大型語言模型在訓練及推論時能更節省數據空間,自然就想到把參數從8位元再減半變成4位元,其中除了使用無號數整數(UINT4)外,浮點數(FP4)也是重點,而此次NVIDIA就是 FP4 計算硬體化,首次放入新晶片 B200 中。 由於 FP4 位數實在過少,所以在 IEEE 754 標準中,直接定義為1位符號、2位指數及1位尾數,即FP4 e2m1。從Fig. 4可看出,若以UINT4表示,則數字間距為等距,距離為1,表示範圍從0到15。對應到 FP4(e2m1) 時則非等距,表示範圍在 ±3,最小表示精度為 0.5,其中還要扣除 Inf (正負無限大)和 NaN(非數字)。後來有學者提出新論文[4]想改善動態範圍,放棄 Inf, NaN,讓動態範圍擴大到 ±6。未來到底是 UINT4(或INT4) 還是 FP4 會更受重視,就有待時間來考驗了。  Fig. 4 無號4位元整數(UINT4)和有號4位元浮點數(FP4)數值表示範圍。[4] ## 小結 從以往的 TF32 取代 FP32 到 BF16 改善 FP16,新的數字系統都是為了加速 AI 訓練和推論用。從 Nvidia 此次提出的實測數據,可以感受到在大型語言模型及生成式應用採用新的 FP4 確實有很大的助益,尤其在硬體化後。未來是否會將此類技術移轉到家用顯卡上或其它廠商(如INTEL, AMD)也投入跟進,就讓我們再耐心等等吧! ## 參考文獻 [1] Nvidia, GTC March 2024 Keynote with NVIDIA CEO Jensen Huang (Youtube) https://youtu.be/Y2F8yisiS6E?t=2728 [2] 許哲豪,【vMaker EDGE AI專欄 #02】 要玩AI前,先來認識數字系統 https://omnixri.blogspot.com/2023/02/vmaker-edge-ai-02-ai.html [3] Paulius Micikevicius et al., FP8 FORMATS FOR DEEP LEARNING https://arxiv.org/abs/2209.05433.pdf [4] Yijia Zhang et al., Integer or Floating Point? New Outlooks for Low-Bit Quantization on Large Language Models https://arxiv.org/abs/2305.12356.pdf
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.