目录

写在前面

一、浮点格式(兼顾训练和推理)

1.FP32 - 单精度浮点数

2.TF32 - 张量浮点数

3.FP16 - 半精度浮点数

4.BF16 - 脑浮点数

5.FP8 - E4M3

6.FP8 - E5M2

7.FP4 - E2M1

二、整数格式(主要用于推理加速)

1.INT8 - 8位整数

2.INT4- 4位整数

3.NF4- 4位整数

三、E4M3总的E和M代表什么

四、总结


写在前面

        小伙伴们在开源大模型社区浏览下载页面时,常能看到模型文件名后跟着"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则是前景广阔的竞争者。

        下面是各种格式的对比:

格式构成总位数取值范围 (近似)特点优点缺点使用场景主要推动厂商/机构推出年份常见程度
FP321+8+2332±(1.2×10⁻³⁸ ~ 3.4×10³⁸)高精度通用标准精度高,数值稳定内存占用大,计算慢模型训练,高精度推理IEEE1985⭐⭐⭐⭐⭐ 非常常见
FP161+5+1016±(6.1×10⁻⁵ ~ 6.5×10⁴)范围小,易溢出内存减半,计算快动态范围窄,易溢出混合精度训练,推理NVIDIA~2010s初⭐⭐⭐⭐ 常见
BF161+8+716±(1.2×10⁻³⁸ ~ 3.4×10³⁸)范围同FP32,精度低范围大,训练稳定精度较低现代硬件训练/推理Google~2018⭐⭐⭐⭐ 常见
TF321+8+1032 (内部19)±(1.2×10⁻³⁸ ~ 3.4×10³⁸)FP32范围,FP16精度保持范围,加速训练硬件依赖(NVIDIA)NVIDIA Ampere+ GPU训练NVIDIA2020⭐⭐⭐ 一般
INT8整数8-128 ~ +127线性离散,需量化内存小,推理快需量化,有精度损失主流推理格式业界广泛~2017-2018⭐⭐⭐⭐ 常见
FP8 (E4M3)1+4+38±(1.6×10⁻² ~ 240)精度较高,范围小精度密度好动态范围有限前向传播,精度敏感推理NVIDIA, Intel2022⭐⭐ 不常见(前沿)
FP8 (E5M2)1+5+28±(6.1×10⁻⁵ ~ 5.7×10⁴)范围大,精度低动态范围广精度较低反向传播,范围敏感推理NVIDIA, Intel2022⭐⭐ 不常见(前沿)
INT4整数4-8 ~ +7表示范围极小模型极度压缩精度损失风险高边缘设备,大模型轻量化学术界 & 工业界~2020-2021⭐⭐ 不常见(特定领域)
NF4查找表4约 ±1.0 (基于预定义值)非均匀,为权重优化相比INT4精度更高需复杂量化策略大语言模型4位量化微调华盛顿大学2023⭐ 罕见(前沿)
FP4 (E2M1)1+2+14±(1.0 ~ 3.0)范围极度受限极致压缩精度损失大,硬件支持少边缘设备,大模型极限压缩NVIDIA2024⭐ 罕见(研发阶段)

         关于浮点数就介绍到这里。

        关注不迷路(*^▽^*),暴富入口==》 https://bbs.csdn.net/topics/619691583

更多推荐