最近使用pytorch训练模型时,使用到了pytorch的库函数 nn.RNN。模型本来在单卡和双卡下训练良好,但一旦同时用三卡及以上的时候就会报错:
segmentation fault (core dumped)
网络上的段错误大体说的都是内存溢出、指针访问越界、零除问题等问题,说例如用:
ulimit -a
ulimit -c 1024
ulimit -s unlimited
等等操作查看报错以及调大stack size。但是我尝试后发现竟然无一匹配。经过总结发现,这些答主基本是在写C/C++代码的时候出现报错、而我们训练模型修改的是Python代码、调用的C/C++代码都是库函数,不应该涉及到这类问题。
所以唯一的答案就是:Pytorch库函数有bug!!!
顺着这个思路,果然找到了相关的原因:我使用的Pytorch版本是1.4.0,这个版本在处理多个GPU并行计算时存在一些bug,导致这种报错。
所以,真正的解决方案是:将Pytorch升级到1.5.0版本!!! 之后问题就神奇地解决了,类似的情况在Pytorch官方讨论区也有提到。
其实,不仅限于nn.RNN,nn.GRU和nn.LSTM的报错都可以如此处理,因为三者是在同一文件内编写的。