模型量化原理与实践

December 17, 2023 本文主要介绍深度学习神经网络模型的量化原理和工程实践,主要包括如下内容: 基本原理:量化映射、量化粒度、量化计算、算子融合等; 模型量化方法:权重\激活量化、PTQ、QAT等; 工程实践:PyTorch 模型量化介绍&示例; 工程实践:高通 QNN 量化工具介绍&示例; LLM 量化算法简介; 一、基本原理 量化简介 神经网络的计算通常以浮点计算(FP32)进行,而量化则是将浮点计算替换为更低比特的计算,如 FP16、INT8 等,从而降低模型的存储大小、降低显存占用、提升推理性能,当然,量化的同时需要尽可能保持模型的精度,因此需要设计合适的量化方案。 量化映射 数值的量化可以看作一个近似过程,主要可分为两类: Fixed Point Approximation 定点近似主要是缩小浮点表示中的指数和小数部分的位宽,不需要额外的量化参数,也没有反量化过程,实现相对简单,但是在数值较大时,直接定点近似会带来较大的精度损失。 Range Based Approximation 基于范围的近似,则是先统计待量化数据的分布,然后进行整体的缩放和偏移,再映射到量化空间,精度相对更高,但需要额外存储量化参数(如缩放系数、偏移等),并且计算时需要先反量化,比定点近似更复杂。根据映射方式的不同,又可分为线性映射和非线性映射: 线性映射 线性映射将数值从浮点空间线性变换到量化空间,可用如下公式表示: 其中 r、q 分别是量化前、后的数,S (Scale)和 Z (Zero-Point)是量化系数,Z 有时也称为偏移(Offset),可以看作是原数值 0 量化后的值,根据 Z 是否为 0,线性映射又可分为对称映射和非对称映射: 如上图,对称映射的 Z 始终为 0, 即原数值的 0 量化后仍然是 0,量化前后的数值都是以 0 为中点对称分布,但实际上有些数值的分布并不是左右对称的,比如 ReLU 激活后都是大于 0,这样会导致量化后Continue reading “模型量化原理与实践”