复现多卡训练项目经常会遇到一些匪夷所思的问题,包括但不限于numpy<1.2.0 && numpy>=1.2.0,OSError: [Errno 12]。以下给出尽可能"少犯错"的几个步骤: 拿到一个项目,首先检查包依赖(如requirements.txt),如果使用conda管理虚拟环境,建议每个项目都创建一个env,conda一般会存有各个包的cache,所以不用担心重新搭建一个环境的时间成本;如果作者提供了docker,优先使用docker 有些包会存在历史依赖,最经典的是numpy.float/numpy.int在numpy>=1.2.0后弃用,而有些包如boundary-iou还是沿用了旧版本的写法,所以遇到这种情况直接对着报错改包就行(如np.float->np.float64),当然也可以尝试版本回退 对于深度学习项目,如果允许先拿一张卡跑,因为多卡多进程debug信息很难处理 对于dataloader,统一先设置num_workers=0,有时候线程过多也会导致错误(例如共享内存shm不足导致的bus error)
多卡训练的时候发现一个问题:cuda() 方法会无视环境变量CUDA_VISIBLE_DEVICES。示例如下: CUDA_VISIBLE_DEVICES="3,4,5,6" python -m torch.distributed.launch --nproc_per_node=${N_GPUS} train.py --config_option <your_config_here> 这边指定了可见显卡为3-6号,然而如果在代码里出现cuda(),模型/数据还是会load到0卡(default)。 # load to GPU_0 model.cuda() model = torch.nn.parallel.DistributedDataParallel( model, device_ids=[local_rank], broadcast_buffers=False, find_unused_parameters=False) sample.cuda() 解决方案1,初始化ddp的时候设置默认cuda设备,然而这个方法对我没用。 torch.cuda.set_devi
Axuanz
Updating as per fate.