首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >torch.distributed.barrier()是如何工作的

torch.distributed.barrier()是如何工作的
EN

Stack Overflow用户
提问于 2020-01-15 22:14:34
回答 1查看 10.3K关注 0票数 11

我已经阅读了所有关于torch.distributed.barrier()的文档,但是仍然很难理解它是如何在这个剧本中使用的,我很想得到一些帮助。

因此,torch.distributed.barrier官方医生说它“同步所有processes.This集合块进程,直到整个组进入这个函数,如果async_op是假的,或者如果在wait()上调用异步工作句柄”。

它在脚本中的两个地方使用:

第一名

代码语言:javascript
运行
复制
    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() 

第二名

代码语言:javascript
运行
复制
    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?

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-16 09:24:29

首先你需要了解军衔。简单地说:在多处理上下文中,我们通常假定级别0是第一个流程或基本流程。然后对其他过程进行不同的排序,例如1、2、3,总共有四个过程。

有些操作不需要并行执行,或者您只需要一个进程进行一些预处理或缓存,以便其他进程可以使用这些数据。

在您的示例中,如果第一个if语句是由非基本进程(级别1、2、3)输入的,它们将阻塞(或“等待”),因为它们遇到了障碍。他们在那里等待,因为barrier()阻塞直到所有进程都达到了一个障碍,但是基本进程还没有达到一个障碍。

因此,此时非基本进程(1,2,3)被阻塞,但基本进程(0)仍在继续。基进程将执行一些操作(在本例中是预处理和缓存数据),直到到达第二个if-语句为止。在那里,基本进程将遇到一个障碍。在这一点上,所有的进程已经停止在一个障碍,这意味着所有当前的障碍可以取消,所有进程可以继续。因为基本进程准备了数据,其他进程现在可以使用该数据。

也许最重要的理解是:

  • 当一个进程遇到障碍时,它将被阻塞。
  • 屏障的位置并不重要(例如,并非所有进程都必须输入相同的if-语句)。
  • 一个过程被一个障碍所阻塞,直到所有的过程都遇到了一个障碍,而所有的过程都在这个障碍上被解除。
票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59760328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档