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

SS928模型量化与校准——基于ONNX框架的易腾压缩工具使用 四叶草~ 2023-04-12 17:43:32 2635

一、概述

昇腾模型压缩工具提供了一系列的模型压缩方法,对模型进行压缩处理后,生成的部署模型在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接口方式量化原始网络模型。

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

(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框架的易腾压缩工具使用

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 点赞 1 评论 打赏
评论
2个
内容存在敏感词
手气红包
  • 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这个包在哪下啊
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
四叶草~
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区