目录

前言

一、模型量化(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大模型商业化落地方案

在这里插入图片描述

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

Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐