模型量化I—基础概念

news2025/2/26 9:26:00

最近接了个模型量化的任务,读了几篇比较新的论文,并跑通了几个模型。因为第一次接触这个领域,没有理论基础打底,直接读“大成”性的论文,常常有种云山雾罩的感觉,如空中楼阁,不知道每个结论的来历,理解起来就会比较困难,也不利于开展创造性的工作。于是索性慢下来,花点心思从最基础的内容入手,建立起对该问题系统性的理解。

准备花几个篇幅把模型量化的底层知识梳理一下,本篇作为第一篇,主要是对一些概念的理解。

说起模型量化,不得不提一下模型压缩。模型压缩的必要性想必大家都了解,随着深度学习模型的推广和普及,深度学习模型已经大量应用在如手机、无人机、自动驾驶汽车、智能家居等终端设备上,而这些设备通常受制于存储、带宽、推理速度和功耗等的严格限制,无法进行浮点大模型的部署和推理,因此,需要对大模型进行一定程度的压缩,以满足以上各种限制条件。

深度学习模型的压缩方式主要包括以下几种:

  • 网络裁剪(Network Pruning):也就是模型剪枝,该方法又分为结构化剪枝和非结构化剪枝。

  • 知识蒸馏(Knowledge Distillation):使用精度较高的大模型(Teacher)去“教”小模型,使小模型(Student)获得比直接训练更高的精度。

  • 模型结构设计(Architecture Design):设计适合终端运行的轻量级模型,如MobileNet系列、SqueezeNet等。

  • 模型量化(Parameter Quantization):如将FP32精度的模型转换为FP16、INT8、INT4等精度表示。

模型量化是模型压缩的一种方式,除了直接对大模型量化,也可以将量化和其他模型压缩方式结合在一起使用。

通过模型量化,可以使模型占用更小的存储空间以及传输带宽,有更快的推理速度以及更低的功耗。

一、模型量化基础

神经网络矩阵向量在硬件中的推理逻辑可参考下图。

其中,

如果我们要把浮点向量转换为定点向量,则近似公式为:

Sx是量化因子,Xint为量化后的定点化输入向量。因此,量化后的乘加公式可表示为:

这里,我们暂时先忽略bias,因为bias的表示一般需要使用更高位(32 bit),并且它的量化因子也依赖于weights和activations的量化因子。

对于累加器,为了防止数据溢出,也需要使用较高的位宽,一般使用32 bit位宽。

存储在32bit位宽中的activations需要存入memory中,以便于作为下一层的输入。为了减少下一层的数据传输带宽和运算复杂度,这些32 bit数据在存储之前需要再次被量化到低位(本篇中以8 bit作为示例),因此,还需要一个requantization的步骤,如下图所示:

二、模型量化的分类

根据不同的维度,模型量化有不同的分类。

    • 根据量化方式分类

根据量化方式,模型量化分为训练后量化(PTQ,Post-Training Quantization)和量化感知训练(QAT, Quantization-Aware Training)。

PTQ又分为PTDQ (Post-Training Dynamic Quantization)和PTSQ (Post-Training Static Quantization)。

  • PTDQ:训练收敛后进行量化,其中,Weight被提前量化,Activation在前向推理过程中进行动态量化,每次根据实际运算的浮点数据范围,对每一层计算一次Scale和Zero_Point,然后进行量化。

  • PTSQ:Weight被提前量化,Activation基于之前校准过程中记录下的固定的Scale和Zero_Point进行量化,整个过程不需要再次计算Scale和Zero_Point。

  • QAT:在模型训练过程中模拟量化过程,称为量化感知训练,该方法有利于提高量化模型的精度。

    • 根据量化的数据均匀性分类

根据量化数据的均匀性可将量化分为均匀量化和非均匀量化。其中,均匀量化又称线性量化,是使用最多的量化方式。

考虑零点Zero_Point的情况下,用量化值对真实值的近似公式为:

z为Zero_Point。根据Zero_Point是否为0,均匀量化又分为对称量化和非对称量化。Zero_Point=0时,称为对称量化,Zero_Point≠0时,称为非对称量化。

    • 根据量化位宽分类

根据量化位宽分类,可将量化分为:(1) 统一位宽量化,比如所有weights都使用8 bit整数进行量化;(2) 混合精度量化,比如混合使用INT2/INT4/INT8等不同位宽整数进行量化。这在我们后续的文章中会重点讨论。

    • 根据量化参数粒度分类

根据量化参数的粒度进行分类,可将量化分为per-tensor量化和per-channel量化。

(1) per-tensor/per-layer: 每层使用独立的量化参数,这种实现相对简单,也是目前使用最多的量化方案,便于硬件执行。

(2) per-channel/per-axis:权重的每个通道使用单独的量化参数,这种量化粒度比per-tensor更小,通常能带来较高的精度,但是也会带来额外的开销。

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

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

相关文章

java常用类: String,StringBuffer和StringBuilder

java常用类型: Ineteger等包装类 String类,StringBuffer类和StringBuilder类 Math类及常用方法 System类及常用方法 Arrays类及常用方法 BigInteger类和BigDecimal类及常用方法 日期类Date类,Calender类和LocalDateTime类 文章目录String介绍String创建细节String s…

转投高通平台,大众展露主导自动驾驶的野心

/ 导读 /2022年,英特尔几乎以亏本的价格推动Mobileye上市,成为市场上的一大看点。出现这种情况的原因,除了整个美国自动驾驶大环境不好,和Mobileye接连失去几个大客户不无关系。其中尤以大众这样体量的客户对于Mobileye的影响最为…

Ubuntu 系统如何以 root 用户SSH登录实例

文章目录前言总结前言 出了点小插曲,心情烦躁,搞得Ubuntu都连不上了,心态炸裂。 不过后面冷静下来以后还是找到了解决办法,可以用ssh成功连上root权限的Ubuntu。 因为很少接触Ubuntu,所以不知道即使root的密码正确…

09技术太卷我学APEX-定制页面及导航菜单权限

09技术太卷我学APEX-定制页面及导航菜单权限 0 始终没搞明白APEX的角色如果分配页面的权限,只能自己定制一个 APEX现学现卖开发了个《5217仓库管理》,功能在春节前就搞定了,卡在对页面的权限控制,经过翻阅牛人的博客&#xff0c…

使用vue3,vite,less从零开始学习硅谷外卖.docx

严正声明! 重要的事情说三遍,本文章仅供分享,文章和代码都是开源的,严禁以此牟利,严禁侵犯尚硅谷原作视频的任何权益,我知道学习编程的人各种各样的心思都有,但这不是你对开源社区侵权的理由&am…

读书:《高效的秘密》

#《高效的秘密》的作者是《纽约时报》商业调查记者查尔斯都希格,他的另一本畅销书是《习惯的力量》。 高效不是超额工作、拼命工作,甚至牺牲自己的个人生活。高效的秘密取决于你做选择的方式。 一、激发动力,重新审视效率产生的源头 掌控力…

1.7 Cubemx STM32F429_RTX FATFS 库函数讲解(三)

文章目录1、打开文件夹2、读取文件夹3、打开\新建一个文件5、读取文件1、打开文件夹 FRESULT f_opendir ( DIR* DirObject, /* Pointer to the blank directory object structure */ const TCHAR* DirName /* Pointer to the directory name */ ) 函数说明: 此函数可以打开…

React中如何使用Mobx

一、Mobx前端状态管理框架 基础概念? 1. 什么是Mobx Mobx是一个简单、可扩展的状态管理库 2. 什么是状态管理? 状态管理就是将分布在各个组件、各个模块中的状态的变化,按照一定的规则,进行统一的管理。 3. 为什么需要状态管…

NX二开ufun函数创建块/基准平面/凸台/垫块/腔体

本节主要讲述通过ufun函数直接创建块、基准平面、凸台、垫块、腔体,涉及ufun函数如下: 1、创建块 UF_MODL_create_block 2、创建基准平面 UF_MODL_create_fixed_dplane 3、创建凸台 UF_MODL_create_boss 4、创建垫块 UF_MODL_create_rect_pad5 5、创…

聊聊如何成为更好的架构师?

之前有小伙伴咨询架构方向需要学习什么,需要什么技术储备,今天就来深入聊聊这个话题。 就此探讨下必备技能、经验,以及储备相关知识所需的时间和精力。除此之外,我也回顾了自己走过的路、使用或尝试过的技术,以及我从…

开学季,送什么给小学生实用?学生最实用的护眼好物

伴随着“立春”,又到新的春季开学季,不管是家长还是孩子面对每个学期的循环,每一次都有新的故事和发现,很快就要开学了,给学生的小礼物准备好了吗,作为父母、长辈送给孩子最好的礼物,我认为莫过…

大数据舆情分析软件实时监控,TOOM大数据处理与舆情监控简介

舆情数据分析处理是指通过使用大数据技术、人工智能、自然语言处理等,从舆情数据中提取信息,进行模型建立、模式识别、情感分析等,从而了解舆论情况。舆情数据分析处理的目的是了解舆论趋势、话题热点、网民情绪等,从而便于企业、…

中国电子学会2022年03月份青少年软件编程Scratch图形化等级考试试卷四级真题(含答案)

分数:100 题数:24 一、单选题(共10题,共30分) 1. 由1,2,3,4,5,0这六个数字经过排列组合能够组成多少个六位数偶数?注意:每一位都不相同,最高位不能为0。( ) A. 720 B. 360 C. …

动态规划Dynamic Programming的基础解法

本文是对Jeff Erickson经典算法入门书籍《Algorithms》中动态规划问题的阅读笔记,近期在刷一些编程题,对于如何凑出动态规划更新的范式,脑袋里一直是一团乱麻,特别看完了别人的题解,只是惊叹其脑洞,但一直搞…

分页数据渲染

SearchResult属性增加 增加属性 private List<Integer> pageNavs; 目的&#xff1a;产生分页效果&#xff0c;方便操作&#xff0c;navs记录了从1到总页数的暑假 不是第一页时显示上一页 <a class"page_a" th:attr"pn${result.pageNum - 1}" hre…

算法基础集训(第30天)------>DFS之经典【n皇后问题】

一&#xff1a;概念定义n−皇后问题是指将 n个皇后放在 nn的国际象棋棋盘上&#xff0c;使得皇后不能相互攻击到&#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。二&#xff1a;题目描述n−皇后问题是指将 n个皇后放在 nn 的国际象棋棋盘上&#xff0c;使得皇…

【C++入门】函数重载

目  录1 函数重载概念2 C支持函数重载的原理 -- 名字修饰&#xff08;name Mangling&#xff09;1 函数重载概念 函数重载&#xff1a; 函数的一种特殊情况&#xff0c;C允许在同一作用域中声明几个功能类似的同名函数&#xff0c;这些同名函数的形参列表&#xff08;参数个数…

企企通入选「AI中国」机器之心“最具商业价值解决方案 TOP 30” 榜单

近日&#xff0c;由专业的人工智能信息服务平台机器之心&#xff0c;发起并评选的「AI 中国」机器之心2022 年度评选榜单正式公布&#xff0c;企企通凭借过去一年在采购供应链领域取得的成就&#xff0c;以及在技术、产品、服务能力方面具备的独特优势&#xff0c;从众多企业中…

Python连接Liunx中mysql数据库-三表查询【10个经典案例】

关于Python连接liunx中mysql数据库的方式在这一篇文章 Python连接Liunx中mysql数据库-保姆级教程 关于Python针对liunx中的mysql数据库进行增删改查操作的文章在这一篇可以看一下 Python连接Liunx中mysql数据库-增删改查 对于单表查询的学习可以看这一篇文章 Python对liunx中my…

使用.ibd文件恢复Mysql数据库数据

使用.ibd文件恢复Mysql数据库数据问题发现问题解决第一步&#xff1a;查找mysql数据目录第二步&#xff1a;创建表第三步&#xff1a;解除表空间第四步&#xff1a;复制原数据库.ibd文件第五步&#xff1a;导入表空间ERROR 1030 (HY000): Got error 194 “Tablespace is missin…