新开一个版块,pytorch报错大全(持续更新)

刚接触pytorch,总是报错,奈何自己又比较笨,记不住,设个帖子记录一下:
1、RuntimeError: Assertion cur_target 0 cur_target n_classes failed,大概就是输出与label不符,个人踩的坑是,使用交叉熵(CrossEntropyLoss())损失函数时,label要从0开始,从1开始会报错;

2、失踪人口回归了,好久没有用pytorch搭建模型了,也好久没有整理实验过程中遇到的问题了。今天搭建了一个模型,结果报错从没见过,网上资料也很少,特意来记录一下。
运行情况概述:pytorch搭建深度学习模型,使用单机多卡进行训练;
问题:运行程序时报错,RuntimeError: arguments are located on different GPUs。
报错内容提示的很明显,就是网络中模型的参数在不同GPU上,试了很多种方法都不行,尤其是github还有pytorch论坛中给出的使用register_buffer()对我来说也是不起作用的,直到一位大神的文章:pytorch遇到的bug记录—2解决了PyTorch 使用torch.nn.DataParallel 进行多GPU训练的一个BUG:模型(参数)和数据不在相同设备上
分析:“torch.nn.DataParallel(model,device_ids=[range(len(gpus))])的机制是, 将属于nn.module类的model以及其广播的所有nn.module子类的上的所有参数,复制成len(gpus)份,送到各个GPU上. 这种传播必须通过其子类通过注册(register)成为nn.module的属性才得以完成, 其属性为列表中的元素是不会被复制的, 所以其属性中的元素还是存放在默认设备device 0上”,也就是说,当有列表属性的元素不会被广播到其他GPU上,而是默认在device0上。解决办法是使用nn.ModuleList或者nn.ModuleDict。
我自己的代码中,有好多线性层(nn.linear),最开始我是使用self.linear = [linear1,linear2…]进行包装,一直报错,改成self.linear = nn.Modulelist([linear1,linear2…])即可。

3、又报错了,错误一个比一个奇葩。搭建的神经网络在pycharm上运行,开始好好的,突然报错Process finished with exit code 139 (interrupted by signal 11: SIGSEGV),运行的程序就自动中断退出了,主要是没有报错,也没有提示错误位置,没错,就是这么奇葩。查阅了好多资料,怎么说的都有,有说路径不对的,有说PyQt冲突的,有说pytorch还有各种包之间有冲突的,该文总结了问题可能出现的主要原因:可能时内存泄漏、依赖的库版本不匹配、环境不满足等。因此,每个问题的解决方法也各有不同。Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)中提到了几种解决方法,算是比较全面的了。

我尝试了修改pycharm中的python debugger、删除PyQt、定义run等都不好使。受到pycharm调试pycaffe,出现Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)报错:Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)三篇文章的启发,重新配置了python运行环境(conda create -n,具体创建方法网上资料很多),问题解决。

感悟:本人平时有个不好的编程习惯,就是什么项目什么程序都直接用base环境(python 3.6),机器学习,各种试验的包,pytorch等都统统配置在默认的base环境中(注:本机默认的base环境中也有pyqt,而新的环境没有该包,不知是否真的与pyqt有关),这就导致了base环境下包众多,说不定运行哪个程序时各个包之间就会起冲突。所以说,最好是在运行程序之前进行分析,看看需要哪些包,配置或选用合适的环境。

唉,机器学习、深度学习的代码是个玄学,不知道哪里报错,千奇百怪,修修改改。此次修改报错还有意外发现,在切换新环境运行后,运算效率有所提升,计算时间缩短了20%,仔细一想,也确实,环境下包少了,效率也就上来了。 以后要养成良好的编程习惯,我就是明知道不同项目最好创建不同环境,但是就是懒,平时本着能算就行的原则,且没遇到什么特别特别难解决的问题。以后准备配置不同任务环境,例如传统机器学习模型的环境、pytorch搭建的深度学习模型环境,日常计算调试的环境等。

4、今天使用pytorch计算,导入自定义包时突然报错(以前用的好好的),ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26’ not found (required by /home/administrator/anaconda3/envs/py37/lib/python3.7/site-packages/scipy/interpolate/_rbfinterp_pythran.cpython-37m-x86_64-linux-gnu.so)。网上查阅了各种资料,五花八门,什么需要额外安装包,升级包之类的,但本人觉得可能没有必要这么麻烦,毕竟之前都正常运行过,直到看到这篇文章:import报错,其中提到的第二点,更换报错的import包的代码位置(例如报错显示是import pandas有问题,将该行代码放第一行试试),正常运行。到底什么原因,为什么放在第一行就可以,到现在也没整明白,玄学!!!

5、pytorch模型保存与加载:本人平时训练深度学习模型的习惯并不是直接输出结果,而是输出模型,原因是一方面,以后再进行什么统计计算或者补一些小实验的时候不用重新训练,另一方面,保存中间过程也能及时发现模型中的一些问题。但是,今天加载训练好的模型是突然报错,报错原因是out of…(忘了),后来突然想到会不会是内核使用的问题,果然,训练的时候使用的是python3.7,而本地测试的时候电脑默认的是python3.6,当切换内核之后问题解决。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值