大模型的FP32、FP16、INT8等格式都是干什么用的?
目录
写在前面
小伙伴们在开源大模型社区浏览下载页面时,常能看到模型文件名后跟着"FP16""INT8"或"INT4"的后缀——比如"Llama3-8B-FP16",或是标注为"INT4量化版"。这些看似神秘的字母组合,其实是模型参数的存储格式,直接影响着模型的内存占用、计算效率与性能表现。

那么,大模型参数有哪些主流格式?它们各自承担着怎样的使命?为什么有的格式能让大模型在消费级显卡上运行,而有的必须依赖高端服务器?接下来,我们将拆解这些格式的核心逻辑,带你读懂模型背后的"数字密码"。
关于格式的基础知识:计算机骗了你!数字根本不是“算出来”的!
一、浮点格式(兼顾训练和推理)
这些格式提供了广泛的动态范围和精度,是训练阶段和高质量推理的首选。
1.FP32 - 单精度浮点数
这是最通用的格式,在深度学习训练和科学计算中作为默认标准。它提供了高动态范围和高精度,能很好地处理梯度更新中的微小变化。用于绝大多数模型的训练阶段。对精度要求极高的推理任务。
全称: 32-bit Floating Point
总位数: 32 (符号位:1 bit; 指数位:8 bits; 尾数位:23 bits)
偏置值: 127
最大指数: 254 - 127 = +127
最小指数: 1 - 127 = -126
最大正值: (2 - 2⁻²³) × 2¹²⁷ ≈ 3.4028235 × 10³⁸
最小规约正值: 1 × 2⁻¹²⁶ ≈ 1.17549435 × 10⁻³⁸
优点: 精度最高,训练稳定。
缺点: 占用内存大(4字节/参数),计算速度相对较慢,功耗较高。
常见程度:非常常见
2.TF32 - 张量浮点数
NVIDIA为其Ampere架构GPU引入,这是一个“混合”格式。在执行矩阵运算时,GPU的Tensor Cores会以FP32的范围(19位)读取数据,但以FP16的精度(10位)进行计算,最后再以FP32的格式输出结果。
全称: Tensor Float 32
存储总位数: 32 (符号位:1 bit; 指数位:8 bits; 尾数位:23 bits)
加载到GPU时总位数: 19 (符号位:1 bit; 指数位:8 bits; 尾数位:10 bits)
偏置值: 127
最大指数: 254 - 127 = +127
最小指数: 1 - 127 = -126
最大正值: ~(1 + 1 - 2⁻¹⁰) × 2¹²⁷ ≈ 3.39 × 10³⁸
最小规约正值: 1 × 2⁻¹²⁶ ≈ 1.18 × 10⁻³⁸
优点: 在不修改代码和模型的情况下,为FP32训练提供显著的加速,速度接近FP16。保持了FP32的稳定性。
缺点: 是NVIDIA的专有技术,主要在Ampere及以后架构的GPU上有效。
常见程度: 一般
3.FP16 - 半精度浮点数
使用16位(2字节)表示一个数。其动态范围和精度都比FP32低。用于对速度和内存有要求,且能容忍轻微精度损失的推理。同时也可用于混合精度训练。
全称: 16-bit Floating Point
总位数: 16 (符号位:1 bit; 指数位:5 bits; 尾数位:10 bits)
偏置值: 15
最大指数: 30 - 15 = +15
最小指数: 1 - 15 = -14
最大正值: (1 + 1 - 2⁻¹⁰) × 2¹⁵ ≈ 65504
最小规约正值: 1 × 2⁻¹⁴ ≈ 6.0 × 10⁻⁵
优点: 模型大小减少75%(相比FP32)。内存带宽需求降为1/4。计算速度极快,因为整数运算比浮点运算更简单、高效。
缺点: 会引入精度损失,需要进行量化 操作。量化是一个过程,它将FP32的数值范围线性或非线性地映射到INT8的范围内。这通常需要一个小的校准数据集来确定映射范围。
常见程度:常见
4.BF16 - 脑浮点数
由Google Brain提出,专门为机器学习应用设计。同样占用16位(2字节),但它分配了更多的位给指数(8位,与FP32相同),更少的位给小数(7位)。用于训练和推理。正在逐渐成为替代FP16进行混合精度训练的新标准。
全称: Brain Floating Point
总位数: 16 (符号位:1 bit; 指数位:8 bits; 尾数位:7 bits)
偏置值: 127
最大指数: 254 - 127 = +127
最小指数: 1 - 127 = -126
最大正值: ~(1 + 1 - 2⁻⁷) × 2¹²⁷ ≈ 3.39 × 10³⁸
最小规约正值: 1 × 2⁻¹²⁶ ≈ 1.18 × 10⁻³⁸
优点: 动态范围与FP32相同, 这解决了FP16容易数值溢出的问题,使其能非常稳定地表示梯度等小数值。计算效率高, 和FP16一样,享受内存和速度的优势。
缺点: 精度比FP16低,因为小数部分位数更少。
常见程度:常见
5.FP8 - E4M3
高精度FP8,凭借3位尾数在有限范围内提供更高精度,主要用于AI模型的前向传播和对精度敏感的推理。
全称: 8-bit Floating Point
总位数: 8 (符号位:1 bit; 指数位:4 bits; 尾数位:3 bits)
偏置值: 通常为 7
最大指数: 14 - 7 = +7 (指数位1110,因为1111保留给NaN/Inf)
最小指数: 1 - 7 = -6
最大正值: (1 + 1 - 2⁻³) × 2⁷ = 1.111₂ × 2⁷ = 1.875 × 128 = 240
最小规约正值: 1 × 2⁻⁶ = 1.56 × 10⁻²
优点: 精度较高,更多尾数位,在表示范围内更精确。训练稳定,适合前向传播中数值范围相对集中的激活值和权重。
缺点: 动态范围较小,易出现数值溢出或舍入误差。需新一代硬件(如NVIDIA Hopper架构)支持。
常见程度:不常见,但是趋势很猛
6.FP8 - E5M2
广范围FP8,凭借5位指数提供更大的动态范围,主要用于AI模型的反向传播梯度计算和对范围敏感的推理。
全称: 8-bit Floating Point
总位数: 8 (符号位:1 bit; 指数位:5 bits; 尾数位:2 bits)
偏置值: 通常为 15
最大指数: 30 - 15 = +15 (指数位11110,因为11111保留)
最小指数: 1 - 15 = -14
最大正值: (1 + 1 - 2⁻²) × 2¹⁵ = 1.11₂ × 2¹⁵ = 1.75 × 32768 = 57344
最小规约正值: 1 × 2⁻¹⁴ ≈ 6.10 × 10⁻⁵
优点: 动态范围大,更多指数位,能表示更大范围的数值。梯度表达优:适合反向传播中数值变化剧烈的梯度。
缺点: 精度较低,尾数位少,数值精度相对粗糙。同样需新一代硬件支持。
常见程度:不常见,但是趋势很猛
7.FP4 - E2M1
极致压缩FP4,通过仅4位宽度实现模型体积的极限压缩,专为资源极度受限的边缘设备推理和大模型轻量化部署设计。
全称: 4-bit Floating Point
总位数: 8 (符号位:1 bit; 指数位:2 bits; 尾数位:1 bits)
偏置值: 不固定
最大指数: 2 - 1 = +1 (指数位10,因为11可能保留)
最小指数: 1 - 1 = 0
最大正值: (1 + 2⁻¹) × 2¹ = 1.5 × 2 = 3.0
最小规约正值: 1 × 2⁰ = 1.0
优点: 极致压缩,模型体积仅为FP16的25%。能效比高,计算功耗低,推理速度显著提升。硬件原生支持,如NVIDIA Blackwell架构提供专用加速。
缺点: 精度损失风险,位宽极低,量化误差较大。技术更前沿,生态和应用成熟度低于FP8。需复杂量化策略,依赖缩放因子等技术保障精度
常见程度:罕见
二、整数格式(主要用于推理加速)
这些格式极大地减少了模型大小和延迟,是边缘设备部署的关键。
1.INT8 - 8位整数
将原本是浮点数的权重和激活值映射到8位整数(-128 到 127)范围内。
全称: 8-bit Integer
总位数: 8
取值范围:-128 (10000000) 到 +127 (01111111)
优点: 模型大小减少75%(相比FP32)。内存带宽需求降为1/4。计算速度极快,因为整数运算比浮点运算更简单、高效。
缺点: 会引入精度损失,需要进行量化 操作。量化是一个过程,它将FP32的数值范围线性或非线性地映射到INT8的范围内。这通常需要一个小的校准数据集来确定映射范围。
常见程度:常见
2.INT4- 4位整数
这是目前的研究和应用的前沿,旨在将参数压缩到4位甚至更低。
全称: 4-bit Integer
总位数: 4
取值范围:-8 (1000) 到 +7 (0111)。
优点: 模型大小极度缩小(相比FP32减少87.5%)。允许在极其有限的硬件上运行大模型。
缺点: 精度损失更大,需要更复杂的量化技术。支持该格式的硬件仍在普及中。
常见程度:不常见
3.NF4- 4位整数
NF4由QLoRA提出的4位正态浮点格式,它不是计算格式,而是索引格式。其4位代码作为索引,指向一组为服从正态分布的神经网络权重而预先优化好的16个FP32值。这种非均匀量化相比均匀的INT4能更好地保留模型信息。
全称: 4-bit Normal Float
总位数: 4
最大正值: ~1.0(查找表中定义的最大值)
最小规约正值: ~-1.0(查找表中定义的最小值)
常见程度:不常见
三、E4M3中的E和M代表什么
E 代表 Exponent(指数);M 代表 Mantissa(尾数);紧随其后的数字 4 和 3 表示分配给指数和尾数的位数。
让我们把它放到熟悉的浮点数通用结构中去理解:
值 = (-1)^符号位 × (1 + 尾数) × 2^(指数 - 偏置值)
对于一个 E4M3 格式(通常还有一个符号位):总位数: 1(符号位) + 4(E) + 3(M) = 8 位。
指数位: 4 位,这决定了该格式能表示的数值范围有多大。4位指数可以有 2^4 = 16 种组合。在经过偏置编码后,它决定了这个数最小能到 2 的负多少次方,最大能到 2 的正多少次方。
尾数位: 3 位,这决定了在指数确定的那个范围内,数值的精度有多高。3位尾数意味着小数部分只有 2^3 = 8 个可能的精度等级。它决定了两个相邻的可表示数值之间有多大的“间隔”。
四、总结
通常,浮点数格式(FP32, FP16, BF16, TF32)主攻训练,其中BF16和TF32这类兼顾范围和效率的格式正成为现代训练的首选。而整数和低精度格式(INT8/4, FP8)主攻推理,其中INT8是当前最主流的推理格式之一,FP8则是前景广阔的竞争者。
下面是各种格式的对比:
| 格式 | 构成 | 总位数 | 取值范围 (近似) | 特点 | 优点 | 缺点 | 使用场景 | 主要推动厂商/机构 | 推出年份 | 常见程度 |
|---|---|---|---|---|---|---|---|---|---|---|
| FP32 | 1+8+23 | 32 | ±(1.2×10⁻³⁸ ~ 3.4×10³⁸) | 高精度通用标准 | 精度高,数值稳定 | 内存占用大,计算慢 | 模型训练,高精度推理 | IEEE | 1985 | ⭐⭐⭐⭐⭐ 非常常见 |
| FP16 | 1+5+10 | 16 | ±(6.1×10⁻⁵ ~ 6.5×10⁴) | 范围小,易溢出 | 内存减半,计算快 | 动态范围窄,易溢出 | 混合精度训练,推理 | NVIDIA | ~2010s初 | ⭐⭐⭐⭐ 常见 |
| BF16 | 1+8+7 | 16 | ±(1.2×10⁻³⁸ ~ 3.4×10³⁸) | 范围同FP32,精度低 | 范围大,训练稳定 | 精度较低 | 现代硬件训练/推理 | ~2018 | ⭐⭐⭐⭐ 常见 | |
| TF32 | 1+8+10 | 32 (内部19) | ±(1.2×10⁻³⁸ ~ 3.4×10³⁸) | FP32范围,FP16精度 | 保持范围,加速训练 | 硬件依赖(NVIDIA) | NVIDIA Ampere+ GPU训练 | NVIDIA | 2020 | ⭐⭐⭐ 一般 |
| INT8 | 整数 | 8 | -128 ~ +127 | 线性离散,需量化 | 内存小,推理快 | 需量化,有精度损失 | 主流推理格式 | 业界广泛 | ~2017-2018 | ⭐⭐⭐⭐ 常见 |
| FP8 (E4M3) | 1+4+3 | 8 | ±(1.6×10⁻² ~ 240) | 精度较高,范围小 | 精度密度好 | 动态范围有限 | 前向传播,精度敏感推理 | NVIDIA, Intel | 2022 | ⭐⭐ 不常见(前沿) |
| FP8 (E5M2) | 1+5+2 | 8 | ±(6.1×10⁻⁵ ~ 5.7×10⁴) | 范围大,精度低 | 动态范围广 | 精度较低 | 反向传播,范围敏感推理 | NVIDIA, Intel | 2022 | ⭐⭐ 不常见(前沿) |
| INT4 | 整数 | 4 | -8 ~ +7 | 表示范围极小 | 模型极度压缩 | 精度损失风险高 | 边缘设备,大模型轻量化 | 学术界 & 工业界 | ~2020-2021 | ⭐⭐ 不常见(特定领域) |
| NF4 | 查找表 | 4 | 约 ±1.0 (基于预定义值) | 非均匀,为权重优化 | 相比INT4精度更高 | 需复杂量化策略 | 大语言模型4位量化微调 | 华盛顿大学 | 2023 | ⭐ 罕见(前沿) |
| FP4 (E2M1) | 1+2+1 | 4 | ±(1.0 ~ 3.0) | 范围极度受限 | 极致压缩 | 精度损失大,硬件支持少 | 边缘设备,大模型极限压缩 | NVIDIA | 2024 | ⭐ 罕见(研发阶段) |
关于浮点数就介绍到这里。
关注不迷路(*^▽^*),暴富入口==》 https://bbs.csdn.net/topics/619691583
更多推荐



所有评论(0)