晶片層 開放閱讀

FP16

16-bit Floating Point

概念 ID
16-bit-floating-point
更新時間
2026-05-29
來源數量
待補

FP16

3 秒看懂

FP16(半精度浮點)是深度學習中一種用 16 位二進位制 表示實數的方法,把模型引數和中間結果的記憶體佔用直接砍半。它借力現代 GPU 的 Tensor Core 可實現 2 倍以上的計算吞吐,但數值範圍窄(最大約 65504),訓練時容易“爆炸”或“消失”。因此業界通常不單用 FP16,而是配合 FP32 組成 混合精度訓練——計算用 FP16 加速,關鍵累加用 FP32 保穩,再用 Loss Scaling 把梯度拉回 FP16 能表示的範圍。它是大型模型能塞進一張 GPU 並跑起來的關鍵技術路徑之一,但正被 BF16 和 FP8 逐步承接與演進。

3 分鐘產業解釋

為什麼是 FP16

深度學習對數值精度並不像傳統科學計算那麼敏感:權重和梯度的細微誤差,經常被隨機梯度下降的噪聲和正則化“吞掉”。真正吃緊的是 記憶體牆——單張 GPU 視訊記憶體有限,想把大型模型裝進去,要麼減引數量、要麼壓縮每個引數的位寬。FP16 恰好把每個浮點數從 4 位元組壓到 2 位元組,在同樣視訊記憶體下:

  • 可容納的引數量翻倍(對訓練意味著更大的 batch size,對推論意味著更大的模型)
  • 訪存頻寬壓力年增率例下降
  • 硬體乘加吞吐翻倍(見下)

從 NVIDIA Volta 架構起,Tensor Core 能以單週期對 FP16 矩陣乘加執行 FMA(Fused Multiply-Add),理論峰值 FLOPs 是 FP32 的 4–8 倍。這是 FP16 產業化的硬體支點。

但它不能單獨上陣

FP16 的指數位只有 5 位,能表達的正常正數範圍上限僅為 65504。訓練初期梯度動輒上萬,一進去就溢位成 Inf/NaN;權重更新量若在 1e-8 量級,則直接下溢為 0,梯度資訊消失。因此在工程中,幾乎不存在“純 FP16 訓練”這個選項,取而代之的是 FP16 + FP32 混合精度:

  • 前向/反向核心矩陣乘用 FP16 高速通路
  • 權重主複製(master weights)保持在 FP32,梯度累加在 FP32
  • Loss Scaling(損失放大)把原本過小的梯度“抬”進 FP16 動態範圍

這套方案在 NVIDIA Apex AMP(Automatic Mixed Precision)與 PyTorch torch.cuda.amp 中被標準化,已成為訓練 ResNet、BERT、GPT 等模型的標配。

產業現狀

  • 訓練端:BF16 憑藉與 FP32 相同的指數位(8 位)逐漸取代 FP16 成為大型模型訓練主流,因為不再需要 Loss Scaling,訓練更穩定。FP16 仍在視覺模型、中小模型微調中有廣泛存量。
  • 推論端:FP16 仍然是 GPU 推論的“甜點”,TensorRT 等推論引擎以 FP16 為標配最佳化路徑;INT8/INT4 量化進一步壓縮,但需校準,FP16 是最“無痛”的高效推論格式。
  • 下一代:Hopper 架構引入 FP8(E4M3 / E5M2),進一步倍增吞吐,但需在訓練中做分塊縮放(scaling block),對架構提出更高工程要求。FP16 正從“開創者”轉變為“承上啟下”的成熟基礎設施。

15 分鐘專家深入

位結構與數值特性

FP16 遵守 IEEE 754-2008 binary16 標準:

  bit 15    bit 14-10    bit 9-0
┌──────┐ ┌──────────┐ ┌──────────┐
│ sign │ │ exponent │ │ mantissa │
│  1   │ │    5     │ │    10    │
└──────┘ └──────────┘ └──────────┘
屬性備註
總位寬16 bit2 位元組
符號位1 bit0 正 1 負
指數位5 bit偏置 bias=15
尾數位10 bit隱含前導 1,有效精度 ≈ 11 bit
正常數範圍~±6.10×10⁻⁵ ~ ±6.55×10⁴約 5.96×10⁻⁸ 為最小次正規數下限
十進位制精度3–4 位有效數字實際二進位制精度約 11 bit
最大正數 (Max)655040 11110 1111111111
最小正正規數 (Min)2⁻¹⁴ ≈ 6.10×10⁻⁵0 00001 0000000000
最小正次正規數2⁻²⁴ ≈ 5.96×10⁻⁸0 00000 0000000001

對比 FP32:

  • 指數位少 3 → 動態範圍縮減為 FP32 的 2^{-14}2^{15} 量級,遠低於 FP32 的 2^{-126}2^{127}
  • 尾數位少 13 → 舍入誤差明顯增大,每次乘加約產生 2^{-11} 量級相對誤差。

混合精度訓練的機制

標準的混合精度流程(以 PyTorch AMP 為例):

  1. 前向傳播: 權重從 FP32 主複製自動 cast 為 FP16,啟用值與中間結果以 FP16 計算、儲存。矩陣乘(Tensor Core 路徑)用 FP16。
  2. Loss 計算: 通常仍在 FP32 累加,或轉為 FP32 後再計算,避免極端縮放造成的溢位。
  3. Loss Scaling: 將 Loss 乘以一個大的標量(如 2¹⁶ 或動態搜尋的 scale),使反向傳播初始梯度“變胖”,進入 FP16 可表示範圍。
  4. 反向傳播: 梯度以 FP16 計算(矩陣乘部分),但累加至 .grad 時可能在 FP32 完成,或先 descale(除以 scale)再累加。
  5. 最佳化器更新: 在 FP32 權重主複製上執行 Adam/SGD 等更新,避免小更新在 FP16 下溢。
  6. Scale 動態調整: 若檢測到 Inf/NaN,降低 scale 並跳過本次更新;若連續若干步無問題,嘗試提高 scale。

Tensor Core 的硬體加速機制

NVIDIA Tensor Core 在每個 SM 中以 warp 級別執行混合精度矩陣乘加:

  • 輸入矩陣 A、B 為 FP16(或 BF16、TF32 等),累加器 C/D 保持 FP32。
  • 單 Tensor Core 每週期可完成 D = A × B + C (FMA),以 4×4×4 矩陣塊為單位並行。
  • A100 中,FP16 Tensor Core 稠密峰值可達 312 TFLOPS(稀疏 624 TFLOPS),而 FP32 通用核僅 19.5 TFLOPS。約 16 倍的理論乘加吞吐提升。

這是 FP16 能在產業中立足的根本物理基礎:不是“快一點”,而是近乎數量級的吞吐差異。

數值穩定性風險

FP16 的三大數值問題:

問題成因混合精度對策
梯度上溢(Overflow → Inf/NaN)啟用值或梯度超過 65504,FP16 無法表示動態降低 loss scale 並跳過本次更新
梯度下溢(Underflow → 0)小更新量 < 6e-8,直接變零FP32 主權重 + 小梯度在 FP32 器內累加不丟失
舍入誤差累積10bit 尾數精度有限,多次乘加引入噪聲關鍵累加保留 FP32

實踐中,還有兩大暗坑:

  • 啟用值的分佈偏移:深度網路(尤其 Transformer)中間啟用值可能進入 FP16 的“次正規數區”(< 6.10e-5),此時精度進一步下降、計算效率也打折扣(部分 GPU 對次正規數處理有額外開銷)。
  • BatchNorm 與 Softmax 的不穩定:這兩個操作涉及大規約和指數運算,在 FP16 下容易產生除零或 NaN。通常會在這些運算元內強制使用 FP32 計算(架構已自動處理)。

技術原理

浮點表示與量化誤差的根源

FP16 的科學計數形式:

V = (-1)^&#123;s&#125; \times 2^&#123;(e-15)&#125; \times (1 + m \times 2^&#123;-10&#125;)

其中 s 為符號, e 為 5 位指數整數值(0–31), m 為 10 位尾數整數。指數全 0 為次正規數或零,指數全 1 為無窮大或 NaN。這種結構導致:

  • 絕對精度隨值的大小變化:大值(如 1000)時,相鄰可表示數間距約 1000 \times 2^&#123;-10&#125; \approx 0.98;小值(如 0.001)時,間距僅約 0.001 \times 2^&#123;-10&#125; \approx 9.76\times 10^&#123;-7&#125;。這是浮點本質。
  • 舍入誤差的相對界:相鄰值間距與值本身之比約為 2^&#123;-10&#125; (約 0.1%),FP32 此值為 2^&#123;-23&#125; (約 1.2e-5%),FP16 比 FP32 粗糙約 8000 倍。

混合精度下的梯度流

以線性層 y = Wx (忽略 bias)為例:

  • 前向: y_&#123;fp16&#125; = W_&#123;fp16&#125; x_&#123;fp16&#125; ,誤差來自 input/output 的 FP16 舍入和乘積的尾數截斷。
  • 反向: \nabla_x = W_&#123;fp16&#125;^T \nabla_y ,同樣經歷 FP16 矩陣乘與 cast。
  • 權重梯度: \nabla_W = \nabla_y \cdot x^T ,累積在 FP32。

Loss Scaling 本質是將整個計算的縱軸拉伸,使梯度的數值分佈整體平移至 FP16 的正常有效區間內:

 無 Scale:  梯度直方圖分佈在 1e-8 到 1e-3,大量點落入 FP16 的次正規區甚至零區
 有 Scale:  乘上 2^K 後,直方圖平移至 1e-5 到 1,正常 FP16 可有效表示

與 BF16 的本質區別

FP16 與 BF16 的哲學分野:

FP16: 尾數多(10bit) + 指數少(5bit) → "小數分得細,但管得窄"
BF16: 尾數少(7bit) + 指數多(8bit) → "小數粗一點,但範圍和 FP32 一樣大"

對大型模型訓練而言,動態範圍的保障比尾數精度更重要。動態範圍不足需要 Loss Scaling 這種“外掛”來彌補,而 BF16 直接不需要。這就是 BF16 在訓練中勝出的核心原因。


技術演進史

時間節點
2008IEEE 754-2008 首次定義 binary16 格式。此前 FP16 多用於圖形學紋理儲存,非計算核心
2016NVIDIA P100(GP100)支援FP16資料儲存,但無專用FP16運算單元,計算通過FP32核心完成
2017NVIDIA V100(Volta)引入 Tensor Core,支援 FP16 矩陣乘加,訓練加速進入實用階段
2018NVIDIA 釋出 Apex AMP,提供標準混合精度 API;此時 BF16 已在 TPU v2(2017)中採用
2019PyTorch 尚無原生 FP16 混合精度 API,訓練仍須藉助 NVIDIA Apex 等第三方庫;TensorFlow 2.0 整合混合精度 API
2020A100(Ampere)將 FP16 Tensor Core 峰值推至 312 TFLOPS;BF16 被 A100 硬體支援,開始蠶食 FP16 訓練份額
2022H100(Hopper)引入 FP8,訓練吞吐再翻倍;FP16 定位轉向推論與存量模型
2023-2025推論引擎(GPU)仍以 FP16 為主力精度;訓練領域新模型大多預設 BF16;部分低功耗邊緣晶片繼續主打 FP16/INT8

技術路線對比

維度FP32FP16BF16FP8(E4M3)INT8
位寬32161688
符號/指數/尾數1/8/231/5/101/8/71/4/3無(定點)
動態範圍≈±3.4×10³⁸≈±6.55×10⁴≈±3.4×10³⁸≈±448(E4M3)±127(對稱)
十進位制精度6–9 位3–4 位2–3 位1–2 位取決於校準
記憶體(每引數)4 位元組2 位元組2 位元組1 位元組1 位元組
Tensor Core 加速基線高(Ampere+)極高(Hopper+)高(Turing+,Tensor Core)
訓練穩定性最優需 Loss Scaling好(無需 Scale)需 block scaling多用於推論
推論部署按需主流部分支援實驗階段廣泛(量化)
典型應用科學計算,基線對比視覺訓練推論,小模型LLM 訓練(主流)下一代大型模型訓練端側推論,邊緣部署

資料來源:IEEE 754 標準、NVIDIA 白皮書、PyTorch 文件及行業公開基準。


上下游

上游:硬體數制與架構定義

  • IEEE 754 標準委員會: 定義 binary16 的位版面配置、舍入規則、特殊值(Inf/NaN)行為。FP16 在深度學習中有效,根源在此。
  • GPU IP 核(輝達 SM,AMD CU, 英特爾 Xe Core): Tensor Core / Matrix Engine 必須原生支援 FP16 稀疏/稠密乘加。A100 FP16 峰值 312 TFLOPS 即為該鏈路硬指標。
  • AI 專用晶片: Google TPU v2/v3 的 BF16,寒武紀、昇騰等的混合精度指令集。
  • 基礎庫: cuBLAS, cuDNN 底層 FP16 卷積/矩陣乘實現;NCCL 的 FP16 AllReduce 通訊最佳化(某些版本對 2 位元組資料 pack 傳輸)。

下游:架構、訓練與部署棧

  • 架構層: PyTorch torch.cuda.amp autocast + GradScaler; TensorFlow mixed_precision policy; JAX 的 jmp 配置。均封裝了 FP16 cast、loss scaling 動態調整邏輯。
  • 訓練階段: 影像分類(ResNet,ViT)、檢測(YOLO,Detectron)、生成對抗(GAN,較脆弱,需精細調 scale)、語音(Conformer)、LLM 微調(部分依然 FP16)。
  • 推論引擎: TensorRT、OpenVINO、ONNX Runtime 均提供 FP16 最佳化路徑(TensorRT 的 FP16 模式常作為除 INT8 外的最高吞吐選項);vLLM、TGI 等大型模型推論架構預設 FP16 載入權重。
  • 模型動物園與部署: Hugging Face 上大多數模型提供 fp16 權重;NGC 容器中的預訓練模型常包含 fp16 checkpoint。

關鍵指標

指標典型值說明
模型視訊記憶體佔用(FP32→FP16)-50%引數 + 最佳化器狀態 + 啟用值均減半
單精度乘加吞吐提升(NVIDIA V100/A100/H100)約 2–16×相對 FP32 非 Tensor 核,實際端到端加速約 1.5–4×
動態範圍6e-5 到 65504遠小於 FP32(1e-38 到 3e38),Loss Scaling 補償
等效小數精度約 3–4 十進位制位足以滿足大多數深度網路的梯度訊雜比要求
Loss Scaling 初始值2¹⁶(65536)Apex 預設;動態 scale 通常從 2²⁴ 啟動
Tensor Core FP16 峰值(A100)312 TFLOPS(稠密)對比 FP32 核 19.5 TFLOPS
訓練吞吐(BERT-Large 微調)提升 2–3×相對 FP32 無 AMP(NVIDIA 基準)
推論延遲降低(ResNet-50)約 1.5–2×TensorRT FP16 對比 FP32

供需與市場資料

注:FP16 作為資料格式本身不獨立構成市場,但它是 AI 加速器的核心效能指標之一,間接反映在訓練/推論硬體市場份額中。

  • AI 伺服器 GPU 出貨: 據 [行業估算] 2024 年資料中心 GPU 約 400–500 萬張,NVIDIA Hopper(H100/H200)及 Ampere(A100)佔絕大多數。這些 GPU 的 AI 加速能力與 FP16/BF16/FP8 吞吐直接掛鉤。
  • 訓練工作負載精度選型趨勢: 2024–2025 新發布的大型模型(GPT-4 量級、Llama 3、Gemini 等)訓練階段 BF16 已成事實標準,FP16 主要用於:
    • 較小模型及視覺模型(約 30–40% 訓練場景,按社群公開配方估計)
    • 微調(fine-tuning):約 50%+ 仍採用 FP16 混合精度(因原有程式碼棧成熟,遷移意願不高)
  • 推論工作負載: 基於 TensorRT 的生產推論中,FP16 佔比約為 60–70%(輝達官方推薦預設路徑),INT8 約 20–30%(需校準),FP32 僅少數對精度有硬要求的場景。
  • 雲端廠商 AI 例項: AWS p4d/p5、阿里雲端 V100/A100 例項、Google雲端 A3 均預設提供 FP16 最佳化的深度學習映象,表明該技術已高度商品化。

無精確出貨及營收資料來源,以上為基於多份行業報告交叉的定性判斷。


代表公司與資本對映

公司/機構與 FP16 的關聯影響層級
NVIDIATensor Core 的 FP16 加速能力(A100/H100)為其 AI 訓練/推論硬體核心競爭力;Apex AMP、cuDNN/cuBLAS 封裝了完整 FP16 軟體棧。每一次代際 FP16 峰值翻倍驅動資料中心 GPU 銷售核心驅動力
AMDMI250X/MI300X 的 Matrix Core 同樣支援 FP16,但軟體生態(RoCm)較 NVIDIA 晚,正在追趕。INSTINCT 系列 FP16 峰值對標,生態不足導致佔有率差距追趕者
IntelHabana Gaudi2 支援 FP16/BF16,軟體棧 SynapseAI;GPU Max(PVC)支援 FP16。FP16 是其在 AI 加速器市場切入的必備能力新興競爭者
GoogleTPU 以 BF16 為主,但 TensorFlow 對 FP16 支援完善;其 Cloud TPU 以 BF16/INT8 為主,FP16 用於相容。對 FP16 的產業推力在於推動混合精度思路普及生態影響者
Meta/Microsoft/Amazon大型模型訓練推論的大規模使用者,其訓練架構(PyTorch)的 AMP 模組決定了 FP16 軟體棧走向;自研晶片(如 Meta MTIA、AWS Trainium)是否最佳化 FP16 影響需求需求端巨頭
華為(昇騰)Ascend 910B 支援 FP16 混合精度,其 CANN 架構對標 Apex AMP。FP16 效能是國產替代路徑的關鍵引數國產替代
寒武紀/壁仞/摩爾線程各自 AI 加速晶片架構中 FP16 單元為標配,軟體棧的 AMP 完整度影響商業化進度早期參與

投資邏輯

FP16 本身不構成直接投資標的,但可作為評估 AI 硬體/軟體公司技術深度的指標項:

  1. 硬體 FP16 效能密度(TFLOPS/mm²): 反映了晶片架構的能效上限。FP16 峰值高但實際利用率(推論訓練吞吐/峰值)更關鍵,需要看硬體-軟體協同。
  2. AMP 生態完備度: 晶片廠商能否提供無縫的 FP16 混合精度訓練架構(對標 NVIDIA AMP),是 AI 訓練晶片能否大規模部署的“准入條件”。PyTorch 原生支援情況是核心訊號。
  3. 向後相容的衰退風險: FP16 在訓練中的主導地位正被 BF16/FP8 侵蝕。純 FP16 最佳化而無 BF16/FP8 能力的晶片,其 AI 訓練市場視窗期正在關閉。但 FP16 推論生命週期仍然較長——因存量模型龐大、遷移成本存在。
  4. 推論市場的 FP16 路徑依賴: 隨著生成式 AI 推論規模爆發,FP16 推論加速(尤其是即時 API 場景)仍然是對資料中心 GPU 強勁需求的組成部分。而 LLM 推論的 KV-cache 記憶體問題,使得 FP16(2 位元組)比 BF16(同樣是 2 位元組)在精度與壓縮之間取得微妙平衡(某些場景 BF16 尾數損失更大)。

常見誤讀糾偏

誤讀 1:“FP16 訓練和 FP32 精度幾乎一樣”

糾偏: 對於大部分視覺模型和 Transformer 微調,FP16 混合精度確實能實現無損或微損收斂。但對於某些敏感架構(GAN,某些 RL、科學計算嵌入)和低資源資料,FP16 的舍入噪聲會導致不收斂或結果顯著偏差。FP16 成功並不意味精度“一樣”,而是網路的冗餘度和隨機下降慣性“容忍”了額外噪聲。

誤讀 2:“FP16 就是 Tensor Core 的唯一格式”

糾偏: Tensor Core 支援多精度:Volta 只支援 FP16;但 Ampere 開始廣泛支援 BF16、TF32、INT8、INT4;Hopper 支援 FP8。FP16 是 Tensor Core 的“第一個”大力推廣的低精度格式,但如今只是多精度矩陣加速的其中一檔。把“Tensor Core = FP16”等同已過時。

誤讀 3:“減小記憶體就能等比例加速訓練”

糾偏: 端到端訓練加速很少達到 2×(相對 FP32)。通訊(多卡 AllReduce)、資料載入、最佳化器更新、CPU-GPU 傳輸等環節保持不變,且 Loss Scaling 和 cast 操作引入額外開銷。實際加速通常在 1.4×–3× 之間,取決於模型的計算/訪存比。


學習路徑

  1. 基礎: 讀 IEEE 754 binary16 定義頁(約 2 頁) + CSAPP 浮點章節 → 理解位分佈、溢位/下溢概念。
  2. 動手: PyTorch autocast 官方教程 + 簡單 ResNet/CIFAR-10 訓練;手動注入 Loss Scaling 觀察梯度分佈。
  3. 關鍵論文:
    • Micikevicius et al., “Mixed Precision Training,” ICLR 2018 (開創 AMP 範式);
    • NVIDIA FP8 白皮書 “FP8 Formats for Deep Learning” 對比敘述 FP16 侷限。
  4. 深入: 閱讀 PyTorch AMP 原始碼(重點 GradScalerautocast 運算元白名單機制);執行 Nsight Systems 對比 FP16 vs FP32 的 kernel 執行時間分佈。
  5. 橫向理解: 對比 BF16 的論文(Kalamkar et al., 2019)與 Intel Habana 的混合精度方案,理解不同指數/尾數分配的設計哲學。

一句話總結

FP16 是深度學習低精度革命的“元老”——它靠半倍記憶體與 Tensor Core 級加速擊穿了記憶體牆,但動態範圍窄的本徵缺陷催生了混合精度範式,並最終被範圍更寬的後輩 BF16/FP8 在訓練高位接過衣缽,而自己駐守在推論的主陣地上。


延伸閱讀與來源

注:文中 FP16 動態範圍(5.96×10⁻⁸ ~ 6.55×10⁴)及位版面配置為 IEEE 754 binary16 標準定義;Tensor Core 峰值資料出自 NVIDIA 官方白皮書;產業採用率為定性估計,無精確調查資料支撐。

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