PyTorch DistributedDataParallel使用小结
最近在做一些pretrain的工作,需要用到单机多卡。PyTorch上单机多卡常用的办法是DataParallel,但是由于一些问题官方建议已经改用DistributedDataParallel,它既可以用作单机多卡也可以用作多机多卡,以下找到两个例子可以作为参考:
- 参考一:简单使用
- 参考二:官方的ImageNet例子
这个例子中包含了如何在使用DistributedDataParallel的时候加载和保存ckeckpoint;
这里记录一下遇到的几个问题:
- 在建立Dataloader的过程中,如果sampler参数不为None,那么shuffle参数不应该被设置;
- 使用DistributedDataParallel意味着使用多进程,如果直接保存模型会保存两次checkpoint,注意此时只能使用主进程保存,
在参考二中对应的代码片段为:保存模型片段
在使用单机多卡的情况下应该:
if local_rank == 0:
save_ckecpoint()