Ascend-Powered-Engine
ModelArts训练服务支持了多种AI引擎,并对不同的引擎提供了针对性适配,用户在使用这些引擎进行模型训练时,训练的算法代码也需要做相应适配,本文讲解了使用Ascend引擎所需要做的代码适配。
Ascend-Powered-Engine框架启动原理
在ModelArts算法建界面选择AI引擎时,能够看到一个叫做Ascend-Powered-Engine的AI引擎,它与其他AI引擎相比有些特别。它既不是一个AI框架(如:PyTorch、TensorFlow)也不是一个并行执行框架(如:MPI),而是适配加速芯片Ascend编译的一组AI框架+运行环境+启动方式的集合。
- 由于几乎所有的Ascend加速卡都跑在ARM规格的机器上,因此上层docker镜像也都是ARM镜像。
- 针对GPU场景的镜像中安装了对应版本的CUDA(由英伟达推出的统一计算架构)驱动,而Ascend-Powered-Engine引擎的镜像中都安装了与底层硬件版本适配的CANN(华为针对AI场景推出的异构计算架构)驱动。
规格和节点个数
下面以选择“Ascend: 8 *** | ARM: 192 核 720 GB”规格为例,介绍在单机和分布式场景下ModelArts规格资源的分配情况。
单机作业时(即选择的节点数为1),ModelArts只会在一个节点上启动一个训练容器,该训练容器独享节点规格的可使用资源。
分布式作业时(即选择的节点数大于1),worker的数量和创建作业时选择的节点数一致,每个worker将被分配到所选规格对应的计算资源。例如计算节点个数为2时,将启动2个worker,每个worker拥有“Ascend: 8*** | ARM: 192 核 768GB 720 GB”的计算资源。
另外,Ascend-Powered-Engine引擎的启动文件,将被平台自动启动为N个进程,N=单节点的Ascend加速卡数。
PyTorch on Ascend不能使用Ascend-Powered-Engine引擎来启动训练作业,应该参考基于训练作业启动PyTorch DDP on Ascend加速卡训练示例使用自定义镜像来启动训练作业。
网络通信介绍
- 单机作业不涉及网络通信情况。
- 分布式作业的涉及网络通信则可以分为节点内网络通信和节点间网络通信。
节点内网络
使用HCCS和共享内存通信。
节点间网络
worker之间可通过容器网络和Ascend加速卡上的RoCE网络通信。
启动命令
训练服务使用作业镜像中默认的python解释器启动训练脚本(即“which python”命令指向的可执行文件),启动时的工作目录(即pwd命令或python中“os.getcwd()”返回的目录)为“/home/ma-user/user-job-dir/<代码目录最外层目录名>”
启动命令
python ${系统自带启动文件} python ${启动文件路径} \ --${超参键1}=${超参值1} \ --${超参键2}=${超参值2} \ ... --${训练输入参数名称}=${训练输入参数值} --${训练输出参数名称}=${训练输出参数值}
- 系统自带启动文件:一般为“/home/ma-user/modelarts/run/davincirun.py”
- 启动文件路径:启动文件相对“/home/ma-user/user-job-dir/<代码目录最外层目录名>”的路径。
例如控制台上设置如上图所示,则控制台后台执行命令如下:
python /home/ma-user/modelarts/run/davincirun.py \ python /home/ma-user/modelarts/user-job-dir/gpu-train/train.py \ --enable_modelarts=True \ --is_distribute=0 \ --per_batch_size=1 \ --data_dir=/home/ma-user/modelarts/inputs/data_url_0/ \ --pretrained=/home/ma-user/modelarts/inputs/data_url_0/ckpt/0-320_195200.ckpt \ --data_url=/home/ma-user/modelarts/inputs/data_url_0/ \ --train_url=/home/ma-user/modelarts/outputs/train_url_0/
Ascend-Powered-Engine框架单机启动命令和分布式启动命令无区别。