Pytorch ddp多卡训练踩坑(2)

深度学习 · 2023-11-11 · 580 人浏览

复现多卡训练项目经常会遇到一些匪夷所思的问题,包括但不限于numpy<1.2.0 && numpy>=1.2.0OSError: [Errno 12]。以下给出尽可能"少犯错"的几个步骤:

  • 拿到一个项目,首先检查包依赖(如requirements.txt),如果使用conda管理虚拟环境,建议每个项目都创建一个env,conda一般会存有各个包的cache,所以不用担心重新搭建一个环境的时间成本;如果作者提供了docker,优先使用docker

  • 有些包会存在历史依赖,最经典的是numpy.float/numpy.intnumpy>=1.2.0后弃用,而有些包如boundary-iou还是沿用了旧版本的写法,所以遇到这种情况直接对着报错改包就行(如np.float->np.float64),当然也可以尝试版本回退

  • 对于深度学习项目,如果允许先拿一张卡跑,因为多卡多进程debug信息很难处理

  • 对于dataloader,统一先设置num_workers=0,有时候线程过多也会导致错误(例如共享内存shm不足导致的bus error),另外windows下跑项目我记得这个值必须为0

  • batch_size_per_GPU=1有时候很有用,特别是对网络大小没什么概念的时候(当然这个也是最好debug的了,谁会不懂OOM呢[哭])

  • 多卡训练debug比较麻烦,网上有很多Vscode/Pycharm方案,这里给一个最原始的pdb注入方式,一般可以处理除了IPC以外的大部分错误了,在想要打断点的地方插入这两行代码即可,调试方式跟gdb差不多

    import pdb
    pdb.set_trace()

剩下的以后想到再补充~

DDP
Theme Jasmine by Kent Liao