更新时间:2024-08-16 GMT+08:00
分享

预置框架启动文件的启动流程说明

ModelArts Standard训练服务预置了多种AI框架,并对不同的框架提供了针对性适配,用户在使用这些预置框架进行模型训练时,训练的启动命令也需要做相应适配。

本章节详细介绍基于不同的预置框架创建训练作业时,如何修改训练的启动文件。

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场景推出的异构计算架构)驱动。

提交训练作业后,ModelArts Standard平台会自动运行训练任务的启动文件;启动文件的运行次数取决于训练卡数。

单机作业时,每个任务内运行N次启动文件;N为任务的卡数;例如单机1卡,则worker-0任务的启动文件会被运行1次;单机8卡,worker-0任务的启动文件会被运行8次。因此需要避免在启动文件中进行端口监听。

启动文件会被设置如下环境变量:

  • RANK_TABLE_FILE:rank table file (RTF) 文件路径
  • ASCEND_DEVICE_ID:逻辑device_id,例如单卡训练,该值始终为 0
  • RANK_ID:可以理解为训练作业级的device逻辑(顺序)编号
  • RANK_SIZE:根据RTF中device的数目设置该值,例如4 * snt9b,该值即为4。

如果需要使得启动文件仍然在逻辑上仅运行1次,则可以在启动文件中判断ASCEND_DEVICE_ID env为0执行逻辑,为其他,则直接退出。

Ascend-Powered-Engine框架对应的代码示例mindspore-verification.py,请参见训练脚本mindspore-verification.py文件

Ascend-Powered-Engine框架单机启动命令和分布式启动命令无区别。

PyTorch-GPU框架启动原理

单机多卡场景下平台会为启动文件额外拼接 --init_method "tcp://<ip>:<port>" 参数。

多机多卡场景下平台会为启动文件额外拼接 --init_method "tcp://<ip>:<port>" --rank <rank_id> --world_size <node_num>参数。

启动文件需要解析上述参数。

PyTorch-GPU框架的代码示例,请参见示例:创建DDP分布式训练(PyTorch+GPU)(方式一)

TensorFlow-GPU框架启动原理

单机场景下(即选择的节点数为1),ModelArts只会在一个节点上启动一个训练容器,该训练容器独享节点规格的可使用资源。

多机场景下(即选择的节点数大于1),ModelArts会优先在相同节点上启动一个parameter server(以下简称ps)和一个worker,平台会自动1:1分配ps与worker任务,例如2机场景,则会分配2ps与2 worker任务;并为启动文件额外注入--task_index <VC_TASK_INDEX> --ps_hosts <TF_PS_HOSTS> --worker_hosts <TF_WORKER_HOSTS> --job_name <MA_TASK_NAME> 参数。

启动文件需要解析如下参数。

  • VC_TASK_INDEX:task序号,如0/1/2。
  • TF_PS_HOSTS :ps节点地址数组,如[xx-ps-0.xx:TCP_PORT,xx-ps-1.xx:TCP_PORT],TCP_PORT是一个在5000~10000的随机端口。
  • TF_WORKER_HOSTS:worker节点地址数组,如[xx-worker-0.xx:TCP_PORT,xx-worker-1.xx:TCP_PORT],TCP_PORT是一个在5000~10000的随机端口。
  • MA_TASK_NAME:任务名称,ps或worker。

具体示例请参见:TensorFlow-GPU框架的代码示例mnist.py(单机)

Horovod/MPI/MindSpore-GPU

使用Horovod/MPI/MindSpore-GPU预置框架来运行的启动文件,平台自动以mpirun命令启动之。使用ModelArts Standard训练相应预置引擎,用户仅需关心启动文件(即训练脚本)的编写;mpirun命令和训练作业集群的构建都由平台自动完成。平台不会为启动文件额外拼接参数。

具体示例请参见:Horovod-PyTorch代码示例pytorch_synthetic_benchmark.py

相关文档