神经网络模型的量化简介(工程版)

news2024/11/25 7:03:13

1.量化简介

模型量化(Model Quantization)是深度学习中一种优化技术,旨在减少模型的计算和存储需求,同时尽量保持模型的性能。具体来说,模型量化通过将模型的权重和激活值从高精度(通常是32位浮点数)缩减到较低精度(如16位、8位甚至更低的整数),从而减少计算复杂度和内存占用

模型量化具有以下优点:

  • 减少存储需求:低精度表示可以显著减少模型的存储空间。
  • 加速推理速度:低精度计算通常比高精度计算更快,特别是在支持低精度运算的硬件上。
  • 降低功耗:减少计算复杂度和内存访问次数,可以降低功耗,这对于移动和嵌入式设备尤为重要。

2.概念介绍

  • 按量化参数分类,可分为静态量化和动态量化,区别这两种方式主要是是否提供校准集,动态量化更简单,更灵活,但是推理开销较大,会内嵌一些动态参数,特别注意,动态量化对于TensorRT的engine生成较复杂,因为TensorRT不支持DynamicQuantizeLinear操作。
  • 按量化时间分类,可分为训练后量化(PTQ)和量化感知训练(QAT),区别这两种方式主要是是否需要对模型进行训练,也就是需要搭配troch、tensorflow等框架来训练模型,QAT方式更加复杂,精度也更高,常规的使用建议直接采用PTQ方式,待PTQ量化模型性能较差,再采用QAT方式进行优化。

2.1 动态量化(Dynamic Quantization)(量化方式)

描述:

  • 动态量化在模型推理时对部分权重和激活值进行量化。具体来说,模型的权重在推理前保持为浮点数,在推理时将其动态转换为低精度(如8位整数)进行计算。激活值在推理过程中也会动态地从浮点数转换为低精度值。

优点:

  • 简便性:无需校准数据集,适用于推理阶段的快速量化。
  • 灵活性:适用于多种模型和场景,不需要重新训练模型。

缺点:

  • 推理开销:在推理过程中进行动态量化,可能增加一些计算开销。
  • 精度损失:虽然动态量化可以减少一些精度损失,但在某些情况下仍可能影响模型性能。

2.2. 静态量化(Static Quantization)(量化方式)

描述:

  • 静态量化的目标是求取量化比例因子,主要通过对称量化、非对称量化方式来求,而找到最大值或阈值的方法有MinMax、KLD、ADMM、EQ等方法。

优点:

  • 高效推理:预先量化的模型在推理时效率更高,无需额外的动态计算。
  • 较好的精度:通过校准数据集可以较好地保持模型精度。

缺点:

  • 需要校准数据集:需要一个代表性的校准数据集来计算量化参数。
  • 实施复杂:量化过程可能较为复杂,需要对模型进行详细的分析和调整。

2.3. 量化感知训练(Quantization-Aware Training, QAT)(量化时间,通过结合静态量化)

描述:

  • 量化感知训练(QAT)是一种在模型训练过程中引入量化操作的技术。通过在训练阶段模拟量化误差,模型能够学习并适应量化带来的精度损失,从而在量化后依然保持较高的准确性。QAT通常结合静态量化方法,在训练时将权重和激活值量化为低精度(如8位整数),并在反向传播时考虑量化误差。

优点:

  • 最小化精度损失:在训练过程中模拟量化误差,使模型适应量化后的精度损失,通常能保持较高的准确性。
  • 高效推理:量化后的模型在推理时效率很高。

缺点:

  • 训练复杂度增加:需要在训练过程中引入量化感知机制,增加训练复杂度和时间。
  • 计算资源需求高:训练过程需要更多的计算资源和时间。

2.4.后训练量化(Post-Training Quantization, PTQ)

描述:

  • 在模型训练完成后进行量化,不需要重新训练模型。
  • KL散度方法:通过计算原Float32与量化后的参数分布,得到最优

优点:

  • 简单快速,适合快速部署。

缺点:

  • 可能会有一定的精度损失,尤其是在量化敏感的模型中。

2.5 总结

  • 动态量化适合需要快速部署和灵活应用的场景,但在推理时可能增加计算开销。
  • 静态量化适合推理效率要求高的场景,但需要校准数据集和复杂的量化过程。
  • 后训练量化适合已经训练好的模型,希望快速量化以便部署的场景,但可能会导致精度下降。
  • 量化感知训练适合对精度要求高的场景,但增加了训练复杂度和资源需求。

3. QAT与PTQ区别

  • 训练中量化:QAT,精度高,复杂;训练后量化:PTQ,精度略低,简单。
  • 训练后量化 PTQ :它是使用一批校准数据对训练好的模型进行校准, 将训练过的FP32网络直接转换为定点计算的网络,过程中无需对原始模型进行任何训练。只对几个超参数调整就可完成量化过程, 且过程简单快速, 无需训练, 因此此方法已被广泛应用于大量的端侧和云侧部署场景, 优先推荐您尝试PTQ方法来查看是否满足您的部署精度和性能要求 。
  • 量化感知训练 QAT :它是将训练过的模型量化后又再进行重训练。由于定点数值无法用于反向梯度计算,实际操作过程是在某些op前插入伪量化节点(fake quantization nodes), 用于在训练时获取流经该op的数据的截断值,便于在部署量化模型时对节点进行量化时使用。我们需要在训练中通过不断优化精度来获取最佳的量化参数。由于它需要对模型进行训练, 对操作人员技术要求较高。

4. QAT/PTQ量化与静态/动态量化的区别

PTQ(Post-Training Quantization,训练后量化)和QAT(Quantization-Aware Training,量化感知训练)主要是量化方法,而静态量化和动态量化是量化策略。

训练后量化(PTQ)

描述

PTQ是在模型训练完成后,对模型进行量化的一种方法。它不需要在训练过程中考虑量化误差,而是在训练结束后,通过分析训练数据或校准数据,对模型的权重和激活值进行量化。

静态量化 vs 动态量化
  • 静态量化:PTQ可以用于静态量化,即在量化时使用一组校准数据来确定量化参数(如缩放因子和零点),并在推理时使用这些预先计算的量化参数。
  • 动态量化:PTQ也可以用于动态量化,即在推理时根据输入数据动态地确定量化参数。这种方法通常用于激活值的量化,而权重通常在量化后保持静态。

量化感知训练(QAT)

描述

QAT是在训练过程中引入量化操作的一种方法。通过在训练阶段模拟量化误差,模型能够学习并适应量化带来的精度损失,从而在量化后依然保持较高的准确性。

静态量化 vs 动态量化
  • 静态量化:QAT通常用于静态量化,即在训练过程中模拟量化误差,并在训练完成后使用固定的量化参数进行推理。由于模型已经适应了这些量化参数,推理时可以直接使用预先计算的量化参数,达到高效推理的效果。
  • 动态量化:QAT一般不用于动态量化,因为动态量化主要是在推理时动态确定量化参数,而QAT的核心在于训练过程中模拟和适应量化误差。

总结

  • PTQ:可以用于静态量化和动态量化。静态量化使用预先计算的量化参数,动态量化在推理时动态确定量化参数。
  • QAT:主要用于静态量化,通过在训练过程中模拟量化误差,使模型适应固定的量化参数,从而在推理时达到高效和高精度的效果。

详细可参考下面资料进行深入学习:

GitHub - openppl-public/ppq: PPL Quantization Tool (PPQ) is a powerful offline neural network quantization tool.

深度学习之模型优化—理论实践篇(搞定模型剪枝量化蒸馏神经网络搜索,这一门课就够了)_哔哩哔哩_bilibili

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

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

相关文章

昇思25天学习打卡营第3天 | 数据集

内容介绍:数据是深度学习的基础,高质量的数据输入将在整个深度神经网络中起到积极作用。MindSpore提供基于Pipeline的数据引擎,通过数据集(Dataset)实现高效的数据预处理。其中Dataset是Pipeline的起始,用于…

一些使用注意(XPTable控件使用说明十)

当XPTABLE放到线程中,列数据很多,不出现滚动条的解决代码: /// 这里神奇的代码,解决线程中XPTABLE 不出滚动条问题 , 执行UI相关的操作this.Invoke(new Action(() >{ // 列头,一行空的,这里列头设置…

AI全栈之logo生成:执文,描摹,妙哉~

前言 前几日体验了国产的AI-Agents产品coze 它是一种能够自主执行任务、与环境进行交互并根据所获取的信息做出决策和采取行动的软件程序 并且可以自己去创建属于自己的AIBot,还是很有意思的,大家可以去体验体验 在体验过程中,我发现在创…

echarts+vue2实战(一)

目录 一、项目准备 二、(横向分页)柱状图 2.1、动态刷新 2.2、UI调整 2.3、分辨率适配 三、(竖向平移)柱状图 3.1、平移动画 3.2、不同数值显示不同颜色 四、(下拉切换)折线图 4.1、切换图表和分辨率适配 4.2、UI调整 五、(三级分类)饼图 5.1、数据切换 六、圆环…

基于卷积神经网络的目标检测

卷积神经网络基础知识 1.什么是filter 通常一个6x6的灰度图像,构造一个3*3的矩阵,在卷积神经网络中称之为filter,对6x6的图像进行卷积运算。 2.什么是padding 假设输出图像大小为nn与过滤器大小为ff,输出图像大小则为(n−f1)∗(…

qt经典界面框架

目的 其实就是一个简单的界面显示,是很常用的形式。 说起来简单也是简单,但当初,刚开始做时,感觉非常的复杂,不知如何下手。 现在感觉简单多了。 这个框架利用了QT的现成的MainWindow与QDockWidget,这样就…

Android SurfaceFlinger——SF与HWC交互流程(六)

在上一篇 HWC2On1Adapter 初始化完成后,调用 initWithDevice() 实例化 HwcHal 对象,然后创建高级接口(IComposer),使得调用者能够通过这个接口与硬件进行交互。这里我们就来看一下 HwcHal 和 IComposer 的初始化流程。…

超级ai 必须有个,超级大的词表,必须是个向量库 faiss is all you need

说明优点图像表示流程代码实现如下全部代码 说明 使用极其庞大的词表在模型压缩和图像token化方面带来了显著优势。由于词表巨大,我们不得不利用向量数据库对词表进行搜索,以找到最匹配的token。预测出的token会再次通过嵌入矩阵(em&#xf…

短剧片源授权,类目丰富优惠多,抢先一步更新你的短剧系统片库!

前言 如今的短剧作为一种新兴的视听艺术形式,正以其独特的魅力迅速占领市场高地。为了满足广大短剧爱好者和从业者的需求,我们提供短剧片源授权服务,凭借剧场独家提供的丰富片源,助力您轻松更新短剧系统片库,抢占市场…

不见五陵高管墓,无花无酒锄做田

不见五陵高管墓,无花无酒锄做田 Golang 通用代码生成器仙童 2.4.0 电音仙女尝鲜版七已发布,此版本测试修复了 PostgreSQL 数据库自动反射功能。此版本更新修复了前端代码生成器,并修复了前端多对多界面的缺陷。PostgreSQL 的数据库反射功能刚…

安装TensorFlow报错问题ERROR: Failed building wheel for h5py解决

安装TensorFlow报错问题: 安装命令: pip install tensorflow2.12.0 -i https://pypi.tuna.tsinghua.edu.cn/simple Building wheel for h5py (PEP 517) ... error ERROR: Command errored out with exit status 1: command: /usr/bin/python3 /tmp/tmpz0y9yg…

代码生成器技术乱弹五十三,人工智能和通用代码生成器的共同点:Token

代码生成器技术乱弹五十三,人工智能和通用代码生成器的共同点:Token 现在,随着人工智能的快速发展,特别是生成式人工智能的爆火,大家逐渐熟悉了一个概念,Token。我称之为字牌。在生成式人工智能的语境下&a…

【每日刷题】Day72

【每日刷题】Day72 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 1287. 有序数组中出现次数超过25%的元素 - 力扣(LeetCode) 2. 993. 二叉树的…

视创云展为企业虚拟展厅搭建,提供哪些功能?

在当下数字化浪潮中,如何为用户创造更富生动性和真实感的展示体验,已成为企业营销策略的核心。借助视创云展的线上虚拟3D企业展厅搭建服务,利用3D空间漫游和VR技术的融合,可以为用户呈现出一个既真实又充满想象力的全景图或三维模…

中央空调水系统安装

冷热水管: 空调冷热水管道的材质应由业主或使用方明确: 1、普通焊接钢管; 2、无缝钢管; 3、镀锌钢管; 4、PP-R管; 5、紫铜管; 6、水管内外表面应光洁、无疵孔、裂缝、结疤、层裂或气泡。…

Python12 列表推导式

1.什么是列表推导式 Python的列表推导式(list comprehension)是一种简洁的构建列表(list)的方法,它可以从一个现有的列表中根据某种指定的规则快速创建一个新列表。这种方法不仅代码更加简洁,执行效率也很…

【总线】AXI4第四课时:信号描述

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣,那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者,AXI4以其高性能和高度可扩展性,成为了现代电子系统中不可或缺的通信桥梁…

05 Pytorch 数据读取 + 二分类模型

05 Pytorch 数据读取 二分类模型05 Pytorch 数据读取 二分类模型05 Pytorch 数据读取 二分类模型 01 数据读取 DataLoader(set作为参数) 02 Dataset 从哪读,怎么读? 功能:数据从哪里读取? 如何读取…

BEV端到端视觉论文合集|从不同的视角解析BEV感知技术

随着自动驾驶技术的不断发展,基于摄像头的感知系统已成为关键,而Bird’s Eye View (BEV)大模型在其中发挥着重要作用。BEV大模型是一种将摄像头捕捉到的2D图像转换为自上而下视角的3D感知的技术,使得车辆能够更好地理解周围环境。 BEV大模型…

吴恩达机器学习 第三课 week1 无监督机器学习(下)

目录 01 学习目标 02 异常检测算法 2.1 异常检测算法的概念 2.2 基于高斯模型的异常检测 03 利用异常检测算法检测网络服务器的故障 3.1 问题描述 3.2 算法实现 3.3 问题升级 04 总结 01 学习目标 (1)理解异常检测算法(Anomaly Det…