半精度浮点数fp16和脑浮点数Bf16的说明和总结

本文介绍了半精度浮点数fp16和脑浮点数Bf16,两者在神经网络中均有应用。fp16动态范围高,利于存储和传输,而bf16保留了与单精度相似的动态范围,但精度较低。两者主要区别在于指数位宽,bf16指数位宽和尾数均为8位,提供更大表示范围。
摘要由CSDN通过智能技术生成

查阅了大量资料,都是将脑浮点数或者半精度浮点数和单精度、双精度进行对比,却没有发现将bf16和f16进行对比的资料。因此对二者进行网络资料的归纳总结。

1.半精度浮点fp16

Half-precision floating-point format
1.1定义
我们已经学过两种浮点数,双精度double,64位和单精度float,32位。
所谓的半精度浮点数则为16位,使用2个字节来进行存储。半精度浮点数是一种计算机使用的二进制浮点数数据类型。在IEEE 754-2008中,它被称作binary16。这种类型只适合用来存储那些对精度要求不高的数字,而不适合用来计算。
一个fp16数据占据两个字节,其中1位符号位,5位指数位,10位有效精度。
1.2特点
1.2.1优点

“The advantage over 8-bit or 16-bit binary integers is that the
increased dynamic range allows for more detail to be preserved in
highlights and shadows for images. The advantage over 32-bit
single-precision binary formats is that it requires half the storage
and bandwidth (at the expense of precision and range).”

(来源:wiki)

查阅wiki,和CSDN的结果,发现半精度的优点都指向同一个——动态范围高,使高对比度图片中更多细节得以保留。
具体到使用来说:双精度和单精度是为了计算,而半精度更多是为了降低数据传输和存储成本。因此,单精度浮点数相比,它能节省一半的储存空间和带宽。
很多应用场景对于精度的要求并没有那么高。在分布式深度学习中,模型可能会有成千上万个参数,体积很大,如果能把所有常量值都用16位浮点数而不是32位浮点数来存储,那么模型大小就能压缩至一半,还是相当可观的。
1.2.2缺点
体积压缩了,会损失部分精确度。表示的有效位数,要比单精度和双精度小得多。但是实际证明,降低浮点数精度,当然会带来精确度的损失,但是这样的损失小到可以忽略不计。
1.2.3应用
CUDA7.5开始,支持16位浮点数的存储和计算,添加了half和half2两种数据类型,并内置了用来操作它们的函数。16位“半精度”浮点类型在应用程序中很有用,这些应用程序可以处理更大的数据集,也可以通过存储和操作更低精度的数据来获得性能。例如对一些规模比较大的神经网络模型来说,它们可能会受限于有限的GPU存储;一些信号处理内核(signal processing kernels 如FFTs)受限于存储的带宽。
许多应用都会得益于使用半精度来储存数据,然后用32位的单精度来处理这些数据。Pascal架构的GPU将会全面支持这

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值