下载
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
昇腾小AI

简介

本章节详细介绍昇腾模型压缩工具量化场景,以及每个场景下的功能。

由于软件约束(动态shape场景下暂不支持输入数据为DT_INT8),量化后的部署模型使用ATC工具进行模型转换时,不能使用动态shape相关参数,例如--dynamic_batch_size和--dynamic_image_size等,否则模型转换会失败。

各功能以及功能实现过程中所使用的术语解释如下:

训练后量化

训练后量化(Post-Training Quantization,简称PTQ)是指在模型训练结束之后进行的量化,对训练后模型中的权重由浮点数(当前支持float32)量化到低比特整数(当前支持int8),并通过少量校准数据基于推理过程对数据(activation)进行校准量化,进而加速模型推理速度。训练后量化简单易用,只需少量校准数据,适用于追求高易用性和缺乏训练资源的场景。

通常,训练后的模型权重已经确定,因此可以根据权重的数值离线计算得到权重的量化参数。而通常数据是在线输入的,因此无法准确获取数据的数值范围,通常需要一个较小的有代表性的数据集来模拟在线数据的分布,利用该数据集执行前向推理,得到对应的中间浮点结果,并根据这些浮点结果离线计算出数据的量化参数。

其原理如图1所示。

图1 训练后量化原理

量化感知训练

量化感知训练(Quantization-Aware Training,简称QAT)是指在重训练过程中引入量化,通过重训练提高模型对量化效应的能力,从而获得更高的量化模型精度的一种量化方式。量化感知训练借助用户完整训练数据集,在训练过程中引入伪量化的操作(从浮点量化到定点,再还原到浮点的操作),用来模拟前向推理时量化带来的误差,并借助训练让模型权重能更好地适应这种量化的信息损失,从而提升量化精度。

通常,量化感知训练相比训练后量化,精度损失会更小,但主要缺点是整体量化的耗时会更长;此外,量化过程需要的数据会更多,通常是完整训练数据集。

其运行原理如图2所示。

图2 量化感知训练原理

数据(activation)量化

数据量化是指根据数据的数值分布情况,将输入的数据(activation)处理到低比特。每一层的数据分布是未知且巨大的,只能在前向过程(推理或者训练)中确定,因此数据量化是基于推理或者训练过程的。

  • 训练后量化场景:通过在线量化的方式,通过修改用户推理模型,在待量化层位置插入旁路量化节点,采集待量化层输入数据,然后校准得到数据量化因子scale、offset。在推理时一般使用少量数据集,代表所有数据集的分布,简单快速。
  • 量化感知训练场景:对数据量化因子scale/offset的训练过程,正向的过程采用scale/offset对数据进行量化;反向的过程则根据反向梯度去计算更新数据量化因子scale/offset。

权重(weight)量化

权重量化是指根据权重的数值分布情况,将权重处理到低比特。

  • 训练后量化场景:通过离线量化的方式,直接从用户推理模型中读取权重数据,然后调用量化算法对权重进行量化,并将量化后数据写回到模型当中,并参与数据量化。
  • 量化感知训练场景:采用训练weights的方案,正向的过程中对原始浮点权重进行量化,然后计算得到量化的权重参与前向推理计算;反向的过程中将接收到的梯度用于更新原始浮点权重。

INT8量化

INT8量化是用8比特的INT8数据来表示32比特的FP32数据,将FP32的卷积运算过程(乘加运算)转换为INT8的卷积运算,加速运算和实现模型压缩。

测试数据集

数据集的子集,用于最终测试模型的效果。

校准

训练后量化场景中,做前向推理获取数据量化因子的过程。

校准数据集

训练后量化场景中,做前向推理使用的数据集。该数据集的分布代表着所有数据集的分布,获取校准集时应该具有代表性,推荐使用测试集的子集作为校准数据集。如果数据集不是模型匹配的数据集或者代表性不够,则根据校准集计算得到的量化因子,在全数据集上表现较差,量化损失大,量化后精度低。

训练数据集

数据集的子集,基于用户训练网络中的数据集,用于对模型进行训练。

量化因子

将浮点数量化为整数的参数,包括缩放因子(Scale),偏移量(Offset)和移位量(Shift_bit)。

将浮点数量化为整数的公式如下:

Scale

量化因子,浮点数的缩放因子,该参数又分为:

  • scale_d:数据量化scale因子,仅支持对数据进行统一量化。
  • scale_w:权重量化scale因子,支持标量(对当前层的权重进行统一量化),向量(对当前层的权重按channel_wise方式进行量化)两种模式。关于参数的更多说明请参见量化因子记录文件

Offset

量化因子,偏移量,该参数又分为:

  • offset_d:数据量化offset因子,仅支持对数据进行统一量化。
  • offset_w:权重量化offset因子,同scale_w一样支持标量和向量两种模式,且需要同scale_w维度一致。关于参数的更多说明请参见量化因子记录文件

Shift_bit

量化因子,移位量。

量化敏感度

模型在不同数据精度下,计算结果是有差异的,正常情况下,数据精度越高计算越准确,网络模型的推理结果越准确,而使用量化方法降低网络模型或者某层的数据精度后,会影响模型推理的精度,由此引入量化敏感度的概念。

量化敏感度就是评价网络模型或者可量化层受量化影响大小的方式。常见的指标有MSE(Mean Square Error,均方误差),余弦相似度,通过比较网络的输出或者某层的输出在量化前后的差异来完成。

比特复杂度

对模型中的某层来说,浮点计算量为Flops。而比特复杂度(bitops)则综合了浮点计算量和数据精度,描述在不同的数据精度下(比如,FP32/FP16/INT8/INT4),计算资源存在的差异。

具体计算方法为:,其中Flops为浮点计算量,act_bit为数据的数据精度,wts_bit为权重的数据精度。

搜索结果
找到“0”个结果

当前产品无相关内容

未找到相关内容,请尝试其他搜索词