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

离线量化算法和工具 --学习记录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.lryc.cn/news/537356.html

相关文章:

  • python第七课
  • 华为IPD简介
  • 如何在Spring Boot中配置分布式配置中心
  • Golang internals
  • 天翼云910B部署DeepSeek蒸馏70B LLaMA模型实践总结
  • 数据治理常用的开源项目有哪些?
  • 数据结构与算法之排序算法-(计数,桶,基数排序)
  • Word正文中每两个字符之间插入一个英文半角空格
  • 把 DeepSeek1.5b 部署在显卡小于4G的电脑上
  • A4988一款带转换器和过流保护的 DMOS 微步驱动器的使用方式
  • 一口井深7米,一只蜗牛从井底往上爬每天爬3米掉下去1米,问几天能爬上井口?
  • Asp.Net Core MVC 中级开发教程
  • Windows上安装Go并配置环境变量(图文步骤)
  • C++效率掌握之STL库:string底层剖析
  • 【Erdas实验教程】004:影像镶嵌拼接
  • SpringMVC 请求参数接收
  • [高等数学]换元积分法
  • Redis简介、常用命令及优化
  • 大模型训练为什么依赖GPU
  • 帕金森病与三叉神经痛的基因关联分析
  • 【Android开发】华为手机安装包安装失败“应用是非正式版发布版本,当前设备不支持安装”问题解决
  • 栈与队列(C语言版)
  • stl里的deque 中控map 假如用完了,该如何处理
  • Git GUI设置中文的方法及使用
  • 代码书写常用快捷建
  • MySQL 索引失效处理:原因分析与优化实战
  • 基于Python的AI代码审计工具实现方案,结合DeepSeek API和商业化设计
  • 用Python实现线性回归:从数学原理到代码实战
  • 系统可观测性(1)基础概念
  • Redis未授权访问漏洞导致getshell