快捷方式

分布式

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

一个 DDP 样式的训练作业只有一个角色:训练器。而使用参数服务器的训练作业将有两个角色:参数服务器、训练器。您可以为每个角色指定不同的入口点(可执行文件)、副本数量、资源要求等等。

DDP 内置

DDP 样式的训练器很常见,而且易于模板化,因为它们是同构的单角色 AppDef,因此有一个内置:dist.ddp。假设您的 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)
$ torchx run -s local_cwd dist.ddp -j 2x4 --script main.py

# remote (optionally pass --rdzv_port to use a different master port than the default 29500)
$ torchx run -s kubernetes -cfg queue=default dist.ddp \
    -j 2x4 \
    --script main.py

# remote -- elastic/autoscaling with 2 minimum and max 5 nodes with 8
# workers each
$ torchx run -s kubernetes dist.ddp -j 2:5x8 --script main.py

请注意,与本地启动相比,唯一的区别是调度程序 (-s)。dist.ddp 内置在幕后使用 torchelastic(更具体地说,是 torch.distributed.run)。阅读更多关于 torchelastic 的信息 此处.

组件 API

torchx.components.dist.ddp(*script_args: str, script: Optional[str] = None, m: Optional[str] = None, image: str = 'ghcr.io/pytorch/torchx:0.7.0', name: str = '/', h: Optional[str] = None, cpu: int = 2, gpu: int = 0, memMB: int = 1024, j: str = '1x2', env: Optional[Dict[str, str]] = None, max_retries: int = 0, rdzv_port: int = 29500, rdzv_backend: str = 'c10d', mounts: Optional[List[str]] = None, debug: bool = False, tee: int = 3) AppDef[source]

分布式数据并行应用程序 (单角色,多副本)。使用 torch.distributed.run 来启动和协调 PyTorch 工作进程。默认使用 c10d 协调后端,在协调端点 $rank_0_host:$rdzv_port 上。请注意,在单节点上运行时,rdzv_port 参数会被忽略,我们改用端口 0,指示 torchelastic 在主机上选择一个随机的空闲端口。

注意: (cpu, gpu, memMB) 参数与 h (命名资源) 相互排斥,其中

h 如果指定,优先用于设置资源需求。请参阅 注册命名资源.

参数:
  • script_args – 主模块的参数

  • script – 要在镜像内运行的脚本或二进制文件

  • m – 要运行的 Python 模块路径

  • image – 镜像 (例如 Docker)

  • name – 任务名称覆盖,格式如下: {experimentname}/{runname}{experimentname}//{runname}{runname}。如果未指定 {runname},则使用脚本或模块名称。

  • cpu – 每个副本的 CPU 数量

  • gpu – 每个副本的 GPU 数量

  • memMB – 每个副本的 CPU 内存 (以 MB 为单位)

  • h – 注册的命名资源 (如果指定,优先于 cpu、gpu、memMB)

  • j – [{min_nnodes}:]{nnodes}x{nproc_per_node},对于 GPU 主机,nproc_per_node 不能超过 GPU 数量

  • env – 要传递给运行的环境变量 (例如 ENV1=v1,ENV2=v2,ENV3=v3)

  • max_retries – 允许的调度器重试次数

  • rdzv_port – 用于托管用于协调的 c10d 存储的 rank0 主机上的端口。仅在多节点运行时生效。在单节点运行时,此参数会被忽略,并选择一个随机的空闲端口。

  • rdzv_backend – 要使用的协调后端。仅在多节点运行时生效。

  • mounts – 要挂载到工作环境/容器中的挂载点 (例如 type=<bind/volume>,src=/host,dst=/job[,readonly])。有关详细信息,请参阅调度器文档。

  • debug – 是否以预设的调试标志启用运行

  • tee – 将指定的标准流 (s) 输出到控制台 + 文件。0: 无,1: stdout,2: stderr,3: 同时输出

torchx.components.dist._TORCH_DEBUG_FLAGS

这些是通常设置的环境变量,用于调试 PyTorch 执行。

  • CUDA_LAUNCH_BLOCKING: 阅读更多 此处.

  • NCCL_DESYNC_DEBUG

  • TORCH_DISTRIBUTED_DEBUG: 阅读更多 此处.

  • TORCH_SHOW_CPP_STACKTRACES: 阅读更多 此处.

文档

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

查看文档

教程

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

查看教程

资源

查找开发资源并获取答案

查看资源