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

目录

前言

一、模型量化(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.xdnf.cn/news/1556519.html

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

相关文章

​通用代码生成器典型应用场景​

​通用代码生成器典型应用场景​ 1. 通用代码生成器简介 通用代码生成器或称动词算子式通用代码生成器,是一系列各种语言的易用的整站式代码生成器。其根本原理是把方法分解成动词算子和域对象的笛卡儿积。根据动词算子式代码生成器的基本原理。所有方法&#xff…

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

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

项目——超级马里奥——Day(2)

争取今天晚上能搞一半啊&#xff0c;啊啊啊啊&#xff0c;感觉事多的忙不过来 设计思路&#xff1a; 1&#xff09;创建并完成常量类 ------->一张图片的情况 先完成对图片的封装------>把图片加载一遍 &#xff08;老实说&#xff0c;我也不太知道为什么&#xff0…

Stable Diffusion整合包与手动本地部署结合内网穿透远程AI绘画!

前言 文章目录 前言1. 本地部署Stable Diffusion Web UI 1.1 整合包安装1.2 手动安装Stable Diffusion Web UI 2. 安装Cpolar内网穿透3. 实现公网访问Stable Diffusion Web UI4. 固定Stable Diffusion Web UI 公网地址 &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学…

六自由度机械重力补偿控制

1.动力学方程 六自由度机械臂动力学方程形式如下&#xff1a; 进行重力补偿&#xff0c;就是在驱动力矩中对重力G进行补偿&#xff0c;从而消除重力的影响&#xff0c;这样就能够在进行闭环控制的时候避免重力影响带来的大超调问题&#xff0c;使得机器人更好的实现轨迹跟踪控…

(附源码)基于springboot的“我来找房”微信小程序的设计与实现-计算机毕设 23157

基于springboot的“我来找房”微信小程序的设计与实现 摘要 随着移动互联网的快速发展&#xff0c;微信小程序作为一种轻量级的应用程序形式&#xff0c;已经成为人们日常生活的重要组成部分。为了满足广大用户在租房方面的需求&#xff0c;本文设计并实现了一个基于SpringBoot…

FredNormer: 非平稳时间序列预测的频域正则化方法

时间序列预测是一个具有挑战性的任务,尤其是在处理非平稳数据时。现有的基于正则化的方法虽然在解决分布偏移问题上取得了一定成功但仍存在局限性。这些方法主要在时间域进行操作,可能无法充分捕捉在频域中更明显的动态模式,从而导致次优的结果。 FredNormer论文的研究目的主要…

【C++】认识匿名对象

文章目录 目录 文章目录前言一、对匿名对象的解读二、匿名对象的对象类型三、匿名对象的使用总结 前言 在C中&#xff0c;匿名对象是指在没有呗命名的情况下创建的临时对象。它们通常在单个语句中执行一系列操作或调用某个函数&#xff0c;并且不需要将结果存放进变量中。 匿名…

Oracle登录报错-ORA-01017: invalid username/password;logon denied

接上文&#xff1a;Oracle创建用户报错-ORA-65096: invalid common user or role name 我以为 按照上文在PDB里创建了用户&#xff0c;我以为就可以用PLSQL远程连接了&#xff0c;远程服务器上也安装了对应版本的Oracle客户端&#xff0c;但是我想多了&#xff0c;客户只是新建…

使用Python查找WeChat和QQ的安装路径和文档路径

在日常工作和生活中&#xff0c;我们经常需要查找某些应用程序的安装位置或者它们存储文件的位置。特别是对于像WeChat&#xff08;微信&#xff09;和QQ这样的即时通讯软件&#xff0c;了解它们的文件存储位置可以帮助我们更好地管理我们的聊天记录和共享文件。今天&#xff0…

【Diffusion分割】Cold SegDiffusion:医学图像分割的扩散模型

Cold SegDiffusion: A novel diffusion model for medical image segmentation 摘要&#xff1a; 随着深度学习的发展&#xff0c;扩散模型在医学图像分割任务中表现出了卓越的性能。然而&#xff0c;传统的分割扩散模型通常采用随机高斯噪声生成分割掩膜&#xff0c;导致分割…

Java建筑行业智能化管理系统源码,PC端、手机端、大屏端源码,智慧工地管理平台源码,智慧建设平台 智慧住建平台

智慧工地平台全套源码合作 智慧工地是指运用现代信息技术&#xff0c;如物联网&#xff08;IoT&#xff09;、大数据、人工智能&#xff08;AI&#xff09;、云计算、移动互联网等&#xff0c;对传统建筑工地进行智能化改造和管理的新型工地。它通过高度集成的系统和设备&#…

NIO实现聊天室之:一切都要从网络编程的基础开始聊起!

一、写在开头 大家好,Build哥回来啦!停更了大概2个月之久,之前有段时间去写小说去了,后来又因为公司活太多,牛马干的太投入,就拉下了博客的更新,国庆节期间,难得的闲下来,准备回归老本行啦。 大致的翻看了一下之前更新的内容,已经写到了Java的IO部分,作为网络传输…

eNodeB User Manual-Introduction

eNodeB architecture ### 概述 srsENB是一个完全由软件实现的LTE eNodeB基站。它作为一个应用程序运行在标准的基于Linux的操作系统上&#xff0c;能够连接到任何LTE核心网络&#xff08;EPC&#xff09;并创建一个本地LTE小区。为了通过空气传输和接收无线电信号&#xff0c;…

深入浅出解析大模型:探索智能体(Agent)

大语言模型 vs 人类 大语言模型很强大&#xff0c;就像人类的大脑一样拥有思考的能力。如果人类只有大脑&#xff0c;没有四肢&#xff0c;没有工具&#xff0c;是没办法与世界互动的。如果我们能给大模型配备上四肢和工具呢&#xff1f;大模型是不是就会打破次元壁&#xff0…

探索Python文本处理的新境界:textwrap库揭秘

文章目录 **探索Python文本处理的新境界&#xff1a;textwrap库揭秘**一、背景介绍二、textwrap库是什么&#xff1f;三、如何安装textwrap库&#xff1f;四、简单函数使用方法4.1 wrap()4.2 fill()4.3 shorten()4.4 dedent()4.5 indent() 五、实际应用场景5.1 格式化日志输出5…

华为OD机试 - 冠亚军排名(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

网页也能跑大模型?看这一篇就够了

写在最前 本故事主要介绍在网页上部署模型的来龙去脉&#xff0c;你想问的问题&#xff0c;可能都可以在这里找到答案 在这个 AI 内容生成泛滥的时代&#xff0c;依然有一批人"傻傻"坚持原创&#xff0c;如果您能读到最后&#xff0c;还请点赞或收藏或关注支持下我呗…

ChatGPT写论文全流程揭秘:从构思到成稿!

撰写高质量的学术论文是一项复杂且耗时的任务&#xff0c;涵盖从构思到研究、撰写及最终修改的每一个步骤&#xff0c;每一步都需要大量的时间和精力。然而&#xff0c;借助ChatGPT这样的工具&#xff0c;可以有效辅助论文写作的各个阶段&#xff0c;从而提升效率和确保论文的学…

在不支持WSL2的Windows环境下安装Redis并添加环境变量的方法

如果系统版本支持 WSL 2 可跳过本教程。使用官网提供的教程即可 官网教程 查看是否支持 WSL 2 如果不支持或者觉得麻烦可以按照下面的方式安装 下载 点击打开下载地址 下载 zip 文件即可 安装 将下载的 zip 文件解压到自己想要解压的地方即可。&#xff08;注意&#x…