昇腾社区首页
中文
注册

后续操作

  • 如果启用了distributed参数,迁移后需要根据Device指定的设备完成运行多卡脚本的特定操作。
    • Device指定Ascend设备。
      1. 参见配置分布式环境变量配置生成的多卡环境的组网信息json文件。
      2. 将run_distributed_ascend.sh文件中的“please input your shell script here”语句替换为模型原训练Python脚本执行命令。
        #!/bin/bash
        echo "=============================================================================================================="
        echo "Please run the script as: "
        echo "bash run_distributed_ascend.sh RANK_TABLE_FILE RANK_SIZE RANK_START DEVICE_START"
        echo "For example: bash run_distributed_ascend.sh /path/rank_table.json 8 0 0"
        echo "It is better to use the absolute path."
        echo "=============================================================================================================="
        execute_path=$(pwd)
        echo "${execute_path}"
        export RANK_TABLE_FILE=$1
        export RANK_SIZE=$2
        RANK_START=$3
        DEVICE_START=$4
        for((i=0;i<RANK_SIZE;i++));
        do
          export RANK_ID=$((i+RANK_START))
          export DEVICE_ID=$((i+DEVICE_START))
          rm -rf "${execute_path}"/device_$RANK_ID
          mkdir "${execute_path}"/device_$RANK_ID
          cd "${execute_path}"/device_$RANK_ID || exit
          "please input your shell script here" > train$RANK_ID.log 2>&1 &
        done

        该脚本会在工程路径下创建device_{RANK_ID}目录,在该目录内去执行网络脚本,所以替换训练Python脚本执行命令时要注意训练Python脚本相对路径的变化。

      3. 执行run_distributed_ascend.sh脚本以启动用户原工程。以8卡环境为例,命令如下。
        bash run_distributed_ascend.sh RANK_TABLE_FILE RANK_SIZE RANK_START DEVICE_START
        • RANK_TABLE_FILE:多卡环境的组网信息json文件。
        • RANK_SIZE:指定调用卡的数量。
        • RANK_START:指定调用卡的逻辑起始ID,当前仅支持单机多卡,填0即可。
        • DEVICE_START:指定调用卡的物理起始ID。

      具体MindSpore分布式训练(Ascend)请参见分布式并行训练 (Ascend)

    • Device指定GPU设备。

      在GPU硬件平台上,MindSpore采用OpenMPI的mpirun进行分布式训练,可通过以下命令运行多卡脚本。

      mpirun -n {多卡脚本运行的GPU卡数量} {模型原来的训练shell脚本执行命令}

      具体MindSpore分布式训练(GPU)请参见分布式并行训练 (GPU)

  • 如果启用了modelarts参数,迁移后的脚本可在ModelArts平台上进行训练作业,ModelArts的具体使用方法可参考华为云ModelArts指导手册《AI开发平台ModelArts》,其他平台的ModelArts使用方法略有差异,但核心步骤和华为云ModelArts的一致。

    在ModelArts执行训练任务前,需要修改Output Path输出目录下的路径映射配置文件x2ms_adapter/modelarts/path_mapping_config.py:

    PATH_MAPPING_CONFIG = {
        'input': {
            # Add path mapping here for downloading data before training
            # format: <local path>: <obs/s3 path>
            # For example: '/data/dataset/imagenet': 'obs://dataset/imagenet',
            
        },
        'output': {
            # Add path mapping here for uploading output after training
            # format: <local path>: <obs/s3 path>
            # For example: './checkpoints': 'obs://outputs/',
            
        }
    }

    'input'中对应训练前需要下载的数据,映射格式为:本地运行时的数据路径:对应云端对象存储的路径

    'output'中对应训练完成后需要上传的数据,映射格式为:训练生成的数据文件路径:生成文件在对象存储上的对应路径

  • 如果启用了graph参数,需要把训练脚本中WithLossCell类的construct函数修改为只包括模型的前向计算和loss计算,具体修改请参见迁移后脚本中的“Transplant advice”。
  • 如果启用“--dynamic-analysis”参数完成迁移后,需要先修改训练脚本文件中读取训练数据集的for循环,请参考下方示例进行修改。
    修改前:
    for inputs, target in enumerate(train_loader):
    	output = model(inputs)
    	loss = loss_func(output, target)
    	loss.backward()

    修改如下加粗字体信息:

    for inputs, target in DETECTOR.start(enumerate(train_loader)):
    	output = DETECTOR.hook_func(model, 'model', 0, inputs)
    	loss =  DETECTOR.hook_func(loss_func, 'loss_func', 0, inputs, target)
    	DETECTOR.hook_func(loss.backward, 'loss.backward', 0)

    修改后在GPU上运行分析后的训练脚本,将在分析结果件所在的根目录下生成保存动态shape的分析报告,分析报告包括函数名称、调用栈、输入输出的shape范围等内容,命名为x2ms_dynamic_shape_analysis_report.csv。

  • 由于转换后的脚本与原始脚本框架不一致,迁移后的脚本在调试运行过程中可能会由于MindSpore框架的某些限制而抛出异常,导致进程终止,该类异常需要用户根据异常信息进一步调试解决。
  • 分析迁移后可以参考原始脚本提供的训练流程进行训练。