张量量化方法杂谈

news/2024/10/2 3:20:27
量化方法对比
QAT 可以达到的精度较高,但是往往需要较多的量化训练时间,量化成本比较大。PTQ 的量化过程比较迅速,只需要少量数据集来校准,但是量化后精度往往损失较多,见表7-1。
表7-1 量化方法参数对比

量化方法

功能

经典适用场景

使用条件

易用性

精度损失

预期收益

量化训练 (QAT)

通过 Finetune 训练将模型量化误差降到最小

对量化敏感的场景、模型,例如目标检测、分割、OCR 等

有大量带标签数据

极小

减少存续空间 4X,降低计算内存

静态离线量化 (PTQ Static)

通过少量校准数据得到量化模型

对量化不敏感的场景,例如图像分类任务

有少量无标签数据

较好

较少

减少存续空间 4X,降低计算内存

动态离线量化 (PTQ Dynamic)

仅量化模型的可学习权重

模型体积大、访存开销大的模型,例如 BERT 模型

一般

一般

减少存续空间 2/4X,降低计算内存

7.2.3 量化方法(饱和与非饱和)
模型量化桥接了定点与浮点,建立了一种有效的数据映射关系,使得以较小的精度损失代价获得了较好的收益。模型量化有两种映射方法,以 INT8 量化为例子:
1. 非饱和量化
非饱和量化方法计算浮点类型张量中绝对值的最大值 𝑎𝑏𝑠_𝑚𝑎𝑥,将其映射为 127,则量化比例因子(scale)等于 𝑎𝑏𝑠_𝑚𝑎𝑥/127,如图7-5所示。
图7-5 非饱和量化方法
2. 饱和量化
饱和量化方法使用 KL 散度计算一个合适的阈值 T (0<𝑇<𝑎𝑏𝑠_𝑚𝑎𝑥),将 ±|𝑇| 映射为 ±127,超出阈值 ±|𝑇| 外的直接映射为阈值 ±127,则量化比例因子(scale)等于 𝑇/127,如图7-6所示。
图7-6 饱和量化方法
7.2.4 量化类型(线性与非线性)
量化可以分为线性量化和非线性量化,目前主流的方法是线性量化。线性量化可以分为对称量化和非对称量化。要弄懂模型量化的原理就是要弄懂这种数据映射关系,浮点与定点数据的转换,公式如下:
𝑄=𝑅/𝑆+𝑍
:eqlabel:02Quant_eq1
𝑅=(𝑄−𝑍)∗𝑆
:eqlabel:02Quant_eq2
其中,𝑅 表示输入的浮点数据,𝑄 表示量化之后的定点数据,𝑍 表示零点(Zero Point)的数值,𝑆 表示缩放因子(Scale)的数值。
1. 对称量化
对称量化是非对称量化 𝑍=0 时的特例,即 𝑅𝑚𝑎𝑥 和 𝑅𝑚𝑖𝑛 关于 Z 对称。对称量化常用的方法是最大绝对值量化 (𝑎𝑏𝑠_𝑚𝑎𝑥),将输入缩放到 8 位范围 [−128,127],对称的量化算法原始浮点精度数据与量化后 INT8 数据的转换,如图7-7所示。
图7-7 对称量化方法
代码如下:
𝑖𝑛𝑡=𝑟𝑜𝑢𝑛𝑑[𝑓𝑙𝑜𝑎𝑡𝑠𝑐𝑎𝑙𝑒]
:eqlabel:02Quant_eq3
𝑠𝑐𝑎𝑙𝑒=(2·𝑚𝑎𝑥(|𝑥𝑚𝑖𝑛|,𝑥𝑚𝑎𝑥))𝑄𝑚𝑎𝑥−𝑄𝑚𝑖𝑛
:eqlabel:02Quant_eq4
其中,threshold 是阈值, 可以理解为张量的范围是 [−𝑡ℎ𝑟𝑒𝑠ℎ𝑜𝑙𝑑,𝑡ℎ𝑟𝑒𝑠ℎ𝑜𝑙𝑑]。一般来说,对于激活值,𝑠𝑐𝑎𝑙𝑒=𝑡ℎ𝑟𝑒𝑠ℎ𝑜𝑙𝑑/128。对于权重,𝑠𝑐𝑎𝑙𝑒=𝑡ℎ𝑟𝑒𝑠ℎ𝑜𝑙𝑑/127。
2. 非对称量化
非对称量化(Affifine Quantization)也称为 zero-point quantization,通过使用归一化动态范围 𝑛𝑑𝑥 进行缩放,然后通过零点 𝑧𝑝𝑥 进行移位,将输入分布移动到完整范围 [−128,127] 或者 [0,255]。通过这个仿射变换,任何输入张量都将使用数据类型的所有位,从而减小了非对称分布的量化误差,如图7-8所示。
图7-8 非对称量化方法
以线性量化的 MinMax 方法为例来求解 𝑆 和 𝑍:
𝑆=𝑅𝑚𝑎𝑥−𝑅𝑚𝑖𝑛𝑄𝑚𝑎𝑥−𝑄𝑚𝑖𝑛
:eqlabel:02Quant_eq5
𝑍=𝑄𝑚𝑎𝑥−𝑅𝑚𝑎𝑥𝑆
:eqlabel:02Quant_eq6
其中,𝑅𝑚𝑎𝑥 表示输入浮点数据中的最大值,𝑅𝑚𝑖𝑛​ 表示输入浮点数据中的最小值,𝑄𝑚𝑎𝑥 表示最大的定点值(127 / 255),𝑄𝑚𝑖𝑛 表示最小的定点值(-128 / 0)。
量化算法原始浮点精度数据与量化后 INT8 数据的转换,方法如下:
𝑓𝑙𝑜𝑎𝑡=𝑠𝑐𝑎𝑙𝑒×(𝑢𝑛𝑖𝑡8−𝑜𝑓𝑓𝑠𝑒𝑡)
:eqlabel:02Quant_eq7
通过原始 float32 高精度数据计算,得到 uint8 数据的转换,即为如下公式所示:
𝑢𝑖𝑛𝑡8=𝑟𝑜𝑢𝑛𝑑(𝑓𝑙𝑜𝑎𝑡𝑠𝑐𝑎𝑙𝑒)+𝑜𝑓𝑓𝑠𝑒𝑡
:eqlabel:02Quant_eq8
若待量化数据的取值范围为 [𝑋𝑚𝑖𝑛,𝑋𝑚𝑎𝑥],则 𝑠𝑐𝑎𝑙𝑒 的计算公式如下:
𝑠𝑐𝑎𝑙𝑒=𝑋𝑚𝑎𝑥−𝑋𝑚𝑖𝑛𝑄𝑚𝑎𝑥−𝑄𝑚𝑖𝑛
:eqlabel:02Quant_eq9
offset 的计算方式如下:
𝑜𝑓𝑓𝑠𝑒𝑡=𝑄𝑚𝑖𝑛−𝑟𝑜𝑢𝑛𝑑(𝑥𝑚𝑖𝑛𝑠𝑐𝑎𝑙𝑒)
:eqlabel:02Quant_eq10
当量化到 INT8 时, 𝑄𝑚𝑎𝑥=127,𝑄𝑚𝑖𝑛=−128; UINT8 时, 𝑄𝑚𝑎𝑥=255,𝑄𝑚𝑖𝑛=0。

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

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

相关文章

深度学习模型优化杂谈

深度学习模型优化概述 模型压缩跟轻量化网络模型不同,压缩主要是对轻量化或者非轻量化模型执行剪枝、蒸馏、量化等压缩算法和手段,使得模型更加小、更加轻便、更加利于执行。 基本介绍 随着神经网络模型的复杂性和规模不断增加,模型对存储空间和计算资源的需求越来越多,使得…

【新型进程注入】一种绕过EDR和XDR的新型进程注入技术

1.技术研究背景 2.进程注入 3.Windows API监控 4.认识下新的注入技术 5.查找有漏洞的DLL 6.注射方法 7.自注入和EDR脱钩 8.远程进程注入 9.安全影响 10.检测方法 11.结论1.技术研究背景 进程注入是指将恶意代码注入到某个目标进程内存空间, 使攻击者能够隐藏恶意代码并逃避检测…

【漏洞挖掘技巧】编码绕过

demo说明 初始请求: url/?f=etc/passwd在这里,我尝试通过URL参数f访问/etc/passwd文件,但服务器返回了403状态码,表示访问被禁止。这是因为Web应用防火墙(WAF)检测到请求试图访问敏感文件,因此拦截了该请求 Base64编码:为了绕过WAF的检测,我们对字符串/etc/passwd进行…

给 Minecraft 的 MTR 网页地图换个字体

介绍 呃。。。其实就是感觉 MTR 自带的那个地图有点不太合自己口味,就简单拆包改一下 CSS! 修改 找到 Jetty 目录 右键用压缩包打开 .jar,依次打开 assets/mtr/website 即网页。我这里就简单的改了下 index.css 和 utilities.js。还需要单独改一个 JS 文件是因为 MTR 的地图…

VR虚拟驾驶未来发展以及汽车自动驾驶的特点

在自动驾驶汽车的基础上,VR虚拟现实技术的应用也让自动驾驶汽车更加智能化,能够实现更高级的驾驶体验,今天这篇文章就和大家一起探讨一下 VR虚拟驾驶未来发展的趋势,以及虚拟现实自动驾驶汽车所带来的几个改变。在自动驾驶汽车的基础上,VR虚拟现实技术的应用也让自动驾驶汽…

对 Minecraft 的 Dynmap 做一些小美化

介绍 Dynmap 是 Minecraft 中以网页 Web 形式呈现地图的模组,和 BlueMap 等类似。我自己倒是 Dynmap 用多了感觉更习惯一些就一直用下去了,虽然如今 BlueMap 之类的确实更先进。 LiveAtlas LiveAtlas 是 Dynmap 的第三方皮肤扩展,下载好后直接导入 dynmap/web 文件夹覆盖即可…

docker 环境下的 iptables 复杂配置

最近在项目中,遇到了一个比较辣手的 iptables 规则配置问题。记录一下简化一下问题: 本文中使用到 docker-compose 服务启动示例如下,虚拟机 IP 为 192.168.111.138 services:db:image: mariadb:ltscontainer_name: mysql_zdprestart: alwaysports:- "3306:3306"en…

天下良仓订单导入功能开发解析——生鲜配送供应链系统_杭州生鲜配送系统之升鲜宝_全国首创,简单、方便、高校,无须api 接口对接,少看脸色。

天下良仓_学校食材教育系统_订单导入功能开发解析——生鲜配送供应链系统_杭州生鲜配送系统之升鲜宝_全国首创,简单、方便、高校,无须api 接口对接,少看脸色。对接“杭州天下粮仓系统”的API接口有其好处与坏处。以下是一些常见的优缺点分析: ### 好处1. **自动化和效率提升…