大模型之大模型压缩(量化、剪枝、蒸馏、低秩分解),推理(vllm)

news2024/10/9 18:23:40

目录

前言

一、模型量化(quantization)

1. 量化概念

2. 模型量化优点

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

4. 落地挑战

5. 量化方法

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

原理

[伪量化节点(fake quant)](https://blog.csdn.net/qq_51175703/article/details/138320834?spm=1001.2014.3001.5502#伪量化节点(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. 量化方法

img

图1. 量化方法比较

img

图2. 量化方法比较

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

(1)量化训练让模型感知量化运算对模型精度带来的影响,通过 finetune 训练降低量化误差;

(2)插入伪量化节点fake quant来模拟量 化引入的误差。端测推理的时候折叠fake quant节点中的属性到tensor中,在端测推理的过程 中直接使用tensor中带有的量化属性参数。

伪量化节点(fake quant)

(1)插入伪量化节点来模拟引入的误差,得到数据的分布,找到min和max值;

(2)模拟量化到低比特操作的时候的精度损失,把该损失作用到网络模型中,传递给损失函数, 让优化器去在训练过程中对该损失值进行优化;

(3)一般会在密集计算算子、激活算子、网络输入输出等地方插入伪量化节点。

img

图3. 量化训练(伪量化节点插入)

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

img

图4. 动态离线量化(PTQ Dynamic)流程

(1)动态离线量化仅将模型中特定算子的权重从 FP32 类型映射成 INT8/16 类型:权重量化成INT16 类型,模型精度不受影响,模型大小为原始的1/2;权重量化成INT8 类型,模型精度会受到影响,模型大小为原始的1/4;

(2)减小模型大小,对特定加载权重费时的模型可以起到一定加速效果;

(3)是对于不同输入值,其缩放因子是动态计算 ,因此动态量化是几种量化方法中性能最差的。

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

img

图5. 静态离线量化(PTQ Static)流程

原理

(1)静态离线量化使用少量无标签校准数据,核心是计算量化比例因子,量化模型的缩放因子会根据输入数据的分布进行调整;

(2)静态离线量化的目标是求取量化比例因子,主要通过对称量化、非对称量化方式来求,而找最 大值或者阈值的方法又有MinMax、KL、ADMM、EQ等方法。

KL散度校准举例

img

图6. KL散度校准原理

算法收集激活Act直方图,并生成一组具有不同阈值的8位表示法,选择具有最少[kl 散度](https://so.csdn.net/so/search?q=kl 散度&spm=1001.2101.3001.7020)的表示;此时的 KL 散度在参考分布(FP32激活)和量化分布之间(即8位量化激活)之间。

img

图7. KL散度校准流程


二、参数剪枝(pruning)

1. 剪枝概念

  • 模型量化是指通过减少权重表示或激活所需的比特数来压缩模型;
  • 模型剪枝研究模型权重中的冗余,并尝试删除/修剪冗余和非关键的权重。

img

图8. 模型剪枝

2. 剪枝算法分类

2.1 Unstructured Pruning(非结构化剪枝 )

方法:随机对独立权重或者神经元链接进行剪枝;
优:剪枝算法简单,模型压缩比高;
缺:精度不可控,剪枝后权重矩阵稀疏,没有专用硬件难以实现压缩和加速的效果。

2.2 Structured Pruning(结构化剪枝)

方法:对filter / channel / layer 进行剪枝;

优:大部分算法在 channel 或者 layer 上进行剪枝,保留原始卷积结构,不需要专用硬件来实现;缺:剪枝算法相对复杂。

img

图9. 剪枝算法分类(左:非结构化剪枝 ,右:结构化剪枝)

3. 剪枝算法流程

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

img

图10

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

img

图11

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

img

图12

4. L1-norm剪枝算法

4.1 概念

使用 Ll-norm 标准来衡量卷积核的重要性,L1-norm 是一个很好的选择卷积核的方法,认为如果一个filter的绝对值和比较小,说明该fiter并不重要。论文指出对剪枝后的网络结构从头训练要比对重新训练剪枝后的网络。

4.2 算法步骤

img

图13


三、知识蒸馏(knowledge distillation)

(Reference:AISystem/04Inference/03Slim/06.distillation.md at main · chenzomi12/AISystem (github.com))

1. 概览

知识蒸馏算法由三部分组成,分别是知识(Knowledge)、蒸馏算法(Distillation algorithm)、师生架构(Teacher-student architecture)。一般的师生架构如下图所示:

img

图14

通常,教师网络会比学生网络大,通过知识蒸馏的方法将教师网络的知识转移到学生网络,因此,蒸馏学习可以用于压缩模型,将大模型变成小模型。另外,知识蒸馏的过程需要数据集,这个数据集可以是用于教师模型预训练的数据集,也可以是额外的数据集。

2. 知识类型

知识的类型可以分为四类,主要有 Response-based、Feature-based、Relation-based 三种,而 Architecture-based 类型很少。

img

图15

2.1 Response-based

当知识蒸馏对这部分知识进行转移时,学生模型直接学习教师模型输出层的特征。通俗的说法就是老师充分学习知识后,直接将结论告诉学生。

img

图16

2.2 Feature-based

上面一种方法学习目标非常直接,学生模型直接学习教师模型的最后预测结果。考虑到深度神经网络善于学习不同层级的特征,教师模型的中间层的特征激活也可以作为学生模型的学习目标,对 Response-based knowledge 形成补充。下面是 Feature-based knowledge 的知识迁移过程。

img

图17

虽然基于特征的知识转移为学生模型的学习提供了更多信息,但由于学生模型和教师模型的结构不一定相同,如何从教师模型中选择哪一层特征激活(提示层),从学生模型中选择哪一层(引导层)模仿教师模型的特征激活,是一个需要探究的问题。另外,当提示层和引导层大小存在差异时,如何正确匹配教师与学生的特征表示也需要进一步探究,目前还没有成熟的方案。

2.3 Relation-based

上述两种方法都使用了教师模型中特定网络层中特征的输出,而基于关系的知识进一步探索了各网络层输出之间的关系或样本之间的关系。例如将教师模型中两层 feature maps 之间的 Gram 矩阵(网络层输出之间的关系)作为知识,或者将样本在教师模型上的特征表示的概率分布(样本之间的关系)作为知识。

img

图18

2.4 Architecture-based

3. 蒸馏算法

知识蒸馏的方式一般分为三种:offline distillation;online distillation;self-distillation。

img

图19

3.1 offline distillation

这种方法是大部分知识蒸馏算法采用的方法,主要包含两个过程:1)蒸馏前教师模型预训练;2)蒸馏算法迁移知识。因此该方法主要侧重于知识迁移部分。教师模型通常参数量大,训练时间比较长,一些大模型会通过这种方式得到小模型,比如 BERT 通过蒸馏学习得到 tinyBERT。但这种方法的缺点学生模型非常依赖教师模型

3.2 online distillation

这种方法要求教师模型和学生模型同时更新,主要针对参数量大、精度性能好的教师模型不可获得情况。而现有的方法往往难以获得在线环境下参数量大、精度性能好的教师模型。

3.3 self-distillation

是 online distillation 的一种特例,教师模型和学生模型采用相同的网络模型。

总结:用学习过程比喻,offline distillation 是知识渊博的老师向学生传授知识;online distillation 是老师和学生一起学习、共同进步;self-distillation 是学生自学成才。

4. 师生架构


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

写累了,不干了,看以下精选的还不错的blog吧:

link 1:深度学习模型压缩与加速技术(三):低秩分解-CSDN博客

link 2:模型压缩之模型分解篇:SVD分解,CP分解和Tucker分解 - 知乎 (zhihu.com)


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

1. Flash Attention

精选链接:‍⁡⁣‬⁢‬‬⁡⁤‬⁡⁡⁣⁡⁤‍‬‍‌‌⁡⁡‍‍‬⁤⁢⁡⁤⁡‍‌⁡‍⁤‍⁤FlashAttention: 更快训练更长上下文的GPT - 飞书云文档 (feishu.cn)

img

2. Page Attention --> KV Cache

精选链接1:PagedAttention论文解读 - 李理的博客 (fancyerii.github.io)

精选链接2:PagedAttention(vLLM):更快地推理你的GPT - 飞书云文档 (feishu.cn)

img

最后如果您也对AI大模型感兴趣想学习却苦于没有方向👀
小编给自己收藏整理好的学习资料分享出来给大家💖
👉获取方式:

😝有需要的小伙伴,可以保存图片到wx扫描二v码关注免费领取【保证100%免费】🆓

在这里插入图片描述

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

👉如何学习AI大模型?👈

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
在这里插入图片描述

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
在这里插入图片描述

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
在这里插入图片描述

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。
在这里插入图片描述

四、AI大模型商业化落地方案

在这里插入图片描述

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2195735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

241007深度学习之LeNet

目录 1.LeNet介绍2.组成3.代码实现 1.LeNet介绍 LeNet是最早发布的卷积神经网络之一,他是由AT&T贝尔实验室的研究员Yann LeCun在1989年提出的(并且以其命名),目的是识别图像中手写数字.当时,Yann LeCun发表了第一篇通过反向传播成功训练卷积神经网络的研究论文,这项工作代…

macOS Sequoia 15.0.1 (24A348) 正式版 ISO、IPSW、PKG 下载

macOS Sequoia 15.0.1 (24A348) 正式版 ISO、IPSW、PKG 下载 iPhone 镜像、Safari 浏览器重大更新和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接:https://sysin.org/blog/macOS-Sequoia/ 查看最新版。原创作品,转载请保留…

Qt源码-Qt多媒体音频框架

Qt 多媒体音频框架 一、概述二、音频设计1. ALSA 基础2. Qt 音频类1. 接口实现2. alsa 插件实现 一、概述 环境详细Qt版本Qt 5.15操作系统Deepin v23代码工具Visual Code源码https://github.com/qt/qtmultimedia/tree/5.15 这里记录一下在Linux下Qt 的 Qt Multimedia 模块的设…

性能测试学习6:jmeter安装与基本配置/元件/线程组介绍

一.JDK安装 官网:https://www.oracle.com/ 二.Jmeter安装 官网:http://jmeter.apache.org/download_jmeter.cgi 下载zip包,zip后缀那个才是Windows系统的jmeter 三.Jmeter工作目录介绍 四.Jmeter功能 1)修改默认配置-汉化 2&am…

51 单片机最小系统

一、51 单片机最小系统概述 51 单片机最小系统是一个基于 51 单片机的最小化电路系统,它包含了使单片机能够正常工作的最少元件。这个系统主要用于学习和实验目的,帮助学习者在没有复杂电路的情况下快速了解 51 单片机的工作原理,其重要性不…

TryHackMe 第7天 | Web Fundamentals (二)

继续介绍一些 Web hacking 相关的漏洞。 IDOR IDOR (Insecure direct object reference),不安全的对象直接引用,这是一种访问控制漏洞。 当 Web 服务器接收到用户提供的输入来检索对象时 (包括文件、数据、文档),如果对用户输入数据过于信…

【可视化大屏】Python Flask框架介绍

为了能显示真实数据,使用flask快速搭建了一个web应用,然后连接数据库,读取数据库里的数据来进行大屏可视化显示(btw:数据是从车主之家网站上爬虫爬的) 家人们!记得使用专业版的pycharm&#xf…

在忘记密码的情况下重新访问手机?5种忘记密码解锁Android手机的方法

无需密码即可访问Android手机。 即使你忘记了密码,你也可以解锁你的Android手机,但你通常需要将手机恢复出厂设置。 您可以通过执行出厂恢复或使用“查找我的设备”网站解锁大多数Android手机。 如果你不再有密码,这里有五种解锁安卓手机的…

sqli-labs less-17密码重置报错注入

密码重置报错植入 来到首页面我们看到页面提示【password reset】,说明这是更改密码的注入,也就是说我们知道一个账户名,修改他的密码,所以我们可以在passwd处进行注入。 闭合方式 添加单引号 有报错 可以知道闭合方式为单引号…

【JavaEE】——初始网络原理

阿华代码,不是逆风,就是我疯 你们的点赞收藏是我前进最大的动力!! 希望本文内容能够帮助到你!! 目录 一:局域网 1:概念 二:局域网的连接方式 1:网线直连 …

Qt实现Halcon窗口显示当前图片坐标

一、前言 Halcon加载图片的窗口,不仅能放大和缩小图片,还可以按住Ctrl键显示鼠标下的灰度值,这种方式很方便我们分析缺陷的灰度和对比度。 二、实现方式 ① 创建显示坐标和灰度的widget窗口 下图的是widget部件,使用了4个label控…

前端如何让页面上的文字“立”起来

前言 最近看到了一个很有意思的 CSS 效果,如下图,是一个文字立起来 阴影 的效果,觉得比较有意思,所以分享给大家~ 实现 基础样式 首先我们把基础的文字和样式编写出来,代码如下 效果如下: 伪元素 ->…

香橙派如何连接网络,及wiringOP库

1.使用nmcli dev wifi命令扫描周围的 WiFi热点 2.找到需要连接的WiFi 输入nmcli dev wifi connect wifi_name password wifi_passwd 其中wifi_name是你的WiFi名字&#xff0c;wifi_passwd是WiFi的密码 3.wiringOP库 包含#include <wiringPi.h> 首先使用wiringPiSet…

[OS] 再探Kernel Threads -2

内核线程&#xff08;Kernel Thread&#xff09;创建和执行机制&#xff1a; 在 Linux 内核中&#xff0c;内核线程&#xff08;kthread&#xff09; 是一种特殊类型的线程&#xff0c;专门用于执行内核任务。与用户态的进程和线程不同&#xff0c;内核线程不具有用户空间&…

计算机的错误计算(一百一十六)

摘要 计算机的错误计算&#xff08;一百一十&#xff09;分析了&#xff08;二&#xff09;中例1循环迭代错误计算的原因。应读者建议&#xff0c;本节将用错数讨论其例2的错误计算原因。 例1. 已知 计算 在 的错数&#xff0c;并用实例分析计算过程中的错误数字数量。…

leetcode-哈希篇1

leetcode-217 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,1] 输出&#xff1a;true 解释&#xff1a; 元素 1 在下标…

电脑操作技巧:如何恢复永久删除的婚礼照片

我们的生活充满了褪色和模糊的快照&#xff0c;是我们记忆的剪贴簿。尽管我们很想记住事情并坚持快乐的回忆&#xff0c;但随着时间的推移&#xff0c;它们会被冲走。为了避免这种情况并记住这些记忆&#xff0c;我们以照片的形式捕捉瞬间。这有助于缓解和分享那些快乐的时刻。…

C语言编译与链接(29)

文章目录 前言一、翻译环境和执行环境二、翻译环境预处理(预编译)编译词法分析语法分析语义分析 汇编链接 三、运行环境总结 前言 本篇同样是一篇修炼内功的文章   很重要&#xff01;它将会让你对程序的构建运行有一个更深的认识 一、翻译环境和执行环境 在ANSI C的任何一种…

[uni-app]小兔鲜-08云开发

uniCloud可以通过JS开发服务端,包含云数据库, 云函数, 云存储等功能, uniCloud可结合 uni-ui 组件库使用 效果展示: <picker>城市选择组件不支持h5端和APP端, 所以我们使用 <uni-data-picker>组件进行兼容处理 <uni-data-picker>的数据使用云数据库的数据 云…

指针(7)

目录 1. sizeof和strlen的对⽐ 1.1 sizeof 1.2 strlen sizeof 和 strlen 总结&#xff1a; 2. 数组和指针 2.1 ⼀维数组 2.2 字符数组 1. sizeof和strlen的对⽐ 1.1 sizeof 计算的是使⽤类型创建的变量所占内存空间的⼤⼩。sizeof不在乎你里面放的什么。sizieof是操作符…