MPIJob是基于MPI协议的分布式训练任务类型,适用于多机多卡并行训练场景。DLC支持通过mpirun和DeepSpeed两种方式提交MPIJob任务。
前提条件
已开通DLC后付费,并创建默认工作空间。具体操作,请参见开通PAI并创建默认工作空间。
已购买灵骏智算资源并创建资源配额。具体操作,请参见创建资源配额。
使用限制
仅支持在华北6(乌兰察布)地域使用灵骏智算资源提交该任务。
提交MPIJob类型的训练任务
步骤一:准备代码源
使用官方DeepSpeed examples代码合集创建代码集,关键参数如下,其他参数保持默认。具体操作,请参见代码配置。
名称:自定义代码集名称,本方案示例为:deepspeed-examples。
Git地址:
https://github.com/microsoft/DeepSpeedExamples.git。
步骤二:提交分布式训练任务
支持使用以下两种方式提交分布式训练任务:
mpirun方式
进入新建任务页面。
登录PAI控制台,在页面上方选择目标地域,并选择目标工作空间,然后单击进入DLC。
在分布式训练(DLC)页面,单击新建任务
在新建任务页面,配置以下关键参数,更多参数配置详情,请参见创建训练任务。
参数
描述
环境信息
镜像配置
本方案提供了一个测试镜像,单击镜像地址,在文本框中输入dsw-registry-vpc.<RegionID>.cr.aliyuncs.com/pai-common/deepspeed-training:23.08-gpu-py310-cu122-ubuntu22.04,用于提交MPIJob分布式训练任务。其中
<RegionID>需替换为地域ID,例如华北6(乌兰察布)为cn-wulanchabu。更多关于地域ID的详细说明,请参见地域和可用区。启动命令
每个POD中执行的脚本命令。您可以在命令中配置环境变量来覆盖默认配置,详情请参见系统环境变量。
cd /root/code/DeepSpeedExamples/training/cifar/ # -np 2 -npernode 1 表示使用2个节点,每个节点1张卡,总共2张卡。 mpirun -np 2 -npernode 1 --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代码配置
选择在线配置,并选择已创建的代码配置,挂载路径保持默认。
资源信息
资源类型
选择资源配额。
说明仅当工作空间同时支持使用灵骏智算资源和通用计算资源提交DLC任务时,才支持选择资源类型。
资源来源
选择资源配额。
资源配额
选择已创建的灵骏智算资源配额。
框架
选择MPI。
任务资源
节点数量配置为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作业时,需在镜像中安装MPI和DeepSpeed依赖库。您也可以直接使用DockerHub上已预装依赖的DeepSpeed官方镜像。
本方案使用系统环境变量的默认配置,您也可以在启动命令中配置环境变量来覆盖默认配置。更多详细内容,请参见系统环境变量。
步骤三:查看任务详情和日志结果
任务提交成功后,在分布式训练(DLC)页面,单击任务的名称。
在任务详情页面,即可查看任务的基本信息和执行状态。
在任务详情页面底部的实例区域,单击launcher类型的实例操作列下的日志,查看作业运行情况。
INFO: detected pid 1, running init handler I0928 01:55:38.749915 12 main.go:473] "level"=0 "msg"="starting up" "pid"=12 "args"=["/git-sync"] I0928 01:55:38.750815 12 main.go:923] "level"=0 "msg"="cloning repo" "origin"="https://github.com/microsoft/DeepSpeedExamples.git" "path"="/code" I0928 01:55:42.238693 12 main.go:737] "level"=0 "msg"="syncing git" "rev"="HEAD" "hash"="9b3d8984d8211e87f778da9125c836b3d8c9b90f" I0928 01:55:44.547667 12 main.go:772] "level"=0 "msg"="adding worktree" "path"="/code/9b3d8984d8211e87f778da9125c836b3d8c9b90f" "branch"="origin/master" I0928 01:55:44.856108 12 main.go:833] "level"=0 "msg"="reset worktree to hash" "path"="/code/9b3d8984d8211e87f778da9125c836b3d8c9b90f" "hash"="9b3d8984d8211e87f778da9125c836b3d8c9b90f" I0928 01:55:44.856138 12 main.go:838] "level"=0 "msg"="updating submodules" /bin/sh -c prepare_dlc_environment || exit $?; cd /root/code/DeepSpeedExamples/training/cifar/ 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 WARN: ./requirements.txt not found, skip installing requirements. Warning: Permanently added '[dlc1p8cwlh6s8pl8-worker-0]:2222' (ED25519) to the list of known hosts. Warning: Permanently added '[dlc1p8cwlh6s8pl8-worker-1]:2222' (ED25519) to the list of known hosts. Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ./data/cifar-10-python.tar.gz Downloading https://www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz to ./data/cifar-10-python.tar.gz 0%| | 0/170498071 [00:00<?, ?it/s] 0%| | 0/170498071 [00:00<?, ?it/s] 0%| | 32768/170498071 [00:00<18:40, 152084.37it/s] 0%| | 32768/170498071 [00:00<18:59, 149578.44it/s] 0%| | 65536/170498071 [00:00<18:42, 151830.78it/s] 0%| | 65536/170498071 [00:00<19:09, 148238.16it/s]
系统环境变量
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方式启动作业。 |