我已经阅读了我能找到的关于 torch.distributed.barrier() 的所有文档,但仍然无法理解它是如何在这个脚本中使用的,并且非常感谢一些帮助。
因此,torch.distributed.barrier 的官方文档说它“同步所有进程。这个集体阻止进程,直到整个组进入这个函数,如果 async_op 为 False,或者如果在 wait() 上调用异步工作句柄。”
它在脚本中的两个地方使用:
if args.local_rank not in [-1, 0] and not evaluate:
torch.distributed.barrier() # Make sure only the first process in distributed training process the dataset, and the others will use the cache
... (preprocesses the data and save the preprocessed data)
if args.local_rank == 0 and not evaluate:
torch.distributed.barrier()
if args.local_rank not in [-1, 0]:
torch.distributed.barrier() # Make sure only the first process in distributed training will download model & vocab
... (loads the model and the vocabulary)
if args.local_rank == 0:
torch.distributed.barrier() # Make sure only the first process in distributed training will download model & vocab
我无法将代码中的注释与官方文档中所述的此函数的功能联系起来。它如何确保只有第一个进程在两次调用 torch.distributed.barrier() 之间执行代码,为什么它只在第二次调用之前检查本地排名是否为 0?
提前致谢!