当前位置: 首页 > news >正文

记录:训练过程中可训练参数出现nan和inf造成loss为nan

文章目录

  • 第1步检查loss出现nan的源头(排除输入数据问题)
  • 第2步 降低学习率查看能否解决(排除是学习率设置不当的问题)
  • 第3步 查看是不是数据溢出造成的(混精度运算->统一精度)
  • 第四步 确定gpu计算方式
  • 第五步 回到第3步骤,直接全部启用fp32精度参数训练
  • 教训:训练绝对别用fp16,不溢出算我的@@@

第1步检查loss出现nan的源头(排除输入数据问题)

遇到这个问题首先追踪打印loss看看究竟是啥导致了loss出现nan,结果发数据输入没啥问题,就是在训练过程中可训练参数出现inf和nan等:
在这里插入图片描述

第2步 降低学习率查看能否解决(排除是学习率设置不当的问题)

我将学习率从10-5降低十倍,一点点作用都没有
在这里插入图片描述

第3步 查看是不是数据溢出造成的(混精度运算->统一精度)

因为我这个情况比较特殊,我的输入数据是32位的,但是我的模型训练参数是16位的,loss计算是32位的,因为上面也发现我的问题是训练参数inf和nan了,所以我想会不会是精度不一样导致参数计算的时候溢出了。由于我的baseline是16位的,我计划将所有的转换成16位来训练。
结果还是一样,在训练的第一次更新完参数就inf和nan了。
在这里插入图片描述

第四步 确定gpu计算方式

可能你的gpu是半精度(fp16)训练,启用了tf32训练
加上:

torch.backends.cuda.matmul.allow_tf32 = False
torch.backends.cudnn.allow_tf32 = False
with autocast(dtype=torch.float16):

还是报错:
在这里插入图片描述

第五步 回到第3步骤,直接全部启用fp32精度参数训练

这里其实有一个问题:我最终需要的是fp16 的精度(因为怕溢出),但是参与训练是32。
解决:我将参数初始化为32,但是前向计算时候转换成16
在这里插入图片描述

解决了

教训:训练绝对别用fp16,不溢出算我的@@@


文章转载自:
http://benedictine.hnsdj.cn
http://aircrew.hnsdj.cn
http://aftertime.hnsdj.cn
http://cairo.hnsdj.cn
http://aru.hnsdj.cn
http://cholera.hnsdj.cn
http://arborize.hnsdj.cn
http://accountant.hnsdj.cn
http://chamfron.hnsdj.cn
http://alyssum.hnsdj.cn
http://blackamoor.hnsdj.cn
http://campaniform.hnsdj.cn
http://brahmin.hnsdj.cn
http://amity.hnsdj.cn
http://ankara.hnsdj.cn
http://cavitation.hnsdj.cn
http://bookteller.hnsdj.cn
http://anovulant.hnsdj.cn
http://brazier.hnsdj.cn
http://bounty.hnsdj.cn
http://anodic.hnsdj.cn
http://absurdist.hnsdj.cn
http://buddy.hnsdj.cn
http://acknowledgedly.hnsdj.cn
http://apepsia.hnsdj.cn
http://apogeotropism.hnsdj.cn
http://antiskid.hnsdj.cn
http://aliquant.hnsdj.cn
http://avoidless.hnsdj.cn
http://alyssum.hnsdj.cn
http://www.dtcms.com/a/216017.html

相关文章:

  • 2025年6月亲测可用 | 剪映免SVIP版本 | 支持数字人
  • 8.安卓逆向2-frida hook技术-frida环境安装
  • 利用亮数据实现大规模数据自动抓取
  • 如何验证 AXI5 原子操作
  • Linux 进阶命令篇
  • (自用)Java学习-5.19(地址管理,三级联动,预支付)
  • WSL连接网络
  • 【观成科技】Ymir勒索软件组织窃密木马RustyStealer加密通信分析
  • 联软科技统一安全工作空间:零信任架构下的远程办公数据安全守护者
  • 塔能科技:有哪些国内工业节能标杆案例?
  • vue3基本类型和对象类型的响应式数据
  • [Vue组件]比例环形编辑
  • 【前端】【Vue3】vue3性能优化总结
  • 关于Oracle LATCH:LIBRARY CACHE
  • 【Vue Vapor Mode :技术突破与性能优化的可能性】
  • 《棒球特长生》棒球升学途径·棒球1号位
  • 深度学习能取代机器学习吗?
  • 给定数组 nums,判断是否存在三个元素 a, b, c 使得 a + b + c = 0。
  • 基于vue框架的动物园饲养管理系统a7s60(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 四足机器人环境监测系统相关问题
  • 鸿蒙OSUniApp 实现登录状态管理与持久化#三方框架 #Uniapp
  • 深度学习常用概念详解:从生活理解到技术原理
  • 调不好分布式锁?HarmonyOS + Redis 分布式锁失效排查全路径
  • 32.第二阶段x64游戏实战-封包-公共call
  • [yolov11改进系列]基于yolov11引入感受野注意力卷积RFAConv的python源码+训练源码
  • 【刷题】数组拼接(超聚变暑期实习笔试)
  • GitCode镜像仓库批量下载开发实录
  • 一,关键字class和typename的区别
  • 线代第四章线性方程组第二节:线性方程组有解判断
  • 模型协同构建智能流程体