目录

分散式

Torchx 可帮助您运行分布式 trainer 作业。退房torchx.components.train在运行单个 Trainer Job 的示例上。在这里,我们将使用 相同的 Trainer 应用程序示例。 但将以分布式方式运行它。

Torchx 使用 Torch 分布式运行来启动用户进程 并期望用户应用程序以分布式数据并行方式编写

分布式训练器执行

为了在单个或多个进程上远程或本地运行您的 Trainer,您需要做的就是 编写分布式 torchX 组件。我们将在此处使用的示例是 Distributed Trainer Component

该组件定义了用户应用程序的启动方式,torchx 将负责将其转换为 特定于调度程序的定义。

单节点、多个 Trainer (桌面)

尝试在桌面上启动单个节点、多个 Trainer 示例:

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

./torchx/examples/apps/lightning_classy_vision/component.py:trainer_dist 是对组件的引用 功能: 分布式训练器组件

单节点、多训练师 (kubernetes)

现在让我们在 kubernetes 集群上启动相同的组件。 退房torchx.schedulers.kubernetes_scheduler在需要安装的依赖项上 在使用 Kubernetes Scheduler 运行之前。

我们可以使用以下 cmd 在 kubernetes 上启动应用程序:

torchx run -s kubernetes --scheduler_args namespace=default,queue=default     ./torchx/examples/apps/lightning_classy_vision/component.py:trainer_dist     --nnodes 1 --nproc_per_node 2

namespaces arg 对应于要启动的 kubernetes 命名空间。 queue arg 是 volcano 队列

输出示例:

kubernetes://torchx/default:cv-trainer-pa2a7qgee9zng
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

您可以使用作业 URL 查询作业的状态或日志:

torchx status kubernetes://torchx/default:cv-trainer-pa2a7qgee9zng

torchx 2021-10-18 18:47:44 INFO     AppDef:
  State: SUCCEEDED
  Num Restarts: -1
Roles:
 *worker[0]:SUCCEEDED

尝试运行 torchx log kubernetes://torchx/default:cv-trainer-pa2a7qgee9zng

多个节点,多个 trainer (kubernetes)

在 kubernetes 中启动多节点训练器很简单:

torchx run -s kubernetes --scheduler_args namespace=default,queue=default     ./torchx/examples/apps/lightning_classy_vision/component.py:trainer_dist     --nnodes 2 --nproc_per_node 2

上面的命令将使用 volcano 默认队列在 kubernetes 默认命名空间上启动分布式训练作业。它将使用可在 etcd-server:2379 上访问的 etcd 服务来执行 etcd rendezvous

您可以覆盖 rendezvous 终端节点:

torchx run -s kubernetes --scheduler_args namespace=default,queue=default     ./torchx/examples/apps/lightning_classy_vision/component.py:trainer_dist     --nnodes 2 --nproc_per_node 1     --rdzv_endpoint etcd-server.default.svc.cluster.local:2379

注意

对于 GPU 训练,请保持 nproc_per_node 等于实例拥有的 GPU 数量。

上面的命令将使用 volcano 默认队列在 kubernetes 默认命名空间上启动分布式训练作业。它将使用可在 etcd-server:2379 上访问的 etcd 服务来执行 etcd rendezvous

内置分布式组件

在上面的示例中,我们使用自定义组件来启动用户应用程序。情况并非总是如此 用户需要编写自己的组件。

Torchx 附带了一组描述典型执行模式的内置组件。

dist.ddp

dist.ddp是以 DDP 方式作为分布式作业运行的应用程序的组件。 您可以使用它来快速迭代您的应用程序,而无需编写自己的组件。

注意

dist.ddp是一个通用组件,因此它适用于快速迭代,但不适用于生产用途。 如果要将应用程序投入生产,建议编写自己的组件。 详细了解 创作 有关如何创作组件的信息。

我们将用于执行以下示例:dist.ddp

# main.py
import os

import torch
import torch.distributed as dist
import torch.nn.functional as F
import torch.distributed.run

def compute_world_size():
    rank = int(os.getenv("RANK", "0"))
    world_size = int(os.getenv("WORLD_SIZE", "1"))
    dist.init_process_group()
    print("successfully initialized process group")

    t = F.one_hot(torch.tensor(rank), num_classes=world_size)
    dist.all_reduce(t)
    computed_world_size = int(torch.sum(t).item())
    print(
        f"rank: {rank}, actual world_size: {world_size}, computed world_size: {computed_world_size}"
    )

if __name__ == "__main__":
    compute_world_size()

桌面上的单个 Trainer

我们可以使用以下 cmd 在桌面上的四个进程上运行此示例:

torchx run -s local_cwd dist.ddp --entrypoint main.py --nproc_per_node 4

Kubernetes 集群上的单个 trainer

我们可以在 kubernetes 集群上执行它

torchx run -s kubernetes --scheduler_args namespace=default,queue=defaultdist.ddp --entrypoint main.py --nproc_per_node 4

组件 API

torchx.components.dist 中。ddp*script_args: str入口点 str图像 str = 'ghcr.io/pytorch/torchx:0.1.0rc2'rdzv_backend: 可选[str] = rdzv_endpoint: 可选[str] = resource Optional[str] = Nonennodes int = 1nproc_per_node: int = 1名称 str = 'test-name'角色 str = 'worker'env 可选[dict[str str]] = None) → torchx.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 的全面开发人员文档

查看文档

教程

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

查看教程

资源

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

查看资源