当前位置: 首页 > article >正文

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

文章目录

    • 一、离线量化基础概念
      • 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.kler.cn/a/412421.html

相关文章:

  • 多输入多输出 | Matlab实现TCN-GRU时间卷积神经网络结合门控循环单元多输入多输出预测
  • C#(14)七大原则
  • 研0找实习【学nlp】15---我的后续,总结(暂时性完结)
  • 极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【一】
  • 基于vite创建的react18项目的单元测试
  • 计算机毕业设计Python+大模型美食推荐系统 美食可视化 美食数据分析大屏 美食爬虫 美团爬虫 机器学习 大数据毕业设计 Django Vue.js
  • QT入门详解,创建QT应用
  • qsort函数详解+代码展示
  • 低功耗墒情监测站产品详解 如何助力高标准农田项目发展
  • 【面试分享】C++ 中结构体(struct)和类(class)的区别
  • css3移动端布局适配
  • 在同一NAT下配置Linux机器的SSH免密登录指南(ssh-keygen、ssh-copy-id、主机名解析)
  • 【RISC-V CPU debug 专栏 5.1 -- SiFive Nexus Trace 和 Tessent Trace】
  • 大数据技术之Spark :我快呀~
  • 笔记本外接4k显示器只有30Hz刷新率
  • Vue-常用指令
  • 实战OpenCV之物体跟踪
  • 网络安全基础之笔记二(传输层安全)
  • vue2日历组件
  • java技术层面用调用jar包的class文件的技术
  • 时间序列预测——周期性解藕框架(PDF)
  • uniapp 地图移入的快,高亮显示两个
  • 建造者模式Builder——优雅的使用姿势
  • 241123_基于MindSpore学习Bert
  • 设备网络状态巡检系统需求文档
  • 实时数据开发 | checkpoints监控和调优