执行量化

  1. 获取sample软件包。

    获取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_acl

    获得如下目录信息:

    |-- README_CN.md
    |-- requirements.txt                          # 执行量化时所需的第三方依赖
    |-- resnet101_onnx                            # ONNX网络模型量化目录
    |   |-- README_CN.md
    |   |-- data                                  # 数据集存放目录
    |   |-- model                                 # ONNX 原始网络模型文件所在目录
    |   |-- scripts
    |   |   |-- run_calibration.sh                # 执行量化封装脚本
    |   |-- src
    |       |-- process_data.py                   # 数据集预处理脚本
    |-- resnet50_caffe                            # Caffe框架ResNet50分类网络模型量化目录
    |   |-- README_CN.md
    |   |-- data                                  # 数据集存放目录
    |   |-- model                                 # Caffe框架模型文件所在目录
    |   |-- scripts
    |   |    |-- run_calibration.sh               # 执行量化封装脚本
    |   |-- src
    |        |-- download_models.py                # ResNet50模型文件下载脚本
    |        |-- process_data.py                   # 数据集预处理脚本
    |-- resnet50_tf                                # TensorFlow框架ResNet50分类网络模型量化目录
        |-- README_CN.md
        |-- data                                   # 数据集存放目录
        |-- model                                  # TensorFlow框架模型文件所在目录
        |-- scripts
        |    |-- run_calibration.sh                # 执行量化封装脚本
        |-- src
             |-- process_data.py                   # 数据集预处理脚本 

  3. 执行量化。

    • Caffe框架ResNet50分类网络模型量化
      1. 准备模型。
        切换到amct_acl/resnet50_caffe目录,执行如下命令下载模型文件和权重文件。
        python3 ./src/download_models.py --close_certificate_verify

        其中,--close_certificate_verify参数可选,用于关闭证书验证参数,确保模型正常下载。如果模型下载过程中提示提示认证失败相关信息,则可以增加该参数重新下载。

        若提示如下信息,则说明模型文件下载成功:

        [INFO]Download 'ResNet-50-deploy.prototxt' to 'xxx/amct_acl/resnet50_caffe/model/ResNet-50-deploy.prototxt' success.
        [INFO]Download file_name to 'xxx/amct_acl/resnet50_caffe/model/ResNet-50-model.caffemodel' success.

        用户可以根据提示信息,在amct_acl/resnet50_caffe/model路径下看到已经下载的模型文件。

      2. 准备校准数据集。
        1. 切换到amct_acl/resnet50_caffe目录,执行如下命令,用于下载校准数据集。
          cd data
          mkdir image && cd image
          wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/amct_acl/classification/calibration.rar
          unrar e calibration.rar

          上述命令执行完成后,在image目录会生成*.jpg格式数据集。

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

          执行完成后,在image目录生成calibration.bin数据集。

      3. 在amct_acl/resnet50_caffe目录,执行如下命令进行量化。
        amct_acl --framework=0 --model=./model/ResNet-50-deploy.prototxt --weight=./model/ResNet-50-model.caffemodel --calibration_data=./data/image/calibration.bin --calibration_shape="data:32,3,224,224"  --output=./outputs/ResNet-50-model --soc_version=<soc_version> --log=info
        使用amct_acl命令进行量化时,命令有两种方式,用户根据实际情况进行选择:
        1. amct_acl param1=value1 param2=value2 ...(value值前面不能有空格,否则会导致截断,param取的value值为空)
        2. amct_acl param1 value1 param2 value2 ...

        关于参数解释以及说明请参见参数说明。该sample还提供了上述量化命令以及3.b.ii中数据集预处理脚本的封装脚本run_calibration.sh,用户可以直接使用该脚本执行量化,切换到amct_acl/resnet50_caffe目录,执行如下命令:

        bash ./scripts/run_calibration.sh

        若出现如下信息则说明量化成功:

        amct_acl generate deploy air success!
      4. 量化结果说明。
        量化成功后,在amct_acl/resnet50_caffe目录生成如下文件:
        • amct_log_时间戳
          • amct_acl.log:量化日志目录,记录AMCT量化过程的日志信息。
          • (可选)record.txt:量化因子文件,如果执行量化时设置了生成量化因子的环境变量(export AMCT_LOG_DUMP=2或者3),详情请参见安装后处理,量化后会生成该文件,关于量化因子详细说明请参见量化因子记录文件
          • (可选)graph信息ge*.txt和ge*.pbtxt文件,如果执行量化时设置了生成量化因子的环境变量(export AMCT_LOG_DUMP=3),详情请参见安装后处理,量化后会生成该文件。
        • fusion_result.json:模型编译过程中使用的融合规则。
        • outputs/ResNet-50-model.air:量化后的模型文件。
      5. (后续处理)如果用户需要将量化后的模型,转换为适配昇腾AI处理器的离线模型,则请参见ATC工具使用指南

        转换样例如下:

        atc --model=$HOME/model/ResNet-50-model.air --framework=1 --output=$HOME/model/out/ResNet-50_om --soc_version=<soc_version>
    • TensorFlow框架ResNet50分类网络模型量化
      1. 准备模型。

        单击Link下载ResNet-50模型文件,下载完成并解压后,将其中resnet_v1_50.pb上传到amct_acl/resnet50_tf/model目录。

      2. 准备校准数据集。
        1. 切换到amct_acl/resnet50_tf/data,依次执行如下命令,用于下载校准数据集。
          cd amct_acl/resnet50_tf/data
          mkdir calibration && cd calibration 
          wget https://obs-9be7.obs.cn-east-2.myhuaweicloud.com/models/amct_acl/classification/calibration.rar
          unrar e calibration.rar

          上述命令执行完成后,在calibration目录会生成*.jpg格式数据集。

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

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

      3. 在amct_acl/resnet50_tf目录,执行如下命令进行量化。
        amct_acl --framework=3 --model=./model/resnet_v1_50.pb --calibration_data=./data/calibration/calibration.bin --calibration_shape="input:16,224,224,3" --output=./outputs/resnet_v1_50 --soc_version=<soc_version> --log=info

        关于参数解释以及说明请参见参数说明。该sample提供了上述量化命令以及3.b.ii中数据集预处理脚本的封装脚本run_calibration.sh,用户可以直接使用该脚本执行量化,切换到amct_acl/resnet50_tf/目录,执行如下命令:

        bash ./scripts/run_calibration.sh

        若出现如下信息则说明量化成功:

        amct_acl generate deploy air success.
      4. 量化结果说明。

        量化成功后,在amct_acl/resnet50_tf/目录生成如下文件:

        • amct_log_时间戳
          • amct_acl.log:量化日志目录,记录AMCT量化过程的日志信息。
          • (可选)record.txt:量化因子文件,如果执行量化时设置了生成量化因子的环境变量(export AMCT_LOG_DUMP=2或者3),详情请参见安装后处理,量化后会生成该文件,关于量化因子详细说明请参见量化因子记录文件
          • (可选)graph信息ge*.txt和ge*.pbtxt文件,如果执行量化时设置了生成量化因子的环境变量(export AMCT_LOG_DUMP=3),详情请参见安装后处理,量化后会生成该文件。
        • fusion_result.json:模型编译过程中使用的融合规则。
        • outputs/resnet_v1_50.air:量化后的模型文件。
      5. (后续处理)如果用户需要将量化后的模型,转换为适配昇腾AI处理器的离线模型,则请参见ATC工具使用指南

        转换样例如下:

        atc --model=$HOME/model/resnet_v1_50.air --framework=1 --output=$HOME/model/out/resnet_v1_50_om --soc_version=<soc_version>
    • ONNX ResNet101分类网络模型量化
      1. 准备模型。

        单击Link下载ResNet101模型文件,将下载的resnet101_v11.onnx文件上传到amct_acl/resnet101_onnx/model目录。

      2. 准备校准数据集。
        1. 切换到amct_acl/resnet101_onnx/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_acl/resnet101_onnx目录,执行如下命令将images目录下*.jpg格式数据集转换为bin格式数据集。
          python3 ./src/process_data.py

          执行完成后,在images目录生成calibration.bin格式数据集。

      3. 在amct_acl/resnet101_onnx目录,执行如下命令进行量化。
        amct_acl --framework=5 --model=./model/resnet101_v11.onnx --calibration_data=./data/images/calibration.bin --calibration_shape="input:16,3,224,224"  --out_nodes="Gemm_353:0" --output=./outputs/resnet101_v11 --soc_version=<soc_version> --log=info

        关于参数解释以及说明请参见参数说明。该sample提供了上述量化命令以及3.b.ii中数据集预处理脚本的封装脚本run_calibration.sh,用户可以直接使用该脚本执行量化,切换到amct_acl/resnet101_onnx目录,执行如下命令:

        bash ./scripts/run_calibration.sh

        若出现如下信息则说明量化成功:

        amct_acl generate deploy air success.
      4. 量化结果说明。

        量化成功后,在amct_acl/resnet101_onnx目录生成如下文件:

        • amct_log_时间戳
          • amct_acl.log:量化日志目录,记录AMCT量化过程的日志信息。
          • (可选)record.txt:量化因子文件,如果执行量化时设置了生成量化因子的环境变量(export AMCT_LOG_DUMP=2或者3),详情请参见安装后处理,量化后会生成该文件,关于量化因子详细说明请参见量化因子记录文件
          • (可选)graph信息ge*.txt和ge*.pbtxt文件,如果执行量化时设置了生成量化因子的环境变量(export AMCT_LOG_DUMP=3),详情请参见安装后处理,量化后会生成该文件。
        • fusion_result.json:模型编译过程中使用的融合规则。
        • outputs/resnet101_v11.air:量化后的模型文件。
      5. (后续处理)如果用户需要将量化后的模型,转换为适配昇腾AI处理器的离线模型,则请参见ATC工具使用指南

        转换样例如下:

        atc --model=$HOME/model/resnet101_v11.air --framework=1 --output=$HOME/model/out/resnet101_v11_om --soc_version=<soc_version>