# PaddlePaddle 模型量化技术 目录: - [1.量化概述](#1-量化概述) - [2.量化方式](#2-量化方式) - [2.1静态离线量化](#21-静态离线量化ptq) - [2.2在线量化训练](#22-在线量化训练qat) - [2.3动态离线量化](#23-动态离线量化) - [3.量化格式](#3-量化格式) - [3.1量化类型](#31-量化类型) - [3.2量化算子](#32-量化算子) - [4.FAQ](#4-faq) ## 1. 量化概述 在量化过程中,浮点实数值会映射到低比特量化空间,比如8bit、4bit等。从量化计算方式的角度,量化主要可以分为线性量化和非线性量化。线性量化方法由于计算方式简单以及较多硬件支持,应用最为广泛,目前PaddlePaddle中主要支持线性量化计算。线性量化又可以细分为对称量化,非对称量化等,PaddleSlim中默认支持对称量化。 以线性对称量化为例,其计算公式为: $$ s=\frac{2^{b-1}-1}{\alpha} $$ $$ x_{q}=\operatorname{quantize}(x, b, s)=\operatorname{clip}\left(\operatorname{round}(s \cdot x),-2^{b-1},2^{b-1}-1\right) $$ 反量化过程可以用以下公式表述: $$ x_{dq}=\operatorname{dequantize}(x, s)=\frac{x}{s} $$ 其中,s为所选取的scale值,即尺度因子,将全精度参数映射到低比特取值范围;α为选定的全精度参数的表示范围,量化过程会对全精度数值进行截断处理,即全精度数值将被限制在[-α,α]内。b为量化的比特数,x为待量化的全精度参数。因此,如果给定量化的比特数b,我们只需要选定合适的α值,就可以确定量化所需的参数s。 在模型量化过程中分为权重量化和激活量化: - 权重量化:即需要对网络中的权重执行量化操作。可以选择逐层(layer-wise)或者逐通道(channel-wise)的量化粒度,也就是说每层或者每个通道选取一个量化scale。在PaddleSlim中所有权重量化都采用`abs_max`或者`channel_wise_abs_max`的方法,需要注意的是部分部署硬件有可能不支持channel-wise量化推理。 - 激活量化:即对网络中不含权重的激活类OP进行量化。一般只能采用逐层(layer-wise)的量化粒度。在PaddleSlim的中默认采用`moving_average_abs_max`的采样策略。 ## 2. 量化方式