快速入门

本章节为您介绍如何使用AMCT快速体验压缩一个模型。

AMCT支持命令行方式和Python API接口方式量化原始网络模型,命令行方式相比Python API接口方式有以下优点:

表1 量化方式比较

命令行方式

Python API接口方式

量化准备动作简单,只需准备模型和模型匹配的数据集即可。

需要了解Python语法和量化流程。

量化过程简单,只涉及参数选择,无需对量化脚本进行适配。

需要适配修改量化脚本。

当前仅支持如下特性:

  • 训练后量化中的均匀量化。
  • QAT模型适配CANN模型。

支持量化的所有功能。

本章节以sample中ResNet-101网络模型为例,为您介绍如何借助命令行方式快速体验量化一个模型,Python API接口方式请参见量化

  1. 获取sample软件包。

    1. 单击Link获取sample软件包,并上传到AMCT所在服务器任意路径,例如上传到:$HOME/software/AMCT_Pkg/amct_sample
    2. 解压sample软件包。

      切换到amct_sample目录,执行如下命令解压sample包。

      unzip samples-master.zip
      cd samples-master/python/level1_single_api/9_amct/amct_onnx/cmd

      获得如下目录信息:

      |-- README_CN.md
      |-- data                                     # 数据集存放路径
      |-- model                                    # ONNX 模型文件所在目录
      |-- scripts
      |   |-- run_calibration.sh                   # 执行量化封装脚本
      |   |-- run_convert_qat.sh                   # QAT模型适配CANN模型命令行脚本
      |   |-- run_customized_calibration.sh        # 用户自定义的训练后量化脚本
      |-- src
          |-- process_data.py                      # 数据集预处理脚本
          |-- evaluator.py                         #系统内置的,基于“Evaluator”基类并且包含evaluator评估器的python脚本

  2. 执行量化。

    1. 获取ONNX网络模型。

      单击Link,获取resnet101_v11.onnx网络的模型文件(*.onnx),并以AMCT软件包运行用户将获取的文件上传至Linux服务器sample目录amct_onnx/cmd/model。

    2. 准备模型相匹配的二进制数据集。
      1. 切换到amct_onnx/cmd/data,依次执行如下命令,用于下载校准数据集。
        wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/amct_acl/classification/imagenet_calibration.tar.gz
        tar -zxvf imagenet_calibration.tar.gz

        执行完成后,在images目录会生成*.jpg格式数据集。

      2. 在amct_onnx/cmd目录,执行如下命令将images目录下*.jpg格式数据集转换为bin格式数据集。
        python3 ./src/process_data.py

        执行完成后,在data目录生成calibration目录,并在该目录中生成calibration.bin格式数据集。

    3. 在任意目录执行如下命令进行网络模型的量化操作。如下命令中使用的目录以及文件均为样例,请以实际为准。
      amct_onnx calibration --model ./model/resnet101_v11.onnx --save_path ./results/resnet101_v11 --input_shape "input:16,3,224,224"  --data_dir "./data/calibration"  --data_types "float32"

      amct_onnx二进制所在路径为安装用户$HOME/.local/bin目录。用户可以通过amct_onnx calibration --help命令查看命令行涉及的所有参数,关于参数的详细解释以及使用方法请参见命令行参数说明

      AMCT的sample还提供了2.c量化命令以及2.b.ii中数据集预处理脚本的封装脚本run_calibration.sh,用户准备完模型以及下载好数据集后,可以直接使用该脚本执行量化,切换到amct_onnx/cmd目录,执行如下命令:

      bash ./scripts/run_calibration.sh
    4. 若提示如下信息且无Error日志信息,则说明模型量化成功。
      INFO - [AMCT]:[Utils]: The model file is saved in $HOME/xxx/results/resnet101_v11_fake_quant_model.onnx

      量化后生成文件说明如下:

      1. amct_log/amct_onnx.log:记录了工具的日志信息,包括量化过程的日志信息。
      2. results:
        1. resnet101_v11_deploy_model.onnx:量化后的可在昇腾AI处理器部署的模型文件。
        2. resnet101_v11_fake_quant_model.onnx:量化后的可在ONNX执行框架ONNX Runtime进行精度仿真的模型文件。
        3. resnet101_v11_quant.json:量化信息文件(该文件名称和量化后模型名称保持统一),记录了量化模型同原始模型节点的映射关系,用于量化后模型同原始模型精度比对使用。
      3. (可选)随机数_时间戳,该目录只有AMCT_LOG_LEVEL=DEBUG时才会生成,设置方法请参见设置环境变量
        1. quant_config.json:量化配置文件,描述了如何对模型中的每一层进行量化。如果当前目录已经存在量化配置文件,则再次进行量化时,如果新生成的量化配置文件与已有的文件同名,则会覆盖已有的量化配置文件,否则生成新的量化配置文件。
        2. 实际量化过程中,如果量化后的模型推理精度不满足要求,则用户可以根据量化后的quant_config.json,自行构造简易配置文件config.cfg,构造原则请参见调优流程。然后使用--calibration_config参数重新进行量化。通过该文件用户可以自行决定校准使用的数据量,以及控制哪些层进行量化等。
        3. record.txt:记录量化因子的文件。关于该文件的原型定义请参见record记录文件
        4. modified_model.onnx、updated_model.onnx:量化过程中的中间文件。