一、模型大小的指标
-
1.计算量
计算次数,反映了模型对硬件计算单元的需求。计算量的单位是 OPs(Operations) 。最常用的数据格式 为 float32,因此float32类型下的计算量单位被写作 FLOPs (Floating Point Operations),即浮点计算次数。模型的整 体计算量等于模型中每个算子的计算量之和
例子:两个shape为(N, C, H, W)的float32 tensor相加,即add,计算量为 N x C x H x W FLOPs
-
2.参数量
模型中的参数的总和,反映了模型占的磁盘空间。对于 CNN ,参数主要由 Conv/FC 层的 Weight 构成, 其他算子也有参数,不过跟这俩比较小,还有bias。
-
3.访存量
指模型计算时所需访问内存/显存的字节大小,反映了模型对内存/显存带宽的需求。访存量单位为
Bytes,表示模型计算到底需要存/取多少 Bytes 的数据。
例子:两个shape为(N, C, H, W)的float32 tensor相加,即add,访存量为(2+1)x N x C x H x W x sizeof(float32) bytes
2+1指的是两个输入和一个输出,2个读入,1个输入
-
4. (峰值)内存占用
内存占用指模型跑起来的时候(训练或推理),所占用的内存/显存大小。峰值内存占用,指 在跑起来的过程中内存/显存的占用峰值。注意,内存占用 ≠ 访存量,一般在前向传播结束的时候内存占用最高,反向传播中的一些参数不再需要,所以内存逐渐降低。
二、模型量化的几个指标以及手段
1 量化指标:
-
模型大小:量化可以显著降低模型的存储空间,例如将 32 位浮点数模型量化为 8 位整数模型,可使模型大小直接降为将近 1/4。
-
推理速度:能提高系统吞吐量,降低系统延时。例如在支持低精度计算的 CPU 上,采用 8 位数据表示时,理论上可使芯片的计算峰值增加数倍。
-
精度损失:量化可能会导致一定的精度损失,其大小取决于量化策略、模型特性等。常见的量化方法精度损失有所不同,如 16 位量化(fp16)精度损失通常非常小;8 位量化(int8)可能有一些精度损失,通常能控制在可接受范围内,量化后模型精度与原始模型相比,精度下降往往在 1%以内;4 位量化(int4)的精度损失可能相对更大。
2 量化手段:
量化按照阶段的不同,可分为量化感知训练(qat)和训练后量化(ptq)。qat 需要在训练阶段就对量化误差进行建模,一般能获得较低的精度损失;ptq 则直接对普通训练后的模型进行量化,过程相对简单。
量化算法包括对称算法和非对称算法:
-
对称算法:通过一个收缩因子(scale)将 fp32 张量中的最大绝对值映射到 8 位数据的最大值(127),将最大绝对值的负值映射到 8 位数据的最小值(-128)。量化公式为:$x_q = round(x_f / scale)$(其中,$x_f$表示原始浮点数张量,$x_q$表示量化张量,$scale$表示收缩因子)。该算法适用于数据大致均匀分布在 0 左右的情况。
-
非对称算法:通过收缩因子(scale)和零点(zeropoint)将 fp32 张量的最小值(min)和最大值(max)分别映射到 8 位数据的最小和最大值。量化公式为:$x_q = round((x_f - zero_point) / scale)$,其中$zero_point = rounding(scale * min_x_f)$。这种算法能较好地处理数据分布不均匀的情况,并且 zero_point 可以无误差地量化浮点数中的数据 0,从而减少补零操作在量化中产生的额外误差。
3 量化算法的动态范围的确定
在实际应用中,确定量化算法的动态范围时,为了更准确地进行量化,可以采用一些方法,例如:
-
histgram 方法:首先计算数据的直方图分布,然后通过双指针法限制筛选数据的范围,剔除部分离散点,最终得到合适的 scale。
-
entropy 方法:同样将数据分布划分为若干个 bin(类似直方图分布),然后通过 KL 散度计算量化前后的差异。KL 散度的计算公式为:$D_{KL}(p||q) = \sum_{i} p(x_i) \log(p(x_i) / q(x_i))$,其中$p(x_i)$表示量化前的数据分布,$q(x_i)$表示量化后的数据分布。
此外,还可以结合两种量化方法,例如使用对称量化来量化权重,而使用非对称量化来量化激活值,以充分利用不同方法的优势。同时,量化的效果还与具体的模型结构和应用场景有关,需要根据实际情况进行调整和优化。
有兴趣可以关注我的专栏《高性能开发基础教程》
该文章首发于 subscriptions:极空AI,后续我会在上面整理完整的AI+HPC资料,并提供相关书籍推荐,至于视频要不要录制,看大家需要不需要。
有兴趣的可以关注。