解读大语言模型量化

在今日这个由数据驱动的时代,人工智能技术的快速发展正不断拓展着社会和技术的边界。随着大语言模型应用的深入人心,我们对大语言模型的部署和效率提出了更高的要求。这就面临着一个不可避免的挑战,如何在有限的计算资源和能源消耗下实现复杂模型的高效运行?量化技术是解决这一挑战的关键技术之一,本文带您深入了解模型量化技术,分析各种模型量化方法。

什么是量化

在深度学习领域,量化通常指的是将模型参数(如权重和偏置)从浮点数转换为较低位精度的整数,比如将 32 位浮点数转换为 8 位整数。

通俗地说,量化类似于将用高级词汇写成的晦涩书籍简化为内容摘要或加工为儿童故事。这个内容摘要或儿童故事占用的存储空间更小,更易于传播,但可能会丢失一些原书的细节。

量化的目的

量化的主要目的如下:

  • 减少存储需求:对原始模型进行量化可以显著减小尺寸,更易于部署在存储资源有限的设备上,如移动设备或嵌入式系统。
  • 加速计算:计算机对于整数运算通常比浮点运算更快,特别是在没有专门的浮点硬件支持的设备上。
  • 减少能耗:计算量相似的情况下,在一些硬件上,整数运算消耗的能源较少。

通过用较低精度表示原始浮点数,可能会丢失一些信息,导致模型精度下降,这意味着模型的能力会降低。为了平衡这种精度损失,研究人员开发了各种量化策略和技术,例如动态量化和权重共享等等,以尽量减少模型能力的损失,同时降低模型的要求。

例如,如果一个模型的完整能力为 100 分,推理时的大小和内存需求为 100%。经过量化后,模型的能力可能会降低到 90 分,但其大小和内存需求可能会降至 50%,这就是模型量化的意义。

量化精度

精度类型

FP32、FP16、INT8 和 INT4 是深度学习模型中使用的不同数值精度类型,这些精度类型决定了模型在训练和推理过程中可以处理的数据范围和精度。

FP32(32位浮点数)

FP32 是最常用的数值精度类型,也称为单精度浮点数。FP32 可以表示非常大和非常小的数值,并且具有很高的精度。在深度学习模型中,FP32通常用于训练阶段,因为它可以提供更高的数值稳定性和精度。然而,使用FP32也会增加模型的计算和存储需求,从而降低模型的性能和效率。

FP16(16位浮点数)

FP16 也称为半精度浮点数。FP16 相比 FP32 具有较小的数值范围和精度,但它可以减少模型的计算和存储需求,提高模型的性能和效率。在现代 GPU 和 TPU 等硬件设备上,FP16 通常具有更高的计算速度和能效比。因此,在深度学习模型推理阶段,通常会使用 FP16 以获得更快的速度和更高的能效。

INT8(8位整数)

INT8 是一种低精度数值类型,它使用 8 位来表示整数。INT8 可以进一步减少模型的计算和存储需求,提高模型的性能和效率。在深度学习模型推理阶段,INT8 通常用于量化技术,将模型的权重和激活从 FP32 或 FP16 转换为 INT8,从而减少模型的计算和存储需求,提高模型的性能和效率。然而,INT8 的数值范围和精度较低,可能会导致模型的数值稳定性降低,因此需要仔细选择量化策略和校准方法。

INT4(4位整数)

INT4 是一种非常低精度的数值类型,使用 4 位来表示整数。与 INT8 相比,INT4 可以进一步减少模型的计算和存储需求,提高模型的性能和效率。然而,INT4 的数值范围和精度非常有限,可能会导致模型的数值稳定性严重降低。因此,INT4 通常只适用于特定的模型和场景,需要仔细选择和使用。

精度说明

模型的相关信息可以通过 HuggingFace 平台查看,HuggingFace 是一个面向自然语言处理(NLP)领域的开发者和研究人员的平台,它提供了各种预训练的自然语言处理模型和工具,以其开源社区和丰富的 NLP 资源而闻名。

在 HuggingFace 上,如果模型名称没有特定的标签,比如 Llama-2-7bchatglm3-6b ,通常表示这些模型是全精度 (fp32) 或半精度 (fp16)。

然而,如果模型名称包含 FP16INT8INT4 等描述,比如 Llama-2-7B-fp16chatglm-6b-int8chatglm2-6b-int4 等,这意味着这些模型是量化的。在这里, fp16int8int4 表示模型的量化精度。

精度差异

精度从高到低的顺序是: FP32 > FP16 > INT8 > INT4 。量化精度越低,模型大小和推理所需的内存就越小,但相应模型的能力也越弱。

ChatGLM2-6B 为例。该模型的全精度(FP32)版本大小为 12G,推理所需内存约为 12-13G。然而,量化的 INT4 版本仅为 3.7G,推理所需内存降至 5G。可以看出,量化显著减少了模型大小和内存需求。

FP32FP16 精度模型需要在 GPU 服务器上运行,而 INT8INT4 精度模型可以在 CPU 上运行。

不同精度的数值类型在深度学习模型中具有不同的优势和限制,选择合适的数值精度类型需要根据模型的实际需求和硬件设备的支持情况进行权衡。通常,训练阶段使用 FP32 或 FP16,推理阶段使用FP16 或 INT8,而在特定情况下可以考虑使用 INT4。

量化方法

GPTQ

GPTQ 是一种模型量化方法,可以将大语言模型量化为 INT8、INT4、INT3 甚至 INT2 精度,而性能损失较小。如果在 HuggingFace 上看到带有 GPTQ 标签的模型名称,比如 Llama-2-13B-chat-GPTQ ,这意味着这些模型已经使用GPTQ进行了量化。完整精度版本的 Llama-2-13B-chat 大小为 26G,但使用 GPTQ 进行 INT4 精度量化后,大小减小到 7.26G。

现在更受欢迎的 GPTQ 量化工具是 AutoGPTQ,它可以量化任何 Transformer 模型。HuggingFace 已经将 AutoGPTQ 集成到 Transformers 中。GPTQ 方法只对模型权重进行量化。而针对大语言模型的量化,存在其他的方法,提供了以较小的预测质量损失为代价,同时量化权重和激活值的方案。

AWQ

激活感知权重量化(AWQ)算法,其原理不是对模型中的所有权重进行量化,而是仅保留小部分(1%)对 LLM 性能至关重要的权重。

AWQ 专为大型语言模型设计,支持低位的权重量化,有效减少模型大小。在确定哪些权重是显著的过程中,AWQ 通过观察激活分布而非权重分布来进行。AWQ 不依赖于复杂的反向传播或重构过程,因此能够更好地保持模型的泛化能力,避免对特定数据集的过拟合。AWQ 在多种语言建模任务和领域特定基准测试中表现出色,包括指令调整的语言模型和多模态语言模型。这种方法支持在内存和计算能力有限的边缘设备(如 NVIDIA Jetson Orin 64GB)上部署大型模型,如 Llama-2-70B 模型。

AWQ vs GPTQ

特征算法 AWQ GPTQ
设计目的 量化大语言模型,特别强调保护显著权重,以减少量化误差。 专为GPT模型设计,高效地完成权重量化,以减少计算和存储成本。
量化方法 基于激活分布而不是权重来选择保护的权重。 一次性权重量化,基于近似二阶信息。
精度和效率 在不同模型和位精度上都表现优异,能够提高视觉语言模型的性能。 在极低位数量化(如2位)下仍保持合理准确度,能在短时间内量化大规模模型。
硬件适应性 支持高效推理框架,适用于桌面和移动GPU。 使得在单个GPU上执行大规模模型成为可能,提高了推理速度。
应用范围 适用于多种模型和任务,包括多模态语言模型。 专门针对GPT模型,适用于高计算需求的模型。
推理性能提升 提供显著的速度提升,尤其在边缘设备上表现突出。 在高端和成本效益高的GPU上均实现显著的推理速度提升。

GGML

在讨论GGML之前,需要提到 llama-cpp 项目,这是 Llama 模型的纯 C/C++ 版本,主要优势是在 CPU 上快速推理,而无需GPU。作者随后从该项目中提取了模型量化部分,创建了一个模型量化工具 GGML。

在 HuggingFace 上,如果看到带有 GGML 标签的模型名称,比如 Llama-2-13B-chat-GGML ,这意味着这些模型已经使用 GGML 进行量化。一些GGML模型还包括像 q4q4_0q5 等术语,比如 Chinese-Llama-2-7b-ggml-q4 。这里的 q4 指的是 GGML 量化方法,从 q4_0 一直延伸到 q4_0q4_1q5_0q5_1以及 q8_0,相关数据如下。

Model Measure F16 Q4_0 Q4_1 Q5_0 Q5_1 Q8_0
7B perplexity 5.9066 6.1565 6.0912 5.9862 5.9481 5.9070
7B file size 13.0G 3.5G 3.9G 4.3G 4.7G 6.7G
7B ms/tok @ 4th 127 55 54 76 83 72
7B ms/tok @ 8th 122 43 45 52 56 67
7B bits/weight 16.0 4.5 5.0 5.5 6.0 8.5
13B perplexity 5.2543 5.3860 5.3608 5.2856 5.2706 5.2548
13B file size 25.0G 6.8G 7.6G 8.3G 9.1G 13G
13B ms/tok @ 4th - 103 105 148 160 131
13B ms/tok @ 8th - 73 82 98 105 128
13B bits/weight 16.0 4.5 5.0 5.5 6.0 8.5

GPTQ vs GGML

  • GPTQ 在 GPU 上运行速度更快,而 GGML 在 CPU 上更快。
  • 对于相同精度的量化模型,GGML 模型比 GPTQ 模型稍微大一些,但它们的推理性能大致相当。
  • 两者都可以在 HuggingFace 上对 Transformer 模型进行量化。

结语

本文结合 HuggingFace 举例,总结了大语言模型的常见量化格式,量化技术是大模型部署的关键方法,可以显著减小模型的大小和推理所需的内存。如果要真正将大模型融入普通人的生活,能够在每个人的智能手机上运行并实现真正的"无处不在",量化技术是必不可少的。量化技术的进步,不仅仅是对效率的追求,更是对可持续发展和技术普及的深刻思考。在未来,随着技术的不断进步和创新,我们期待大模型为人类社会带来更广泛、更深远的影响。

相关推荐
神秘的土鸡6 分钟前
神经网络图像隐写术:用AI隐藏信息的艺术
人工智能·深度学习·神经网络
数据分析能量站7 分钟前
神经网络-LeNet
人工智能·深度学习·神经网络·机器学习
Jaly_W16 分钟前
用于航空发动机故障诊断的深度分层排序网络
人工智能·深度学习·故障诊断·航空发动机
小嗷犬18 分钟前
【论文笔记】Cross-lingual few-shot sign language recognition
论文阅读·人工智能·多模态·少样本·手语翻译
夜幕龙25 分钟前
iDP3复现代码数据预处理全流程(二)——vis_dataset.py
人工智能·python·机器人
吃个糖糖42 分钟前
36 Opencv SURF 关键点检测
人工智能·opencv·计算机视觉
AI慧聚堂1 小时前
自动化 + 人工智能:投标行业的未来是什么样的?
运维·人工智能·自动化
盛世隐者1 小时前
【pytorch】循环神经网络
人工智能·pytorch
cdut_suye1 小时前
Linux工具使用指南:从apt管理、gcc编译到makefile构建与gdb调试
java·linux·运维·服务器·c++·人工智能·python
开发者每周简报1 小时前
微软的AI转型故事
人工智能·microsoft