SS928模型量化与校准——基于ONNX框架的易腾压缩工具使用
一、概述
昇腾模型压缩工具提供了一系列的模型压缩方法,对模型进行压缩处理后,生成的部署模型在SoC上可使能一系列性能优化操作,提高性能。量化是指对模型的权重(weight)和数据(activation)进行低比特处理,让最终生成的网络模型更加轻量化,从而达到节省网络模型存储空间、降低传输时延、提高计算效率,达到性能提升与优化的目标。昇腾压缩工具仅支持在Ubuntu18.04 x86_64架构操作系统进行部署。
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目录得到下图文件
进入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日志信息,则说明模型量化成功。
如下图提示,说明模型转换成功。
量化后生成的文件如下:
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:量化信息文件(该文件名称和量化后模型名称保持统一),记录了量化模型同原始模型节点的映射关系,用于量化后模型同原始模型精度比对使用。
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框架的易腾压缩工具使用
- 分享
- 举报
-
nini 2023-12-27 10:17:37回复 举报请问安装完成了还是报错amct_onnx: command not found,怎么处理
-
aaa 2023-07-26 11:13:10回复 举报请问CANN-amct-5.13.t5.0.b050-ubuntu18.04.x86_64.tar.gz这个包在哪下啊
-
crayon 回复 aaa 2024-04-07 15:58:22回复 举报请问这个包在哪里下载?
-
-
浏览量:1424次2023-09-01 13:25:40
-
浏览量:1431次2023-10-28 16:08:09
-
浏览量:1385次2024-06-06 10:17:20
-
浏览量:6215次2023-03-17 19:33:35
-
浏览量:4069次2023-04-12 16:05:14
-
浏览量:2301次2024-01-07 22:19:19
-
浏览量:501次2024-09-13 17:34:13
-
浏览量:989次2023-06-07 14:19:47
-
浏览量:3103次2024-03-14 14:15:25
-
浏览量:4556次2022-10-10 15:32:19
-
浏览量:1683次2022-12-13 16:47:02
-
2023-12-24 00:06:09
-
浏览量:6497次2022-11-10 14:33:49
-
浏览量:1334次2023-12-22 14:53:36
-
浏览量:10561次2022-11-10 18:07:40
-
浏览量:3038次2024-05-23 13:45:40
-
浏览量:3068次2023-04-01 13:01:00
-
浏览量:818次2023-09-09 13:40:42
-
浏览量:1188次2023-12-16 22:32:09
- 二季度手机芯片收益排名:海思位列第二
- 海思3559 yolov5模型转wk详细笔记
- SS524V100 单板移植和烧写U-boot(二)
- 在海思平台((hi3559/hi3519/hi3516/hi3518))上进行ISP调试图像问题和解决方法
- 8吋晶圆产能紧缺,MOSFET价格加速上涨
- 国科微 GK7201V300 liteos 1920X1080P30F
- 关于SS528(Hi3531D)编解码,在教学系统里多路视频监控方向的疑难杂症的技术分享
- NB-IoT智能表计改造惠及民生:中移物联&上海海思助力天津打造智慧物联新城市!
- 海思3519v101双sensor调试
- 华为海思:未来芯片之路,如何突围?
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
四叶草~
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明