
# AIGC工具tailor使用指导
#### tailor简介
tailor是AIGC场景下用于模型转换（onnx到mindir）和性能分析的辅助工具，当前支持以下功能。
表1功能总览 
| 功能大类      | 具体功能                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
|:---|:---|
| 模型转换      | - 固定shape转模型  - 动态shape传入指定档位转模型  - 支持fp32  - 支持AOE优化   |
| benchmark | - 支持测试性能  - 支持精度测试                                                                                                                                                                                                                                                                                                                                                               |
| profiling | 支持分析算子的profiling                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   
#### 环境准备
本工具支持x86和ARM的系统环境，使用前需要安装以下软件。
表2安装软件及步骤 
| 软件             | 安装步骤                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|
| mindspore-lite | 安装版本：2.2.10                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| mindspore-lite | 下载地址：https://www.mindspore.cn/lite/docs/zh-CN/r2.2/use/downloads.html 需要下载的安装包与操作系统有关，请根据需要选择合适的安装包。 - 如果操作系统为Linux aarch64，请下载[mindspore-lite-2.2.10-linux-aarch64.tar.gz](https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.2.10/MindSpore/lite/release/linux/aarch64/cloud_fusion/python37/mindspore-lite-2.2.10-linux-aarch64.tar.gz)。  - 如果操作系统为Linux x86_64，请下载[mindspore-lite-2.2.10-linux-x64.tar.gz](https://ms-release.obs.cn-north-4.myhuaweicloud.com/2.2.10/MindSpore/lite/release/linux/x86_64/cloud_fusion/python37/mindspore-lite-2.2.10-linux-x64.tar.gz)。   |
| mindspore-lite | 安装方式如下： MindSpore Lite云侧推理包解压缩后，设置LITE_HOME环境变量为解压缩的路径，例如： ``` export LITE_HOME=$some_path/mindspore-lite-2.2.10-linux-aarch64 ``` 设置环境变量LD_LIBRARY_PATH： ``` export LD_LIBRARY_PATH=$LITE_HOME/runtime/lib:$LITE_HOME/runtime/third_party/dnnl:$LITE_HOME/tools/converter/lib:$LD_LIBRARY_PATH ``` 如果需要使用convert_lite或者benchmark工具，则需要设置环境变量PATH。 ``` export PATH=$LITE_HOME/tools/converter/converter:$LITE_HOME/tools/benchmark:$PATH ```                                                                                                                                                                                                                                                                                                                                                                                    |
| cann           | 安装版本：CANN 7.0.0                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| cann           | 下载地址：https://support.huawei.com/enterprise/zh/ascend-computing/cann-pid-251168373/software/258923273?idAbsPath=fixnode01%7C23710424%7C251366513%7C22892968%7C251168373 请下载toolkit和对应机器的kernels包，以Snt9B为例则下载"Ascend-cann-toolkit_7.0.0_linux-aarch64.run"和"Ascend-cann-kernels-型号_7.0.0_linux.run"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| cann           | 安装命令（以Snt9B的cann安装为例）： ``` ./Ascend-cann-toolkit_7.0.0_linux-aarch64.run --full ./Ascend-cann-kernels-型号_7.0.0_linux.run --install ``` 请安装在默认路径下：/usr/local/Ascend，暂不支持安装在自定义路径下。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| tailor         | 安装版本：0.3.4                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| tailor         | 下载地址： https://cneast3-modelarts-sdk.obs.cn-east-3.myhuaweicloud.com/tailor-0.3.4-py3-none-any.whl SHA-256： https://cneast3-modelarts-sdk.obs.cn-east-3.myhuaweicloud.com/tailor-0.3.4-py3-none-any.whl/1713929258832/tailor-0.3.4-py3-none-any.whl.sha256                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| tailor         | 安装命令： ``` pip install tailor-0.3.4-py3-none-any.whl ```                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   
#### 使用指导
tailor支持"命令行"和"Python API"两种方式使用。
- **命令行方式**
  命令行运行示例：
  ```
  tailor --model_path="./resnet50-v2-7.onnx"--config_path="./config.ini"--input_shape="data:1,3,224,224"--output_path="/home/"--accuracy="fp32"--aoe=True
  ```
  config.ini参考内容如下：
  ```
  [ascend_context]
  input_shape=data:[-1,3,224,224]
  dynamic_dims=[1],[2],[3]
  ```
  表3参数说明 
  | 参数名称          | 功能描述                 | 参数类型   | 是否必填 | 默认值       | 备注                                                                   |
  |:---|:---|:---|:---|:---|:---|
  | --model_path  | 指定onnx模型路径。          | string | 是    | -         | -                                                                    |
  | --config_path | 指定模型配置文件路径。          | string | 否    | -         | tailor支持动态分档转换功能，需要指定配置文件路径，需要注意即便有配置文件，只要是动态模型就需要指定--input_shape参数。 |
  | --input_shape | 指定模型转换的shape。        | string | 否    | -         | 固定shape模型转换可以不填，动态模型转换必填。                                            |
  | --output_path | 指定结果输出路径。            | string | 否    | 默认为当前目录下。 | -                                                                    |
  | --aoe         | 是否在转换时进行AOE优化。       | bool   | 否    | False     | AOE优化可以提升模型性能，但不是一定有提升，需要注意开启AOE，会导致模型转换耗时极大延长。                      |
  | --accuracy    | 指定模型精度，只支持fp16和fp32。 | string | 否    | fp16      | -                                                                    |
     
  
- **Python API**
  - 导入包并创建tailor对象。
    ```
    from tailor.tailor import Tailor
    onnx_model_path = "./resnet50-v2-7.onnx"    # 相对路径或者绝对路径均可以。
    t = Tailor(onnx_model_path)
    ```
    
  
  - 查询onnx模型的输入信息。
    ```
    # 查询onnx模型的输入信息
    t.get_model_input_info()
    ```
    图1查询onnx模型的输入输出信息   
    ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000001784816598.png "点击放大") 
  
  - 查询onnx模型的输出信息。
    ```
    # 查询模型的输出信息
    t.get_model_output_info()
    ```
    图2查询onnx模型的输出信息   
    ![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000001784656938.png "点击放大") 
  
  - 固定shape模型，可以直接运行。
    ```
    t.run()
    ```
    
  
  - 指定档位信息运行。
    ```
    input_shape="data:1,3,224,224"
    t.run(input_shape=input_shape)
    ```
    
  
  - 动态档位执行config_path运行。需要注意，只要是动态模型，就必须要传入input_shape，因为转换模型后的benchmark和profiling都依赖单个shape操作。
    ```
    input_shape="data:1,3,224,224"
    config_path = "./resnet/config.ini"
    t.run(input_shape=input_shape, config_path=config_path)
    ```
    
  
  - 指定精度为fp32。
    ```
    input_shape="data:1,3,224,224"
    t.run(input_shape=input_shape, accuracy='fp32')
    ```
    
  
  - 开启AOE优化。
    ```
    input_shape="data:1,3,224,224"
    t.run(input_shape=input_shape, aoe=True)
    ```
    
  
  - 指定输出位置。
    ```
    input_shape="data:1,3,224,224"
    # 不指定输出路径，则默认在当前执行目录存储结果
    t.run(input_shape=input_shape, output_path="/home/xxx")
    ```
    
   
运行结果将存储在output文件夹中，如果用户指定了output_path，会指定位置保存，如果不指定则在当前代码执行目录生成文件夹保存输出。整体运行的结果都存放在output文件夹中，每转一次模型就会根据模型名称以及相关参数生成结果文件，如下图所示。
图3output文件   
![](https://support.huaweicloud.com/bestpractice-modelarts/figure/zh-cn_image_0000001831536289.png "点击放大")
在每次运行的结果文件中，分为三部分：convert、benchmark、profiling，相关的文件及存储内容如下。
表4输出文件介绍（以模型名称为resnet50-v2-7.onnx为例） 
| **类别**    | **文件名称**                  | **是否一定生成** | **文件存储内容**                 |
|:---|:---|:---|:---|
| convert   | resnet50-v2-7.mindir      | 是          | 转换后的mindir模型。              |
| convert   | resnet50-v2-7.om          | 否          | 转换过程中的om文件，不是必定生成。         |
| convert   | onnx_to_mindspore.sh      | 是          | 模型转换命令，可以本地直接运行。           |
| convert   | resnet50-v2-7_convert.log | 是          | 模型转换过程的日志。                 |
| convert   | config.ini                | 否          | 配置文件，在指定fp32精度或者AOE打开时会生成。 |
| convert   | onnx_to_mindspore_aoe.sh  | 否          | 在打开AOE功能时会生成。              |
| benchmark | run_benchmark.sh          | 是          | 运行benchmark的脚本，可本地直接运行。    |
| benchmark | run_benchmark_accuracy.sh | 是          | benchmark运行精度的脚本，可本地直接运行。  |
| benchmark | performance.txt           | 是          | benchmark性能测试结果。           |
| benchmark | accuracy.txt              | 是          | 精度测试结果。                    |
| benchmark | \*.bin                    | 是          | 自动构造的输入随机bin文件，可能存在多个。     |
| benchmark | resnet50-v2-7_output.txt  | 是          | 上述bin文件作为输入时onnx模型运行的结果。   |
| profiling | run_profiling.sh          | 是          | 运行profiling的脚本，可本地直接运行。    |
| profiling | profiling.config          | 是          | 运行profiling的配置文件。          |
| profiling | profiling.json            | 是          | 运行profiling的配置文件。          |
| profiling | PROF_xxx开头的文件夹            | 是          | 运行profiling的结果文件夹。         |
| profiling | run_aggregate.sh          | 是          | 运行数据聚合的脚本，可直接本地运行。         |
| profiling | run_profiling.log         | 是          | 存储运行profiling的日志信息。        |
   
