2101.神经网络-算法-多层感知机

在大模型训练中,数据格式的选择对于计算资源的利用、内存占用和训练速度具有重要意义。合适的数据格式可以提高模型的性能,减少内存占用,并加速训练过程。数据类型在机器学习中被称为精度

IEEE 754-2008标准定义了浮点数算术的表示和操作,包括单精度(FP32)双精度(FP64)浮点数、以及新增的16位的半精度浮点数。不同的数据格式表示是完全一样的,都是指数小数形式,区别只有指数的位数(决定了数值的范围,即数值的大小)和小数的位数(决定了数值的精度,即数值的小数部分的精确度)。
alt text
常见的数据类型

  • 32位浮点数(FP32):FP32是标准的 IEEE 32 位浮点表示。使用该数据类型,可以表示大范围的浮点数。在 FP32 中,为“指数”保留了 8 位,为“尾数”保留了 23 位,为符号保留了 1 位。因为是标准数据类型,所以大部分硬件都支持 FP32 运算指令。
  • 16位浮点数(FP16):FP16使用一半的位数表示浮点数,相较于FP32,可以提高计算速度,降低内存占用,但精度略有损失。在 Float16 (FP16) 数据类型中,指数保留 5 位,尾数保留 10 位。这使得 FP16 数字的数值范围远低于 FP32。因此 FP16 存在上溢 (当用于表示非常大的数时) 和下溢 (当用于表示非常小的数时) 的风险。
  • 脑浮点数(BF16):BF16是一种针对深度学习优化的半精度浮点数格式,与FP16具有相似的精度和性能特点,但在某些硬件平台上可能具有更好的兼容性。BF16数据格式是由谷歌大脑(Google Brain)团队提出的一种针对深度学习的半精度浮点数表示。BF16在2019年被纳入了ONNX(Open Neural Network Exchange)格式,这是一种用于表示深度学习模型的开放标准。与FP16相比,BF16具有更宽的动态范围,但具有较少的尾数位数(7位)。这种设计使得BF16在表示较大数值时具有更高的精度,同时仍然保持了较低的内存占用和计算成本。
  • TF32:由NVIDIA提出开发的,全称 Tensor float32,也是为了加速机器学习的一种格式。TF32目前只有在Ampere架构以上才支持。是为了专门在 Tensor Core 上加速的一种数据结构。

在选择合适的数据格式时,需要考虑以下几个关键要素:

  • 精度:数据格式应能够在保持足够精度的同时,减少内存占用。通常,较低精度的数据格式(如FP16、BF16)可以提高计算速度,但可能牺牲一定的精度。如果模型对精度要求较高,可以选择FP32;如果可以接受一定程度的精度损失,可以考虑使用FP16或BF16。
  • 计算效率:数据格式应能够充分利用硬件资源,提高计算效率。例如,某些硬件加速器对特定数据格式有更好的支持,从而提高计算性能。了解所使用的硬件平台对不同数据格式的支持情况,选择能够在当前硬件上发挥最佳性能的数据格式。
  • 内存占用:在大模型训练中,内存资源通常是非常宝贵的。选择能够降低内存占用的数据格式,可以在有限的硬件资源下训练更大的模型。
  • 兼容性:数据格式应与所使用的深度学习框架和硬件平台兼容,以便于实现端到端的训练和部署。
-------------本文结束感谢您的阅读-------------