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

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.mzph.cn/news/857231.shtml

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

相关文章

数学建模整数规划学习笔记

与线性规划的本质区别在于决策变量是否取整。 (1)分支定界法 若不考虑整数限制先求出相应松弛问题的最优解: 若松弛问题(线性规划)无解,则ILP(整数规划)无解。 若求得的松弛问题最…

phar反序列化及绕过

目录 一、什么是phar phar://伪协议格式: 二、phar结构 1.stub phar:文件标识。 格式为 xxx; *2、manifest:压缩文件属性等信息,以序列化存 3、contents:压缩文件的内容。 4、signature:签名&#…

视频云存储平台LntonCVS国标视频平台功能和应用场景详细介绍

LntonCVS国标视频融合云平台基于先进的端-边-云一体化架构设计,以轻便的部署和灵活多样的功能为特点。该平台不仅支持多种通信协议如GB28181、RTSP、Onvif、海康SDK、Ehome、大华SDK、RTMP推流等,还能兼容各类设备,包括IPC、NVR和监控平台。在…

等保2.0中,如何确保云服务提供商的数据主权合规?

等保2.0(网络安全等级保护2.0)为了确保云服务提供商的数据主权合规,提出了若干关键措施和要求,主要包括但不限于以下几点: 1. 数据地理位置要求:明确规定云服务提供商必须保证所有基础设施位于中国境内&am…

海外云手机自动化管理,高效省力解决方案

不论是企业还是个人,对于海外社媒的营销都是需要自动化管理的,因为自动化管理不仅省时省力,而且还节约成本; 海外云手机的自动化管理意味着什么?那就是企业无需再投入大量的人力和时间去逐一操作和监控每一台设备。 通…

容器之滚动条窗体演示

代码; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);GtkWidget *window;window gtk_window_new(GTK_WINDO…

【经验分享】Ubuntu 24.04 安装搜狗输入法(亲测有效)

【经验分享】Ubuntu 24.04 安装搜狗输入法&#xff08;亲测有效&#xff09; 先用如下Ubuntu22.04的安装方法进行安装 Ubuntu 22.04安装搜狗输入法 发现存在闪屏问题&#xff0c;那解决闪屏问题不就好了。 解决方法如下&#xff1a; 解决方法1 Ubuntu 24.04安装搜狗输入法-解…

20212416 2023-2024-2 《移动平台开发与实践》综合实践

移动平台开放综合实践 1.实验内容2.实验过程2.1 确定基础功能2.2 设计UI界面2.3 编写程序运行代码2.4 在基本功能的基础上丰富功能 3. 代码分析3.1设置按钮的点击事件监听器3.2 比分更新模块3.3 比分存储模块 4. 运行结果5.实践中遇到的问题及解决6.学习感悟与思考参考资料 1.实…

【原创】springboot+mysql员工工资管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

Wilcom PE 威尔克姆绣花软件下载安装;Wilcom PE 广大绣花制版师必备软件!

Wilcom PE这款软件不仅具备强大的设计功能&#xff0c;更在用户体验上下足了功夫&#xff0c;使得刺绣图案的创作变得更为简单、高效。 在Wilcom PE的丰富工具箱中&#xff0c;用户可以发现各种精心设计的工具&#xff0c;它们如同刺绣师手中的魔法棒&#xff0c;将创意变为现…

云邮件推送服务如何配置?有哪些优势特点?

云邮件推送的性能怎么优化&#xff1f;如何选择邮件推送服务&#xff1f; 云邮件推送服务是一种基于云计算的邮件发送解决方案&#xff0c;能够帮助企业和个人高效地发送大规模邮件。AokSend将详细介绍如何配置云邮件推送服务&#xff0c;以便你能够充分利用其优势。 云邮件推…

深度学习500问——Chapter12:网络搭建及训练(3)

文章目录 12.3.5 Caffe有哪些接口 12.4 网络搭建有什么原则 12.4.1 新手原则 12.4.2 深度优先原则 12.4.3 卷积核size一般为奇数 12.4.4 卷积核不是越大越好 12.5 有哪些经典的网络模型值得我们去学习的 12.6 网络训练有哪些技巧 12.6.1 合适的数据集 12.6.2 合适的预…

VMware连接XShell保姆教程

打开虚拟机后进入终端在终端中 1.配置静态IP 在终端中输入 ifconfig回车&#xff0c; 注意这里需要记住这个IP每个电脑的都不一样 在输入ip addr 2.接着输入cd /etc/sysconfig/network-scripts/进入配置网络文件夹 3.通过Vim编辑器编辑内容 vim ifconfig-ens33 进入界面…

《窄门》情不知所起,而一往情深

《窄门》情不知所起&#xff0c;而一往情深 安德烈纪德&#xff08;1869-1951&#xff09;&#xff0c;法国作家。纪德一生著有小说、剧本、论文、散文、日记、书信多种&#xff0c;主要作品有小说《背德者》《窄门》《田园交响曲》《伪币制造者》等&#xff0c;戏剧《康多尔王…

信息学奥赛初赛天天练-31-CSP-J2022基础题-指针、数组、链表、进制转换、深度优先搜索、广度优先搜索、双栈实现队列应用

PDF文档公众号回复关键字:20240621 2022 CSP-J 选择题 单项选择题&#xff08;共15题&#xff0c;每题2分&#xff0c;共计30分&#xff1a;每题有且仅有一个正确选项&#xff09; 3.运行以下代码片段的行为是 ( ) int x 101; int y 201; int * p &x; int * q &y;…

C51与MDK共存版本安装教程

目录 一、安装准备 1.1 新建文件夹 1.2 网盘链接-加Q 667198390 二、 双版本共存安装教程 2.1 安装Keil5 C51 2.2 安装Keil5 MDK 2.3 C51和MDK的共存 2.4 生成许可证 2.5 安装STM32Pack包 一、安装准备 1.1 新建文件夹 如下图&#xff1a; 在合适的网盘里&#xff08…

Java热部署:让应用更新如丝般顺滑,告别繁琐重启!

目录 手动启动热部署 自动启动热部署 参与热部署监控的文件范围配置 关闭热部署 什么是热部署&#xff1f;简单说就是你程序改了&#xff0c;现在要重新启动服务器&#xff0c;嫌麻烦&#xff1f;不用重启&#xff0c;服务器会自己悄悄的把更新后的程序给重新加载一遍&…

全网首测!文生软件平台码上飞CodeFlying,效果炸裂!

前言&#xff1a; 提到AIGC&#xff0c;在大家的印象中应该就是让AI自己生成文字&#xff0c;图片等内容吧。随着今年Sora&#xff0c;Suno的爆火&#xff0c;将AIGC的应用场景又拉到了一个新的高度&#xff0c;为人们带来了更多的遐想。在未来&#xff0c;或许可以用AI来生成…

python学习笔记-10

面向对象编程-下 1.私有化属性 语法&#xff1a;两个下划线开头&#xff0c;声明该属性为私有&#xff0c;不能在类的外部被使用或直接访问。 使用私有化属性的场景&#xff1a; 1.把特定的一个属性隐藏起来&#xff0c;不让类的外部进行直接调用。 2.不让属性的值随意改变。…

微信发布分班查询结果

亲爱的老师们&#xff01;期末考完&#xff0c;新学期就快要来了&#xff0c;还在为分班查询头疼吗&#xff1f;别担心&#xff0c;今天我要和大家分享一个超级实用的小技巧——如何通过微信发布分班查询结果&#xff0c;让家长们和学生们都能掌握新学期的动态&#xff1f; 分…