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

离线量化算法和工具 --学习记录1

离线量化算法和工具

  • 一、离线量化的基础概念
    • 1.1、基本流程
    • 1.2、量化的优点和缺点
    • 1.3、如何生产一个硬件能跑的量化模型
    • 1.4、PTQ的概念以及和QAT的区别
    • 1.5、离线量化的标准流程
    • 1.6、校准数据的选择
    • 1.7、量化模式的选择
    • 1.8、校准方式的选择
    • 1.9、量化算法的选择
    • 1.10、写入量化参数

一、离线量化的基础概念

1.1、基本流程

模型: 特指深度神经网络(用于提取图像/视频/语音/文字特征)
量化: 将信号的连续取值(或者大量可能的离散取值)近似为有限多个(或较少的)离散值的过程。

量化推理的流程(以8bit为例):
1.将该层权重量化成int8(通过权重的量化参数);
2.将该层输入激活量化为int8(通过激活的量化参数)
3.int8的激活和权重参与该层的运算(比如下图的 Conv2D),
4.将该层输出激活反量化为浮点格式并送入下一层。
在这里插入图片描述

1.2、量化的优点和缺点

模型量化优点:
减少内存: 量化的过程就将神经网络参数的32位浮点数表示,转换为更小的表示形式,例如8位整数。例如,从 32 位变为 8位将使模型大小减少4倍,因此量化的一个明显好处是显著减少内存。
加速推理: 由于可以使用整数而不是浮点数据类型执行操作,因此网络速度得到了提高。 整数运算在大多数处理器内核(包括微控制器)上需要更少的计算。

模型量化缺点:
量化的代价是神经网络可能会失去准确性,因为它们不能精确地表示信息。
在这里插入图片描述

1.3、如何生产一个硬件能跑的量化模型

在这里插入图片描述

1.4、PTQ的概念以及和QAT的区别

离线量化又称为训练后量化(Post-Training Quantization, PTQ),仅需要使用少量校准数据,确定最佳的量化参数降低量化误差。这种方法需要的数据量较少,但量化模型精度相比在线量化(Quantization Aware Training,QAT)稍逊一些。

PTQ 仅仅使用校准数据计算量化参数(scale,zero-point),而QAT是学习量化参数,甚至训练权重,所以其精度较好。但是PTQ因为其简单易用性,在工业界通常作为量化的第一选择。
在这里插入图片描述
在这里插入图片描述

1.5、离线量化的标准流程

  • 选择校准数据:与训练/测试数据同源,非常重要;
  • 选择量化模式:根据目标硬件,选择量化模式(对称/非对称,per-tensor/channel)
  • 选择校准算法:通过自己的量化工具或者推理后端自带的默认量化工具,选择校准算法,校准每一层的激活的量化参数(scale,zero_point)(weight一般不用校准)
  • 选择量化算法:通过量化工具,使用高阶的PTO算法调整权重;
  • 写入量化参数:如果是自己手动产出的量化参数,需要将量化参数塞到模型里,部署到目标硬 件;
  • 混合精度:量化误差分析及混合精度部署(可选,当量化精度比较差时

1.6、校准数据的选择

  • 工业界的实际量化中,如果可以选择校准数据,尽量遵循以下原则:量化数据不能太少,最好100-200张,具体数目可根据实际情况调整量化数据与训练/测试数据的来源、类别是相似的
  • 量化数据最好来源于测试数据的按类sample或者随机sample。量化数据的预处理方式和训练/测试时的预处理方式是一致的,注意BGR/RGB,mean,std等数值的一致性。
  • 由于离线量化只能拿到部分数据,因此校准数据是否能代表实际场景至关重要
  • 在实际使用中经常遇到校准集不够好导致量化掉点的情况。

学术界将该问题极端化,定义了两种场景

  • 无数据量化
  • Cross-domain量化

1.7、量化模式的选择

(主要是确定量化方案在自己的硬件是否有合适的推理库

在这里插入图片描述

1.8、校准方式的选择

  • 量化校准方法:Min Max

量化是深度学习模型优化中的一项关键技术,特别是在推理阶段。Min Max 是一种常见的量化校准方法,用于确定量化参数,如 scale(缩放因子)和 zero_point(零点)。

一、对称量化 (Symmetric Quantization)

在对称量化中,量化后的值围绕零点对称。

scale 计算公式:
scale = 255 / (2 * max(abs(x))) (对于8位整数,考虑无符号或已处理符号的情况)

其中,x 是浮点数的激活张量,max(abs(x)) 是 x 中绝对值的最大值。

zero_point:
在对称量化中,zero_point 总是 0。

二、非对称量化 (Asymmetric Quantization)

非对称量化允许量化后的值不围绕零点对称,适用于数据分布不对称的情况。

scale 计算公式:
scale = (max(x) - min(x)) / 255 (对于8位整数)

其中,max(x) 和 min(x) 分别是 x 中的最大值和最小值。

zero_point 计算公式:
zero_point = Clip(Round(min(x) / scale), -128, 127) (对于8位整数)

其中,Clip 函数确保 zero_point 在 -128 和 127 的范围内,Round 函数用于四舍五入。

在这里插入图片描述

  • KL Divergence(Tensorrt常用的量化方式):

KL Divergence:使用参数在量化前后的KL散度作为量化损失的衡量指标。

在这里插入图片描述

  • Histogram:

Histogram: 首先采用KL散度的方式将所有参数映射为直方图,然后根据给定百分比,选取直方图的百分位点作为截断值。此方法可以去除掉一些极端值,并且可以灵活调节直方图百分比来调整截断值大小,以适应不同模型

  • MSE:
    MSE: 使用均方误差作为模型量化前后输出的损失的衡量指标。选取使得激活值在量化前后的均方误差最小的量化参数。此方法较为耗时,但是效果常常优于其他方法。

1.9、量化算法的选择

在这里插入图片描述

1.10、写入量化参数

很多推理后端都支持写入量化参数或者写入每一层tensor的range以TensorRT为例,假设我们通过自己的量化工具得到了每一层激活tensor的range,如下方左图,就可以通过下方右图所示的脚本写入到模型里。

在这里插入图片描述


http://www.kler.cn/a/548415.html

相关文章:

  • CAS单点登录(第7版)10.多因素身份验证
  • 如何使用ADB进行WIFI调试
  • pdf文件的读取,基于深度学习的方法
  • GPT-4o微调SFT及强化学习DPO数据集构建
  • windows11+ubuntu20.04双系统下卸载ubuntu并重新安装
  • NCHAR_CS和CHAR_CS,导致UNION ALL 时,提示SQL 错误 [12704] [72000]: ORA-12704: 字符集不匹配
  • Vue2官网教程查漏补缺学习笔记 - Part1基础 - 9事件处理10表单输入绑定11组件基础
  • 一些常用的Yum源
  • 性格测评小程序06用户注册校验
  • 基于角色访问控制的UML 表示
  • qt中实现QListWidget列表
  • 【java】基本数据类型和引用数据类型
  • TCP/IP 协议
  • word分栏使得最后一页内容自动平衡
  • Bandana论文阅读
  • 架构设计系列(四):设计模式
  • 【环境安装】重装Docker-26.0.2版本
  • Excel中不用复杂公式根据指定X列的数值N复制整行数据N行简单方法
  • 1.hadoop3.3.6集群搭建
  • 青少年编程与数学 02-009 Django 5 Web 编程 09课题、视图函数