芯片层 开放阅读

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 专用芯片: 谷歌 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 实例、谷歌云 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 节结构 公司投研页 沿产业链找到受益公司 投资课 把概念转成可跟踪模型