量化方法怎么选?如何评估量化后的大模型LLM?

文章内容总结自:Evaluating Quantized Large Language Models(https://arxiv.org/abs/2402.18158)

如果想深入了解量化的基本概念和如何用代码实现请参考:

Michael:用python代码深入浅出量化概念

https://zhuanlan.zhihu.com/p/696986233)

文章总结

本文都是针对PTQ(post-training quantization),如何选择和应用量化技术的建议:

  1. 评估量化对各种NLP任务的影响
  2. 评估量化对不同LLMs的影响
  3. 不同的Tensor类型对量化的影响
  4. 不同的量化方法对模型的影响

根据实验结果的几个关键见解如下:

  1. 模型越大,对仅权重和KV缓存量化的容忍度越高,而对激活量化的容忍度较低。
  2. 利用专家混合(MoE)技术增加模型大小并不一定增强模型对量化的容忍度。
  3. 对于大多数NLP任务,将大多数LLM家族量化为W4、W4A8、KV4和W8KV4,性能损失可以忽略不计(<2%)。在一定的内存预算下,使用量化到W3的较大模型可以获得更优性能。
  4. 在四种突出能力(即上下文学习、指令遵循、多步推理和自校准)中,自校准和多步推理能力对量化更敏感。对于小于13B的LLMs,推荐使用W8、W8A8和KV8量化。
  5. 对于伦理任务,小型模型对量化的敏感性更高。仅权重量化会增强模型对敏感信息的判断,而KV缓存量化则有相反的效果。
  6. LLMs在处理长文本(>4k)时,对仅权重和KV缓存量化的敏感性高于短文本(<4k),尤其是对KV缓存量化。在大多数情况下,W4、W4A8和KV8可以在长上下文任务中保持性能。
  7. 最先进的量化方法,如SmoothQuant和AWQ,在量化造成的性能损失适中时,可以有效提升性能。然而,当使用极低位宽时,AWQ和SmoothQuant无法恢复完全损坏的性能。

统计分析工具

三种张量统计方法用于分析评估结果

  1. 最大绝对值(AbsMax)显示动态范围。
  2. 标准差(Std)σ反映数据值偏离平均值的程度。较小的标准差表明张量更适合量化。
  3. 峰度(kurtosis)总结了某个张量的异常值情况,其中n是张量中的数据点数,μ是张量的平均值。高峰度表明分布具有重尾,表明异常值的可能性更高。相反,低峰度表明轻尾,表明分布中的异常值较少。

峰度公式:

=1𝑛∑𝑖=1𝑛(𝑥𝑖−𝜇𝑏)4

量化类型

三种不同类型的量化:

  1. 仅权重量化:只量化每个线性层的权重张量W。
  2. 权重-激活量化:量化每个线性层的输入激活X和权重张量W。
  3. KV缓存量化:量化每个自注意力块中的键张量K和值张量V。

为了简化,我们使用W、A和KV后跟一个正整数来表示对权重、激活和KV缓存的量化到特定位宽。例如,W4A8表示将权重量化到4位,激活量化到8位。

量化对不同LLMs的影响

  1. 当位宽高于W4、W4A8和KV4时,量化LLMs的相对排名通常与FP16LLMs的排名一致。
  2. 与增加宽度和深度不同,利用专家混合(MoE)技术增加模型大小并不一定增强模型对量化的容忍度。

图2

如图2所示,FP16Mixtral-8x7BMoE模型的性能与LLaMA2-70B相似。然而,Mixtral-8x7B对仅权重和KV缓存量化的敏感性比LLaMA2-70B更高。相反,Mixtral-8x7B对量化的敏感性更接近于同一模型家族中较小的LLaMA2-7B和Mistral-7B。

\3. OPT模型对Weight-only 和 Weight-Activation的量化非常敏感,不适合量化.

量化对不同Tensor类型的影响

  1. 模型参数越多对权重量化的容忍度越高
  2. KV cache的量化和权重量化的现象一致
  3. 模型越大对激活量化的容忍度反而越低

一般来说,在大多数任务上,大部分LLMs可以通过W4或KV4量化保持其性能。当将LLMs量化到W3或KV3时,所有模型家族中小型模型的性能都会明显下降。此外,对于W2或KV2,大多数模型都会经历显著的性能损失。

对于权重-激活量化,W4A8 LLMs代表了可以达到良好性能的前沿。W4A4量化将严重影响LLMs的效果。在具有大批量大小和长文本的实际应用中,一种常见做法是同时量化权重和KV缓存。对于短文本任务,W8KV4几乎无损失。对于长文本任务,W8KV8是更好的选择。

量化对不同任务的影响

我们没有观察到量化在不同语言中的不同影响。我们在CHID和Winogrande数据集上评估了各种量化LLMs,这些数据集分别是中文和英文的完形填空任务。尽管不同LLMs在这些任务上的表现各异,但量化引起的性能损失趋势相当相似。

  1. W4, W4A8和KV4的量化几乎不影响效果
  2. 在内存限定时,推荐使用大模型W3的量化
  3. 当模型出现饱和(效果不随模型增大而变好)建议使用小模型+高位宽的量化

不同量化方法对模型效果的影响

使用极低位宽(如W2或W4A4)时,使用最先进的量化方法将性能恢复到与FP16 LLMs相似的水平是具有挑战性的。

WQ可以提高量化LLMs的性能。此外,模型越大,其性能越接近FP16基线。然而,在W2量化的情况下,量化的LLMs完全失去了它们的能力,AWQ无法恢复损坏的性能。权重-激活量化也观察到了类似的结果。虽然SmoothQuant可以部分恢复W4A4量化的性能,但性能仍然显著低于FP16基线。

为了使极低位宽量化(如W2、W4A4和KV2)有效,需要进一步研究量化方案或量化感知训练(QAT)方法。

量化对涌现能力的影响

能力涌现包含:

  1. In-Context Learning
  2. Instruction-Following
  3. Multi-Step Reasoning:多步推理
  4. Self-Calibration:自我校准

量化对不同任务影响

结论

在四种突出能力中,多步推理和自我校准能力对量化的容忍度明显低于指令遵循和上下文学习能力,尤其是对于小型LLMs。

一般来说,对于较小的模型(<13B),W8或KV8更适合维持多步推理和自我校准能力。对于较大的模型(>13B),W4或KV4更适合维持所有四种突出能力。此外,对于大多数LLMs,W4A8不会导致显著的性能损失,但W4A4会导致所有模型完全失去突出能力。

量化对对话任务的影响

使用两轮的MT-bench评估量化后的LLMs对话的质量。我们使用GPT-4为每个生成的对话生成单一答案评分(GPT-4分数),分数范围从1到10。

对话能力对KV缓存量化的容忍度高于权重量化。大多数LLM家族可以量化为W8、W4A8和KV4,而不会造成GPT-4分数的显著损失(<0.2)。

在具体的失败模式方面,我们观察到:

  1. 使用W3和KV3量化时,大多数LLMs开始重复一些句子。
  2. 使用W2、KV2和W4A4时,大多数LLMs失去了对话能力,生成无意义的符号或重复一些单词。
  3. 只有少数LLMs,如ChatGLM3-6B、Falcon-40B和Falcon-180B,在KV2量化下仍能生成连贯的句子,尽管大多数句子缺乏有意义的内容。

在MT-Bench中,第二轮对话的GPT-4分数一致低于第一轮。然而,量化对大多数LLMs中的两轮对话没有影响。一个例外是,当将KV缓存从KV8量化到KV3时,LLaMA2-13B在第二轮对话的GPT-4分数显著下降了1.19,而第一轮对话的GPT-4分数仅下降了0.31。

对于对话任务,当使用极低的位宽,如W2或W4A4时,使用最先进的量化方法达到与FP16LLMs相似的性能水平仍然具有挑战性。

在未来,值得研究量化对超过两轮的对话的影响。量化在经过几轮对话后是否会有更显著的效果尚未可知。

量化对Long-Context任务的影响

长文本(>4k)对仅权重和KV缓存量化的敏感性高于短文本(<4k)。对于仅权重量化,长文本的性能损失显著大于短文本。图5(a)显示,当量化到W3时,Mixtral-8x7B和Vicuna-7B模型在较长文本上的准确率损失更为显著。

图5

对于权重-激活量化,量化模型在长文本上的性能退化并不比短文本大,如图5(b)所示。实际上,我们可以将大多数LLM家族量化到W4和W4A8,除了LongChat(基于LLaMA的)家族(16K),它只能被量化到W8和W8A8。

对于长上下文任务,大多数LLMs对KV缓存量化的敏感性高于仅权重量化和权重-激活量化。

在相同的位宽下,使用KV缓存量化的LLMs的性能明显低于仅权重量化的性能,如图5(a, c)所示。在LongChat(基于LLaMA的)家族中,即使是KV8量化也会导致长文本上的显著性能退化。对于Vicuna(基于LLaMA2的)和ChatGLM家族(32K),KV8量化几乎无损,而在使用KV4时长文本上的性能退化才会发生。Mistral家族显示出对KV缓存量化的最高容忍度,这与短文本不同。对于Mistral家族,KV4仍然是无损的。

量化对模型处理不同位置信息的能力的影响各不相同。

在我们的评估中,我们将含有16K令牌的长文本分为十个区间,每个区间内的信息均匀分布。如图5(d, f)所示,对于Mixtral-8x7B,仅权重和KV缓存量化对中间位置带来更显著的损失,同一模型家族中的Mistral-7B也出现了类似的结果,如附录中的图27所示。对于其他家族,在大多数情况下,量化在不同位置的效果是一致的。一个例外是图5(f)所示,其中KV4量化的Vicuna-7B在文本开头显示出更显著的效果。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

"最先掌握AI的人,将会比较晚掌握AI的人有竞争优势"。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范
  • ...

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署
  • ...

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名"AI小子"。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建
  • ...

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案
  • ...

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
相关推荐
IT古董8 分钟前
【机器学习】机器学习的基本分类-强化学习-策略梯度(Policy Gradient,PG)
人工智能·机器学习·分类
mahuifa10 分钟前
混合开发环境---使用编程AI辅助开发Qt
人工智能·vscode·qt·qtcreator·编程ai
四口鲸鱼爱吃盐11 分钟前
Pytorch | 从零构建GoogleNet对CIFAR10进行分类
人工智能·pytorch·分类
蓝天星空24 分钟前
Python调用open ai接口
人工智能·python
睡觉狂魔er25 分钟前
自动驾驶控制与规划——Project 3: LQR车辆横向控制
人工智能·机器学习·自动驾驶
scan7241 小时前
LILAC采样算法
人工智能·算法·机器学习
leaf_leaves_leaf1 小时前
win11用一条命令给anaconda环境安装GPU版本pytorch,并检查是否为GPU版本
人工智能·pytorch·python
夜雨飘零11 小时前
基于Pytorch实现的说话人日志(说话人分离)
人工智能·pytorch·python·声纹识别·说话人分离·说话人日志
爱喝热水的呀哈喽1 小时前
《机器学习》支持向量机
人工智能·决策树·机器学习
minstbe1 小时前
AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python
人工智能·python·支持向量机