深度神经网络模型压缩学习笔记二:离线量化算法和工具、实现原理和细节

文章目录

    • 一、离线量化基础概念
      • 1)离线量化定义
      • 2)离线量化优缺点
      • 3)如何生产一个硬件能跑的量化模型?
      • 4)离线量化的类型
      • 5)如何计算scale,zero_point?
      • 6)离线量化概念
      • 7)PTQ与QAT区别
      • 8)离线量化流程
      • 9)校准数据的选择
      • 10)量化模式选择
      • 11)校准方式的选择
      • 12)量化算法的选择(展示离线量化的pipeline)
      • 13)写入量化参数
    • 二、离线量化难点
    • 三、离线量化算法介绍
      • 1)问题点
      • 2)Weight equalization(WE):使每个channel分布更接近,从而更适用于per-tensor量化
      • 3)Bias Correction(BC):从卷积或全连接层的bias剪掉权重的误差,准确率更接近per-channel量化
      • 4)AdaRound
      • 5)Brecq:解决AdaRound逐层重建忽略层间依赖关系的问题
      • 6)QDrop:随机失活激活量化
      • 7)离线量化算法--总结
    • 四、离线量化工具介绍
      • 1)业界常见量化框架与工具
      • 2)Dipoorlet离线量化工具介绍
      • 3)Dipoorlet离线量化工具使用
    • 五、离线量化工具整体设计结构
      • 1)回顾:如何生产一个硬件能跑的量化模型?
      • 2)Dipoorlet:支持多后端部署的离线量化框架
    • 六、离线量化工具代码解读
      • 1)自定义数据结构ONNXGraph
      • 2)可选参数
      • 3)量化流程之加载模型
      • 4)量化流程之校准
      • 5)量化流程之权重微调
      • 6)权重流程之量化分析
      • 7)导出量化部署配置
    • 七、实践:Dipoorlet量化MobileNet

一、离线量化基础概念

1)离线量化定义

在这里插入图片描述

2)离线量化优缺点

在这里插入图片描述

3)如何生产一个硬件能跑的量化模型?

在这里插入图片描述

4)离线量化的类型

①对称量化:速度更快
②非对称量化:精度更好
在这里插入图片描述

5)如何计算scale,zero_point?

①权重weights是一个常量张量
②activation激活值的实际动态范围必须经过数据集采样获取,一般把这个过程称为数据校准calibration
在这里插入图片描述

6)离线量化概念

在这里插入图片描述

7)PTQ与QAT区别

在这里插入图片描述

8)离线量化流程

在这里插入图片描述

9)校准数据的选择

在这里插入图片描述

10)量化模式选择

在这里插入图片描述

11)校准方式的选择

  • 不同的方式
    ①min_max:可能一些极端值会进来
    ②KL Divergence(TensorRT所使用的方法):
    ③Histogram(统计直方图):选定直方图的百分位点作为阶段之,根据百分比来调整截断值大小
    ④MSE:使用均方误差作为模型量化前后输出的损失的衡量指标。此方法较为耗时,但是效果常常优于其他方法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

12)量化算法的选择(展示离线量化的pipeline)

在这里插入图片描述
①经过预训练的模型经过CLE调整,使得模型更方便量化
②给模型建立更容易量化的节点,对称性权重和非对称性激活值
③用MSE做权重的range设置
④使用数据就用AdaRound的方法,不使用数据就用Bias Correction的方法
⑤真正数据对激活值的范围做校准

13)写入量化参数

在这里插入图片描述

二、离线量化难点

  • 难点
    ①校准数据有限
    ②异常数据分布
    ③优化空间有限
    ④优化粒度选择
    在这里插入图片描述

三、离线量化算法介绍

在这里插入图片描述

1)问题点

①问题点一:
在这里插入图片描述
在这里插入图片描述

②问题点二:
在这里插入图片描述

2)Weight equalization(WE):使每个channel分布更接近,从而更适用于per-tensor量化

特点:跨层动态范围均衡
在这里插入图片描述

3)Bias Correction(BC):从卷积或全连接层的bias剪掉权重的误差,准确率更接近per-channel量化

方法:用量化统计数据集前后变化的偏移
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4)AdaRound

  • 备注
    在前面data-free-quantization中,对权重和bias只是采用比较简单的线性偏移;而AdaRound剔除的方法让weight做更灵活的变换
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

5)Brecq:解决AdaRound逐层重建忽略层间依赖关系的问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6)QDrop:随机失活激活量化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7)离线量化算法–总结

在这里插入图片描述

  • 硬件和推理库离线量化工具的能力
    在这里插入图片描述

四、离线量化工具介绍

1)业界常见量化框架与工具

在这里插入图片描述

2)Dipoorlet离线量化工具介绍

在这里插入图片描述
在这里插入图片描述

3)Dipoorlet离线量化工具使用

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、离线量化工具整体设计结构

1)回顾:如何生产一个硬件能跑的量化模型?

在这里插入图片描述

2)Dipoorlet:支持多后端部署的离线量化框架

①部署支持能力
②精度提升能力
③框架代码结构

六、离线量化工具代码解读

1)自定义数据结构ONNXGraph

2)可选参数

3)量化流程之加载模型

4)量化流程之校准

5)量化流程之权重微调

6)权重流程之量化分析

7)导出量化部署配置

七、实践:Dipoorlet量化MobileNet

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

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

相关文章

HTML详解(1)

1.HTML定义 HTML&#xff1a;超文本标记语言。超文本&#xff1a;通过链接可以把多个网页链接到一起标记&#xff1a;标签&#xff0c;带括号的文本后缀&#xff1a;.html 标签语法&#xff1a;<strong>需加粗文字</strong> 成对出现&#xff0c;中间包裹内容&l…

【21-30期】Java技术深度剖析:从分库分表到微服务的核心问题解析

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;Java &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 文章题目&#xff1a;Java技术深度剖析&#xff1a;从分库分表到微服务的核心问题解析 摘要&#xff1a; 本…

Jmeter中的配置原件

2&#xff09;配置原件 1--CSV Data Set Config 用途 参数化测试&#xff1a;从CSV文件中读取数据&#xff0c;为每个请求提供不同的参数值。数据驱动测试&#xff1a;使用外部数据文件来驱动测试&#xff0c;使测试更加灵活和可扩展。 配置步骤 准备CSV文件 创建一个CSV文…

Redis持久化、主从及哨兵架构详解

Redis持久化 RDB快照&#xff08;snapshot&#xff09; 在默认情况下&#xff0c;Redis将内存数据库快照保存在名字为dump.rdb的二进制文件中。 你可以对Redis进行设置&#xff0c;让它在“N秒内数据集至少有M个改动”这一条件被满足时&#xff0c;自动保存一次数据集。 比…

双向链表、循环链表、栈

双向循环链表 class Node:#显性定义出构造函数def __init__(self,data):self.data data #普通节点的数据域self.next None #保存下一个节点的链接域self.prior None #保存前一个节点饿链接域 class DoubleLinkLoop:def __init__(self, node Node):self.head nodeself.siz…

【青牛科技】D1671 75Ω 带4级低通滤波的单通道视频放大电 路芯片介绍

概 述 &#xff1a; D1671是 一 块 带 4级 低 通 滤 波 的 单 通 道 视 频 放 大 电 路 &#xff0c; 可 在3V或5V的 低 电 压 下 工 作 。 该 电 路 用 在 有 TV影 象 输 出 功 能 的 产 品 上 面&#xff0c;比如 机 顶 盒 &#xff0c;监 控 摄 象 头 &#xff0c;DVD&#…

Linux服务器生成SSH 密钥对与 GitLab 仓库进行交互

目录 生成 SSH 密钥对 将公钥添加到 GitLab 测试 SSH 连接 生成 SSH 密钥对 在执行脚本的机器上打开终端&#xff0c;执行以下命令&#xff08;假设使用默认的 RSA 算法&#xff0c;一路回车使用默认设置即可&#xff0c;也可以根据需要指定其他算法和参数&#xff09;&…

关于SpringBoot集成Kafka

关于Kafka Apache Kafka 是一个分布式流处理平台&#xff0c;广泛用于构建实时数据管道和流应用。它能够处理大量的数据流&#xff0c;具有高吞吐量、可持久化存储、容错性和扩展性等特性。 Kafka一般用作实时数据流处理、消息队列、事件架构驱动等 Kafka的整体架构 ZooKeeper:…

在Unity中实现物体动画的完整流程

在Unity中&#xff0c;动画是游戏开发中不可或缺的一部分。无论是2D还是3D游戏&#xff0c;动画都能为游戏增添生动的视觉效果。本文将详细介绍如何在Unity中为物体添加动画&#xff0c;包括资源的准备、播放组件的添加、动画控制器的创建以及动画片段的制作与调度。 1. 准备动…

自定义协议

1. 问题引入 问题&#xff1a;TCP是面向字节流的&#xff08;TCP不关心发送的数据是消息、文件还是其他任何类型的数据。它简单地将所有数据视为一个字节序列&#xff0c;即字节流。这意味着TCP不会对发送的数据进行任何特定的边界划分&#xff0c;它只是确保数据的顺序和完整…

Spring Boot 3.4.0 发行:革新与突破的里程碑

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

android 11添加切换分屏功能

引言 自Android 7开始官方就支持分屏显示,但没有切换分屏的功能,即交换上下屏幕。直到Android 13开始才支持切换分屏,操作方式是:分屏模式下双击中间分割线就会交换上下屏位置。本文的目的就是在Android 11上实现切换分屏的功能。 下图是Android13切换分屏演示 切换分屏…

PyTorch基础05_模型的保存和加载

目录 一、模型定义组件——重构线性回归 二、模型的加载和保存 2、序列化保存对象和加载 3、保存模型参数 一、模型定义组件——重构线性回归 回顾之前的手动构建线性回归案例&#xff1a; 1.构建数据集&#xff1b;2.加载数据集(数据集转换为迭代器)&#xff1b;3.参数初…

JavaScript核心语法(3)

前两篇文章大概把JavaScript的基础语法讲了一下&#xff0c;这篇文章主要讲讲ES6的核心语法。ES6的核心语法说实话其实有点多&#xff0c;我重点挑一些经常在项目中用到的来讲&#xff0c;其他一些我没怎么见过的就不讲了。 目录 1.变量和常量 变量&#xff08;let 和 var&a…

爬虫开发(5)如何写一个CSDN热门榜爬虫小程序

笔者 綦枫Maple 的其他作品&#xff0c;欢迎点击查阅哦~&#xff1a; &#x1f4da;Jmeter性能测试大全&#xff1a;Jmeter性能测试大全系列教程&#xff01;持续更新中&#xff01; &#x1f4da;UI自动化测试系列&#xff1a; SeleniumJava自动化测试系列教程❤ &#x1f4da…

NIO三大组件

现在互联网环境下&#xff0c;分布式系统大相径庭&#xff0c;而分布式系统的根基在于网络编程&#xff0c;而netty恰恰是java领域的网络编程的王者&#xff0c;如果要致力于并发高性能的服务器程序、高性能的客户端程序&#xff0c;必须掌握netty网络编程。 NIO基础 NIO是从ja…

34 基于单片机的指纹打卡系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52RC&#xff0c;采用两个按键替代指纹&#xff0c;一个按键按下&#xff0c;LCD12864显示比对成功&#xff0c;则 采用ULN2003驱动步进电机转动&#xff0c;表示开门&#xff0c;另一个…

李宏毅机器学习课程知识点摘要(14-18集)

线性回归&#xff0c;逻辑回归&#xff08;线性回归sigmoid&#xff09;&#xff0c;神经网络 linear regression &#xff0c; logistic regression &#xff0c; neutral network 里面的偏导的相量有几百万维&#xff0c;这就是neutral network的不同&#xff0c;他是…

文件上传upload-labs-docker通关

&#xff08;图片加载不出&#xff0c;说明被和谐了&#xff09; 项目一&#xff1a; sqlsec/ggctf-upload - Docker Image | Docker Hub 学习过程中,可以对照源码进行白盒分析. 补充&#xff1a;环境搭建在Linux虚拟机上的同时&#xff0c;以另一台Windows虚拟机进行测试最…

【Android】静态广播接收不到问题分析思路

参考资料&#xff1a; Android 静态广播注册流程(广播2)-CSDN博客 Android广播发送流程(广播3)_android 发送广播-CSDN博客 https://zhuanlan.zhihu.com/p/347227068 在Android中&#xff0c;静态广播如果静态广播不能接收&#xff0c;我们可以从整个流程中去分析&#xff…