AI开发平台MODELARTS-预置框架启动文件的启动流程说明:Ascend-Powered-Engine框架启动原理

时间:2024-12-16 16:12:03

Ascend-Powered-Engine框架启动原理

在ModelArts创建训练作业界面选择AI框架时,有一个AI框架是“Ascend-Powered-Engine”,它既不是一个AI框架(如:PyTorch、TensorFlow)也不是一个并行执行框架(如:MPI),而是适配加速芯片Ascend的一组AI框架+运行环境+启动方式的集合。

由于主流的Snt9系列Ascend加速卡都跑在ARM CPU规格的机器上,因此上层docker镜像也都是ARM镜像。相对于GPU场景的镜像中安装了与GPU驱动适配的CUDA(由英伟达推出的统一计算架构)计算库,Ascend-Powered-Engine引擎的镜像中安装了与Ascend驱动适配的CANN(华为针对AI场景推出的异构计算架构)计算库。

提交训练作业后,ModelArts Standard平台会自动运行训练作业的启动文件。

Ascend-Powered-Engine框架的启动文件的默认启动方式如下:

每个训练作业的启动文件的运行次数取决于任务卡数,即在训练作业运行时,有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”的值,当值为“0”则执行逻辑,当值为非0则直接退出。

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

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

Ascend-Powered-Engine框架支持多种启动方式来启动“启动文件”,默认是基于“RANK_TABLE_FILE”启动,也可以通过配置“MA_RUN_METHOD”环境变量使用其他方式来启动。MA_RUN_METHOD环境变量支持torchrun和msrun。

  • “MA_RUN_METHOD=torchrun”时,表示ModelArts Standard平台使用torchrun命令启动训练作业的“启动文件”。

    要求PyTorch版本大于等于1.11.0。

    • 单机时,ModelArts Standard平台使用如下命令启动训练作业的“启动文件”。
      torchrun --standalone --nnodes=${MA_NUM_HOSTS} --nproc_per_node=${MA_NUM_GPUS} ${MA_EXTRA_TORCHRUN_PA RAM S} "启动文件" {arg1} {arg2} ...
    • 多机时,ModelArts Standard平台使用如下命令启动训练作业的“启动文件”。
      torchrun --nnodes=${MA_NUM_HOSTS} --nproc_per_node=${MA_NUM_GPUS} --node_rank=${VC_TASK_INDEX} --master_addr={master_addr} --master_port=${MA_TORCHRUN_MASTER_PORT} --rdzv_id={ma_job_name} --rdzv_backend=static ${MA_EXTRA_TORCHRUN_PARAMS} "启动文件" {arg1} {arg2} ...

    参数说明如下:

    • standalone:标识为单任务实例作业。
    • nnodes:任务实例个数。
    • nproc_per_node:每个任务实例启动的主进程数,设置为任务分配的NPU数相同。
    • node_rank:任务rank,用于多任务分布式训练。
    • master_addr:主任务(rank 0)的地址,设置为任务worker-0的通信 域名
    • master_port:在主任务(rank 0)上,用于分布式训练期间通信的端口。默认设置为18888端口。当遇到master_port冲突问题时,可通过设置MA_TORCHRUN_MASTER_PORT环境变量值修改端口配置。
    • rdzv_id:Rendezvous标识,设置为带有训练作业ID的值。
    • rdzv_backend:Rendezvous后端,固定设置为static,即不使用Rendezvous,而是使用master_addr和master_port配置。另外,可通过设置MA_EXTRA_TORCHRUN_PARAMS环境变量值,以增加额外的torchrun命令参数,或是覆盖预设的torchrun命令参数。例如配置torchrun命令中rdzv_conf参数的训练作业API环境变量的部分示例如下:
      "environments": {
      "MA_RUN_METHOD": "torchrun",
      "MA_EXTRA_TORCHRUN_PARAMS": "--rdzv_conf=timeout=7200"
      }

    如果在torchrun初始化分布式一致性协商阶段出现“RuntimeError:Socket Timeout”错误时,可以通过增加如下环境变量再次创建训练作业以查看torchrun初始化阶段的详细信息,进一步排查问题。

    • LOG LEVEL=INFO
    • TORCH_CPP_LOG_LEVEL=INFO
    • TORCH_DISTRIBUTED_DEBUG=DETAIL

    出现“RuntimeError: Socket Timeout”错误,一般是因为不同任务执行torchrun命令的时机差距过大导致的。torchrun命令执行时机差距过大,大多因为在torchrun命令被执行之前任务还有一些初始化动作,例如下载训练数据集、CKPT等。这些初始化动作执行耗时差距过大会直接导致出现Socket Timeout错误。所以遇到Socket Timeout问题时首先需要排查的是各个任务执行torchrun的时间点差距是否在合理范围内,如果时间点差距过大,需要优化执行torchrun命令之前的初始化动作,使其时间点差距在合理范围内。

  • “MA_RUN_METHOD=msrun”时,表示ModelArts Standard平台使用msrun命令启动训练作业的“启动文件”。

    要求MindSpore版本大于等于2.3.0。

    该方案支持动态组网和基于rank table file文件组网两种方式。当配置了环境变量MS_RANKTABLE_ENABLE="True",则msrun会读取rank table file文件内容进行组网。否则默认使用动态组网。

    msrun使用如下命令启动训练作业的“启动文件”。

    msrun --worker_num=${msrun_worker_num} --local_worker_num=${MA_NUM_GPUS} --master_addr=${msrun_master_addr} --node_rank=${VC_TASK_INDEX} --master_port=${msrun_master_port} --log_dir=${msrun_log_dir} --join=True --cluster_time_out=${MSRUN_CLUSTER_TIME_OUT} --rank_table_file=${msrun_rank_table_file} "启动文件" {arg1} {arg2} ...

    参数说明如下:

    • worker_num:所有进程个数。因为一个卡起一个进程,所以也表示使用总卡数。
    • local_worker_num:当前节点进程个数,即当前节点使用的卡数。
    • master_addr:msrun组网调度进程所在节点的IP地址,单机场景无需配置。
    • master_port:msrun组网调度进程的端口。
    • node_rank:当前节点的编号。
    • log_dir:msrun组网和各个进程的日志输出地址。
    • join:训练进程拉起后,msrun进程是否仍存在,默认配置为“True”,等待所有进程退出后再退出。
    • cluster_time_out:集群组网超时时间,默认是“600s”,可通过环境变量“MSRUN_CLUSTER_TIME_OUT”控制。
    • rank_table_file:rank table file文件地址,如果配置了环境变量“MS_RANKTABLE_ENABLE="True"”,启动时会增加该参数。
support.huaweicloud.com/usermanual-standard-modelarts/develop-modelarts-1415.html