模型参数的数据类型

模型参数的常见数据类型:

  • Float32 (FP32) 是标准的 32 位浮点表示,包含 1 符号位+8 指数位+23 尾数位
  • Float16 (FP16) 则包含 1 符号位+5 指数位+10 尾数位,数值范围远小于 FP32
  • Bfloat16 (BF16) 包含 1 符号位+8 指数位+7 尾数位,牺牲精度来保证数值范围
  • TensorFloat-32 (TF32) ,使用 19 位表示,结合了 BF16 的范围和 FP16 的精度
  • Int8 (INT8) 是一个 8 位的整型数据表示,可以存储 256 个不同的值

在机器学习术语中,FP32 称为全精度 (4 字节),而 BF16 和 FP16 称为半精度 (2 字节)

理想情况下,模型的训练和推理都应该在 FP32 中完成;但实践中一般使用混合精度训练(Automatic Mixed Precision,AMP),即在针对不同的层,采用不同的数据精度进行计算(一般主权重维持 FP32,正向传播和梯度计算则使用 BF16/FP16)以节省显存和加速

以 FP16 为例,展示特定数值的存储和计算:

  • 符号位为 0,表示该数值为正数
  • 指数位的偏移量为15,规范化后的指数为 1,实际存储指数为 16
  • 尾数位是规范化后的二进制数的小数部分,即 1001001(需补足 10 位)

不同数据类型的数值范围:

往年同期文章