有时候在分布式训练时,可能会出现nccl通信超时的问题,出现的原因好像是在某些数据处理、加载等过程,多个进程一起完成,但是某些计算(比如loss具体不知道都有啥)需要rank0自己来做,但是由于默认的30分钟没算完,没完成不同rank之间的正常通信,导致报错。
可以做如下的操作:
增加超时时间:你可以尝试增加NCCL操作的超时时间。在PyTorch中,你可以通过设置
torch.nn.utils.convert_parameters_to_tensors()
函数的timeout
参数来实现这一点。
或者:
os.environ['NCCL_BLOCKING_WAIT'] = '0' # not to enforce timeout
dist.init_process_group('nccl' if dist.is_nccl_available() else 'gloo',timeout=timedelta(seconds=7200000), # was 1800000rank=RANK,world_size=world_size)