目录

分散式

对于分布式训练,TorchX 依赖于调度器的 gang scheduling 计划节点副本的功能。启动后,应用程序 应以利用此拓扑的方式编写,例如, 使用 PyTorch 的 DDP。 您可以通过指定多个ntorchx.specs.Role在组件的 AppDef 中。每个角色映射到 在整体中执行“角色”(功能)的同构节点组 训练。在调度方面,TorchX 将每个角色作为一个子团伙启动。

DDP 风格的训练作业只有一个角色:培训师。而 使用 Parameter Server 的 Training Job 将有两个角色:Parameter Server、Trainer。 您可以指定不同的入口点(可执行文件)、数量副本、资源要求、 以及每个角色的更多内容。

DDP 内置

DDP 型运动鞋很常见,并且易于模板化,因为它们是同质的 单个角色 AppDefs,因此有一个内置的 .假设您的 DDP training 脚本的 ,启动方式为:dist.ddpmain.py

# locally, 1 node x 4 workers
$ torchx run -s local_cwd dist.ddp --entrypoint main.py --nproc_per_node 4

# locally, 2 node x 4 workers (8 total)
$ torchx run -s local_cwd dist.ddp --entrypoint main.py \
    --rdzv_backend c10d \
    --nnodes 2 \
    --nproc_per_node 4 \

# remote (needs you to setup an etcd server first!)
$ torchx run -s kubernetes -cfg queue=default dist.ddp \
    --entrypoint main.py \
    --rdzv_backend etcd \
    --rdzv_endpoint etcd-server.default.svc.cluster.local:2379 \
    --nnodes 2 \
    --nproc_per_node 4 \

幕后发生了很多事情,因此我们强烈建议您 继续阅读本节的其余部分 了解一切是如何运作的。另请注意, 虽然很方便,但您会发现编写自己的 分布式组件不仅简单(最简单的方法就是复制!),而且还能带来更好的灵活性和可维护性 因为内置 API 会发生比 更稳定的 specs API。但是,选择权在您手中,请放心信赖 如果它们满足您的需求,则为内置插件。dist.ddpdist.ddp

分布式训练

本地测试

注意

请先遵循运行示例的先决条件

在本地运行分布式训练是验证 training 脚本。TorchX 的本地调度器将为每个 replica () 的 Replica ()。下面的示例使用 torchelastic, 作为每个节点的主入口点,进而生成 Number 的培训师。总的来说,您将看到在本地主机上创建的 trainer 进程和 Elastic Agent process。--nodes--nprocs_per_nodennodes*nprocs_per_nodennodes

$ torchx run -s local_cwd ./torchx/examples/apps/lightning_classy_vision/component.py:trainer_dist \
     --nnodes 2 \
     --nproc_per_node 2 \
     --rdzv_backend c10d \
     --rdzv_endpoint localhost:29500

警告

存在一个已知问题(未提供参数时的默认调度器),因此我们改用。请跟踪 问题 286问题 287 的修复进度。local_docker-s-s local_cwd

远程启动

注意

请先遵循先决条件

以下示例演示了在 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_backendc10d

注意

对于 GPU 训练,请保持等于主机上的 GPU 数量,并且 在 Method 中更改 Resource Requirements。修改为主机拥有的 GPU 数量。nproc_per_nodetorchx/examples/apps/lightning_classy_vision/component.py:trainer_distresource_def

组件 API

torchx.components.dist 的ddp*script_args: str入口点 str图像 str = 'ghcr.io/pytorch/torchx:0.1.0'rdzv_backend 可选[str] = rdzv_endpoint 可选[str] = 资源 可选[str] = Nonennodes int = 1nproc_per_node: int = 1name str = 'test-name'role str = 'worker'env Optional[Dict[str str]] = Nonetorchx.specs.api.AppDef[来源]

分布式数据并行风格的应用程序(一个角色,多副本)。 使用 torch.distributed.run 启动和协调 pytorch 工作进程。

参数
  • script_args – 脚本参数。

  • image (图像) – 容器镜像。

  • entrypoint – 要在映像中运行的脚本或二进制文件。

  • rdzv_backend – 要使用的 rendezvous 后端,允许的值可以在 rdzv 注册表文档中找到默认后端为 c10d

  • rdzv_endpoint – 控制器终端节点。如果 rdzv_backend 是 etcd,则这是一个 etcd endpoint,如果是 c10d,则这是其中一个主机的 endpoint。 默认 entdpoint it localhost:29500

  • resource – 可选的命名资源标识符。resource 参数 在本地调度程序上运行时被忽略。

  • nnodes – 节点数。

  • nproc_per_node – 每个节点的进程数。

  • name (名称) – 应用程序的名称。

  • role (角色) – ddp 角色的名称。

  • env – 环境变量。

返回

Torchx 应用防御

返回类型

规格。应用定义

文档

访问 PyTorch 的全面开发人员文档

查看文档

教程

获取面向初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并解答您的问题

查看资源