迁移操作

前提条件

启动迁移任务

  1. 进入迁移工具所在路径。

    cd Ascend-cann-toolkit安装目录/ascend-toolkit/latest/tools/ms_fmk_transplt/

  2. 启动迁移任务。

    参考表1 参数说明配置信息,执行如下命令启动迁移任务。
    ./pytorch_gpu2npu.sh -i 原始脚本路径 -o 脚本迁移结果输出路径 -v 原始脚本框架版本 [-r 自定义规则json文件路径] [-s] [-sim] [-a 模型名称] [-m] [distributed -t 目标模型变量名 -m 训练脚本的入口文件]

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

    表1 参数说明

    参数

    参数说明

    取值示例

    -i

    --input

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

    /home/username/fmktransplt

    -o

    --output

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

    /home/username/fmktransplt_output

    -r

    --rule

    • 用户自定义通用迁移规则的json文件路径,主要分为:函数参数修改、函数名称修改和模块名称修改三部分。自定义迁移规则json文件的编写请参见自定义迁移规则
    • 可选。

    /home/username/fmktransplt_rule.json

    -s

    --specify-device

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

    -

    -sim

    --similar

    用功能相似的API替换以下不支持的API,但有可能导致准确性和性能下降。
    • apex.parallel.DistributedDataParallel
    • torch.cuda.get_device_properties
    • torch.nn.Conv3d
    • torch.nn.functional.pad
    • torch.nn.ReflectionPad2d
    • torch.nn.ReplicationPad2d
    • torch.nn.SyncBatchNorm
    • torch.nn.SyncBatchNorm.convert_sync_batchnorm
    • torch.repeat_interleave
    • torch.set_default_tensor_type

    可选。

    -

    distributed

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

    -

    -v

    --version

    • 待迁移脚本的PyTorch版本。目前支持1.8.1和1.11.0。
    • 必选。
    • 1.8.1
    • 1.11.0

    -m

    --modelarts

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

    -

    -h

    --help

    显示帮助信息。

    -

  3. 完成脚本迁移。

    脚本迁移完成后,进入脚本迁移结果输出路径查看结果文件,以GPU单卡脚本迁移为NPU多卡脚本为例。

    ├── xxx_msft/xxx_msft_multi              // 脚本迁移结果输出目录
    │   ├── 生成脚本文件                 // 与迁移前的脚本文件目录结构一致
    │   ├── transplant_result_file       //存放迁移结果文件
    │   │   ├── msFmkTranspltlog.txt         // 脚本迁移过程日志文件,日志文件限制大小为1M,若超过限制将分多个文件进行存储,最多不会超过10个
    │   │   ├── cuda_op_list.csv            //分析出的cuda算子列表
    │   │   ├── unknown_api.csv             //支持情况存疑的API列表
    │   │   ├── unsupported_api.csv         //不支持的API列表
    │   │   ├── change_list.csv              // 修改记录文件
    │   ├── run_distributed_npu.sh       // 多卡启动shell脚本
    │   ├── ascend_function              // 如果启用了Replace Unsupported APIs参数,会生成该包含等价算子的目录