大数跨境

一文带你搞懂浮点精度-什么是 FP64、FP32、FP16?

一文带你搞懂浮点精度-什么是 FP64、FP32、FP16? AI科技在线
2026-07-07
9
导读:什么是 FP 或浮点精度?浮点精度是数字通过二进制的表示形式。如果要将数字与计算机通信,必须将值转换为二进制的1和0,其中数字的顺序和序列很重要。

图片
什么是 FP 或浮点精度?

浮点精度是数字通过二进制的表示形式。如果要将数字与计算机通信,必须将值转换为二进制的1和0,其中数字的顺序和序列很重要。最常见的浮点精度格式有半精度(FP16)、单精度(FP32)和双精度(FP64),每种格式都有各自的优点、缺点和在特定应用中的实用性。

“浮点精度”的结构可以定义广泛的值。第一个二进制数字表示数字的正负号。下一组二进制数字是以2为底的指数,表示整个数值。最后一组二进制数字表示有效数或尾数,后者表示小数点后的值。有些人甚至称之为分数。

图片

使用指数和二进制等数学运算,用长分数字符串表示数字可能很困难。因此,由于舍入误差,会有一些不准确的地方。例如,在 FP32 中,表示精度在+/-0.5范围内的数字,FP32 表示的最大值必须小于2^23。任何较大的值和 FP32 表示的值之间的距离都将大于0.5。相反,表示精度在+/-0.5以内的数字时,FP64 表示的最大值可以大到2^52。任何较大的值和 FP64 表示的值之间的距离都将大于0.5。越准确,范围越小。这些不精确性可能会在需要具有细粒度精度的应用中造成误差。

图片
FP64、FP32 和 FP16 之间的差异

FP64、FP32 和 FP16 是更普遍的浮点精度类型。FP32 以其良好的精度和较小的尺寸而被广泛使用。浮点数越大,通过计算运行这些高度特定的值所需的时间就越长。许多工作负载并没有从更高的精度中受益,而一些工作负载只能使用较低精度的格式。让我们回顾一下每种浮点精度格式的体系结构,描述它们的优缺点,并列出这些格式最适合的一些应用程序。

  • 什么是 FP64?

FP64 或双精度64位浮点精度使用64位二进制来表示在系统上执行的计算中的数字。这种格式在主流选择中提供了最高的精度,使其成为要求精度和准确度的应用的理想选择。

FP64 双精度使用:

  • 1 bits 表示正/负号。

  • 11 bits ,用于表示以2为基数的指数。

  • 分数/有效数/尾数的52 bits ,即小数点后的值。

图片

FP64 精度很少用于深度学习和人工智能工作负载,因为用于更新权重的常数矩阵乘法可以显著增加训练时间。FP64 主要用于对精度要求很高的科学计算,如制造产品设计、机械模拟和 Ansys 应用中的流体动力学。

只有少数 GPU 可以使用 FP64 进行充分计算,而其他 NVIDIA GPU 的 FP64 性能较差。其他原生支持 FP64 的 GPU 加速器包括 AMD Instinct 系列,如 MI300A 和 MI300X。


联泰集群常备库存有最新的 GPU 和加速器,供专业人士和企业在其下一个系统中使用。我们提供最好的工作站或服务器,价格以根据您的规格构建的最强大的 GPU 为特色。可立即联系我们,并与我们的工程师联系以获取更多信息。

  • 什么是 FP32?

FP32 或单精度32位浮点精度使用32位二进制来表示数字。这种格式是使用最广泛的浮点精度格式,它可以用一些精度来换取用较少数字表示的较轻权重值。更少的数字占用更少的内存,从而提高速度。

FP32 单精度使用:

  • 1 bits 用于正/负号

  • 8 bits 用于表示以2为基数的指数。

  • 小数/有效/尾数的23 bits ,即小数点后的值。

图片

FP32 是所有不需要极高精度,也不需要极高速度的应用程序的默认值。FP32 是最准确的,你可以得到的,而不会完全高估。一段时间以来,它一直是神经网络计算的标准,大多数框架和代码默认使用并运行在 FP32 上。然而,对于那些进行科学计算和模拟的人来说,由于许多小的舍入误差的累积,FP32 中的小误差可能会导致不正确的计算。

FP32 用于所有工作负载,包括机器学习、渲染、分子模拟等。它是最平衡的浮点格式,需要速度和精度。

  • 什么是 FP16?

FP16 或仅利用16位二进制的半精度16位浮点精度。这种格式在深度学习工作负载中呈上升趋势,而不是传统的 FP32。由于神经网络中较低的精度权重似乎并不重要,也不会影响模型的性能,因此FP32的额外精度可以用来换取速度。

FP16 半精度使用:

  • 1 bits 用于正/负号

  • 5 bits 用于表示以2为基数的指数。

  • 小数/有效数/尾数的10 bits ,即小数点后的值。

图片

FP16 主要用于深度学习模型训练和快速计算推理,每单位时间执行更多计算。使用精度较低的常见人工智能模型是人工智能训练的 3D 模型,其中的运动不需要非常完美,并且允许一些偏差。训练这些模型可以帮助动画师要求模型执行一个动作,以便在游戏中制作动画,或者帮助机器人学习如何走上楼梯或跳下平台。然而,用于组装机械的精确机器人应该受益于使用更高精度浮点格式的训练。


随着人工智能在每个行业的应用,联泰集群希望可以为有需求的用户提供可定制的深度学习和人工智能工作站、服务器和集群,为任何密集的工作负载提供算力基础。我们与 NVIDIA、AMD 和英特尔等硬件厂家的密切合作,使我们的系统成为您开发革命性人工智能的完美平台。

图片
您可能遇到的其他浮点精度

FP64、FP32 和 FP16 是常见的格式,但也有其他浮点精度格式。

  • 什么是 BF16?

BF16 或 BFloat16 是谷歌开发的一种称为“大脑浮点格式”的格式,源自谷歌的人工智能研究小组谷歌大脑。在谷歌,他们发现 FP16 没有考虑深度学习应用程序,因为它的范围太有限了。虽然仍使用16位二进制,但他们重新调整了分配位,使其范围更接近 FP32。

BF16 或 BFLOAT16 使用:

  • 1 bits 表示正/负号。

  • 8 bits ,用于表示以2为基数的指数。

  • 分数/有效数/尾数的7 bits ,即小数点后的值。

图片

通过对指数使用与 FP32 相同数量的比特,通过忽略多个数字的分数部分,将 FP32 转换为 BF16 更快且不那么复杂。虽然 BF16 格式是由谷歌设计的,但在运行和训练本应使用 FP32 的深度神经网络时,它正成为取代 FP16 的标准。

BF16 也是 FP32 和 BF16 之间混合精度的完美候选者。由于 BF16 与 FP32 呈指数相似,因此在使用一半的bits 长度的同时,它可以作为小数位数精度较低的替换。存储 BF16 所需的内存较低,而且易于翻译,使用 BF16 可以提高本地 FP32 计算工作负载的速度。

  • 什么是 TF32?

TF32 或 Tensor-Float32 是 NVIDIA 制作的数学模式,表示从 FP32 的32 bits 到19 bits 的值。与 BF16 的功能类似,TF32 使用相同的8 bits 来定义指数,以在使用 FP16 的10 bits 尾数/分数进行 FP32 计算时保持相同的范围和易于转换。因为它使用与 FP32 相同的8 bits ,TF32 是 NVIDIA GPU 轻松执行 FP32 计算的另一种方式,其分数值较短,从 FP32 的23 bits 四舍五入到 TF32 的10 bits 

TF32 或 Tensor-Float32 使用:

  • 1bits 表示正/负号。

  • 8 bits ,用于表示以2为基数的指数。

  • 小数/有效数/尾数的10 bits ,即小数点后的值。

图片

从技术上讲,TF32 是19位二进制,并且在所表示的值的小数部分中是不太精确的 FP32。NVIDIA Ampere 和 Later Tensor Core 使用转换后的 FP32 输入到 TF32 进行矩阵乘法运算,并将矩阵乘法运算结果输出回 FP32 以进行进一步计算,其工作原理如下:

当计算矩阵运算时,FP32 通过将23位尾数/分数四舍五入到10位或小数点后第10位而转换为 TF32。接下来,执行 FP32 矩阵计算,然后将输出TF32值定义为 FP32值。随后的非矩阵乘法运算使用 FP32。

矩阵运算中精度的降低和需要处理的比特的减少减少了所需的内存带宽,并为深度学习和 HPC 中的这些矩阵运算提供了更高的加速。

图片
结论

概括起来,浮点精度是一个只有少数人能完全掌握的棘手话题。然而,对于那些构建复杂人工智能模型的人来说,理解训练模型的正确精度可以提高速度并缩短完成的总时间,也可以要求最高的精度,甚至不惜牺牲时间。

FP64 或双精度是最精确但计算量最大的。FP32,或单精度,是速度和精度平衡的标准。FP16,或半精度,是用于训练神经网络的降低精度。其他格式包括 BF16 和 TF32,它们补充了 FP32 在选择计算中增加加速的使用。

本文仅用于学术分享,如有侵权,请联系台作删文处理

【声明】内容源于网络
0
0
AI科技在线
1234
内容 1457
粉丝 0
AI科技在线 1234
总阅读23.2k
粉丝0
内容1.5k