提交一个Pytorch DDP分布式任务
对于Pytorch DDP分布式任务,平台会创建两种角色的副本:Master和Worker,其中Master为Worker提供了可以访问的Master IP地址、Master 服务端口,并自动将 PyTorch 分布式任务所需的关键信息(包括全局进程总数、每个Pod的进程 ID、每个节点上运行的进程数和节点数量)输出到环境变量中。
用户在运行Pytorch分布式训练任务时,可以在训练脚本中直接使用如下环境变量。
| torchrun 命令参数 | 商汤环境变量 | 描述 |
|---|---|---|
| master_addr | $MASTER_ADDR | 主节点(Master)的IP地址或主机名 |
| master_port | $MASTER_PORT | 所有worker进行通信协商的端口号,默认23456 |
| node_rank | $RANK(旧版命名) | 节点的Index。例如,提交一个2副本任务,Master-0和Worker-0对应的SENSECORE_PYTORCH_NODE_RANK分别为0,1 |
| $SENSECORE_PYTORCH_NODE_RANK(新规范命名) | ||
| world_size | $WORLD_SIZE*$SENSECORE_ACCELERATE_DEVICE_COUNT | 全局进程总数,即 节点的数量*每个节点上运行的进程数 |
| $SENSECORE_PYTORCH_NNODES*$SENSECORE_ACCELERATE_DEVICE_COUNT | ||
| nproc_per_node | $SENSECORE_ACCELERATE_DEVICE_COUNT | 每个Worker节点的GPU卡数。例如,该Worker节点申请为8卡,则SENSECORE_ACCELERATE_DEVICE_COUNT为8 |
| nnodes | $WORLD_SIZE(旧版命名) | 训练的节点总数。例如,提交一个2副本训练任务,则SENSECORE_PYTORCH_NNODES为2 |
| $SENSECORE_PYTORCH_NNODES(新规范命名) |
多机任务启动示例:
torchrun --nproc_per_node $SENSECORE_ACCELERATE_DEVICE_COUNT --nnodes $SENSECORE_PYTORCH_NNODES --node_rank $SENSECORE_PYTORCH_NODE_RANK --master_addr $MASTER_ADDR --master_port $MASTER_PORT main.py
提交Pytorch DDP分布式任务
以提交一个多节点多 GPU 的分布式 minGPT 模型训练任务为例:
1、前置准备工作:将训练所需的数据和代码挂载到对应文件存储卷。
本示例需要提前将examples 代码仓库下载至 AFS共享存储(挂载路径 /mnt/ngc/examples),可参考以下命令:
mkdir /mnt/ngc
cd /mnt/ngc
git clone https://github.com/pytorch/examples.git
2、点击创建任务,输入以下配置
1)【基本信息】
- 输入任务显示名称
- 选择集群

2)【资源配置】
- 设置任务优先级
- 框架选择Pytorch DDP
- 选择副本数:多机多卡训练,副本数>1
- 选择节点类型
本例配置为2个副本,每个副本4张 GPU,共计8张 GPU,对应8个训练进程。

3)【镜像配置】
- 选择所需镜像,本例选择带【Base】标识的nvidia24.02版本NGC官方镜像。

4)【数据代码加载】
- 挂载文件存储卷,输入存储目录及挂载路径。

5)【启动命令】
本例使用如下启动命令:
cd /mnt/ngc/examples/distributed/minGPT-ddp/mingpt
pip install -r ../requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
torchrun --nproc_per_node $SENSECORE_ACCELERATE_DEVICE_COUNT --nnodes $SENSECORE_PYTORCH_NNODES --node_rank $SENSECORE_PYTORCH_NODE_RANK --master_addr $MASTER_ADDR --master_port $MASTER_PORT main.py

3、查看训练结果
1)任务列表处可查看任务运行状态,如状态转为【成功】,说明训练任务已完成。

2)进入任务详情,在【任务日志】中查看在线日志。

3)当任务处于稳定状态(停止、失败和成功)时,点击【离线日志】查看完整训练过程。
