大模型学习路线(5)—— 大模型压缩(量化、剪枝、蒸馏、低秩分解),推理(vllm)

目录

前言

一、模型量化(quantization)

1. 量化概念

2. 模型量化优点

3. 什么情况下应该/不应该使用模型量化

4. 落地挑战

5. 量化方法

5.1 量化训练(Quant Aware Training, QAT)

原理

伪量化节点(fake quant)

5.2 动态离线量化(Post Training Quantization Dynamic, PTQ Dynamic)

5.3 静态离线量化(Post Training Quantization static, PTQ Static)

原理

KL散度校准举例

二、参数剪枝(pruning)

1. 剪枝概念

2. 剪枝算法分类

2.1 Unstructured Pruning(非结构化剪枝 )

2.2 Structured Pruning(结构化剪枝)

3. 剪枝算法流程

3.1 训练一个模型 ->对模型进行剪枝 -> 对剪枝后模型进行微调

3.2 在模型训练过程中进行剪枝 -> 对剪枝后模型进行微调

3.3 进行剪枝  -> 从头训练剪枝后模型

4. L1-norm剪枝算法

4.1 概念

4.2 算法步骤

三、知识蒸馏(knowledge distillation)

1. 概览

2. 知识类型

2.1 Response-based

2.2 Feature-based

2.3 Relation-based

2.4 Architecture-based

3. 蒸馏算法

3.1 offline distillation

3.2 online distillation

3.3 self-distillation

4. 师生架构

四、低秩分解(low-rank factorization)

五、模型推理(以vllm为例)

1. Flash Attention

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)是对于不同输入值,其缩放因子是动态计算

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值