深度学习模型量化原理

深度学习模型量化原理

深度学习模型的量化Quantization)是一种优化技术,它通过减少模型中权重和激活值的精度来减小模型大小和提高推理速度,同时尽量保持模型的准确度。

模型在训练时,一般是以标准的float32类型(fp32)进行运算的,即使用32个bit来表示一个浮点数并进行浮点数运算。但是在边缘计算设备上进行推理时,处理器往往没有那么高的算力支持fp32的运算。此时,我们常常将模型量化为int8类型减小模型大小加快推理速度

对称量化与非对称量化

int8量化分为对称量化(Symmetric Quantization)与非对称量化(Asymmetric Quantization),通常对称量化的性能会优于非对称量化, 而精度上非对称量化更优。

非对称量化

如图所示,非对称量化就是把数值缩放到[-128,127](int8)或者[0,255](uint8)之间,量化公式如下:
r = S ( q + Z ) q = i n t ( r S ) − Z S = max − min qmax − qmin Z = R o u n d ( − min S + qmin ) r=S(q+Z) \quad q=int(\frac{r}{S})-Z \\ S=\frac{\text{max}-\text{min}}{\text{qmax}-\text{qmin}} \\ Z=Round(-\frac{\text{min}}{S}+\text{qmin}) r=S(q+Z)q=int(Sr)−ZS=qmax−qminmax−minZ=Round(−Smin+qmin)

其中, Z Z Z是zeropoint, S S S是scale, q q q是量化后的值, r r r是真实的值; min / max \text{min}/\text{max} min/max是原始值的范围, qmin / qmax \text{qmin}/\text{qmax} qmin/qmax是量化后值的范围。

非对称量化的优点是能够更灵活地表示数据范围,特别是当数据分布不是以零为中心对称时。然而,非对称量化的缺点是执行量化和反量化操作可能需要更多的计算

对称量化

对称量化是当 Z = 0 Z=0 Z=0时非对称量化的特例。
r = S q q = i n t ( r S ) r=Sq \quad q=int(\frac{r}{S}) r=Sqq=int(Sr)

这种方法比非对称量化更简单,容易在硬件上实现,并且对称量化可以减少量化和反量化过程中的计算量,因为它不需要像非对称量化那样处理零点偏移。

对称量化假设数据分布是对称的,但在实际应用中,很多数据分布并不是对称的,这限制了对称量化的应用场景。

校准

当我们对激活值进行非对称量化时,需要知道值的动态范围(最小值、最大值),但是模型训练后一般是不会保存这些信息的,所以在量化阶段我们仍然需要一个比较小的训练集(一般从模型的训练集中抽取100-200张各个类型的数据)来进行校准Calibration)。

校准就是收集输入数据在模型各层的输出值,并统计得到动态范围。除此以外,TensorRT等方法还使用了KLD方法(基于KL散度)来获取量化门限,这种方法不是直接将 m i n , m a x min,max min,max映射到 − 127 , 127 -127,127 −127,127,而是寻找一个阈值,将阈值以外极值附近的点直接映射为最大/最小值。

参考文献:

个阈值,将阈值以外极值附近的点直接映射为最大/最小值。

参考文献:

A Survey of Quantization Methods for Efficient Neural Network Inference

相关推荐
AI工具人PM产品经理4 分钟前
CSDN 自动发布全流程实战:从 CKEditor HTML 注入到创作页就地发布
python
_Jimmy_8 分钟前
Tool Calling 与 Function Calling 区别
人工智能·python·langchain
2zcode12 分钟前
项目文档:基于MATLAB最小二乘支持向量机的睡眠分期智能监测系统设计与实现
开发语言·支持向量机·matlab
王维同学14 分钟前
Credential Provider、Filter 与 PLAP 的 CLSID 枚举
c++·windows·安全·注册表
twcc_come18 分钟前
安全策略配置实验报告
开发语言·php
逆风飞翔的小叔21 分钟前
【Python基础】Python 流程控制语句使用详解
python·python 流程控制语句·python 流程控制·python 流程控制语句使用·python 流程控制语句详解
2601_9638702232 分钟前
基于Python的晋江文学城热门作品数据分析与可视化
开发语言·python·数据分析
ITmaster073133 分钟前
告别 IDE?Android CLI 来了,开发进入 AI Agent 时代
android·ide·人工智能
陈明勇35 分钟前
一篇文章,多种表达:我用 Seed Evolving 生成知识卡片
人工智能
llwszx36 分钟前
【Java/Go后端手撸原生Agent(第七篇):Token预算管理 + 滑动窗口上下文裁剪】
java·后端·python·agent开发·上下文工程·上下文裁剪·滑动窗口裁剪