Fork me on GitHub

Pytorch rendezvous 分布式

一、rendezvous 简介:

PyTorch中的rendezvous后端是一种服务,它帮助分布式训练作业中的进程相互发现并协商角色和等级。它还提供了一个屏障和一个一致的作业成员和状态视图。

 

rendezvous后端是作为torch.distributed.elastic.rendezvous.RendezvousHandler的子类实现的,它定义了创建、加入和销毁rendezvous的接口。rendezvous后端还需要为rendezvous提供容错和弹性,这意味着它可以处理节点故障和训练过程中节点数量的变化。

 

PyTorch提供了一些内置的rendezvous后端,例如:

C10dRendezvousBackend:使用C10d存储(默认为TCPStore)作为rendezvous后端。使用C10d存储的主要优点是它不需要第三方依赖(如etcd)来建立rendezvous2。

EtcdRendezvousBackend:使用启用了v2 api的etcd服务器作为rendezvous后端。使用etcd的优点是它为rendezvous提供了容错和弹性2。

 

要在PyTorch中使用rendezvous后端,你需要在使用torchrun或torch.distributed.launch启动你的训练脚本时指定一些选项。

这些选项包括:

–rdzv_id:一个唯一的作业id(由参与作业的所有节点共享)

–rdzv_backend:用于处理rendezvous的后端的名称

–rdzv_endpoint:rendezvous后端运行的端点;通常以host:port的形式

 

附官方文档链接:https://pytorch.org/docs/stable/elastic/rendezvous.html

(1) Rendezvous — PyTorch 2.0 documentation. https://pytorch.org/docs/stable/elastic/rendezvous.html.

(2) pytorch/c10d_rendezvous_backend.py at main - GitHub. https://github.com/pytorch/pytorch/blob/main/torch/distributed/elastic/rendezvous/c10d_rendezvous_backend.py.

(3) torchrun (Elastic Launch) — PyTorch 2.0 documentation. https://pytorch.org/docs/stable/elastic/run.html.

 

 

二、NCCL和rendezvous的关系:

Rendezvous 和 NCCL 是 torch.distributed 包的两个组件,可在 PyTorch1 中启用分布式并行训练。 Rendezvous 是一种将分布式同步原语与对等点发现相结合的功能。 Torch Distributed Elastic 使用它来收集训练工作的参与者(即节点),以便他们都同意相同的参与者列表和每个人的角色,并就何时可以开始/恢复训练做出一致的集体决定2。 NCCL 是 torch.distributed 支持 GPU 之间分布式通信的后端之一。 类 torch.nn.parallel.DistributedDataParallel() 建立在这个功能的基础上,以提供同步分布式训练作为任何 PyTorch 模型 1 的包装器。

PyTorch distributed package 支持三种built-in backend: Gloo, MPI and NCCL

除了NCCL后端,Rendezvous还支持GlooMPI后端¹。这些后端具有不同的分布式通信能力和性能特征。你可以通过向torch.distributed.init_process_group()传递backend参数来选择后端¹。例如,要使用Gloo代替NCCL,你可以写:

dist.init_process_group(backend='gloo', ...)

你也可以使用PyTorch没有内置的其他rendezvous后端,例如etcd-v2c10d²。这些后端需要你向torchrun指定rdzv_backendrdzv_endpoint参数²。例如,要使用c10d rendezvous后端,你可以写:

torchrun --rdzv_backend=c10d --rdzv_endpoint=localhost:0 ...

 

 

 PyTorch distributed package supports three built-in backends: GlooMPI and NCCL
posted @ 2023-06-02 10:25  stardsd  阅读(652)  评论(0编辑  收藏  举报