模型压缩与加速
1. 模型压缩概述
模型压缩和加速是深度学习算法中两个 密切相关的概念。共同的目标是保持模型性能的同时减少模型的复杂度(大小)和提高推理速度。
1.1 背景/问题定义
由于设备的算力和内存有限,尤其是嵌入式设备, 因此深度学习模型需要经过模型压缩后,才能部署到嵌入式设备上。
可以从3个角度定义 模型压缩问题:
- 压缩的收益:(1)计算:减少浮点运运算量;降低延迟-Latency (2)减少内存占用,提高GPU/NPU计算利用率
- 公式定义模型压缩的问题?
- 模型压缩问题的约束?
一定程度上,网络越深,参数越多,模型也会越复杂,但其最终效果也越好,而模型压缩算法旨在将一个庞大而复杂的预训练模型转化为一个精简的小模型。
1.2 模型压缩方法分类
前端压缩:指在不改变原网络结构的压缩技术。 主要包括知识蒸馏、轻量级网络(紧凑的模型结构设计)以及滤波器(filter)层面的剪枝(结构化剪枝)等;
后端压缩:指包括低秩近似、未加限制的剪枝(非结构化剪枝/稀疏)、参数量化以及二值网络等,目标在于尽可能减少模型大小,会对原始网络结构造成极大程度的改造。
1.3 模型压缩方法综述
1.3.1 压缩
1.剪枝
网络剪枝:通过去除模型中冗余或不重要的神经元、连接或通道,减小模型的规模。
结构化剪枝:与剪枝类似,但更注重模型结构的完整性,通常去除整个卷积核或神经元。
将权重低于阈值的连接都从网络中删除。
卷积层和全连接层
韩松2016年Deep Compression属于开山之作,剪枝步骤:正常训练,删除网络中权重低于阈值的连接层,重新训练。需要重新训练模型。
2.量化
将模型参数从高精度数据类型(例如浮点数)转换为低精度数据类型(例如整数),减小模型的存储空间和计算量。
指将神经网络的浮点算法转换为定点算法
卷积、全连接、激活、BN层等
TensoRT框架中的基于 KL 散度方法的INT8量化策略是主流技术。PTQ 训练后量化方法不需要重新训练模型。
3.知识蒸馏
通过将大型模型的知识迁移到小型模型中,减少模型大小同时保持性能。
属于迁移学习的一种,主要思想是将学习能力强的复杂教师模型中的“知识”迁移到简单的学生模型中。
涉及的网络层:卷积和全连接层
经典KD论文,属于蒸 “logits”方法,将Teacher Network输出的soft label作为标签来训练Student Network。必须重新训练模型。
4. 其它
稀疏性: 利用模型的稀疏性,较少计算量和存储需求
混合专家模型:通过将模型分解为多个专家网络,并在不同输入上激活不同专家,来提高模型的效率
1.3.2 加速
1. 量化
除了压缩模型,量化还可以通过减少数据类型的宽度来加速模型的推理。
OpenVINO:OpenVINO(Open Visual Inference and Neural Network Optimization)是Intel推出的一种开源工具套件,专门用于优化和部署深度学习模型,以实现高效的推理。它主要针对视觉和推理任务,为开发者提供了一整套工具和库,以加速从模型开发到部署的整个流程。
- 模型优化和压缩:OpenVINO提供了多种模型优化技术,包括量化(Quantization)、剪枝(Pruning)和混合精度计算(Mixed Precision Computing)。这些技术能够减少模型的计算和存储需求,同时提升推理性能。
2. 模型蒸馏
通过模型蒸馏技术,减少模型大小,间接提高推理速度。
3. 轻量化模型架构
模型结构优化
通过调整神经网络的架构来提高性能和效率。
轻量级网络的核心是在尽量保持精度的前提下,从体积和速度两方面对网络进行轻量化改造
涉及的网络层:卷积层/卷积模块
Mobilenet 提出深度可分离卷积;
shufflenetv2 论文 提出的四个高效网络设计的实用指导思想;
RepVGG 提出重参数化思想。
都需要重新设计 backbone 和和重新训练模型。
4. 软件框架和库优化
优化深度学习框架和库,如TensorFlow、PyTorch等,以提高执行效率
5. 硬件加速
6. 线性代数加速
通过优化基础运算,如矩阵乘法,来提高计算速度
7. 分布式计算
使用多卡推理和通信加速,提升模型的推理速度
8. FlashAttention 和 PageAttention 技术
些技术通过优化注意力机制来加速Transformer模型的推理。