当前位置: 首页 > news >正文

模型压缩(量化、剪枝、蒸馏、低秩分解)

压缩(量化、剪枝、蒸馏、低秩分解)

  • 1.模型蒸馏(Model Distillation)
  • **2. 模型剪枝(Model Pruning)**
  • **3. 模型量化(Model Quantization)**
  • 区别
  • 示例
    • 1.蒸馏(Informer论文中中蒸馏)
  • 其他
      • 模型蒸馏
      • 模型蒸馏
      • 模型剪枝
      • 模型量化
      • 应用场景
      • 总结
      • 量化

主流的模型压缩方法包括:数值量化(Data Quantization,也叫模型量化),模型稀疏化(Model sparsification,也叫模型剪枝 Model Pruning),知识蒸馏(Knowledge Distillation), 轻量化网络设计(Lightweight Network Design)和 张量分解(Tensor Decomposition)。参考:https://zhuanlan.zhihu.com/p/622519997

1.模型蒸馏(Model Distillation)

定义
模型蒸馏是一种知识迁移技术,其核心是将一个复杂、庞大的教师模型(Teacher Model)的知识迁移到一个相对简单、轻量级的学生模型(Student Model)。通过这种方式,学生模型可以在性能上接近教师模型,同时显著降低计算资源的消耗。

  • 核心思想:通过“知识迁移”将复杂模型(教师模型)的能力压缩到简单模型(学生模型)中。
  • 实现方式
    • 软标签训练:学生模型不仅学习原始数据的硬标签(如类别0/1),还学习教师模型输出的“软概率分布”(如类别0的概率为0.7,类别1为0.3)。
    • 温度参数(Temperature):通过调整温度参数软化概率分布,帮助学生模型捕捉教师模型的中间知识。
    • 损失函数设计:结合原始任务损失(如交叉熵)和教师-学生输出差异的损失(如KL散度)。
  • 优点
    • 学生模型结构可灵活设计(如更小的网络、更少的参数)。
    • 能有效保留复杂模型的泛化能力。
  • 应用场景:适用于将大型预训练模型(如BERT、GPT)压缩为轻量级模型,用于边缘设备或实时推理。

2. 模型剪枝(Model Pruning)

  • 核心思想:直接删除模型中冗余或不重要的参数(如权重、神经元、通道),以减少模型体积和计算量。
  • 实现方式
    • 结构化剪枝:删除整个卷积核、通道或层(如ResNet中的某些残差块),模型结构更紧凑,便于硬件加速。
    • 非结构化剪枝:随机删除单个权重,需依赖稀疏矩阵运算库(如CuSparse),硬件优化难度较大。
    • 步骤:训练模型→识别冗余参数→剪枝→微调恢复性能。
  • 优点
    • 直接减少模型参数量和计算量。
    • 无需额外训练数据。
  • 挑战:剪枝过度可能导致性能显著下降,需平衡压缩率与精度。

3. 模型量化(Model Quantization)

  • 核心思想:降低模型权重和激活值的数值精度(如从32位浮点数→8位整数)。
  • 实现方式
    • 动态量化:在推理时动态转换精度,无需重新训练。
    • 静态量化:基于校准数据转换精度,需离线计算。
    • 量化感知训练(QAT):在训练过程中模拟量化误差,优化模型对低精度的适应性。
  • 优点
    • 大幅减少模型体积(存储空间降低75%以上)。
    • 加速推理速度(如通过INT8指令集)。
  • 缺点:可能引入量化误差,需平衡精度与压缩率。
  • 应用场景:边缘设备(如手机、IoT设备)、硬件加速(如GPU/TPU的低精度运算)。

区别

** 三者对比**

对比维度模型蒸馏模型剪枝模型量化
核心目标知识迁移,压缩能力删除冗余参数,减小体积降低数值精度,加速计算
操作对象训练新的轻量级模型(学生模型)修改现有模型的结构或参数转换模型参数的数值表示形式
是否改变结构不改变(仅调整参数)可能改变(如剪枝通道或层)不改变(仅数值精度)
依赖条件需要教师模型和额外训练依赖已有模型和剪枝策略依赖硬件支持(如低精度运算指令)
典型应用跨架构压缩(如Transformer→CNN)特定硬件优化(如移动端部署)硬件加速与存储优化(如INT8推理)

关键区别**

对比维度模型蒸馏模型剪枝
核心目标通过知识迁移压缩模型能力通过删除冗余参数减小模型体积
操作对象训练新的轻量级模型(学生模型)修改现有模型的结构或参数
是否改变结构不改变(仅调整参数)可能改变(如剪枝通道或层)
依赖条件需要教师模型和额外训练依赖已有模型和剪枝策略
典型应用通用任务(如分类、NLP)特定硬件优化(如移动端部署)

总结

  • 模型蒸馏适合“跨架构迁移”,例如将Transformer模型压缩为CNN。
  • 模型剪枝适合“在现有模型上优化”,例如减少ResNet的通道数。
  • 根据硬件限制(如是否支持稀疏运算)和任务需求选择方法,或结合两者实现更高压缩率。

示例

1.蒸馏(Informer论文中中蒸馏)

论文:Informer: Beyond Efficient Transformer for Long Sequence Time-Series ForecastingInformer:超越高效 Transformer 的长序列时间序列预测
论文连接:https://arxiv.org/abs/2012.07436
定义
模型蒸馏是一种知识迁移技术,其核心是将一个复杂、庞大的教师模型(Teacher Model)的知识迁移到一个相对简单、轻量级的学生模型(Student Model)。通过这种方式,学生模型可以在性能上接近教师模型,同时显著降低计算资源的消耗。

文中涉及模型蒸馏,但未明确提及剪枝和量化。具体分析如下:

  1. 模型蒸馏(Distillation)
    • 相关内容
      在“自注意力蒸馏操作”(self-attention distilling)中,通过以下步骤实现模型优化(段落1-52):
      • 特征选择:利用卷积(Conv1d)和激活函数(ELU)提取主导注意力特征。
      • 维度压缩:通过最大池化(MaxPool)将输入时间维度减半,逐层减少冗余信息。
      • 金字塔结构:构建多层堆叠的编码器栈,主栈与子栈结合,增强长序列处理能力。
    • 作用:将空间复杂度从 (O(L^2)) 降至 (O((2-\epsilon) L \log L)),提升模型效率。
    • 结论:文中明确涉及模型蒸馏技术,通过内部操作优化模型结构。

其他

模型蒸馏、剪枝和量化是深度学习中三种重要的模型优化技术,它们各自有不同的应用场景和实现方式。以下是对这三种技术的详细介绍和比较:

模型蒸馏

模型蒸馏是一种知识迁移技术,其核心思想是利用一个已经训练好的复杂模型(教师模型)来指导一个较小模型(学生模型)的训练,使学生模型能够学习到教师模型的知识,从而在保持较高性能的同时,减少模型的参数量和计算量。以下是模型蒸馏的一些关键点:

  • 教师模型和学生模型:教师模型通常是性能良好但结构复杂的模型,学生模型则是结构更简单、参数更少的模型。
  • 蒸馏过程:教师模型的输出(如softmax输出的概率分布)被用作学生模型的监督信号,学生模型不仅学习数据的真实标签,还学习教师模型的输出分布。
  • 损失函数:通常会结合交叉熵损失和蒸馏损失,蒸馏损失可以是教师模型输出和学生模型输出之间的均方误差或KL散度等。
  • 蒸馏策略:根据教师模型和学生模型的架构不同,蒸馏策略也有所不同。例如,可以是不同架构之间的蒸馏,也可以是相同架构但不同参数量的模型之间的蒸馏。

模型蒸馏

模型蒸馏是一种知识迁移技术,其核心思想是利用一个已经训练好的复杂模型(教师模型)来指导一个较小模型(学生模型)的训练,使学生模型能够学习到教师模型的知识,从而在保持较高性能的同时,减少模型的参数量和计算量。以下是模型蒸馏的一些关键点:

  • 教师模型和学生模型:教师模型通常是性能良好但结构复杂的模型,学生模型则是结构更简单、参数更少的模型。
  • 蒸馏过程:教师模型的输出(如softmax输出的概率分布)被用作学生模型的监督信号,学生模型不仅学习数据的真实标签,还学习教师模型的输出分布。
  • 蒸馏方法:包括离线蒸馏、在线蒸馏、自蒸馏等。离线蒸馏是先训练教师模型,再训练学生模型;在线蒸馏是同时训练教师模型和学生模型;自蒸馏是使用模型自身的不同部分或不同阶段作为教师和学生。
  • 蒸馏策略:根据教师模型和学生模型的架构不同,蒸馏策略也有所不同。例如,可以是不同架构之间的蒸馏,也可以是相同架构但不同参数量的模型之间的蒸馏。

模型剪枝

模型剪枝是一种通过去除神经网络中冗余的参数或连接来减小模型大小和计算量的技术。剪枝的目的是在尽可能保持模型性能的同时,减少模型的存储空间和计算需求。模型剪枝主要有以下几种方法:

  • 结构化剪枝:剪枝操作会改变网络的结构,例如剪掉整个滤波器或神经元。这种方法通常不需要专门的算法支持,剪枝后的模型可以直接在现有的深度学习库上运行。
  • 非结构化剪枝:剪枝操作不会改变网络的结构,只是将某些权重设置为零,导致权重矩阵变得稀疏。这种方法需要专门的算法来支持稀疏矩阵的运算。
  • 剪枝方法:包括基于权重绝对值大小的剪枝、基于梯度的剪枝、基于重建误差的剪枝等。每种方法都有其优缺点和适用场景。
  • 剪枝后的处理:剪枝后的模型通常需要进行微调,以恢复因剪枝而可能降低的性能。微调过程中可以使用原始的训练数据或新的数据。

模型量化

模型量化是将模型参数从高精度(通常是 float32)转换为低精度(如 int8 或更低)的过程。这种技术可以显著减少模型大小、降低计算复杂度,并加快推理速度,同时尽可能保持模型的性能。模型量化的主要方法包括:

  • 动态量化:在推理时动态地将权重从 float32 量化为 int8。激活值在计算过程中保持为浮点数。适用于 RNN 和变换器等模型。
  • 静态量化:在推理之前,预先将权重从 float32 量化为 int8。在推理过程中,激活值也被量化。需要校准数据来确定激活值的量化参数。
  • 量化感知训练(QAT):在训练过程中模拟量化操作。允许模型适应量化带来的精度损失。通常能够获得比后量化更高的精度。

应用场景

  • 模型蒸馏:适用于需要在资源受限的设备上部署高性能模型的场景,如移动设备、嵌入式系统等。通过蒸馏,可以在较小的模型上实现接近教师模型的性能。
  • 模型剪枝:适用于需要减小模型大小和计算量的场景,如在边缘设备上部署深度学习模型。剪枝可以有效减少模型的存储需求和推理时间。
  • 模型量化:适用于需要进一步减少模型存储空间和计算量的场景,特别是在移动设备和嵌入式系统中。量化可以显著提高模型的推理速度,同时减少内存占用。

总结

模型蒸馏、剪枝和量化都是深度学习模型优化的重要手段。模型蒸馏通过知识迁移来减小模型规模,剪枝通过去除冗余参数来优化模型,量化通过降低参数精度来压缩模型。这三种技术可以单独使用,也可以结合使用,以达到最佳的模型优化效果。在实际应用中,可以根据具体需求选择合适的方法或组合。

量化

量化是把模型的浮点型参数转换为整形(至少是更低的 bit 数)的过程,减少显存占用。

BnB 量化建议设立阈值,将离群点和非离群点分开处理,其中离群点不进行量化,非离群点进行 8bit 量化。同时,在 4bit 量化时,支持了 nf4 格式,该格式的数值分布并不均匀(为正态分布),使数值分布更符合 LLM 参数分布。

GPTQ 使用了泰勒级数分解,使用海森矩阵评估参数重要性以及更新量化后的参数,并利用现代 GPU 的特点,进行了并行计算,使显存占用和处理速度大大增加,但是它需要量化集辅助量化。

AWQ 认为部分参数更加重要,通过激活值尺度评估了重要参数后,对这些参数按组进行了缩放,达到了减小 Loss 的效果,由于需要激活值,因此 AWQ 也需要量化集辅助量化。

HQQ 通过对零点量化的公式转换,将其分解为两个子问题分别求解,找到最优的 z,该迭代对输入无要求,因此不需要量化集。

除上面介绍的量化方法外,还有很多其他类型的量化方法,比如 AQLM、EETQ、GGUF 等

相关文章:

  • Go 语言中,关于客户端初始化的最佳实践
  • day6_FlinkSQL实战
  • [代码随想录] KMP 算法 28. 找出字符串中第一个匹配项的下标 459. 重复的子字符串
  • 力扣算法ing(42/100)
  • 向量数据库学习笔记(2) —— pgvector 用法 与 最佳实践
  • 如何将 performance_schema 中的 TIMER 字段转换为日期时间
  • 【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft 服务器搭建,并实现远程联机,详细教程
  • 基于springboot+vue的农产品电商平台
  • 【软考-架构】10.2、需求分析-获取-定义-验证-管理
  • 基于LAC拨号的L2TP VPN实验
  • stock-pandas,一个易用的talib的替代开源库。
  • Cyber Weekly #49
  • 用LLama factory时报类似Process 2504721 got signal: 1的解决方法
  • 基于javaweb的SpringBoot水果生鲜商城系统设计与实现(源码+文档+部署讲解)
  • 645.错误的集合
  • 扩散模型总结
  • resnet网络迁移到昇腾执行(OM上篇)
  • ERP、MES和CRM三大企业系统的详细介绍及对比分析
  • 生成树和VRRP实验
  • 【keil】单步调试
  • 外交部:美方应在平等、尊重和互惠的基础上同中方开展对话
  • 武汉一季度GDP为4759.41亿元,同比增长5.4%
  • 众信旅游:去年盈利1.06亿元,同比增长228.18%
  • 药明康德一季度净利增长89%,在手订单增超四成至523亿元
  • 美加征“对等关税”后,调研显示近半外贸企业将减少对美业务
  • 【社论】用生态环境法典守护生态文明