詳細解釋
混合精度(Mixed Precision)是結合FP32(單精度)和FP16(半精度)的訓練技術,加速計算、減少記憶體,同時保持模型準確性。
為何使用:
- 速度:FP16 Tensor Core比FP32快2-8倍(NVIDIA (與 AI 硬體/軟體) GPU)
- 記憶體:FP16佔用一半記憶體,可訓練更大模型或使用更大批次
- 能耗:減少數據移動和計算能耗
挑戰與解決:
- 精度損失:FP16動態範圍小(5.96e-8 到 65504),容易下溢/上溢
- 解決方案:
- Loss Scaling:損失乘以比例因子,梯度反向傳播時還原
- FP32 Master Weights:權重以FP32存儲,計算時轉FP16
- 動態損失縮放:自動調整比例因子
實現方式:
- NVIDIA (與 AI 硬體/軟體) APEX:自動混合精度(AMP)
- PyTorch (Torch Compile):torch.cuda.amp
- TensorFlow:tf.keras.mixed_precision
- 自動:大部分計算FP16,關鍵部分FP32
什麼保持FP32:
- 權重更新:累積小梯度需要高精度
- Loss Scaling統計:計算縮放因子
- 批量正規化統計:均值和方差計算
使用建議:
- 現代GPU必備:V100、A100、RTX系列支援Tensor Core
- 自動混合精度:推薦使用框架自動功能
- 梯度累積:結合使用模擬大批次
- 檢查收斂:監測損失確保穩定
應用:
- 大型語言模型 (大語言模型 / 大模型)預訓練:幾乎標配
- 計算機視覺:ResNet、Vision Transformer
- 推薦系統:大規模embedding
混合精度是現代深度學習訓練的標準實踐。