分散式¶
对于分布式训练,TorchX 依赖于调度器的 gang scheduling
计划节点副本的功能。启动后,应用程序
应以利用此拓扑的方式编写,例如,
使用 PyTorch 的 DDP。
您可以通过指定多个n
torchx.specs.Role
在组件的 AppDef 中。每个角色映射到
在整体中执行“角色”(功能)的同构节点组
训练。在调度方面,TorchX 将每个角色作为一个子团伙启动。
DDP 风格的训练作业只有一个角色:培训师。而 使用 Parameter Server 的 Training Job 将有两个角色:Parameter Server、Trainer。 您可以指定不同的入口点(可执行文件)、数量副本、资源要求、 以及每个角色的更多内容。
DDP 内置¶
DDP 型运动鞋很常见,并且易于模板化,因为它们是同质的
单个角色 AppDefs,因此有一个内置的 .假设您的 DDP
training 脚本的 ,启动方式为:dist.ddp
main.py
# locally, 1 node x 4 workers
$ torchx run -s local_cwd dist.ddp -j 1x4 --script main.py
# locally, 2 node x 4 workers (8 total)
# remote (needs you to start a local etcd server on port 2379! and have a `python-etcd` library installed)
$ torchx run -s local_cwd dist.ddp
-j 2x4 \
--rdzv_endpoint localhost:2379 \
--script main.py \
# remote (needs you to setup an etcd server first!)
$ torchx run -s kubernetes -cfg queue=default dist.ddp \
-j 2x4 \
--script main.py \
幕后发生了很多事情,因此我们强烈建议您
继续阅读本节的其余部分
了解一切是如何运作的。另请注意,
虽然很方便,但您会发现编写自己的
分布式组件不仅简单(最简单的方法就是复制!),而且还能带来更好的灵活性和可维护性
因为内置 API 会发生比
更稳定的 specs API。但是,选择权在您手中,请放心信赖
如果它们满足您的需求,则为内置插件。dist.ddp
dist.ddp
分布式训练¶
本地测试¶
注意
请先遵循运行示例的先决条件。
在本地运行分布式训练是验证
training 脚本。TorchX 的本地调度器将为每个
replica () 的 Replica ()。下面的示例使用 torchelastic,
作为每个节点的主入口点,进而生成 Number
的培训师。总的来说,您将看到在本地主机上创建的 trainer 进程和 Elastic Agent process。--nodes
--nprocs_per_node
nnodes*nprocs_per_node
nnodes
$ torchx run -s local_docker ./torchx/examples/apps/lightning_classy_vision/component.py:trainer_dist \
--nnodes 2 \
--nproc_per_node 2 \
--rdzv_backend c10d \
--rdzv_endpoint localhost:29500
远程启动¶
注意
请先遵循先决条件。
以下示例演示了在 kubernetes 上远程启动相同的作业。
$ torchx run -s kubernetes -cfg queue=default \
./torchx/examples/apps/lightning_classy_vision/component.py:trainer_dist \
--nnodes 2 \
--nproc_per_node 2 \
--rdzv_backend etcd \
--rdzv_endpoint etcd-server.default.svc.cluster.local:2379
torchx 2021-10-18 18:46:55 INFO Launched app: kubernetes://torchx/default:cv-trainer-pa2a7qgee9zng
torchx 2021-10-18 18:46:55 INFO AppStatus:
msg: <NONE>
num_restarts: -1
roles: []
state: PENDING (2)
structured_error_msg: <NONE>
ui_url: null
torchx 2021-10-18 18:46:55 INFO Job URL: None
请注意,与本地启动相比,唯一的区别是调度程序 ()
和。etcd 也可以在本地情况下工作,但我们使用了,因为它不需要额外的设置。请注意,这是 torchelastic 的要求
而不是 TorchX。在此处阅读有关 rendezvous 的更多信息。-s
--rdzv_backend
c10d
注意
对于 GPU 训练,请保持等于主机上的 GPU 数量,并且
在 Method 中更改 Resource Requirements。修改为主机拥有的 GPU 数量。nproc_per_node
torchx/examples/apps/lightning_classy_vision/component.py:trainer_dist
resource_def
组件 API¶
- torchx.components.dist 的ddp(*script_args: str, 脚本: str, 图像: str = 'ghcr.io/pytorch/torchx:0.1.1', 名字: 可选[str] = 无, h: str = 'aws_t3.medium', j: str = '1x2', rdzv_endpoint: str = 'etcd-server.default.svc.cluster.local:2379') → torchx.specs.api.AppDef[来源]¶
分布式数据并行风格的应用程序(一个角色,多副本)。 使用 torch.distributed.run 启动和协调 pytorch 工作进程。
- 参数
script_args – 主模块的参数
script – 要在映像中运行的脚本或二进制文件
image – 镜像(例如 Docker)
name (名称) – 任务名称覆盖(如果未指定,则使用脚本名称)
h – 已注册的命名资源
j – {nnodes}x{nproc_per_node},对于 GPU 主机,nproc_per_node不得超过 GPU 数量
rdzv_endpoint – etcd 服务器终端节点(仅在 nnodes > 1 时重要)