torch的DistributedDataParallel(简称DDP)
DDP的save通常只能存储一个进程的模型,例如只存储local_rank为0的模型
同样的,eval时也只能用相应local_rank为0的模型(与save过程的local_rank保持一致即可),否则将会导致结果不同,不可复现问题
(虽然训练结束后不同进程上的模型参数应该是相同的,eval过程理论上可以拆分到几个进程上并行再合并以提速,但实际会导致,与加载存储的模型再eval的结果不一致,即模型参数存在差异)
import torch.distributed as dist
if dist.get_rank() == 0:
# save or eval
...