bfloat16在tensorflow里到底是个啥

前言

最近在学tensorflow,看见里面有一个bfloat16,但这个玩意似乎没人用过,常见的是float32/float64,看谷歌的官方文案介绍说这个东西是float32的截取前16位的版本,但更细的也没多说,只能自己爬咯


bfloat的优点

在这里插入图片描述

这张图可以几乎概括bfloat的最大优点,牺牲精度获取范围,与float16相比,befloat16更多的exponent使其范围比float16更加优秀,但较少的fraction使其精度不佳,这个时候肯定有人在想,既然这样,我能不能自定义一下float的exponent和fraction?答案是可以,但你会被坑的很惨,bfloat16仗着范围大,可以更轻松的和float32做强转(精度丢失惨不忍睹系列),实际上tf也支持你这么搞(参考https://github.com/tensorflow/tensorflow/blob/1e44b15ff02fe3bf4764189eb1b796602d669c3e/tensorflow/core/framework/bfloat16.cc,bfloat16的源码)但float32转float16。。。只能说有点刺激,除此之外,在tpu上做模型时,可以考虑bfloat与float32做混合浮点训练,高精度部分由float32来,低精度部分由bfloat16来,速度和内存都可以省一些,美滋滋

缺点

bfloat 看起来很漂亮不是么?用精度换内存,而且更低位数,按理说推算起来也更快些,不是么?但打脸,往往是在过度熬夜之后(误),在pc上,全精度的float32可不是精度更高这么一个优点,它还因为cpu硬件支持,一些低端些的cpu甚至连float16都不支持(希望有人打脸,老古董级记忆)只支持float32,导致cpu使用bfloat16速度慢的一批(每次使用都要转float32,想想都知道速度有多慢),gpu?不好意思,gpu也不支持bfloat16,英伟达的gpu支持float16但不支持bfloat16,使得bfloat16似乎只剩下了直转float32和内存占用小的优点。。。可谓惨不忍睹,tpu上支持bfloat16,而且还可以bfloat+float32做混合浮点运算,但。。我个人是没接触过tpu,有接触过的dalao可以说一下速度如何吗?还有内存占用率

总结

如果是训练模型的话,没针对硬件做调优还是float32香,凭借其及其夸装的软硬件支持,flaot32所带来的优势不言而喻,如果要转成tflite模型,那也会在转化中变成float8这种在移动端更吃香的float类型,总感觉bfloat16现在是被硬件卡了脖子,不然这个更低内存占用,可存放更多数据的float类型泛用性应该会更好,不管在低性能的移动端还是高性能的pc端上来讲,我上面的这些是在谷歌上搜了一堆资料后总结出来的,但毕竟不是实战得到的结果,如果有实战dalao的话,我还是希望可以好好讨论一下bfloat16这个充满未来的float类型

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值