[笔记] ONNX Export笔记[进行中...]

1.ONNX模型的优势:

ONNX可以提供方便的平台兼容性和方便的移植实现,Opset,可以接收其他的推理模型的的移植,比如从.pt=>.onnx。而.onnx利用Runtime规范,以及可扩展接口,把.onnx模型向下兼容到各个硬件平台。硬件芯片,比如npu供应商,可以依据Runtime扩展接口,提供基于.onnx opset模型的执行能力。

  • ONNX Opset 是指 ONNX 格式中支持的操作集合版本。ONNX 标准随着时间的推移会推出新的 opset 版本,每个 opset 版本定义了支持的操作集合和规范。当创建或导出一个 ONNX 模型时,会使用特定的 opset 版本来定义模型中使用到的操作。ONNX Runtime 会根据模型中使用的 opset 版本来解释和执行模型中的操作。

  • ONNX Runtime 是一个用于执行和优化 ONNX 模型推理的推理引擎。它提供了一个高性能的运行时环境,可以在不同的硬件平台上部署和运行经过导出的 ONNX 模型。ONNX Runtime 负责解释和执行 ONNX 模型的运算,以获得最佳的性能和效率。

2.RK3588当前的ONNX模型适应能力

RKNN的软件分为四个部分:

  • RKNN-Toolkit2 是一个用于用户在PC和瑞芯微NPU平台进行模型转换、推理和性能评估的软件开发工具包。

  • RKNN-Toolkit-Lite2 为瑞芯微NPU平台提供了Python编程接口,便于用户部署RKNN模型,并加速AI应用的实现。

  • RKNN Runtime 提供了C/C++编程接口,旨在支持瑞芯微NPU平台上RKNN模型的部署及AI应用实施的加速。

  • RKNPU内核驱动 负责与NPU硬件交互,已开源,可从瑞芯微的内核代码中获取。

截止20240620,在rknn model translate toolset(GitHub - airockchip/rknn-toolkit2)里提到:

v2.0.0-beta0

  • Support pytorch 2.1
  • Improve support for QAT models of pytorch and onnx

3.onnx层面的模型量化指南

Quantize ONNX models | onnxruntime

量化的基本处置方法是:

val_fp32 = scale * (val_quantized - zero_point)

量化模型,使用zero_point, scale,来把一个fp32的实数映射到一个uint8, uint16的定点数区间。除val_quantized之外的数,都是实数。
onnx有两种量化模型:

There are two ways to represent quantized ONNX models:

  • Operator-oriented (QOperator) :
    All the quantized operators have their own ONNX definitions, like QLinearConv, MatMulInteger and etc.
  • Tensor-oriented (QDQ; Quantize and DeQuantize) :
    This format inserts DeQuantizeLinear(QuantizeLinear(tensor)) between the original operators to simulate the quantization and dequantization process.
    In Static Quantization, the QuantizeLinear and DeQuantizeLinear operators also carry the quantization parameters.
    In Dynamic Quantization, a ComputeQuantizationParameters function proto is inserted to calculate quantization parameters on the fly.

a Convolution operator followed by BatchNormalization can be fused into one during the optimization, which can be quantized very efficiently.

In general, it is recommended to use dynamic quantization for RNNs and transformer-based models, and static quantization for CNN models.

If neither post-training quantization method can meet your accuracy goal, you can try using quantization-aware training (QAT) to retrain the model. ONNX Runtime does not provide retraining at this time, but you can retrain your models with the original framework and convert them back to ONNX.

dynamic和static量化的最本质因素在于,如何确定zero和range of parameters.非时变的CNN模型不需要进行QAT处理。因为它的模型是固定的。RNN则不同,它处理的是时变数据,参数在动态调整。

另外Opset10以上才支持量化。

3.1 U8S8 U8U8的问题

这个问题是模型计算过程中的溢出,因为无符号数默认是饱和加,饱和减,则U8类型具备先天优势,会跑得更快。

3.2 额外的优化步骤

There are specific optimizations for transformer-based models, such as QAttention for quantization of attention layers. In order to leverage these optimizations, you need to optimize your models using the Transformer Model Optimization Tool before quantizing the model.

This notebook demonstrates the process.

3.3 量化的硬件实现机制

量化的本质在于使用硬件支持的更简单的数据类型,来实现针对矩阵运算(但指令多数据)的加速,pytorch的量化过程,包括:

  • Implement a CalibrationDataReader.
  • Compute quantization parameters using a calibration data set. Note: In order to include all tensors from the model for better calibration, please run symbolic_shape_infer.py first. Please refer to here for details.
  • Save quantization parameters into a flatbuffer file
  • Load model and quantization parameter file and run with the TensorRT EP.

4. RKNN的加速指导和额外的加速

4.1 

4.FAQ

4.1 Why are operators like MaxPool not quantized?

8-bit type support for certain operators such as MaxPool was added in ONNX opset 12. Please check your model version and upgrade it to opset 12 and above.

4.2 我到底是选用static 量化模式还是 Dynamic量化模式?

 对于RNN使用dynamic模式,对于CNN直接采用static模式即可。

4.3 量化后精度不足,怎么办?

在准确性丢失更多时,建议采用Per Channel模式。

4.4 我在CPU上运行量化后,速度没有提升,是怎么回事?

量化加速在旧式硬件上会全无提升,而且会造成性能下降:

Old hardware has none or few of the instructions needed to perform efficient inference in int8. And quantization has overhead (from quantizing and dequantizing), so it is not rare to get worse performance on old devices.

x86-64 with VNNI, GPU with Tensor Core int8 support and ARM with dot-product instructions can get better performance in general.

4.5 量化能否给出示例?

基本步骤:

Export a PyTorch model to ONNX — PyTorch Tutorials 2.3.0+cu121 documentation

然后还有更完整的针对特定模型输出的步骤示例:We provide two end-to end examples: 

Yolo V3 and resnet50.

4.6 什么是QAT?

这是将量化过程预先内置在模型内部:

If neither post-training quantization method can meet your accuracy goal, you can try using quantization-aware training (QAT) to retrain the model. ONNX Runtime does not provide retraining at this time, but you can retrain your models with the original framework and convert them back to ONNX.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/859693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查看es p12证书文件过期方法

查看证书过期时间: openssl pkcs12 -in elastic-certificates.p12 -nokeys -out elastic-certificates.crt (需要输入证书生成时配置密码) openssl x509 -enddate -noout -in elastic-certificates.crt

乐鑫云方案研讨会回顾|ESP RainMaker® 引领创业潮,赋能科创企业

近日,乐鑫信息科技 (688018.SH) ESP RainMaker 云生态方案线下研讨会和技术沙龙在深圳成功举办,吸引了众多来自照明电工、新能源、安防、宠物等垂类领域的客户与合作伙伴。活动现场,与会嘉宾围绕产品研发、测试认证、品牌构建、跨境电商等多维…

【面试题】什么是等保2.0?

等保2.0,全称网络安全等级保护2.0制度,是我国网络安全领域的基本国策和基本制度,旨在加强网络系统的安全保护,确保关键信息不被泄露、篡改、破坏或丧失。以下是关于等保2.0的详细介绍: 实施时间与背景: 等…

新加坡经济是如何腾飞的?How Singapore Got So Crazy Rich

How Singapore Got So Crazy Rich Link: https://www.youtube.com/watch?vYSMWN8VpY6A Summary Singapore, a small island nation, has become Asia’s wealthiest country and one of the richest in the world. With a GDP per capita surpassing countries like the UK,…

做好西藏工作,必须把()、加强民族团结作为西藏工作的着眼点和着力点。

做好西藏工作,必须把()、加强民族团结作为西藏工作的着眼点和着力点。查看完整试题答案 A.民族交往交流B.民族交融 C.统一战线D.维护祖国统一 区党委要求,要坚持绿水青山就是金山银山的理念,努力创建()。 A.国家生态文明标杆B.国家生态文明强…

matlab中函数meshgrid

(1) 二维网格 [X,Y] meshgrid(x,y) 基于向量 x 和 y 中包含的坐标返回二维网格坐标。X 是一个矩阵,每一行是 x 的一个副本;Y 也是一个矩阵,每一列是 y 的一个副本。坐标 X 和 Y 表示的网格有 length(y) 个行和 length(x) 个列。 x 1:3; y…

1.8 无符号大数加、减运算

作者 李卫明 单位 杭州电子科技大学 1.8 无符号大数加、减运算。程序设计中经常遇到无符号大数加、减运算问题,请在样例程序Ex1.4基础上实现无符号大数减运算。题目要求输入两个无符号大数,保证一个大数不小于第二个大数,输出它们的和、差。…

AWS WAF 中的验证码和挑战 | 网页抓取时如何解决这个问题

正如许多企业或爬虫用户所知,AWS WAF(Web 应用防火墙)是一个强大的安全解决方案,旨在保护 Web 应用免受常见的网络攻击和漏洞。其关键功能之一是使用 CAPTCHA 和挑战来区分合法用户和潜在的恶意机器人。虽然这增强了安全性&#x…

【栈与队列】删除字符串中的所有相邻重复项

题目:给出由小写字母组成的字符串 S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。 在 S 上反复执行重复项删除操作,直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 分析&#xff…

[C++]24:异常和智能指针

异常和智能指针 一.异常1.C/C的错误:1.C2.C3.三个关键字: 2.使用异常:1.基本概念:2.基本代码:1.基本使用:2.多个捕获:3.任意类型异常的捕获:4.异常的重新抛出: 3.异常安全…

微软将停用 App Center:React Native 开发人员应该使用以下工具

再见,应用中心!你好,EAS + Sentry + GitHub Actions! React Native 开发人员大遗憾:微软宣布将于 2025 年 3 月 31 日关闭Visual Studio App Center。 多年来, Infinite Red一直将 App Center 作为许多 React Native 咨询客户的 CI/CD 流程和开发工作流程的关键部分。它有…

License简介和Licensecc的使用

License简介和Licensecc的使用 License简介什么是LIcense简易License制作加密扫盲对称加密非对称加密 Licensecc使用构建和编译在linux上进行编译UbuntuCentOS 7CentOS 8下载并编译配置编译和测试cmake 后可以跟的参数在Linux上为Windows进行交叉编译 在windos上进行编译MSVC (…

Android反编译apk重新打签名

反编译apk 1.下载反编译工具apktool,可以在官网(Install Guide | Apktool)上下载最新版本的 Apktool 2.反编译apk文件,生成文件myapp apktool d myapp.apk 3.重新生成apk apktool b myapp -o myapp_new.apk使用 apksigner 签名 APK 文件…

【华为OD机试】二进制差异数(C++ Java JavaScript Python )

题目 题目描述 对于任意两个正整数A和B,定义它们之间的差异值和相似值: **差异值:**A、B转换成二进制后,对于二进制的每一位,对应位置的bit值不相同则为1,否则为0; **相似值:**A、B转换成二进制后,对于二进制的每一位,对应位置的bit值都为1则为1,否则为0; 现在有n个…

项目管理软件如何帮助收尾项目?

项目规划、执行、监测和控制通常是项目管理的重点。即使是项目启动也会受到关注,但项目收尾通常是事后才提及的。 实际上,项目的每个阶段都很重要。项目收尾不仅仅是按时交付、不超预算和达到预期质量。 什么是项目收尾? 项目收尾是项目生…

elementUI的衍生组件,avue的crud表格错位问题

问题描述: 每次从别的页面跳转回来就发现表格显示错位了 一通查 结果发现是有两层表格 解决办法: 根据开发者工具中看到的样式选择器,很粗暴的在全局样式文件中加一个: 效果:

学习记录696@网络安全之认证、报文完整性、密钥分发与证书

认证 即通信双方如何认证对方身份。 这种情况存在问题:trudy可以伪造A的IP地址。就算带上密码也可能被截获,用于重放攻击。 解决重放攻击的办法是随机数挑战,每次认证时,B都发一个挑战码给A。A加密后再传给B,如果B…

恒远世达:把握现在,高考后逆袭,开启日本留学之路!

一年一度的高考已经落幕,马上就要出高考分数了,有人欢喜有人忧,奋斗学习了这么多年,就为了考上一所理想的大学,一旦没考上,心情会非常的低落。 在传统心态中,高考失利意味着人生重大失败&#…

1143. 最长公共子序列(leetcode)

1143. 最长公共子序列(leetcode) 题目描述 给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。如果不存在公共子序列 ,返回 0 。一个字符串的子序列是指这样一个新的字符串:它是由原字符串在不…