CANN/amct压缩概念详解
压缩概念【免费下载链接】amctAMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。项目地址: https://gitcode.com/cann/amct本节给出模型压缩过程中用到的概念并介绍了不同压缩方法的原理。量化量化是指对模型的权重weight和数据activation进行低比特处理让最终生成的网络模型更加轻量化从而达到节省网络模型存储空间、降低传输时延、提高计算效率达到性能提升与优化的目标。AMCT将量化和模型转换分开实现对模型中可量化算子的独立量化并输出量化后的模型。该模型可以在昇腾AI处理器上运行达到提升推理性能的目的。以量化到INT8数据类型为例其运行原理如下图所示。量化根据是否需要重训练分为训练后量化Post-Training Quantization简称PTQ和量化感知训练Quantization-Aware Training简称QAT概念解释如下数据类型概念HIFloat8HiF8HIFloat8HiF8是AI处理器定制的新8比特浮点数据格式由Sign位符号位表示数值的正负、Dot位、Exponet位指数位用于表示数值的范围和Mantissa位尾数为用于表示数值的有效数字组成。HiF8在IEEE 754的基础上扩增了一个点位域Dot用于动态调整阶码域位宽和尾数域位宽。其中S为HiF8符号域数值E为HiF8阶码域数值M为HiF8尾数域数值dot位为0b’0000时HiF8数据为Denormal value。转换原则如下用户可在配置文件中自行配置详情请参见config详细配置float32/bfloat16/float16的NAN转换为HiF8的NAN。float32/bfloat16/float16的INF转换为HiF8的INF符号位不变。float32/bfloat16/float16绝对值大于HiF8的可表示范围上限转换为HiF8的MAX符号位不变。float32/bfloat16/float16绝对值小于HiF8的可表示范围下限转换为HiF8的0。其他值按照舍入模式进行转换。注意HiF8或float8数据由于本身数据精度问题当原始输入数据中存在绝对值小于1.5*2^-10的数据时转换为float8的精度无法保证原始数据中存在绝对值小于1.5*10^-24的数据时转换为HiF8的精度无法保证。FLOAT8float8float8是float16的衍生物有E4M3和E5M2两种编码格式。当前仅支持E4M3编码格式。E4M3包含4比特指数、3比特尾数以及1比特符号位训练时前向传播使用。E5M2包含5比特指数、2比特尾数以及1比特符号位训练时反向传播使用。E4M3相比E5M2数据范围更小但是精度更高多用于推理场景。转换原则如下用户可在配置文件中自行配置详情请参见config详细配置float32/bfloat16/float16的NAN转换为float8的NAN。float32/bfloat16/float16绝对值大于float8的可表示范围上限转换为float8的MAX符号位不变。float32/bfloat16/float16绝对值小于float8的可表示范围下限转换为float8的0。其他值按照“Round to nearest, tie to Even”的舍入模式进行转换。MXFP8MXFP8是基于Microscaling微缩放格式的低精度8位浮点数表示方法它由scale缩放因子和element元素组成多个element共享一个scale相比传统的16位浮点数fp16或32位浮点数fp32能显著减少数据存储和传输需求减少大模型显存占用从而提升产品推理竞争力。FP8_E4M3FN是FP8数据格式的一种一种8位浮点量化格式包含4比特指数、3比特尾数以及1比特符号位FP8_E4M3FN而MXFP8比FP8多了Shared Exponent一种数据表示方法多个元素共享一个指数exponent通过微缩放技术相比FP8能够提供更高的精度和更细的量化粒度。转换原则如下用户可在配置文件中配置该类型详情请参见config详细配置float32/bfloat16/float16到float8的转换float32/bfloat16/float16的NAN转换为float8的NAN。float32/bfloat16/float16绝对值大于float8的可表示范围上限转换为float8的MAX符号位不变。float32/bfloat16/float16绝对值小于float8的可表示范围下限转换为float8的0。其余值按照“Round to nearest, tie to Even”的舍入模式(RINT)转换到FP8_E4M3FN。MXFP8数据格式转换对于torch.nn.Linear算子Weight Tensor数据按照-1轴方向每32个数据计算一个shared exponent计算公式如下MXFP4MXFP4也是基于Microscaling微缩放格式的低精度4位浮点数表示方法它由scale缩放因子和element元素组成多个element共享一个scale相比传统的16位浮点数fp16或32位浮点数fp32能显著减少数据存储和传输需求减少大模型显存占用从而提升产品推理竞争力。FP4_E2M1是FP4数据格式的一种一种4位浮点量化格式包含2比特指数、1比特尾数以及1比特符号位FP4_E2M1而MXFP4比FP4多了Shared Exponent一种数据表示方法多个元素共享一个指数exponent通过微缩放技术相比FP4能够提供更高的精度和更细的量化粒度。转换原则如下用户可在配置文件中配置该类型详情请参见config详细配置float16/bfloat16到FP4_E2M1的转换小于FP4_E2M1的数值转换到FP4_E2M1最小值大于FP4_E2M1的数值转换到FP4_E2M1最大值NAN和INF不支持转换其余值按照“Round to nearest, tie to Even”的舍入模式(RINT)转换到FP4_E2M1。MXFP4数据格式转换对于torch.nn.Linear算子Weight Tensor数据按照-1轴方向每32个数据计算一个shared exponent计算公式如下FP4_E2M1FP4_E2M1是FP4数据格式的一种一种4位浮点量化格式包含2比特指数、1比特尾数以及1比特符号位FP4_E2M1。float16/bfloat16高精度到FP4_E2M1低精度的转换原则如下用户可在配置文件中配置该类型详情请参见config详细配置小于FP4_E2M1的数据最小值转换为FP4_E2M1最小值大于FP4_E2M1的数值转换到FP4_E2M1最大值NAN和INF不支持转换其余值按照“Round to nearest, tie to Even”的舍入模式(RINT)转换到FP4_E2M1。FP4_E2M1能够表达的数值有16个分别为{±0±0.5±1±1.5±2±3±4±6}。INT8使用8比特的int8数据来表示比如32比特的float32数据将float的矩阵乘运算转换为int8的矩阵乘运算加速运算和实现模型压缩。INT4使用4比特的int4数据来表示比如32比特的float32数据。相较于int8量化int4量化可以实现更优的量化效果但可能带来更大的精度损失。总体说明HiF8相比于float8能更好的兼顾精度和动态范围而MXFP8和MXFP4可以减少大模型显存占用。MXFP8和MXFP4有专门的硬件加速单元处理量化因子速度更快。FP4_E2M1和FP4_E1M2对于均匀分布的数据建议用FP4_E1M2如果是高斯分布建议使用FP4_E2M1。训练后量化训练后量化是指在模型训练结束之后进行的量化对训练后模型中的权重由浮点数量化到低比特整数并通过少量校准数据基于推理过程对数据activation进行校准量化从而尽可能减少量化过程中的精度损失。训练后量化简单易用只需少量校准数据适用于追求高易用性和缺乏训练资源的场景。通常训练后的模型权重已经确定因此可以根据权重的数值离线计算得到权重的量化参数。而通常数据是在线输入的因此无法准确获取数据的数值范围通常需要一个较小的有代表性的数据集来模拟在线数据的分布利用该数据集执行前向推理得到对应的中间浮点结果并根据这些浮点结果离线计算出数据的量化参数。其原理如下图所示。量化感知训练量化感知训练是指在重训练过程中引入量化通过重训练提高模型对量化效应的能力从而获得更高的量化模型精度的一种量化方式。量化感知训练借助用户完整训练数据集在训练过程中引入伪量化的操作从浮点量化到定点再还原到浮点的操作用来模拟前向推理时量化带来的误差并借助训练让模型权重能更好地适应这种量化的信息损失从而提升量化精度。通常量化感知训练相比训练后量化精度损失会更小但主要缺点是整体量化的耗时会更长此外量化过程需要的数据会更多通常是完整训练数据集。 其运行原理如下图所示。 量化过程中的其他概念解释如下权重weight量化权重量化是指根据权重的数值分布情况将权重处理到低比特。激活activation量化激活量化又称为数据量化是指根据数据的数值分布情况将输入的数据activation处理到低比特。每一层的数据分布是未知且巨大的只能在前向过程推理或者训练中确定因此数据量化是基于推理或者训练过程的。校准数据集量化场景中做前向推理使用的数据集。该数据集的分布代表着所有数据集的分布获取校准集时应该具有代表性推荐使用测试集的子集作为校准数据集。如果数据集不是模型匹配的数据集或者代表性不够则根据校准集计算得到的量化因子在全数据集上表现较差量化损失大量化后精度低。量化因子将浮点数量化为整数的参数包括缩放因子scale偏移量offset。将浮点数量化为整数以INT8为例的公式如下$$ int_valclip(round(float_val/scaleoffset),-128,127) $$scale量化因子浮点数的缩放因子该参数又分为scale_d数据量化scale因子仅支持对数据进行统一量化。scale_w权重量化scale因子支持标量对当前层的权重进行统一量化、向量两种模式。offset量化因子偏移量该参数又分为offset_d数据量化offset因子仅支持对数据进行统一量化。offset_w权重量化offset因子同scale_w一样支持标量和向量两种模式且需要同scale_w维度一致。量化粒度是指对神经网络中Matmul等矩阵类算子的不同输入Tensor采用不同的量化计算级别常见的量化计算粒度包括[!NOTE]说明m、n、k变量分别表示Tensor计算的不同轴大小。左矩阵、右矩阵分别指cube算子中用于矩阵乘法计算的两个输入Tensor一般左矩阵代表激活activation、右矩阵代表权重weight请用户按实际情况理解和使用。per-channel量化简称C量化量化对象是右矩阵每个channel分别使用独立的量化参数。假设右矩阵shape为(k, n)k为reduce轴生成量化参数的shape为(n, )。per-group量化简称G量化量化对象既可以是左矩阵也可以是右矩阵AMCT仅支持右矩阵在reduce轴上对数据分组每组使用独立的量化参数。假设右矩阵shape为(k, n)k为reduce轴在k轴上分组group size为gs生成量化参数的shape为(k/gs, n)。per-tensor量化简称T量化量化对象既可以是左矩阵也可以是右矩阵每个Tensor共用一个相同的量化参数。假设左矩阵shape为(m, k)右矩阵shape为(k, n)k为reduce轴生成量化参数的shape为(1, )。per-token量化简称K量化量化对象是左矩阵每个token分别使用独立的量化参数。假设左矩阵shape为(m, k)k为reduce轴生成量化参数的shape为(m, )。稀疏稀疏是通过结构剪枝的方式对模型中的部分算子实现权重的稀疏化从而得到一个参数量更小、计算量更小的网络模型。AMCT目前有两种稀疏方式通道稀疏和4选2结构化稀疏。每次只能使能其中一种稀疏方式即对于同一层可压缩算子通道稀疏和4选2结构化稀疏不能同时配置。通道稀疏与4选2结构化稀疏相比稀疏颗粒度更大对模型的精度影响也越大但是能够获取到的性能收益也越大用户可以根据实际情况选择一种稀疏方式。通道稀疏通道稀疏基于重训练通过裁剪网络通道数在保持网络功能的前提下缩减模型参数量从而降低整网的计算量。由于通道稀疏本身是依据通道的重要性进行裁剪会裁剪掉重要性相对较低的通道但是直接裁剪通道对网络精度影响较大故裁剪后的模型需要进行重训练以保证业务精度。通道稀疏的实现通常包括两个步骤首先是通道选择需要选择合适的通道组合以保留丰富的信息然后是重建需要使用选择的通道对下一层的输出进行重建。通道稀疏原理如下图所示。4选2结构化稀疏由于硬件约束Atlas 推理系列产品、Atlas 训练系列产品、Ascend 950PR/Ascend 950DT不支持4选2结构化稀疏特性。4选2结构化稀疏基于重训练在每4个连续的权重中保留2个重要性相对较高的权重其余权重置0。因为稀疏的粒度较小因此4选2结构化稀疏可以保留较多重要信息具有细粒度稀疏的精度优势同时4选2结构化稀疏在专门设计的硬件上可以降低运算量具有结构化稀疏的性能优势。与通道稀疏不同的是4选2稀疏并不改变权重的形状因此不会影响上层或下层的算子。原理如下图所示在cin维度上相邻的4个元素为一组在每组4个元素中保留绝对值最大的两个元素如果cin不是4的倍数填0补齐到4的倍数。组合压缩组合压缩是结合了稀疏和量化的特性根据配置文件先进行稀疏然后进行量化在稀疏时根据相应算法插入稀疏算子然后量化时对稀疏后的模型插入数据和权重的量化层和SearchN的层生成组合压缩模型以期望得到更高的性能收益。生成组合压缩模型后对模型进行重训练保存为既可以进行精度仿真又可以部署的量化模型。逐层蒸馏蒸馏量化是模型压缩的一种方法利用原始模型的监督信息对量化模型进行训练以达到更好量化精度的目的。将预训练好的原始模型作为教师网络以教师网络层的输出做为目标对学生网络进行监督训练通过计算教师网络和学生网络输出预测值的损失进行梯度更新最终得到一个更高精度的量化模型。相比训练后量化知识蒸馏的量化可以取得更好的精度结果。相比量化感知训练知识蒸馏的量化不需要有标签的数据集且可以在更短的量化时间内获得不错的量化结果。张量分解深度学习运算尤其是CV计算机视觉类任务运算包含大量的卷积运算而张量分解通过分解卷积核的张量可以将一个大卷积核分解为两个小卷积核的连乘即将卷积核分解为低秩的张量从而降低存储空间和计算量降低推理开销。以1个64*64*3*3的卷积分解为32*64*3*1和64*32*1*3的级联卷积为例可以减少1 - (32*64*3*1 64*32*1*3) / 64*64*3*3 66.7%的计算量在计算结果近似的情况下带来更具性价比的性能收益。张量分解运行原理如下图所示以PyTorch框架为例。模型部署优化主要为算子融合是指通过数学等价将模型中的多个算子运算融合单算子运算以减少实际前向过程中的运算量如将卷积层和BN层融合为一个卷积层。其运行原理如下图所示以PyTorch框架为例。【免费下载链接】amctAMCT是CANN提供的昇腾AI处理器亲和的模型压缩工具仓。项目地址: https://gitcode.com/cann/amct创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2598208.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!