詳細解釋
FP16(半精度浮點數)是16位浮點數格式,相比FP32(32位)減少一半存儲和帶寬,配合Tensor Core可大幅加速AI計算。
格式對比:
- FP32:1位符號 + 8位指數 + 23位尾數,約6-9位有效數字
- FP16:1位符號 + 5位指數 + 10位尾數,約3-4位有效數字
- BF16(Brain Float):1位符號 + 8位指數 + 7位尾數,範圍同FP32,精度降低
動態範圍:
- FP16:±65504,最小正規格化數6.10×10⁻⁵
- 問題:容易下溢(underflow)和上溢(overflow)
- 解決:損失函數 (Loss Scaling)、混合精度
優勢:
- 速度:Tensor Core FP16比FP32快2-8倍
- 記憶體:存儲減半,可訓練更大模型或更大批次
- 能耗:數據移動減少,能效提升
- 推理:INT8量化前常用FP16
應用場景:
- 混合精度訓練(混合精度):權重FP32主副本,計算FP16
- 推理優化:FP16推理比FP32快且省電
- 大模型訓練:減少顯存占用
- 邊緣設備:移動GPU的默認精度
挑戰與解決:
- 梯度下溢:小梯度變為0 → Loss Scaling
- 激活溢出:大值變Inf → 動態損失縮放
- 權重更新精度:FP32主權重副本
- 累積精度:FP16累積誤差 → 使用FP32累積器
硬體支援:
- NVIDIA V100、A100、RTX系列:Tensor Core原生FP16
- Google TPU:BF16優先
- ARM:部分支持FP16
BF16 vs FP16:
- BF16:更大範圍(同FP32),適合訓練,無需損失縮放
- FP16:更高精度,適合推理
- 趨勢:BF16在訓練中越來越流行
FP16是現代AI加速的關鍵技術。