云恒制造:SS928模型量化与校准——基于ONNX框架的易腾压缩工具使用

一、概述

昇腾模型压缩工具提供了一系列的模型压缩方法,对模型进行压缩处理后,生成的部署模型在SoC上可使能一系列性能优化操作,提高性能。量化是指对模型的权重(weight)和数据(activation)进行低比特处理,让最终生成的网络模型更加轻量化,从而达到节省网络模型存储空间、降低传输时延、提高计算效率,达到性能提升与优化的目标。昇腾压缩工具仅支持在Ubuntu18.04 x86_64架构操作系统进行部署。

云恒制造:SS928模型量化与校准——基于ONNX框架的易腾压缩工具使用

1. 用户需要先在Ubuntu x86_64架构服务器部署昇腾模型压缩工具(AMCT),完成量化操作。

3. 用户将量化后的模型,借助ATC工具转换成适配SoC的离线模型。

4. 将量化后的.om离线模型,在安装SoC的服务器完成推理业务。

二、工具安装

昇腾模型压缩工具仅支持在Ubuntu 18.04 x86_64架构服务器安装;安装前,请先获取昇腾模型压缩工具软件包:CANN-amct-5.13.t5.0.b050-ubuntu18.04.x86_64.tar.gz。

1. 安装配套版本信息

操作系统版本:ubuntu-18.04-server-amd64.iso,支持基于CPU,GPU的量化。

安装ONNX 1.8.0

pip3.7.5 install onnx==1.8.0 –user

安装ONNX Runtime 1.6.0

安装ONNX Runtime CPU版本

pip3.7.5 install onnxruntime==1.6.0 –user

安装ONNX Runtime GPU版本,请先安装CUDA10.2,cuDNN8.0.3

pip3.7.5 install onnxruntime-gpu==1.6.0 –user

安装Python3.7.5,参见SS928算法开发环境搭建安装numpy 1.16.0+

pip3.7.5 install numpy==1.16.0 –user

安装protobuf 3。13.0+

pip3.7.5 install protobuf==3.13.0 –user

2. 软件包安装

将昇腾模型压缩工具软件包上传到Linux任意目录,执行如下命令:

tar -zxvf CANN-amct-5.13.t5.0.b050-ubuntu18.04.x86_64.tar.gz

进入AMCT目录得到下图文件

云恒制造:SS928模型量化与校准——基于ONNX框架的易腾压缩工具使用

进入amct_onnx文件目录,得到一下文件

1. amct_onnx-0.2.4-py3-none-linux_x86_64.whl :ONNX昇腾模型压缩工amct_onnx_op.tar.gz : 昇腾模型压缩工具基于ONNX Runtime自定义算子包

(1)安装

      — 安装昇腾模型压缩工具,在昇腾模型压缩工具软件包所在目录下,执行如下命令进行安装。

pip3.7.5 install amct_onnx-0.2.4-py3-none-linux_x86_64.whl –user

      — 若出现如下信息则说明工具安装成功。

Successfully installed amct_onnx-0.2.4

(2)安装后处理

编译并安装自定义算子包,工具基于ONNX Runtime的自定义算子包。

      — 解压自定义算子包:tar -zxvf amct_onnx_op.tar.gz

          解压后的目录如下:

amct_onnx_op # 自定义算子根目录 ├── inc # 自定义算子编译头文件目录 │ ├── __init__.py │ ├── download_inc_files.py # onnxruntime自定义算子依赖头文件在线下载脚本,使用该脚本 需要确保环境能连接网络 │ ├── quant.h # 昇腾模型压缩工具量化算法声明 │ └── util.h # 昇腾模型压缩工具calibration辅助函数声明 ├── src # 自定义算子实现源文件,请参见ONNX Runtime官方API说明 │ ├── ifmr_op_library.cpp # IFMR数据量化算子函数源文件 │ └── ifmr_op_library.h # IFMR数据量化算子声明头文件 └── setup.py # 编译脚本,编译自定义算子,并且拷贝生成动态库至昇腾模型压缩工具 软件包内

      — 进入amct_onnx_op目录,编译并安装昇腾模型压缩工具自定义算子包。

cd amct_onnx_op && python3.7.5 setup.py build

         以下信息表示安装正确:

[INFO] Build amct_onnx_op success! [INFO] Install amct_onnx_op success!

*备注:在开发环境安装上安装昇腾量化工具amct_onnx时编译并安装自定义算子包时,运行python3 setup.py build 时安装不成功,这种情况下,是因为conda应该集成了Python原本的venv模块,建议使用python环境,而不是使用conda创建。

(3)工具卸载

若用户不再使用昇腾模型压缩工具时,使用一下命令卸载。

— 任意目录下执行命令:pip3.7.5 uninstall amct_onnx

— 出现如下信息时,输入y

Uninstalling amct_onnx-0.2.4: Would remove: … … Proceed (y/n)? y

若出现如下信息说明卸载成功:

Successfully uninstalled amct_onnx-0.2.4

三、快速入门

昇腾模型压缩工具支持命令行方式和Python API接口方式量化原始网络模型。

获取resnet101_v11.onnx网络的模型文件,并将模型上传至模型压缩ONNX文件目录cmd/model。准备与模型匹配的二进制数据集

(1)获取ResNet-101网络模型对应的数据集imagenet_calibration。

(2)将数据集解压后的images目录上传到cmd/data目录。

(3)在cmd目录执行如下命令将jpg格式数据集转成bin格式。

python3.7.5 ./src/process_data.py

3. 在任意目录执行如下命令进行网络模型的量化操作。

amct_onnx calibration –model ./model/resnet101_v11.onnx –save_path ./results/resnet101_v11 –input_shape “input:16,3,224,224” –data_dir “./data/images” –data_types “float32”

用户可以通过amct_onnx calibration –help命令查看命令行涉及的所有参数。

4. 若提示如下信息且无Error日志信息,则说明模型量化成功。

    如下图提示,说明模型转换成功。

云恒制造:SS928模型量化与校准——基于ONNX框架的易腾压缩工具使用

            量化后生成的文件如下:

            amct_log/amct_onnx.log:记录了工具的日志信息,包括量化过程的日志信息。

            在cmd/results目录下生成如下文件:

(1)resnet101_deploy_model.onnx:量化后的可在SoC部署的模型文件。

(2)resnet101_fake_quant_model.onnx:量化后的可在ONNX执行框架ONNXRuntime进行精度仿真的模型文件。

(3)resnet101_quant.json:量化信息文件(该文件名称和量化后模型名称保持统一),记录了量化模型同原始模型节点的映射关系,用于量化后模型同原始模型精度比对使用。

云恒制造:SS928模型量化与校准——基于ONNX框架的易腾压缩工具使用

5. 除了上述快速入门样例,以下网站还有更多样例可以参考

https://gitee.com/ascend/samples/ 

从“python/level1_single_api/9_amct/amct_onnx/”目录下获取更多样例。

四、参数说明

使用amct_onnx命令行进行量化时,可使用以下方式:

amct_onnx calibration param1 value1 param2 value2

以快速入门中的参数为例说明

amct_onnx calibration –model ./model/resnet101_v11.onnx –save_path ./results/resnet101_v11 –input_shape “input:16,3,224,224” –data_dir “./data/images” –data_types “float32”

–model:待量化网络的模型文件与路径,格式为.onnx。

–save_path:量化后模型存放的路径。

–input_shape:指定模型输入数据的shape。

   参数值:模型输入的shape信息。

        参数值格式:”input_name1:n1,c1,h1,w1;input_name2:n2,c2,h2,w2″。

        参数值约束:指定的节点必须放在双引号中,节点中间使用英文分号分隔。

      约束:(1)该参数只在训练后量化场景使用。

                       (2)如果模型的shape不固定,例如”input_name1:?,h,w,c”,其中“?”为每个batch使用的图片数量,该场景下图片数量要等于处理成bin格式数据集的图片数量。        

input_name必须是转换前的网络模型中的节点名称。

–data_dir:与模型匹配的bin格式数据集路径。该参数在训练后量化场景中使用。

    若模型有多个输入,且每个输入有多个batch数据,则不同的输入数据必须存储在不同的目录中,目录中文件的名称必须按照升序排序。所有的输入数据路径必须放在双引号中,节点中间使用英文分号分隔。实例如下: 

–data_dir=”data/input1/;data/input2/”

    input1和input2目录中,数据文件名举例为input1batch1.bin、input1batch2.bin;

    input2batch1.bin、input2batch2.bin,文件名称按照升序进行排列。

–data_types:输入数据的类型。

下一篇将介绍:SS928模型量化与校准——基于tensorflow框架的易腾压缩工具使用

免责声明:文章内容来自互联网,本站仅提供信息存储空间服务,真实性请自行鉴别,本站不承担任何责任,如有侵权等情况,请与本站联系删除。
转载请注明出处:云恒制造:SS928模型量化与校准——基于ONNX框架的易腾压缩工具使用 https://www.bxbdf.com/a/19855.shtml

上一篇 2023-05-03 18:29:05
下一篇 2023-05-03 18:31:58

猜你喜欢

联系我们

在线咨询: QQ交谈

邮件:362039258#qq.com(把#换成@)

工作时间:周一至周五,10:30-16:30,节假日休息。