下载
中文
注册

PyTorch GPU2Ascend工具迁移方式

前提条件

使用PyTorch GPU2Ascend工具执行PyTorch训练脚本迁移前须安装如下依赖。如下命令如果使用非root用户安装,需要在安装命令后加上--user,例如:pip3 install pandas --user,安装命令可在任意路径下执行。
1
2
3
4
pip3 install pandas         #pandas版本号需大于或等于1.2.4
pip3 install libcst         #Python语法树解析器,用于解析Python文件
pip3 install prettytable    #将数据可视化为图表形式
pip3 install jedi           #可选,用于跨文件解析,建议安装

使用约束

  • 若启用了ModelArts参数,迁移后的脚本可在ModelArts平台上进行训练作业,ModelArts的具体使用方法可参考华为云ModelArts指导手册《AI开发平台ModelArts》,其他平台的ModelArts使用方法略有差异,但核心步骤和华为云ModelArts的一致。
    1. 在ModelArts执行训练任务前,需要修改Output Path输出目录下的路径映射配置文件ascend_modelarts_function/path_mapping_config.py:
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      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'中对应训练完成后需要上传的数据,映射格式为:训练生成的数据文件路径:生成文件在对象存储上的对应路径

    2. 针对单机多卡场景,ModelArts默认创建8个进程来执行分布式训练,与单卡转多卡功能提供的多卡运行方式类似,因此ModelArts暂不支持通过torch.multiprocessing.spawn接口创建的多卡进程,仅支持通过命令行循环创建8个进程的方式进行分布式训练。在分布式训练运行前,需要在ModelArts训练作业的环境变量配置界面设置MASTER_ADDR为127.0.0.1、MASTER_PORT为29688和HCCL_WHITELIST_DISABLE为1。
  • 由于转换后的脚本与原始脚本平台不一致,迁移后的脚本在调试运行过程中可能会由于算子差异等原因而抛出异常,导致进程终止,该类异常需要用户根据异常信息进一步调试解决。
  • 分析迁移后可以参考原始脚本提供的训练流程进行训练。

启动迁移任务

  1. 进入迁移工具所在路径。
    cd Ascend-cann-toolkit安装目录/ascend-toolkit/latest/tools/ms_fmk_transplt/
  2. 启动迁移任务。
    参考表1配置信息,执行如下命令启动迁移任务。
    ./pytorch_gpu2npu.sh -i 原始脚本路径 -o 脚本迁移结果输出路径 -v 原始脚本框架版本 [-s] [distributed -t 目标模型变量名 -m 训练脚本的入口文件]

    distributed及其参数-m、-t在语句最后指定。

    参考示例:

    #单卡
    ./pytorch_gpu2npu.sh -i /home/train/ -o /home/out -v 1.11.0 [-s] [-m]
    #分布式
    ./pytorch_gpu2npu.sh -i /home/train/ -o /home/out -v 1.11.0 [-s] [-m] distributed -m /home/train/train.py [-t model]

    “[]”表示可选参数,实际使用可不用添加。

    表1 参数说明

    参数

    参数说明

    取值示例

    -i

    --input

    • 要进行迁移的原始脚本文件所在文件夹路径。
    • 必选。

    /home/username/fmktransplt

    -o

    --output

    • 脚本迁移结果文件输出路径。
    • 不开启“distributed”即迁移至单卡脚本场景下,输出目录名为xxx_msft;开启“distributed”即迁移至多卡脚本场景下,输出目录名为xxx_msft_multi,xxx为原始脚本所在文件夹名称。
    • 必选。

    /home/username/fmktransplt_output

    -s

    --specify-device

    • 可以通过环境变量DEVICE_ID指定device作为高级特性,但有可能导致原本脚本中分布式功能失效。
    • 可选。

    -

    distributed

    • 将GPU单卡脚本迁移为NPU多卡脚本,仅支持使用torch.utils.data.DataLoader方式加载数据的场景说明,指定此参数时,才可以指定-t/--target_model参数。
    • -m,--main:训练脚本的入口Python文件,必选。
    • -t,--target_model:待迁移脚本中的实例化模型变量名,默认为“model”,可选。

      如果变量名不为"model"时,则需要配置此参数,例如"my_model = Model()",需要配置为-t my_model

    -

    -v

    --version

    • 待迁移脚本的PyTorch版本。
    • 必选。
    • 1.11.0
    • 2.1.0
    • 2.2.0

    -m

    --modelarts

    • 迁移后的脚本支持在ModelArts平台进行训练作业。
    • 可选。

    -

    -h

    --help

    显示帮助信息。

    -

  3. 完成脚本迁移,进入脚本迁移结果的输出路径查看结果件。
  4. 请参考训练配置及原始脚本提供的训练流程,在昇腾NPU平台直接运行修改后的模型脚本。
  5. 成功保存权重,说明保存权重功能迁移成功。