---
title: 迁移操作
description: "在AI处理器进行模型迁移之前，建议用户事先准备好基于TensorFlow 2.6.5开发的训练模型以及配套的数据集，并要求在GPU或CPU上正常执行，精度收敛，且达到预期精度和性能要求。同时记录相关精度和性能指标，用于后续在AI处理器进行精度和性能对比。"
url: https://www.hiascend.com/document/detail/zh/TensorFlowCommercial/latest/migration/tfmigr2/tfmigr2_000011.html
sourcePath: /source/zh/TensorFlowCommercial/900/migration/tfmigr2/tfmigr2_000011.html
indexId: 372387276495f595a9ab704d36f12777ace25dff9a2b6bdb318aae3e2e54badb73
---
# 迁移操作

#### 前提条件

在AI处理器进行模型迁移之前，建议用户事先准备好基于TensorFlow 2.6.5开发的训练模型以及配套的数据集，并要求在GPU或CPU上正常执行，精度收敛，且达到预期精度和性能要求。同时记录相关精度和性能指标，用于后续在AI处理器进行精度和性能对比。


#### 迁移操作

1. 安装依赖。
  pip3 install pandas==1.3.5

  pip3 install openpyxl

  pip3 install google_pasta

2. 训练脚本扫描和自动迁移。
进入迁移工具所在目录“${TFPLUGIN_INSTALL_PATH}/npu_device/convert_tf2npu/”，执行命令可同时完成脚本扫描和自动迁移，例如：

```
python3 main.py -i /root/models/examples/test -m /root/models/example/test/test.py
```

其中main.py为工具入口脚本，参数说明如下所示：

**表1 参数说明**

| 参数名 | 参数说明 | 可选/必选 |
| --- | --- | --- |
| \-i | 被迁移的原始脚本路径，当前该路径仅支持配置为文件夹，不支持单个文件。 工具仅对\-i参数指定的文件夹下的.py文件进行扫描和迁移。 如果用户原始脚本跨目录存放，则建议放到一个目录执行迁移命令，或者在对应目录下依次执行迁移命令。 | 必选 |
| \-o | 指定迁移后的脚本路径，该路径不能为原始脚本路径的子目录。 该参数可选，如果不指定，默认生成在当前路径下，例如output\_npu\_20220517172706/xxx\_npu\_20220517172706。 | 可选 |
| \-r | 指定生成的迁移报告路径，该路径不能为原始脚本路径的子目录。 该参数可选，如果不指定，默认生成在当前路径下，例如report\_npu\_20220517172706。 | 可选 |
| \-m | Python执行入口文件。 如果原始脚本中没有main函数，由于迁移工具无法识别入口函数，因此无法进行NPU资源初始化，以及NPU训练相关配置。 对于以上场景，需要通过\-m参数指定Python执行的入口文件，以便工具可以将用户脚本进行彻底迁移，保证后续训练的正常执行。 配置示例：\-m /root/models/xxx.py | 可选 |
| \-d | 如果原始脚本支持分布式训练，迁移时需要指定原始脚本使用的分布式策略，便于工具对分布式脚本进行自动迁移。取值： tf\_strategy：表示原始脚本使用tf.distribute.Strategy分布式策略。 horovod：表示原始脚本使用horovod分布式模块。 | 可选 |
| \-c | 如果在脚本使用了tf.compat.v1 API，控制以TensorFlow 1.x行为执行，需要在执行脚本转换命令时添加\-c或者\-\-compat。 | 可选 |


通过python3 main.py -h可以获取迁移工具使用帮助。


  - 迁移过程中，打印如下信息，表明正在扫描相关文件进行脚本迁移。
    图1 迁移过程信息

  - 迁移结束后，生成迁移后的脚本，以及迁移报告。图2 迁移结束信息

    - 如果没有生成failed_report.txt，一般迁移后的模型即可直接在AI处理器执行训练，用户可尝试执行训练，如果训练失败，可详细分析迁移报告，同时酌情修改训练脚本再次训练，如果仍然训练失败，请单击Link(https://www.hiascend.com/support)联系技术支持。
    - 如果生成了failed_report.txt，请优先根据报错修改训练脚本，再次执行训练。


#### 迁移报告说明

- success_report.txt：记录工具对脚本的全部修改点，例如：
  1 2 3 4 # 表示adain.py第3行新增头文件引用 /root/models/examples/adain/adain.py:3 import npu_device as npu # 表示adain.py第4行新增npu虚拟设备初始化 /root/models/examples/adain/adain.py:4 npu.open().as_default()

- failed_report.txt：记录迁移过程中的报错信息以及不支持的api，例如：
  1 2 Finish convert file: /root/ast_test/hvd/model_lib.py /root/ast_test/hvd/test.py:3, NPU Unsupported API: hvd.allreduce

- api_analysis_report.xlsx：为API支持度分析报告，用户可以筛选“不支持”API单独分析，并根据修改建议修改训练脚本。
  图3 API支持度分析报告举例

**表2 工具迁移API支持度说明**

| 工具迁移API支持度 | 说明 |
| --- | --- |
| 支持（无需迁移） | 此类API在昇腾AI处理器上绝对支持，无需适配修改。 例如"tf.abs"等接口，在昇腾AI处理器上能够完全支持，不需要迁移。 |
| 工具迁移后API功能支持 | 工具迁移后，该API在昇腾AI处理器上可以支持。 |
| 工具迁移后训练功能打通 | 工具迁移后，能够保证在昇腾AI处理器训练执行成功，但原有API功能可能不完全支持。 例如"tf.compat.v1.config.experimental.set\_memory\_growth"接口，它的作用一般是将所有GPU设置为仅在需要时申请显存空间，在昇腾AI处理器上训练时，该接口实际并不生效。 因此，迁移工具会直接return返回None，从而保证在昇腾AI处理器上训练正常执行。 "tf.compat.v1.config.experimental.set\_memory\_growth" \-\-> 直接return返回None。 |
| 不支持（不影响迁移，无需干预） | 此类API在昇腾AI处理器上不支持，但不影响脚本执行，无需用户干预。 例如"tf.compat.v1.config.experimental.get\_memory\_growth"接口，由于工具会将"tf.compat.v1.config.experimental.set\_memory\_growth"直接return返回None，因此对应的get接口也不会影响脚本在昇腾AI处理器上的执行，即便出现这个接口，用户也无需干预。 |
| 不支持（无迁移方案，建议不使用） | 此类API在昇腾AI处理器上不支持，且当前暂无具体迁移方案，建议您不要使用，否则会引起训练失败。 例如"tf.distribute.TPUStrategy"等TPU相关接口，需通过Google TPU设备执行，昇腾AI处理器上不支持，建议用户不要使用。 |
| 废弃类 | 此类API在TensorFlow 2.6版本已经废弃，建议用户使用TensorFlow官网推荐的API，否则可能会引起训练失败。 例如"tf.compat.v1.layers.conv3d "等接口。此类API在TensorFlow 2.6版本已经废弃，建议用户使用TensorFlow官网推荐的API，否则可能会引起训练失败。 |
| 分析中 | 此类API在昇腾AI处理器中的支持度未知，正在分析中。 |


- api_brief_report.txt：汇总脚本中API支持度统计结果，例如：
  1 2 3 4 # 未去重的统计结果，分类和API支持度表中的一致 1.In brief: Total API: 231, in which Support: 222, Unsupport: 2,No operator is involved: 0, Analysing: 0 # 去重后的统计结果，分类和API支持度表中的一致 2.After eliminate duplicate: Total API: 98, in which Support: 92, Unsupport or recommended: 1, No operator is involved: 0, Analysing: 0
