迁移操作

  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

    可选。

    -

    -a

    --amp_model

    • 将torch.cuda.amp混合精度训练脚本迁移为apex.amp混合精度训练脚本,PyTorch1.8.1原生支持混合精度模块,不建议使用该参数。
    • 可选。

    model

    distributed

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

    -

    -v

    --version

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

    -h

    --help

    显示帮助信息。

    -

  3. 完成脚本迁移。

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

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