更新时间:2021-03-18 GMT+08:00
分享

简介

本文介绍如何对原始Caffe框架的原始网络模型进行量化,量化是指对模型的参数(权重)和数据进行低比特处理,让最终生成的网络模型更加轻量化,从而达到节省网络模型存储空间、降低传输时延、提高计算效率性能提升与优化的目标。模型小型化工具使用场景如图1所示。

图1 部署架构

根据量化对象不同,量化分为权重量化和数据量化;根据是否对权重数据进行压缩又分为均匀量化和非均匀量化(当前仅支持均匀量化),下面分别介绍相关概念:

权重量化

在进行模型推理加速时模型的权值已经确定,数值的范围也已经确定,因此可以直接根据权值的数据范围进行量化。

数据量化

数据量化是对每个要量化的层/Operation的输入数据进行统计,每个层/Operation计算出最优的一组scale和offset。

数据是模型推理计算的中间结果,其数据的范围和输入相关,因此需要使用一组参考输入(校准数据集)作为激励,从而记录下来需要量化的层/Operations的输入数据,用于搜索得到量化参数(scale和offset)。由于在做数据calibration的过程中,需要占用额外的存储空间(显存/内存)来存储用于确定量化参数的输入数据,所以对于显存/内存的占用比仅推理的过程要高,额外占用空间的大小和calibration过程中的batch_size* batch_num正相关。

校准数据集

由于数据的量化参数的确定过程(calibration过程),算法会把校准集中的每一份数据作为输入,积攒下每个需要量化的层/Operations的对应输入数据,根据积攒下的数据作为量化算法的输入数据来确定量化参数。由于量化参数的确定和校准数据集的选择相关,因此量化后模型的精度也和校准数据集的选择相关,推荐使用验证集的子集作为校准数据集。

均匀量化

是指量化后的数据比较均匀地分布在某个数值空间中,例如INT8量化就是用只有8比特的INT8数据来表示32比特的FP32数据,将FP32的卷积运算过程(乘加运算)转换为INT8的卷积运算,加速运算和实现模型小型化;均匀的INT8量化则是量化后数据比较均匀地分布在INT8的数值空间[-128, 127]中。当前支持的均匀量化层为:全连接层(InnerProduct)、卷积层(dilation为1、filter维度为4的Convolution)、平均下采样层Pooling(下采样方式为AVE,且非global pooling),量化过程请参见量化Caffe原始网络模型

分享:

    相关文档

    相关产品

close