分布式¶
对于分布式训练,TorchX 依赖于调度器的群体调度能力来调度 n 个节点副本。一旦启动,应用程序应编写为能够利用这种拓扑结构,例如,使用 PyTorch 的 DDP。您可以通过在组件的 AppDef 中指定多个 torchx.specs.Role 来表达各种节点拓扑。每个角色映射到一个同质节点组,这些节点在整个训练中执行一个“角色”(功能)。在调度方面,TorchX 将每个角色作为一个子群体启动。
一个DDP风格的训练任务只有一个角色:训练者。而使用参数服务器的训练任务将有两个角色:参数服务器和训练者。你可以为每个角色指定不同的入口点(可执行文件)、副本数量、资源需求等。
DDP 内置¶
DDP风格的训练器很常见且易于模板化,因为它们是同质的单一角色AppDefs,所以有一个内置的: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 的信息 here。
组件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在主机上选择一个空闲的随机端口。- Note: (cpu, gpu, memMB) parameters are mutually exclusive with
h(named resource) where h如果指定了设置资源需求,则优先考虑。 参见 registering named resources。
- Parameters:
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 – [{最小节点数}:]{节点数}x{每个节点的进程数}, 对于GPU主机,每个节点的进程数不得超过GPU数量
env – 要传递给运行的环境变量(例如 ENV1=v1,ENV2=v2,ENV3=v3)
max_retries – 允许的调度程序重试次数
rdzv_port – 用于托管用于集合的c10d存储的rank0主机上的端口。 仅在运行多节点时生效。当运行单节点时,此参数 被忽略并选择一个随机的空闲端口。
rdzv_backend – 使用的集合后端。仅在运行多节点时生效。
mounts – 挂载到工作环境/容器中的挂载点(例如 type=
,src=/host,dst=/job[,readonly])。 有关更多信息,请参阅调度程序文档。 debug – 是否启用预设的调试标志运行
tee – 将指定的标准流重定向到控制台和文件。0:无,1:标准输出,2:标准错误,3:两者
- Note: (cpu, gpu, memMB) parameters are mutually exclusive with