AI学习第二天--大模型压缩(量化、剪枝、蒸馏、低秩分解)

embedded/2025/3/19 12:21:39/

目录

1. 量化:压缩大象的“脂肪”

比喻

技术逻辑

2. 剪枝:修剪大象的“无效毛发”

比喻

技术逻辑

3. 知识蒸馏:让大象“师从巨象”

比喻

技术逻辑

4. 低秩分解:把大象“折叠成纸偶”

比喻

技术逻辑

5. 推理优化:让大象“轻装上阵奔跑”

比喻

技术逻辑

6. 综合策略:驯服大象的“四步法”

总结:大象的蜕变


1. 量化:压缩大象的“脂肪”

比喻

  • 大象的脂肪:模型参数的32位浮点数(FP32)占用大量内存和计算资源。
  • 压缩脂肪:将脂肪转化为更轻的“压缩脂肪”(如4位整数INT4),减少体积但保留功能。

技术逻辑

  • 原理:将高精度数值(如32位浮点)压缩到低精度(如8位、4位整数),通过缩放因子(scale)和零点(zero-point)映射。
  • 步骤
    1. 统计参数分布:找到参数的最小值和最大值。
    2. 量化:将浮点数映射到离散的整数区间(如INT4的-8到+7)。
    3. 量化推理时通过缩放因子恢复近似值。
  • 示例
    • 原参数:3.1415926(FP32,占32位)。
    • 量化后:5(INT4,占4位,通过缩放因子0.628还原为5×0.628≈3.14)。
  • 优势:内存减少8倍(INT4),计算加速(如GPU对低精度运算优化)。
  • 挑战:精度损失(需通过量化感知训练混合精度缓解)。

2. 剪枝:修剪大象的“无效毛发”

比喻

  • 大象的毛发:模型中冗余或不重要的参数(如权重接近0的神经元)。
  • 修剪毛发:移除无效参数,减少计算量,但保留关键功能。

技术逻辑

  • 原理:识别并删除对模型性能影响小的参数或神经元。
  • 步骤
    1. 训练模型:先用全参数训练一个“毛茸茸”的大象。
    2. 评估重要性:通过梯度、Hessian矩阵或敏感性分析判断参数重要性。
    3. 剪枝:删除不重要的参数(如权重绝对值小于阈值的)。
    4. 微调:重新训练剩余参数以恢复性能。
  • 示例
    • 原全连接层:1024×1024参数(百万级)。
    • 剪枝后:仅保留10%的参数(如稀疏矩阵),计算量减少90%。
  • 优势:减少参数量和计算量,适合内存受限场景。
  • 挑战:需平衡剪枝率与精度(过剪枝会导致性能崩溃)。

3. 知识蒸馏:让大象“师从巨象”

比喻

  • 大象与巨象:小模型(学生)向大模型(教师)学习,继承其知识,但体型更小。
  • 师徒传承:学生通过模仿教师的“软目标”(中间层输出)学习,而非仅依赖标签。

技术逻辑

  • 原理:用教师模型的输出(如概率分布)作为学生模型的额外监督信号。
  • 步骤
    1. 训练教师模型:一个大而复杂的模型(如BERT)。
    2. 提取软目标:教师模型在训练数据上的中间层输出或概率分布。
    3. 训练学生模型:学生模型同时拟合标签和教师的软目标。
  • 示例
    • 教师:BERT-base(110M参数)。
    • 学生:DistilBERT(66M参数),通过蒸馏达到接近教师的性能。
  • 优势:学生模型更小更快,同时保留教师的大部分能力。
  • 挑战:需预先训练教师模型,且需调整温度参数(如概率分布的平滑度)。

4. 低秩分解:把大象“折叠成纸偶”

比喻

  • 大象的复杂结构:模型中的大矩阵(如全连接层的权重矩阵)。
  • 折叠成纸偶:将大矩阵分解为多个小矩阵的乘积,减少参数量。

技术逻辑

  • 原理:利用矩阵的低秩性质(多数信息集中在少数特征中),将大矩阵分解为低秩矩阵。
  • 步骤
    1. 矩阵分解:将权重矩阵Wm×nWm×n​分解为Um×r×Vr×nUm×r​×Vr×n​,其中r≪min⁡(m,n)r≪min(m,n)。
    2. 参数替换:用分解后的低秩矩阵替代原矩阵。
  • 示例
    • 原矩阵:1024×4096(4M参数)。
    • 分解后:1024×128128×4096(共约700K参数,压缩6倍)。
  • 优势:减少参数量和计算量,适合矩阵乘法密集的层(如Transformer的自注意力)。
  • 挑战:需选择合适的分解秩(rr),且可能引入额外计算开销。

5. 推理优化:让大象“轻装上阵奔跑”

比喻

  • 大象的奔跑:模型在实际场景中快速、高效地运行。
  • 轻装上阵:通过压缩后的模型结构,结合硬件加速,实现低延迟和高吞吐。

技术逻辑

  • 关键策略
    1. 模型融合(Model Fusion):将连续层(如线性层+ReLU)合并,减少内存访问。
    2. 张量核心(Tensor Core):利用GPU的专用硬件加速低精度计算(如INT8/INT4)。
    3. 动态计算图:根据输入动态调整计算路径(如稀疏计算)。
    4. 模型并行:将模型拆分到多个设备(如GPU集群)并行计算。
  • 示例
    • 原模型:推理延迟500ms
    • 优化后:通过量化+剪枝+模型融合,延迟降至50ms
  • 工具
    • TensorRT(NVIDIA推理加速)。
    • ONNX Runtime(跨平台优化)。
    • DeepSpeed(分布式推理)。

6. 综合策略:驯服大象的“四步法”

  1. 第一步:量化(压缩脂肪)→ 减少内存占用。
  2. 第二步:剪枝(修剪毛发)→ 减少计算量。
  3. 第三步:蒸馏(师从巨象)→ 传承知识到小模型。
  4. 第四步:低秩分解(折叠结构)→ 简化复杂运算。
    最后:通过推理优化(轻装上阵)实现高效部署。

总结:大象的蜕变

  • 原始大象:庞大、缓慢、难以驾驭。
  • 压缩后的小象:轻盈、敏捷、功能完整。
  • 核心思想:通过去冗余剪枝)、去精度量化)、去复杂度(低秩分解)、知识传承(蒸馏),在性能和效率之间找到平衡。

http://www.ppmy.cn/embedded/173850.html

相关文章

堆排序:力扣215.数组中的第K个大元素

一、问题描述 在一个整数数组 nums 中,需要找出第 k 个最大的元素。这里要注意,我们要找的是数组排序后的第 k 个最大元素,而不是第 k 个不同的元素。例如,对于数组 [3,2,1,5,6,4],当 k 2 时,第 2 个最大…

LLVM学习-- 构建和安装

一 LLVM版本 二 适用预构建的二进制文件安装LLVM 三 适用包管理器安装LLVM 四 从源码构建用于Linux的LLVM 五 从源码构建用于Windows和Visual Studio的LLVM 六 从源码构建用于MacOS 和XCode的LLVM 1.1 LLVM项目从10年前第一次发布到版本3.4,其SVN存储库包含了超过20…

matlab 火电厂给水控制系统仿真

1、内容简介 略 matlab157-火电厂给水控制系统仿真 可以交流、咨询、答疑 2、内容说明 略 摘 要 虽然现在新能源发电领域比较火爆,但至今火力发电厂依然在我的的发电领域中拥有很重要的地位。我国虽然还是发展中国家,但是近年来GDP的增长已经处于世界…

Android Fresco 框架兼容模块源码深度剖析(六)

Android Fresco 框架兼容模块源码深度剖析 一、引言 在 Android 开发的多元环境中,兼容性是衡量一个框架优劣的重要指标。Fresco 作为一款强大的图片加载框架,其兼容模块在确保框架能在不同 Android 版本、不同设备和不同图片格式下稳定运行方面发挥着…

《TCP/IP网络编程》学习笔记 | Chapter 19:Windows 平台下线程的使用

《TCP/IP网络编程》学习笔记 | Chapter 19:Windows 平台下线程的使用 《TCP/IP网络编程》学习笔记 | Chapter 19:Windows 平台下线程的使用内核对象内核对象的定义内核对象归操作系统所有 基于 Windows 的线程创建进程与线程的关系Windows 中线程的创建方…

第29周 面试题精讲(3)

Java面试题详解 一、请介绍 MyBatis 中二级缓存的一些情况 问题:MyBatis 中二级缓存的作用和使用方法是什么? 答案: 一级缓存:默认开启,数据存储在 SqlSession 的生命周期中,SqlSession 关闭后缓存释放…

hackmyvm-Smol

信息收集 ┌──(root㉿kali)-[/home/kali] └─# arp-scan -I eth1 192.168.56.0/24 Interface: eth1, type: EN10MB, MAC: 00:0c:29:34:da:f5, IPv4: 192.168.56.103 WARNING: Cannot open MAC/Vendor file ieee-oui.txt: Permission denied WARNING: Cannot open MAC/Vendo…

【一起来学kubernetes】16、CronJob使用详解

前言核心特性架构与组件1. CronJob YAML结构2. 关键字段说明 工作原理生命周期管理1. **创建与启动**2. **查看调度状态**3. **手动触发任务**4. **清理历史记录** 典型应用场景高级用法1. **动态参数注入**2. **任务依赖**3. **超时控制** 最佳实践对比其他资源常见问题k8s的C…