目录
5.1 量化训练(Quant Aware Training, QAT)
5.2 动态离线量化(Post Training Quantization Dynamic, PTQ Dynamic)
5.3 静态离线量化(Post Training Quantization static, PTQ Static)
2.1 Unstructured Pruning(非结构化剪枝 )
3.1 训练一个模型 ->对模型进行剪枝 -> 对剪枝后模型进行微调
3.2 在模型训练过程中进行剪枝 -> 对剪枝后模型进行微调
三、知识蒸馏(knowledge distillation)
四、低秩分解(low-rank factorization)
2. Page Attention --> KV Cache
前言
一、模型压缩目标:(1)减少模型显存占用;(2)加快推理速度;(3)减少精度损失。
二、模型压缩算法分类(如何降低权重和激活成本):
(1)模型量化(quantization):旨在通过减少模型参数的表示精度来降低模型的存储空间和计算复杂度;
(2)参数剪枝(pruning):旨在通过删除模型中的不重要连接或参数来减少模型的大小和计算量;
(3)知识蒸馏(knowledge distillation):指通过构建一个轻量化的小模型,利用性能更好的大模型的监督信息,来训练这个小模型,以期达到更好的性能和精度;
(4)低秩分解(low-rank factorization):旨在通过将模型中的大型矩阵分解为低秩的子矩阵,从而减少模型参数的数量和计算复杂度。在低秩分解中,矩阵被分解为两个或多个低秩矩阵的乘积形式。
三、模型压缩通常处于机器学习模型训练和生产部署之间的阶段。它在模型训练完成后,准备将模型部署到目标环境之前进行。
本文针对第二部分量化、剪枝、蒸馏、低秩分解不同的模型压缩算法分类进行了详细分析。具体参考了ZOMI酱老师的课程:AISystem/04Inference at main · chenzomi12/AISystem (github.com),该文章是ZOMI酱老师课程的学习笔记。
一、模型量化(quantization)
1. 量化概念
模型量化是一种将神经网络的浮点算法转换为低比特定点计算的技术(也可以理解为数据映射),它主要适用于需要在资源受限的设备上部署模型的场景,如移动设备、嵌入式系统等。
2. 模型量化优点
(1)提高模型获取参数的时间;(2)参数压缩,加速模型推理时间;(3)减少内存访问开销,节省内存,减少芯片消耗面积,降低能耗。
3. 什么情况下应该/不应该使用模型量化
适用场景:(1)资源受限的环境;(2)有实时性要求;(3)能耗敏感的应用;(4)有硬件兼容性;(5)模型部署的便捷性。
不适用场景:(1)有高精度要求的任务;(2)模型仍在迭代开发;(3)缺乏量化支持的硬件;(4)对开发成本敏感的项目;(5)研究和实验阶段。
4. 落地挑战
(1)量化方法:线性量化对数据分布的描述不精确;(2)低比特——从 16 bits ->4 bits 比特数越低,精度损失越大;(3)任务:分类、检测、识别中任务越复杂,精度损失越大;(4)大小:模型越小,精度损失越大。
5. 量化方法
图1. 量化方法比较
图2. 量化方法比较
5.1 量化训练(Quant Aware Training, QAT)
原理
(1)量化训练让模型感知量化运算对模型精度带来的影响,通过 finetune 训练降低量化误差;
(2)插入伪量化节点fake quant来模拟量 化引入的误差。端测推理的时候折叠fake quant节点中的属性到tensor中,在端测推理的过程 中直接使用tensor中带有的量化属性参数。
伪量化节点(fake quant)
(1)插入伪量化节点来模拟引入的误差,得到数据的分布,找到min和max值;
(2)模拟量化到低比特操作的时候的精度损失,把该损失作用到网络模型中,传递给损失函数, 让优化器去在训练过程中对该损失值进行优化;
(3)一般会在密集计算算子、激活算子、网络输入输出等地方插入伪量化节点。
图3. 量化训练(伪量化节点插入)
5.2 动态离线量化(Post Training Quantization Dynamic, PTQ Dynamic)
图4. 动态离线量化(PTQ Dynamic)流程
(1)动态离线量化仅将模型中特定算子的权重从 FP32 类型映射成 INT8/16 类型:权重量化成INT16 类型,模型精度不受影响,模型大小为原始的1/2;权重量化成INT8 类型,模型精度会受到影响,模型大小为原始的1/4;
(2)减小模型大小,对特定加载权重费时的模型可以起到一定加速效果;
(3)是对于不同输入值,其缩放因子是动态计算