一键提交分布式训练
更新时间:
离线训练相较开发环境,可为您提供更快的训练速度,支持分布式多机多卡训练,训练结果可持久化保存。 本节以训练猫狗识别模型为例,将猫狗识别训练代码改为支持分布式,为您介绍如何使用平台进行分布式训练,得到一个猫狗识别模型。
# 前提条件
已获取 压缩包 (opens new window) 中的 dogsVsCatsDistributed.py 代码文件。
说明:进行分布式训练要求您的模型训练代码必须是支持分布式的。
# 创建项目
在左侧导航栏界面选择 项目。
单击右上角的 创建项目 按钮,进入 创建项目 页面。

参考如下参数说明配置项目。

- 项目名称:配置为 DogsVsCatsDist。
- 代码:选择 本地代码。
- 镜像:选择 pytorch 版本为 1.8 及以上的官方镜像,如 PyTorch1.10.1-Conda3.8。
- 数据:选择 公开 下的 ImageNet_ILSVRC2012_few(作者为“趋动云小助手”)。
- 模型:保持默认。
- 公开性:保持默认。
单击 确认,项目创建成功,同时弹出 上传代码 的提示框。

将压缩包中的
dogsVsCatsDistributed.py代码文件上传到平台。
# 提交离线训练
在项目的 代码预览 页新建 “001” 代码版本。

左侧导航栏选择 训练,随后单击右上角 提交任务 按钮。

在 提交任务 页面配置相关参数,详情可参考如下说明。
任务名称:定义为 DogsVsCats_dist01,您也可以自定义。
任务模式:选择 自定义分布式任务。
资源配置:配置训练所需的资源,配置 任务角色1 如下表所示。
说明:表格中仅给出体验的配置示例,您也可根据自身需求自定义。
参数 配置 实例个数 2 实例规格 GPU(物理卡)、型号自选、数量1、配比默认、其他配置默认。 启动命令 python3 -u $GEMINI_RUN/dogsVsCatsDistributed.py -a resnet18 --batch-size 64 --epochs 3 --dist-url "tcp://$GEMINI_IP_taskrole1_0:$GEMINI_taskrole1_0_http_PORT" --dist-backend 'nccl' --multiprocessing-distributed --world-size 2 --rank $GEMINI_CURRENT_TASK_ROLE_CURRENT_TASK_INDEX $GEMINI_DATA_IN1/ImageNet_ILSVRC2012_few
其中,命令头部python3仅为示例,实际场景中取决于您用于训练的镜像中安装的 python 版本。
命令中的参数由训练代码dogsVsCatsDistributed.py定义,在此稍作解释:- num_epochs 表示训练周期,即训练时遍历该数据集几遍。
- num_workers 表示当前节点数。
- rank 表示当前节点的编号,使用固定的环境变量,从 0 开始计算,当前任务有两个节点,则节点 1 编号为 0,节点 2 编号为 1。
- data_dir 表示训练数据的来源。
- batch_size 表示更新内部模型参数之前要处理的样本数。
- train_dir 表示训练结果存储的目录。
- world-size 表示训练实例数量。
上述命令中的$GEMINI_RUN、$GEMINI_DATA_IN1、$GEMINI_CURRENT_TASK_ROLE_CURRENT_TASK_INDEX和$GEMINI_DATA_OUT是平台为您提供的环境变量。挂载数据:保持默认值。
预训练模型:保持默认值。
代码版本:选择刚才新建的代码版本。
工作镜像:保持默认值。
最长运行时间:选择 2h。
任务备注:默认。
单击 确定 按钮,提交当前训练任务。
# 查看结果
在项目页左侧导航栏中选择 结果,进入 任务结果 页,查看训练任务的输出、或从训练结果导出模型。

# 异常处理
- 训练失败,且报错
RuntimeError: NCCL error in: ../torch/csrc/distributed/c10d/ProcessGroupNCCL.cpp:1269, invalid usage, NCCL version 2.17.1。 解决方法:可能是您选择的镜像中 nccl 版本过低,可更换其他镜像再次尝试,如 PyTorch1.12.1-Conda3.9、PyTorch1.10.0、PyTorch1.9.1-Conda3.8、torch1.8.2-cpu-ubuntu20.04、PyTorch1.8.0 等。