在使用DDP:DistributedDataParallel时,0卡上总是有多个进程
问题描述
在使用DDP训练时,发现0卡(或默认的第一张卡)上总是出现多个进程,这样就大大耽误我的计算效率!因为第一张卡爆了整个训练过程都要停下来!
这篇很棒,很多踩坑记录,我也是从这里得到我的解决方案:
https://www.zhihu.com/question/351342218
一个好的DDP程序:
应该是每张卡都占用的差不多,不会差特别多(不然就直接写DP了)
多个进程或显存占用不均匀可能的原因
- 使用tensor.cuda() ,使得新数据都默认在0卡上初始化;
- torch.load参数默认加载到0卡上,
解决方法:
①
//将数据放到cpu上
checkpoint = torch.load("checkpoint.pth",map_location=torch.device('cpu'))
②
//将数据放到当前进程所在的卡上;
checkpoint = torch.load("checkpoint.pth",map_location=f"cuda:{local_rank}")
- !!!实例化 model 时,如果你的模型在初始化时,其实也实例化了其他部件(将模型中的module作为一个可学习模型),一定要注意其实例化要加载到当前的gpu上!!** (我找了好久,原来在模型里面)** ;