有关于pytorch单精度bfloat16位

这篇具有很好参考价值的文章主要介绍了有关于pytorch单精度bfloat16位。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 反直觉的bfloat16

torch支持单精度浮点数bfloat16。这种数据类型在使用的时候需要格外小心,因为它很可能会表现出一系列的“反人类直觉”特性。

什么是bfloat16

BF16是brain float的简称(来源于google brain)。不同于普通的单精度浮点数FP16(i.e., torch.float16),BF16是介于FP16和FP32之间的一种浮点数格式。BF16的指数位比FP16多,跟FP32一样,不过小数位比较少。即,BF16尝试采用牺牲精度的方法,来换取更大的数值空间(Dynamic Range)。

bfloat16带来的问题

虽然有实验和研究都已经表明,BF16的这种“牺牲精度”并不会损害性能 (甚至某些情况下能带来性能提升),并且速度更快,内存消耗更少 (和FP16一样)。但是在实际使用过程中,它往往还是会带来很多的模型训练时的负面影响,如:

  • 混合精度训练时,loss出现NANINF
  • 巨大的数值间隙,令人费解

比方说,下面这张图,计算constractive loss的时候,需要把positive loss (一个较大的数值)和negative loss (一个较小的数值)相加,就会由于BF16的小数精度表达能力过弱,而导致negative loss根本不起效果:
有关于pytorch单精度bfloat16位
再比如下面这张图,也非常容易让人confused:
有关于pytorch单精度bfloat16位
所以,在某些特定场景和需求下,我们可以选择不用BF16,而使用传统的FP16。比方说,计算constractive loss,对于小数数值精度有一定要求。

但很遗憾,目前很多与训练语言模型,比方说T5,都是使用BF16进行预训练的…


计算机体系结构的知识忘的太多了,现在已经有点记不得浮点数的相关概念了。。。

解决方案

参考自:float16 vs bfloat16 numerical properties comparison

主要有两种策略来应对bfloat16的精度问题:

  1. 添加assert:
    比较保守的一种策略。如果实在不确定自己的代码当前bfloat16计算是不是已经出现了浮点数溢出问题,可以在代码里面添加断言,来检测模型训练过程中 (尤其是计算loss的时候),tensor中是否已经出现了overflow现象。例如:
assert not torch.isinf(loss).any().item() and not torch.isnan(loss).any().item()
  1. 禁用pytorch subnormal numbers
    如果需要使用bfloat生成高精度的tensor,用下面这段代码把torch的denormal操作关闭:
_ = torch.set_flush_denormal(False)

示范:
有关于pytorch单精度bfloat16位文章来源地址https://www.toymoban.com/news/detail-514987.html

  1. 强行更改dtype
    最暴力的一种解决精度问题的策略,自然就是强行把bfloat的矩阵类型改为双精度。适用于需要较高精度支持的场景:
    有关于pytorch单精度bfloat16位

2. 参考:

  • Mixed precision for bfloat16-pretrained models
  • 深度学习与bfloat16(BF16)
  • What Every User Should Know About Mixed Precision Training in PyTorch
  • float16 vs bfloat16 numerical properties comparison

到了这里,关于有关于pytorch单精度bfloat16位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c语言冲刺,1、输入一个实数,分别输出其整数部分和小数部分2、输入三个单精度数,输出最小值3、计算a-b之间所有奇数之和与偶数之和,a,b,通过键盘输入4、使用以下公式计算π,要求精度<1e-5

    #include stdio.h main() {     double n;     printf(\\\"input:\\\");     scanf(\\\"%lf\\\",n);     printf(\\\"%d,%fn\\\",(int)n,n-(int)n); } #include stdio.h main() {     double n;     int m;     printf(\\\"input:\\\");     scanf(\\\"%lf\\\",n);     m=n;//3.14     printf(\\\"%d,%fn\\\",m,n-m); }    #include stdio.h main() {     float a,b,c,m;     printf(\\\"

    2024年02月08日
    浏览(55)
  • Server - PyTorch BFloat16 “TypeError: Got unsupported ScalarType BFloat16“ 解决方案

    欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132665807 BFloat16 类型是 16 位的浮点数格式,可以用来加速深度学习的计算和存储。BFloat16 类型的特点是保留 32 位浮点数(float32)的 8 位指数部分,但是只有 8 位的有效数字部分(而不是 fl

    2024年02月09日
    浏览(41)
  • 【译】关于大语言模型的一些直觉

    原作:jasonwei, 引言:如今,一个悬而未决的问题是,为什么大型语言模型如此有效。在这篇博文中,我将讨论有关大型语言模型的六个基本直觉。其中许多直觉受到手动检查数据的启发,这是一项我发现有帮助且会推荐的练习。   语言模型经过预训练,可以简单地预测文本

    2024年03月26日
    浏览(38)
  • 关于函数或者数列极限保号性的直觉理解(图解)

    欢迎大家评论区指出问题或提出更严谨、有说服力的证明 首先,贴一条很有感触的话: “保号性”的说法,是汉语微积分教学中,穿凿附会、虚张声势的说法。 它刻意回避问题的本质,不是单刀直入、直面主题,而是有意玩弄无聊的文字游戏。 自己level有限,先不做评论,

    2024年02月16日
    浏览(40)
  • 『CV学习笔记』深度理解半精度float16的表示

    『CV学习笔记』深度理解半精度float16的表示 深度学习中 int8、float16、float32 的主要却别在于能表示的 数值范围、数值精度 。 半精度是英伟达在2002年搞出来的,双精度和单精度是为了计算, 而半精度更多是为了降低数据传输和存储成本 。很多场景对于精度要求也没那么高,

    2024年02月03日
    浏览(35)
  • 【模型加速部署】—— Pytorch自动混合精度训练

    torch. amp为混合精度提供了方便的方法,其中一些操作使用torch.float32(浮点)数据类型,而其他操作使用精度较低的浮点数据类型(lower_precision_fp):torch.float16(half)或torch.bfloat16。一些操作,如线性层和卷积,在lower_precision_fp中要快得多。其他操作,如缩减,通常需要float32的

    2024年02月13日
    浏览(27)
  • 芯片算力(TOPS, GOPS, MOPS)与精度(int8,int16)

    芯片算力是描述处理器进行运算,对数据进行操作的能力的指标。字面上理解,芯片算力越大,每秒能够进行的运算次数就越多,执行计算任务就越快。 算力 的基本单位有: TOPS:Tera Operations Per Second, 处理器每秒可以进行一万亿次操作(10*12) GOPS:处理器每秒可以进行一

    2024年02月11日
    浏览(41)
  • 1、pytorch分布式数据训练结合学习率周期及混合精度

    正如标题所写,我们正常的普通训练都是单机单卡或单机多卡。而往往一个高精度的模型需要训练时间很长,所以DDP分布式数据并行和混合精度可以加速模型训练。混精可以增大batch size. 如下提供示例代码,经过官网查阅验证的。原始代码由百度文心一言提供。 问题:pytor

    2024年02月07日
    浏览(37)
  • 基于深度学习的高精度浣熊检测识别系统(PyTorch+Pyside6+模型)

    摘要:基于深度学习的高精度浣熊检测(水牛、犀牛、斑马和大象)识别系统可用于日常生活中或野外来检测与定位浣熊目标,利用深度学习算法可实现图片、视频、摄像头等方式的浣熊目标检测识别,另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标

    2024年02月09日
    浏览(49)
  • pytorch实战3:基于pytorch复现VGG16

    前言 ​ 最近在看经典的卷积网络架构,打算自己尝试复现一下,在此系列文章中,会参考很多文章,有些已经忘记了出处,所以就不贴链接了,希望大家理解。 ​ 完整的代码在最后。 本系列必须的基础 ​ python基础知识、CNN原理知识、pytorch基础知识 本系列的目的 ​ 一是

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包