模型压缩概览
1. 引言
ChatGPT的一声炮响,不仅带来了新一轮的AI革命,还证明了一条定律——Scaling Law。它告诉我们,随着参数规模、训练数据和计算资源的增加,模型的性能也会提高。这意味着,想要让AI更聪明、更能干,我们就得让它的体型变得更大。
然而,动辄数十亿到千亿万亿的参数规模,带来了性能提升的同时,也带来了计算资源和成本的惊人消耗,GPU硬件的发展速度已经跟不上模型参数的增长速度。结果就是,训练和推理过程变得越来越吃力,令很多企业和个人望而却步。
在这种情况下,模型压缩技术就成了一个关键的解决方案。简单来讲,就是在不牺牲或尽量少牺牲性能的前提下,给臃肿的大模型瘦身,以便让这些庞然大物能够在普通硬件上运行。
本文我们将会对相关技术进行一个大概的讨论,形成一个对模型压缩的基本认识。
2. 相关方法
具体来讲,模型压缩技术主要有以下几种方法:
- 剪枝
- 量化
- 神经网络架构搜索
- 蒸馏
2.1 模型剪枝
有研究表明,模型中的神经元会存在两种冗余情况:
- 部分神经元会“坍缩成”功能类似的神经元,共同负责相似的功能;
- 还有部分神经元则被忽视,并没有成为具体某类功能的承担者;
这些神经元显然是冗余的,而模型剪枝的主要思想
就是:将功能类似的神经元用一个神经元等效代替,并从模型中删除不必要的连接和神经元,让模型变得更紧凑,运行更快,同时剪枝后的模型仍然保持较高的准确性。
按照修剪的对象不同,模型剪枝可以分为几种粒度:
- 权重连接级别:不规则,属于非结构化剪枝,需要专门的硬件配合;
- 向量级别:剪掉的参数是一个连续的向量,有了一定的规则;
- 卷积核级别:当某些卷积核对最终输出贡献小时,可以删除部分卷积核;
- 通道级别:彩色图像一般有红、绿、蓝三通道,通道级别剪枝是指删除一个颜色(如蓝色)的整个通道。
卷积核级别和通道级别属于结构化剪枝,两者都比较规则,不需要专门的硬件,现代通用的硬件就能够实现。
模型剪枝并不是一个新概念,神经网络中dropout从技术上讲就是一种剪枝操作,并且被证明很有效。
2.2 量化
上面的剪枝是针对模型结构中的冗余作压缩,量化则是针对模型参数的精度作压缩。它通过将高精度(例如32位浮点数)转化为低精度(例如8位)来降低内存及计算资源的占用,从而有效缩小模型的体积。
可以量化的对象包括:
- 输入/特征:输入给模型的数据,可以是图像、文本、音频等;
- 权重/偏置:神经网络中的参数,决定了输入对输出的影响程度;
- 损失:模型预测与真实标签之间差距的度量,决定了如何优化模型性能;
- 梯度:模型训练过程中参数更新的方向和幅度,决定了如何优化模型性能;
根据量化位宽可以分为:
- 单比特,二值网络;
- 8比特:整型网络;
- 16比特:半精度浮点数float16;
- 混合bit: 混合精度,不同层的位宽不同;
- 其它比特:3/4/5/6比特
2.3 神经网络架构搜索
前面的剪枝和量化,都是针对已有模型的已有网络架构,那从零开始时如何得到这个最适合的网络架构呢?通常我们要尝试不同的网络结构,有的用更大的卷积层,有的用更大的全连接层,这每种组合都需要手动调整和验证。
神经网络架构搜索(Neural Architecture Search,简称 NAS)的目标是自动化寻找和设计最优的神经网络架构,人类只需要定义一个搜索空间,这应该是所有可能的网络架构的集合,然后让计算机来试错,自动生成和测试多种网络架构,找到性能最好的一个。
- 搜索空间可以包括不同类型的层(如卷积层、全连接层等)、不同的层参数(激活函数、卷积核大小)等,然后选择随机搜索或强化学习策略来探索这个空间。
- 搜索过程中需要对每个网络架构进行训练和评估,并使用验证集来检查其性能,根据它们在特定任务上的表现,选择性能最好网络架构。
2.4 蒸馏
知识蒸馏
(Knowledge Distillation),是一种将教师模型的知识迁移到学生模型的技术。教师模型的知识面更宽,通常为大模型,学生知识面较窄,通常为小模型。
通过让学生模型来学习教师模型的行为模式,减少模型大小和计算成本的同时,也保留了教师模型的性能。蒸馏过程中旨在将知识提炼成更紧凑、高效的形式,以便部署在资源受限的边缘设备上。
3. 评估指标
不论采用哪种压缩技术,都需要减小模型体积的同时,还要尽量保持模型的性能,因此需要一些指标来评估模型的压缩效果。
模型大小:压缩后模型文件所占用的存储空间,较小的模型更易于部署在移动终端等边缘计算设备上,这是衡量压缩效果最直观的指标。
推理速度:指模型在给定输入上的推理时间,通常以毫秒(ms)为单位。实现更快的推理速度,对于实时应用至关重要。
准确率:指模型在特定任务(如图像分类)中的预测准确率,用于检测模型压缩时是否造成了模型性能的下降,不论采用哪种压缩技术,平衡压缩程度和模型性能都至关重要。
乘累加操作(MACs):一个乘法和一个累加被视为一次乘累加,对应的是前向传播过程中的一次向量点积运算。模型一次前向传播所需的乘累加操作总数可以用来衡量模型的计算量,监控此指标可以帮助判断优化效果是否显著。
FLOPs: 模型完成一次前向推理所需的浮点运算次数,适用于剪枝和量化技术,FLOPs减少意味着更少的计算资源消耗和更优的执行性能。
内存占用:模型在推理和训练过程中所需的内存大小,降低内存占用对于资源有限的边缘计算设备尤为重要。
吞吐量:指模型在单位时间内能够处理的输入样本数量,直接反映了模型在实际应用中的并发处理能力,可以通过监测吞吐量指标来优化系统效率,达到资源的最佳利用。
参考资料
原文地址:https://blog.csdn.net/xiaojia1001/article/details/143724799
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!