FP16、FP32 及全系列浮点格式全解析:从半精度到四倍精度
概述
IEEE 754 标准定义了多种二进制浮点格式,从 8 位到 128 位不等,每种格式在符号位、指数位和尾数(精度)位数上各不相同,以平衡数值范围与精度需求citeturn2search1turn0search9。当前深度学习与高性能计算中,常见的格式包括 FP8、FP16(binary16)、BF16(bfloat16)、FP32(binary32)、TF32、FP64(binary64)以及 FP128(binary128)citeturn0search12turn2search1。
IEEE 754 基本概念
在所有 IEEE 754 二进制格式中,一个浮点数由三部分组成:
- 符号位(Sign):1 位,决定正负。
- 指数域(Exponent):带偏移的无符号整数,用于扩展数的量级。
- 尾数域(Significand/Mantissa):存储有效数字,通常隐含一位“隐藏位”以增加精度。
当指数全 0 或全 1 时,分别用于表示次正规数/零和无穷大/NaN 等特殊值citeturn2search1。
常见浮点类型详解
类型 | 总位数 | 符号位 | 指数位 | 尾数位(显式) | 有效精度(位) | 近似小数有效位数 | 典型范围 | 主要用途 |
---|---|---|---|---|---|---|---|---|
FP8 (E4M3) | 8 | 1 | 4 | 3 | 4 | ~1.2 | ~±(2⁻⁷ … 2⁸) | 极限量化、超低精度推理 |
FP8 (E5M2) | 8 | 1 | 5 | 2 | 3 | ~0.9 | ~±(2⁻¹⁵ … 2¹⁶) | 量化研究、新兴硬件支持 |
FP16 | 16 | 1 | 5 | 10 | 11 | ~3.3 | ~±(6.1 × 10⁻⁵ … 6.5 × 10⁴) | 半精度推理、计算加速 |
BF16 | 16 | 1 | 8 | 7 | 8 | ~2.2 | ~±(3.4 × 10³⁸) | 机器学习训练(TPU、云加速器) |
FP32 | 32 | 1 | 8 | 23 | 24 | ~7.2 | ~±(1.2 × 10⁻³⁸ … 3.4 × 10³⁸) | 深度学习训练/推理的标准精度 |
TF32 | 19 | 1 | 8 | 10 | 11 | ~3.3 | 与 FP32 相同 | NVIDIA Ampere GPU 的混合精度加速 |
FP64 | 64 | 1 | 11 | 52 | 53 | ~15.9 | ~±(5.0 × 10⁻³² … 1.8 × 10³⁰⁸) | 科学计算、高精度需求 |
FP128 | 128 | 1 | 15 | 112 | 113 | ~34.0 | 极宽范围,支持超高精度 | 金融、天文模拟、科学极限计算 |
表中数据来源:IEEE 754 二进制互换格式citeturn2search1turn0search9;FP8 格式研究citeturn0search12turn0search5;FP16/binary16citeturn0search0;BF16/bfloat16citeturn0search10turn0search3;FP32/binary32citeturn2search0;TF32citeturn0search15turn0search4;FP64/binary64citeturn0search2;FP128/binary128citeturn0search6
FP8:最小化位宽,突破量化
- E4M3:4 位指数 + 3 位尾数,动态范围小但极致压缩,适合超低延迟推理场景citeturn0search12turn0search5。
- E5M2:5 位指数 + 2 位尾数,兼顾范围与精度,正在研究中并已在部分 NVIDIA Hopper / Ada GPU 支持citeturn0search16。
FP16 / binary16:半精度推理利器
- 结构:1 位符号、5 位指数 (偏移 15)、10 位尾数 (隐含 1 位);符合 IEEE 754-2008 标准citeturn0search0。
- 优点:内存占用减半,计算吞吐提升,是深度学习推理常用格式。
- 缺点:指数与尾数有限,易出现溢出/下溢。
BF16 / bfloat16:云 TPU 的奇招
- 结构:1 位符号、8 位指数 (与 FP32 相同)、7 位尾数;舍弃部分尾数位以保留大范围citeturn0search10turn0search3。
- 优势:指数范围与 FP32 相当,精度可接受,降低了训练时的数值不稳定性。
- 应用:Google Cloud TPU、Intel 的硬件加速。
FP32 / binary32:深度学习的基石
- 结构:1 位符号、8 位指数 (偏移 127)、23 位尾数 (隐含 1 位);精度约 7~9 位十进制数字citeturn2search0。
- 用途:大多数深度学习训练与推理任务的默认格式。
TF32:Ampere 架构的专属提速
- 结构:1 位符号、8 位指数、10 位尾数;覆盖 FP32 范围但仅保留 10 位尾数位以提速citeturn0search15turn0search4。
- 特色:在 NVIDIA Ampere GPU 上可用 Tensor Cores 自动加速,无需改动代码。
FP64 / binary64:科学计算的“黄金标准”
- 结构:1 位符号、11 位指数 (偏移 1023)、52 位尾数 (隐含 1 位);精度约 16~17 位十进制数字citeturn0search2。
- 用途:高精度科学模拟、金融计算、数值分析。
FP128 / binary128:极限精度探索
- 结构:1 位符号、15 位指数 (偏移 16383)、112 位尾数 (隐含 1 位);精度达 ~34 位十进制数字citeturn0search6。
- 应用:天文模拟、气候建模、需要超高精度的科研场景。
混合精度训练简介
混合精度训练结合两种或多种浮点格式,以 FP16/BF16 + FP32 为典型:
- 前向/反向传播:使用低精度(FP16/BF16)以加速矩阵运算。
- 权重更新:在累积梯度时提升为 FP32,保证数值稳定性。
这种方法可以在不损失最终模型精度的前提下,大幅度减少显存占用并提高训练速度。