DLC是一站式的云原生深度学习训练平台,为开发者和企业提供灵活、稳定、易用和高性能的机器学习训练环境。本文为您介绍如何在DLC中使用mpirun和Deepspeed方式来提交MPIJob类型的分布式训练任务。
前提条件
已开通DLC后付费,并创建默认工作空间。具体操作,请参见开通PAI并创建默认工作空间。
已在资源组中购买灵骏智算资源并创建资源配额。具体操作,请参见灵骏智算资源配额。
使用限制
仅支持在华北6(乌兰察布)地域使用灵骏智算资源提交该任务。
提交MPIJob类型的训练任务
提交分布式训练任务的具体操作步骤如下:
步骤一:准备代码源
使用官方Deepspeed examples代码合集创建代码集,其中关键参数配置如下,其他参数取默认配置。具体操作,请参见代码配置。
名称:自定义代码集名称,本方案示例为:deepspeed-examples。
步骤二:提交分布式训练任务
支持使用以下两种方式提交分布式训练任务:
mpirun方式
进入新建任务页面。
登录PAI控制台。
在左侧导航栏单击工作空间列表,在工作空间列表页面中单击待操作的工作空间名称,进入对应工作空间内。
在工作空间页面的左侧导航栏选择 ,在分布式训练(DLC)页面中单击新建任务,进入新建任务页面。
在新建任务页面,配置以下关键参数,更多参数配置详情,请参见创建训练任务。
节点镜像:本方案提供了一个测试镜像,单击镜像地址,在文本框中输入
registry.cn-wulanchabu.aliyuncs.com/pai-dlc/deepspeed-training:23.08-gpu-py310-cu122-ubuntu22.04
,用于提交MPIJob分布式训练任务。启动命令:在分布式作业的每个POD中执行的脚本命令。本方案使用系统环境变量的默认配置,您也可以在执行命令中配置环境变量来覆盖默认配置。更多详细内容,请参见系统环境变量。
cd /root/code/DeepSpeedExamples/training/cifar/ # --np 2 表示启动两个节点。 mpirun -np 2 --allow-run-as-root -bind-to none -map-by slot -x LD_LIBRARY_PATH -x PATH -mca pml ob1 -mca btl ^openib python /root/code/DeepSpeedExamples/training/cifar/cifar10_tutorial.py
资源配额:选择已创建的资源配额。
框架:选择MPIJob。
任务资源:节点数量配置为2,CPU(核数)配置为4,GPU(卡数)配置为1,内存(GiB)配置为8,共享内存(GiB)配置为8。
驱动设置:使用上方提供的测试镜像时,建议选择535.54.03版本的驱动。
单击确定。
deepspeed(pdsh)方式
使用该方式提交分布式训练任务,启动命令的配置如下,其他参数与mpirun方式配置相同。
cd /root/code/DeepSpeedExamples/training/pipeline_parallelism
deepspeed --hostfile /etc/mpi/hostfile train.py --deepspeed_config=ds_config.json -p 2 --steps=200
如果您使用自定义镜像来运行Deepspeed作业,您需要在镜像中安装MPIJob和Deepspeed所需的库。另外,您也可以从DockerHub上获取Deepspeed官方镜像,该镜像已经预装了MPIJob和Deepspeed所需的库。
本方案使用系统环境变量的默认配置,您也可以在启动命令中配置环境变量来覆盖默认配置。更多详细内容,请参见系统环境变量。
步骤三:查看任务详情和日志结果
任务提交成功后,在分布式训练(DLC)页面,单击任务的名称。
在任务详情页面,即可查看任务的基本信息和执行状态。
在任务详情页面底部的实例区域,单击launcher类型的实例操作列下的日志,查看作业运行情况。
系统环境变量
在MPI分布式作业中,存在Launcher和Worker两种角色。这两种角色在训练过程中需要进行通信。在DLC中,针对Launcher角色已经设置了默认环境变量,您也可以根据具体场景的需求,在执行命令时配置环境变量以覆盖默认配置。
环境变量 | 描述 | 默认值 | 适用场景 |
OMPI_MCA_btl_tcp_if_include | 为Launcher和Worker指定通信的网卡,多个网卡之间使用半角逗号(,)分隔。 | eth0 | 适用于使用mpirun方式启动作业。 |
OMPI_MCA_orte_default_hostfile | 为mpirun命令指定hostfile,在PAI-DLC中可以自动生成hostfile,无需手动修改。 |
| |
OMPI_MCA_plm_rsh_agent | 为Launcher指定如何远程启动Worker任务。 |
| |
PDSH_RCMD_TYPE | PDSH的远程命令类型。 | ssh | 适用于使用DeepSpeed方式启动作业。 |