PyTorch错误定位系列之DDP训练中 double free or corruption (out)
背景
最近觉得单卡训练有点慢了,在纠结pytorch-lightning
和原始distributed
训练中选择哪里。
最后,从学习的角度选了原生的单机多卡训练(DDP)方式。
结果,就把自己埋坑里了。
问题
代码写完后,通过torch.distributed.launch
启动,程序跑了大概100 steps就突然挂了,出现了如下错误
epoch 0:[114/122531],loss:0.69853double free or corruption (out)
double free or corruption (out)
Killing subprocess 936
Killing subprocess 937
....
in sigkill_handler
raise subprocess.CalledProcessError(returncode=last_return_code, cmd=cmd)
解决方法
网上说可能使malloc内存分配库的问题,咱也不太会cpp,就只能信。
按照网上的逻辑
sudo apt install libtcmalloc-minimal4
- 在自己代码启动的shell脚本加上这句
export LD_PRELOAD="/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4"
- 然后运行代码,居然就正常跑起来了,目前还没发现什么问题。
这里有个注意,libcmalloc有时候不一定在这个目录里,自己找找基本都在/usr/lib
下
反思
下次还是直接用现成的分布式框架吧= = 。
参考
- https://blog.popkx.com/Error-in-python-double-free-or-corruption-prev-when-using-yolov5-training/
- https://github.com/tensorflow/tensorflow/issues/6968