模型層 開放閱讀

混合精度訓練

Mixed Precision Training

概念 ID
mixed-precision-training
更新時間
2026-05-29
來源數量
待補

混合精度訓練

3 秒看懂

  • 是什麼:在訓練神經網路時,混用 FP16(半精度)、BF16(腦浮點)等低精度與 FP32(單精度)進行前向/反向計算,保留一份 FP32 主副本權重做精確更新。
  • 為什麼:同等 GPU 下,視訊記憶體佔用幾乎減半,算力吞吐可提升 2‑3 倍(Tensor Core 加速),模型能做得更大、訓得更快。
  • 怎麼做到:絕大多數計算用低精度,只在權重更新、規約等精度敏感環節保留 FP32;輔以損失縮放防止小梯度下溢。
  • 典型實現:PyTorch AMP(torch.cuda.amp)、NVIDIA APEX、TensorFlow 混合精度 API。

3 分鐘產業解釋

混合精度訓練已成為大型模型時代的標準底座。在傳統 FP32 訓練中,計算單元和儲存頻寬被大量冗餘精度消耗;而純 FP16 則因動態範圍不足,容易梯度消失。混合精度通過“計算用快馬、累積用慢牛”的策略,在神經網路的大部分矩陣乘法、卷積中使用 FP16/BF16,在權重主副本、最佳化器狀態等少數關鍵路徑保留 FP32,從而在幾乎不損失模型精度下獲得顯著加速。

產業驅動力來自硬體架構演進:NVIDIA Ampere 及之後架構的 Tensor Core 原生支援 BF16;Google TPU v2+ 對 BF16 做了深度最佳化;AMD CDNA 架構亦引入對 BF16/FP16 的硬體支援。這些硬體使混合精度訓練的每浮點運算次數 (FLOPS) 理論峰值為同等 FP32 的 2‑8 倍。由此,從 GPT‑2、BERT 到 GPT‑4、Llama 系列,大規模訓練幾乎都預設開啟混合精度。

自動混合精度 (Automatic Mixed Precision, AMP) 將“哪些操作適合低精度”這本應由人手抉擇的難題,交給架構自動完成:matmulconv 等高吞吐運算元設為低精度;softmaxnormloss 等對精度敏感的運算元保持 FP32。配合動態損失縮放,AMP 讓開發者幾乎零代價換取效能躍升。

15 分鐘專家深入

混合精度訓練並非簡單的資料型別替換,而是涉及數值穩定性、梯度無損傳播、動態範圍管理、硬體對齊的系統工程。其核心設計可拆解為四個層次:

  1. 資料型別選擇

    • FP16(IEEE 754 半精度, 1‑5‑10 位):有效動態範圍 ~[−65504, 65504],最小正規數 ~6.10×10⁻⁵。優勢是硬體普及度高,NVIDIA Tensor Core 對 FP16 的吞吐可達到 FP32 的 16 倍(以 A100 為例)。
    • BF16(Brain Floating Point, 1‑8‑7 位):指數位與 FP32 相同(8 位),從而動態範圍與 FP32 一致(~3.4×10³⁸),但尾數只有 7 位,精度低於 FP16。這種設計幾乎無需損失縮放,因為大梯度不會溢位、小梯度也不易下溢到零。Google TPU 和 NVIDIA Ampere 及後續架構均深度支援 BF16
    • TF32(NVIDIA 定義, 1‑8‑10 位):在 Ampere 架構中,Tensor Core 輸入為 TF32,內部累加為 FP32,兼顧了 BF16 的動態範圍和比 FP16 更高的精度,主要用於矩陣乘的預設加速。
  2. 主副本權重
    神經網路權重在視訊記憶體中保留一份 FP32 主副本(Master Weights)。前向與反向傳播時,將需要計算的層臨時轉換為低精度;反向得到的低精度梯度被加到 FP32 主副本上,確保更新步長不被截斷。最佳化器狀態(如 Adam 的 mv)通常也保留為 FP32,防止累積誤差。

  3. 損失縮放 (Loss Scaling)
    FP16 訓練中,許多小梯度(例如小於 2⁻¹⁴)會在反向傳播時變為零,導致權重無法更新。損失縮放將損失值乘以一個大常數(如 2¹⁶),使反向傳播的梯度按比例放大,落入 FP16 的可表示範圍,然後在更新權重前將梯度除回原值。實際實現中多采用“動態損失縮放”:訓練過程中自動監測溢位情況,若連續 N 步無溢位,放大縮放因子;若出現溢位則跳過當前步並縮小因子。

  4. 運算元精度的自動分配 (AMP)
    架構維護一個“運算元白名單”(如矩陣乘法、卷積)和“黑名單”(如 softmax、歸一化層、損失計算)。AMP 自動將白名單內的運算元轉換為低精度,其他保持 FP32。同時,架構在必要時插入 cast 操作,保證型別一致。

現代分散式訓練中,混合精度還需配合通訊最佳化:跨 GPU 的梯度 AllReduce 可在低精度下完成(如 FP16)以減少通訊量,但需保證最終更新為 FP32。某些實現(如 Megatron‑LM)在張量並行中使用 FP16 通訊,而在資料並行梯度 AllReduce 時先轉為 FP32

技術原理

本節深入數值格式、硬體計算路徑及混合精度訓練的完整流水線。

數值表示

╔══════════════════════════════════════════════╗
║            FP32 (1-8-23)                   ║
║  符號(1)  指數(8)     尾數(23)             ║
║  S  EEEEEEEE  MMMMMMMMMMMMMMMMMMMMMMM      ║
╚══════════════════════════════════════════════╝

╔══════════════════════════════════════════════╗
║            FP16 (1-5-10)                   ║
║  S  EEEEE  MMMMMMMMMM                      ║
╚══════════════════════════════════════════════╝

╔══════════════════════════════════════════════╗
║            BF16 (1-8-7)                    ║
║  S  EEEEEEEE  MMMMMMM                      ║
╚══════════════════════════════════════════════╝
  • FP32 範圍:~1.18×10⁻³⁸ ~ 3.4×10³⁸,精度約 7 位十進位制數字。
  • FP16 範圍:~6.10×10⁻⁵ ~ 6.55×10⁴,精度約3‑4位十進位制數字。最大有限值 65504,超出為 Inf,極小值下溢至 0。
  • BF16 範圍:與 FP32 相同,精度約 2 位十進位制數字。由於指數位數一致,動態範圍完全覆蓋 FP32,基本杜絕溢位/下溢,但舍入誤差更大。

硬體加速路徑(以 NVIDIA GPU 為例)

Volta 架構引入了第一代 Tensor Core,每個 SM 內可執行 D = A × B + C,其中 A、B 通常為 FP16,C 和 D 為 FP16 或 FP32。關鍵規格(基於 A100,公開白皮書資料,[據 NVIDIA 官方揭露]):

  • FP16 Tensor Core 吞吐(理論峰值,稠密模式):312 TFLOPS(A100 SXM)。
  • FP32 標準 CUDA Core 吞吐:19.5 TFLOPS。加速比約 16 倍,但混合精度整體端到端加速約 2‑3 倍(考慮非矩陣乘運算元和通訊開銷)。
  • BF16 Tensor Core 吞吐:與 FP16 相同(312 TFLOPS)。Ampere 架構中 Tensor Core 還支援 TF32,吞吐為 156 TFLOPS,對 FP32 輸入自動截斷為 TF32 計算。

硬體內部以 FP32 累加,將多次乘加結果儲存在高精度累加器中,輸出時再轉換為目標格式。這種 “乘低精度、累加高精度” 的設計是混合精度訓練能夠保持模型質量的核心硬體基礎。

混合精度訓練流水線(詳細)

以下展示一次迭代的完整資料流(以 FP16 為例):

1. 將 FP32 主權重 W_master 轉換為 FP16 副本 W_fp16
2. 前向傳播:所有 GEMM/Conv 使用 FP16 計算,logits 可能仍為 FP16
3. 損失計算:Loss 通常以 FP32 進行(或由架構自動提升)
4. 損失縮放:Loss_scaled = Loss × scale_factor (FP32)
5. 反向傳播:
   - 梯度計算在 FP16 下進行(由 Loss_scaled 回傳)
   - 所有 FP16 權重梯度過小可能變為 0 或 subnormal,損失縮放防止此問題
6. 梯度轉換:反向完成後,將 FP16 梯度轉換為 FP32,併除以 scale_factor 恢復真實梯度
7. 最佳化器更新:
   - 對 W_master(FP32)施加 FP32 梯度
   - 最佳化器狀態(如 Adam 的一階/二階矩)也維持 FP32
8. 動態調整 scale_factor (可選)

若使用 BF16,則第 4 步損失縮放通常可省略,但部分實現仍保留微量縮放以抵消尾數截斷誤差。

關鍵引數對硬體的要求

  • 視訊記憶體頻寬:混合精度降低權重/啟用/梯度儲存量約 40‑50%,但對頻寬需求仍高;低精度計算提升了算術密度,使瓶頸更多轉向記憶體頻寬。
  • Tensor Core 利用率:要求矩陣維度滿足對齊(通常是 8 的倍數),否則回退到 CUDA Core,效能陡降。架構的 pad 或重排策略可改善此情況。

技術演進史

  • 2017 之前:訓練主流為 FP32。部分研究嘗試將權重/啟用二值化(BinaryConnect)、三值化或定點化,但精度損失較大,僅適用於小模型。
  • 2017 年:NVIDIA Volta 釋出,Tensor Core 首次支援 FP16 矩陣乘加。NVIDIA 提出並系統性地闡述了該混合精度訓練方法(Micikevicius et al., “Mixed Precision Training”, ICLR 2018),系統性地闡述了 FP16 主副本+損失縮放方案,並證明在 ResNet、Transformer 等模型上精度無損。
  • 2018‑2019 年:Google 在 TPUv2 及後續上引入 BF16 支援,並在自家訓練中大規模實踐,帶動業界關注 BF16。NVIDIA 在 CUDA 10 中推出 APEX(A PyTorch Extension)庫,提供自動化混合精度。PyTorch 1.6 正式引入 torch.cuda.amp,成為事實標準。
  • 2020‑2021 年:NVIDIA Ampere 架構引入 TF32 和針對 BF16 的第三代 Tensor Core;BF16 在 NLP 大型模型(如 T5、GPT‑3)中成為訓練主力。大規模分散式訓練(如 Megatron‑Turing NLG)深度結合混合精度與模型並行。
  • 2022 至今:Hopper 架構引入 FP8(兩種變體 E4M3 和 E5M2)支援,將混合精度拓展至 8 位浮點;H100 GPU 的 FP8 Tensor Core 吞吐達 3.9 PFLOPS([據 NVIDIA 揭露])。FP8 訓練開始進入實驗階段,架構支援逐步成熟。同時,混合精度已從單機單卡擴充套件至超大規模叢集,與通訊壓縮、資料格式轉換聯合最佳化。

技術路線對比

下表對比主流混合精度技術路線(基於已知架構規格,未列具體數字處標註[估算]或留空):

路線代表硬體低精度格式動態範圍是否需要損失縮放矩陣乘吞吐加速比 (vs FP32 CUDA Core)視訊記憶體節省模型精度影響生態成熟度
FP16 混合精度NVIDIA Volta/Ampere/HopperFP16 (1-5-10)窄 (65504)必須~16x (Tensor Core)~50% 權重/啟用基本無損(配合縮放)極高 (PyTorch AMP, TF)
BF16 混合精度TPU v2+, Ampere+, CDNA2+BF16 (1-8-7)與 FP32 一致一般不需要~16x (Tensor Core)~50%無損(少數場景需縮放)
TF32 加速NVIDIA Ampere+TF32 (1-8-10)與 FP32 一致不需要(本質是 FP32 輸入截斷)~8x (Tensor Core vs FP32 CUDA)無(儲存仍為 FP32)與 FP32 幾乎相同極高(透明啟用)
FP8 混合精度NVIDIA Hopper+E4M3/E5M2較小需要(且縮放策略更復雜)~2x vs BF16/FP16(理論)~75%仍在驗證,大規模應用尚需調優新興
純 FP32傳統 CUDA CoreFP321x0% 節省基準傳統

說明:除 FP8 外,以上路線已在大語言模型、視覺大型模型中廣泛驗證,精度損失通常低於最終指標的隨機波動。

上下游

上游

  • 半導體代工 & IP:先進的 FinFET/GAA 工藝(如台積電 N5/N4P, N3 系列)支撐高能效 GPU/TPU 晶片,實現高吞吐低精計算單元與高頻寬記憶體。
  • 高頻寬記憶體:HBM 系列(HBM2e、HBM3)提供 TB/s 級頻寬,使低精度資料快速進出計算單元,否則混合精度的加速會被記憶體牆吞噬。
  • 硬體架構設計:NVIDIA Tensor Core、Google MXU、AMD Matrix Core 等專門設計 FP16/BF16/FP8 乘加器的 IP 供應商,決定了精度支援的廣度與效率。
  • EDA 工具:Synopsys、Cadence 等提供的設計工具,包含低精度浮點單元驗證套件。

下游

  • AI 訓練架構:PyTorch、TensorFlow、JAX、PaddlePaddle 等內建 AMP 支援,直接面向演算法工程師。
  • 大型模型訓練基礎設施:超算中心、雲端服務商(AWS、Azure、GCP)提供的 GPU/TPU 叢集,部署管理混合精度訓練作業。
  • 垂直應用:自動駕駛感知模型、科學模擬(如 AlphaFold)、生成式 AI(Stable Diffusion、LLM)、推薦系統等,均為混合精度的最終使用者。

混合精度訓練橫跨“硬體設計—驅動/庫—架構—應用”全棧,因此單一環節的定製最佳化(如針對 BF16 的大核卷積 Layout)可沿價值鏈傳導。

關鍵指標

衡量混合精度訓練有效性的核心指標:

指標定義典型影響
吞吐量 (samples/sec 或 tokens/sec)單位時間處理樣本或詞元數混合精度可提升 1.8‑3x([據行業實踐])
視訊記憶體佔用訓練時模型的 GPU 記憶體佔用量降低約 40‑50%(權重、啟用、梯度)
模型精度 (validation loss 或 downstream metric)與 FP32 基線相比的效能差異通常 <0.1% 的偏差,視為無損
損失縮放因子穩定性動態縮放過程中溢位步數佔比應 <1%,否則訓練不穩定
加速效率 (有效 TFLOPS / 理論峰值 TFLOPS)硬體利用率混合精度比 FP32 更易達到高利用,因為算術強度高
收斂速度 (達到特定精度所需步數)所需訓練步數一般與 FP32 持平或略快(更少量化噪聲)

評估新硬體或架構時,通常會對比相同模型、相同超參下,開啟混合精度前後的以上指標變化。

供需與市場資料

(注:未獲具體第三方資料,定性描述)

  • 需求側:隨著 LLM 引數量從百億、千億邁向萬億,訓練算力需求每年增長 10 倍以上([據公開論文估算]),混合精度已成為必須。全球 AI 伺服器 GPU 出貨量與 HBM 產能均高度偏向支援低精度格式的旗艦晶片。
  • 供給側:NVIDIA Hopper 架構的 H100/H200 在 FP8 和 BF16 上的 AI 算力供給急劇膨脹,各大雲端商紛紛擴容對應例項。據供應鏈估算([未充分揭露具體數字]),2023‑2024 年 AI 晶片交期雖有緩解,但低精度算力仍處緊平衡,尤其針對 FP8 的軟體棧尚在追趕。
  • 價格與成本:雲端上 FP16/BF16 訓練例項(如 AWS p4d/p5, GCP a3)價格昂貴,且動態稀缺。混合精度通過提升吞吐量,可降低單位訓練成本 30‑50%,這也是企業積極採用的直接經濟驅動力。

整體而言,混合精度訓練不再是“可選的加速”,而是算力經濟模型下的必然元件,其供需已溶於整體 AI 算力市場。

代表公司與資本對映

晶片/硬體廠商

  • NVIDIA:混合精度訓練硬體事實標準締造者。從 V100 的 FP16 到 H100 的 FP8,不斷拓寬精度邊界;通過 CUDA/ cuDNN/ cuBLAS 軟體棧深度繫結生態。
  • AMD:MI200 系列支援 BF16/FP16,ROCm 5.x 實現對混合精度的軟體支撐,正爭取大型模型訓練份額,但生態成熟度仍需追趕。
  • Google:自研 TPU v4/v5p,在 BF16 訓練上擁有極致的體系結構協同,其 JAX 架構對混合精度的支援相當靈活,對自家大型模型(如 Gemini)訓練效率極高。
  • Intel:Gaudi 2/3 AI 加速器支援 BF16/FP8,並提供異構混合精度方案,旨在 AI 訓練市場分羹。

算力租賃/雲端服務

  • CoreWeave、Lambda Labs 等 GPU 雲端平台,以 H100 叢集主打 BF16/FP8 訓練例項,為生成式 AI 公司提供底力。
  • 微軟 Azure、AWS、GCP 均為大型模型訓練提供混合精度最佳化的叢集環境。

架構與工具

  • Meta(PyTorch):主導 PyTorch AMP 實現,其內生工程與 NVIDIA 深度協作。
  • Microsoft:DeepSpeed 庫整合混合精度與 ZeRO 最佳化,推動超大規模訓練。
  • 初創生態:多家 AI Infra 初創(如 MosaicML, Together AI)推出自動混合精度策略和訓練平台,提高訓練效率。

資本對映上,硬體層呈現出明顯的 NVIDIA 衍生紅利,軟體層則體現於訓練架構與 Infra 工具的吸附效應——混合精度的廣泛採納支撐著圍繞 GPU 的軟體授權、SaaS 訓練平台和 MLOps 市場。

投資邏輯

  1. 長期受益於模型規模擴張:只要模型持續變大,混合精度就是加速因子,投資 AI 晶片(尤其支援先進浮點格式的)等同於押注行業需求剛性。
  2. 製程與封裝演進推動能效比:更先進的製程(GAA, 背面供電等)和先進封裝(CoWoS‑L)使得單位低精度算力的功耗和成本下降,利好擁有設計與製造整合優勢的企業。
  3. FP8 生態建置視窗:FP8 訓練是下一賽點,相關硬體、庫、架構的成熟度將塑造未來 2‑3 年的競爭格局。關注率先獲得 FP8 大規模訓練驗證的廠商與雲端平台。
  4. 記憶體商機:混合精度減輕了視訊記憶體壓力,但大型模型對總容量與頻寬需求仍然極高,HBM3E 及更先進的儲存器是並行受益環節。
  5. 軟體收費模式:提供自動化混合精度最佳化、精度模擬、損失縮放調優的 SaaS 或企業軟體,可能隨訓練規模化產生訂閱營收。

風險因素包括:純低精度(甚至 1 位推論)可能削弱對訓練精度的需求,以及專用 ASIC(如 Groq、Cerebras)可能以不同方式改寫訓練計算範式,從而影響現有混合精度路徑價值。

常見誤讀糾偏

  • 誤讀 1:“混合精度訓練只需把所有運算都改成 FP16 即可”
    糾偏:必須保留 softmaxlayer normalizationloss 等操作的 FP32 精度,否則數值不穩定導致訓練崩潰。同時需要 FP32 主權重副本,否則小更新會被截斷。AMP 自動完成這一分配,手工操作風險極高。

  • 誤讀 2:“BF16 訓練自帶無損,所以完全不需要損失縮放”
    糾偏:BF16 的動態範圍解決了大多數場景的溢位問題,但其 7 位尾數精度仍然可能在小梯度累積時損失有效資訊,尤其在訓練後期梯度極小時。部分實現(如 BERT 訓練)仍然會加入微弱的損失縮放以提升收斂穩定性;只是相比 FP16,縮放因子選擇更為寬鬆,不用頻繁動態調整。

  • 誤讀 3:“混合精度訓練一定會把記憶體佔用削減到一半”
    糾偏:實際視訊記憶體節省比例取決於模型結構及最佳化器。如果最佳化器狀態(如 Adam 的 m、v)保持 FP32,啟用重計算(activation checkpointing)策略等因素,最終淨節省通常為 30‑50%,並非絕對減半。

  • 誤讀 4:“TF32 也是混合精度訓練的一種方式”
    糾偏:TF32 是一種內部計算格式,不改變模型儲存格式(權重仍是 FP32)。它提供加數但不需修改訓練程式碼,更接近“隱性加速”。混合精度訓練通常特指主動降低儲存精度和部分計算精度的方案,兩者目的相同但實現路徑差異明顯。

學習路徑

  1. 理論基礎:複習 IEEE 754 浮點表示、舍入誤差與數值分析基本概念。精讀論文 “Mixed Precision Training” (Micikevicius et al., 2018)。
  2. 動手體驗:在 PyTorch 中執行官方的 AMP 示例(例如 torch.cuda.amp.autocast 訓練一個 ResNet),對比有無 AMP 的速度和精度。
  3. 深入原始碼:研究 PyTorch 或 NVIDIA APEX 中 AMP 的實現,理解 autocast 上下文管理器如何通過 torch._C 分發到原生 CUDA 排程,以及損失縮放的梯度鉤子。
  4. 不同格式對比:嘗試在一個小型訓練任務中分別使用 FP16、BF16、TF32(若硬體支援),觀察收斂曲線和吞吐,理解格式選擇的效果。
  5. 分散式場景:結合 DeepSpeed 或 Megatron‑LM,分析混合精度與模型並行、梯度累積的互動,除錯縮放因子配置。
  6. 前沿探索:試用 NVIDIA Transformer Engine 實現 FP8 訓練,閱讀 H100 白皮書 FP8 部分,瞭解細粒度縮放的實現。

一句話總結

混合精度訓練通過“低精度計算 + 高精度更新”的策略,在保障模型精度的前提下,將大型模型訓練的硬體利用率推至極致,是當下超大型模型能夠工程化落地的核心使能技術。

延伸閱讀與來源

  • Micikevicius, P. et al. “Mixed Precision Training”, ICLR 2018.
  • NVIDIA, “NVIDIA A100 Tensor Core GPU Architecture” (白皮書).
  • NVIDIA, “NVIDIA H100 Tensor Core GPU Architecture” (白皮書).
  • NVIDIA, “Train With Mixed Precision” 開發者文件.
  • Google, “TPU v4: System Architecture and ML Performance”, 2023.
  • PyTorch 官方文件: Automatic Mixed Precision Package - torch.cuda.amp.
  • TensorFlow Mixed Precision 指南.
  • 李沐, 《動手學深度學習第二版》9.6 節 “混合精度訓練”.
  • DeepSpeed 文件: “FP16 and BF16 Training”.
  • 斯坦福 CS229 課程相關資料, 浮點表示與數值最佳化.

(注:本文所涉及具體效能數字,如 TFLOPS 值、加速比、視訊記憶體節省比例等,均基於相關硬體白皮書和公開技術報告,[未標明精確數字處已作定性描述];未獲得第三方市場報告,供需部分為行業態勢推斷。)

source: 公開揭露與公開資料整理 本頁僅用於產業鏈學習、資訊檢索和研究輔助;不構成投資建議,不預測漲跌,不提供買賣、部位或目標價建議。
完整概念頁 複盤 13 節結構 公司投研頁 沿產業鏈找到受益公司 投資課 把概念轉成可跟蹤模型