加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

漫衍式入门,奈何用PyTorch实现多GPU漫衍式实习

发布时间:2019-05-06 19:14:04 所属栏目:建站 来源:机器之心编译
导读:详细来讲,本文起首先容了漫衍式计较的根基观念,以及漫衍式计较怎样用于深度进修。然后,罗列了设置处理赏罚漫衍式应用的情形的尺度需求(硬件和软件)。最后,为了提供切身实践的履历,本文从理论角度和实现的角度演示了一个用于实习深度进修模子的漫衍式算法(

用 mpiexec 执行上面的代码,可以或许获得一个漫衍式历程调治器,基于任何尺度 MPI 实现都可以,功效如下:

  1. cluster@miriad2a:~/nfs$ mpiexec -n 2 -ppn 1 -hosts miriad2a,miriad2b python ptdist.py 
  2. Rank-0 has sent the following tensor to Rank-1 
  3. tensor([ 1., -1.]) 
  4. Rank-1 has recieved the following tensor from Rank-0 
  5. tensor([ 1., -1.]) 
  • 第一行要被执行的是 dist.init_process_group(backend),它根基上配置了参加节点之间的内部通讯通道。它行使了一个参数来指定行使哪个后端(backend)。由于我们完全行使 MPI,以是在我们的例子中 backend='mpi'。也有其他的后端(譬喻 TCP、Gloo、NCCL)。
  • 必要检索的两个参数——world size 和 rank。World 指的是在特定 mpiexec 挪用情形中全部节点的荟萃(拜见 mpiexec 中的 -hosts flag)。rank 是由 MPI 运行时为每一个历程分派的独一整数。它从 0 开始。它们在 -hosts 中被指定的次序用于分派数值。以是,在这个例子中,节点「miriad2a」上的历程会被赋值 Rank 0,节点「miriad2b」上的历程会被赋值为 Rank 1.
  • x 是 Rank 0 规划发送到 Rank 1 的张量,通过 dist.send(x, dst=1) 完成。
  • z 是 Rank 1 在吸取到张量之前就建设的对象。我们必要一个早就建设好的同维度的张量作为吸取传送来的张量的占位符。z 的值最终会被 x 更换。
  • 与 dist.send(..) 相同,认真吸取的对应函数是 dist.recv(z, src=0),它将张量吸取到 z。

通讯集团

我们在上一部门看到的是一个「点对点」通讯的例子,在给定的情形中,rank(s) 将数据发送到特定的 rank(s)。尽量这种通讯是有效的,由于它对通讯提供了细粒度的节制,可是尚有其他被常常行使的尺度通讯模式,叫作集团(collectives)。下面先容了 Synchronous SGD 算法中我们感乐趣的一个集团——all-reduce 集团。

1. ALL-REDUCE 集团

All-reduce 是一种同步通讯方法,全部的 ranks 都被执行了一个 reduction 运算,而且获得的功效对全部的 ranks 都是可见的。下图先容了这个头脑(将求和作为 reduction 运算)。

漫衍式入门,奈何用PyTorch实现多GPU漫衍式实习

all-reduce 集团

  1. def main(rank, world): 
  2.     if rank == 0: 
  3.         x = torch.tensor([1.]) 
  4.     elif rank == 1: 
  5.         x = torch.tensor([2.]) 
  6.     elif rank == 2: 
  7.         x = torch.tensor([-3.]) 
  8.  
  9.     dist.all_reduce(x, op=dist.reduce_op.SUM) 
  10.     print('Rank {} has {}'.format(rank, x)) 
  11.  
  12. if __name__ == '__main__': 
  13.     dist.init_process_group(backend='mpi') 
  14.     main(dist.get_rank(), dist.get_world_size()) 

PyTorch 中 all-reduce 集团的根基用法

在 world of 3 情形中启动时,功效如下:

  1. cluster@miriad2a:~/nfs$ mpiexec -n 3 -ppn 1 -hosts miriad2a,miriad2b,miriad2c python ptdist.py 
  2. Rank 1 has tensor([0.]) 
  3. Rank 0 has tensor([0.]) 
  4. Rank 2 has tensor([0.]) 
  • if rank == … elif 是我们在漫衍式计较中多次碰着的模式。在这个例子中,它被用来在差异的 rank 上建设张量。
  • 它们一路执行了 all-reduce(可以望见,dist.all_reduce(..) 在 if … elif block 逻辑块的外部),求和 (dist.reduce_op.SUM) 作为 reduction 运算。
  • 未来自每个 rank 的 x 求和,再把获得的求和功效安排在每个 rank 的 x 内。

转向深度进修

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读