模型压缩技术(二),模型量化让模型“轻装上阵”

一、技术应用背景

在人工智能蓬勃发展的浪潮下,大模型在自然语言处理、计算机视觉等诸多领域大放异彩,像知名的GPT以及各类开源大语言模型,其规模与复杂度持续攀升。然而,这一发展也带来了挑战,模型越大,对计算资源和存储资源的索求便越高。

在实际应用场景中,无论是将模型部署于云端服务器,还是让其在边缘设备上运行,资源受限的问题都十分突出。比如手机、智能音箱这类边缘设备,它们的硬件计算能力和内存空间相对有限,难以承载庞大的原始模型运行。在此背景下,大模型量化技术应需而生,其核心目标就是要破解模型在资源受限环境下如何实现高效运行的难题。

二、底层原理

(一)信息的数字化表示

在计算机的世界里,数据是以二进制的形式来存储和处理的。对于大模型中的权重和激活值而言,其原始的表示形式通常为32位的浮点数(float32)。一个32位浮点数由符号位、指数位和尾数位这三部分构成,凭借这样的结构,它能够精准地呈现各种各样的实数。但这种高精度的表示方式也有弊端,那就是会占用较多的存储空间。而量化技术的关键思路,就是运用更少的比特数来对这些数据进行表示,比如把32位浮点数转化成8位整数(int8)甚至比特数更低的形式。如下图,meta-Llama-3-8B模型FP32大小为32GB,用Int8量化后为8GB。

(二)量化过程

量化的操作过程类似给数据划分"格子"。以将float32量化到int8为例来详细说明,假设原始数据的取值范围是[-1, 1],我们要做的是把这个范围映射到int8的取值范围[-128, 127]。具体步骤如下:

首先,要确定一个缩放因子(scale),比如通过公式scale = 255 / (1 - (-1)) 来计算得出。接着,将原始的float32数据乘以这个scale,并按照四舍五入的规则取最接近的整数,如此一来,这个整数就会落入int8的取值范围之中。而在进行推理运算时,还需要将int8数据再除以scale,以此还原回近似的原始值来开展后续的计算。通过这样的方式,就实现了从float32到int8的量化和反量化过程,就如同在左边的float32取值范围和右边的量化后的int8取值范围之间,搭建起了一座通过缩放因子实现映射的"桥梁"。

三、技术实现方式

(一)训练后量化(Post - Training Quantization)

这种量化方式是在模型完成训练之后才进行的操作。具体而言,先是在全精度(如float32)的条件下完成模型的训练,之后再对已经训练好的权重和激活值实施量化。其中,常见的方法是线性量化,也就是前面所提到的依据缩放因子来开展量化的方式。训练后量化具有实现起来较为简单的优势,并且不需要对模型进行重新训练,所以它很适合用于那些需要快速完成部署的场景。例如,在一些对精度要求并非特别严苛的图像分类应用场景中,直接针对训练好的模型开展训练后量化操作,能够迅速地降低模型的大小,同时也能减少推理时的计算量。

(二)量化感知训练(Quantization - Aware Training)

此方式是在模型的训练过程当中就将量化的影响纳入考虑范畴。在训练阶段,会模拟量化的实际过程,让模型从训练之时就能够适应低比特数的表示形式。详细来讲,在进行反向传播计算梯度时,会针对量化操作采取特殊的处理手段,使得模型参数在训练进程中可以适应由于量化而产生的精度损失。量化感知训练这种方法能够在一定程度上降低量化对模型精度所造成的影响,所以它比较适用于那些对精度要求相对较高的应用场景,比如医疗影像识别领域中所运用的大模型。

四、对模型的利弊影响

(一)利

  1. 显著减少存储空间:以从32位浮点数量化到8位整数为例,经过量化后,模型的存储需求能够降低大约4倍。这对于那些存储资源有限的设备,或者是在进行大规模模型部署的情况而言,无疑是大大削减了存储成本。
  2. 有效加速推理过程:低比特数的数据在进行计算时,硬件的计算效率会更高。例如,在一些能够支持int8计算的硬件加速器上,模型的推理速度能够得到显著的提升。这样一来,模型便可以更迅速地响应外界的请求,进而有效提升用户的使用体验。
  3. 切实降低能耗:由于计算量有所减少,并且硬件的计算效率也得到了提升,所以模型在运行过程中的能耗会随之降低。对于边缘设备来讲,更低的能耗就意味着能够拥有更长的电池续航时间,这在实际使用中是非常具有优势的。

(二)弊

  1. 存在精度损失风险:量化操作本质上是运用有限的离散值去近似原始的连续值,所以不可避免地会带来一定程度的精度损失。在一些对精度要求极高的任务当中,比如金融风险预测等领域,经过量化后的模型很可能无法满足相应的精度要求。
  2. 调优工作较为复杂:量化感知训练这种方式需要在训练过程中对更多的超参数进行调整,以此来平衡量化所带来的各种影响,这无疑增加了模型训练以及调优工作的复杂性。而且,不同的量化方法以及量化比特数对模型精度的影响也各不相同,所以需要开展大量的实验来筛选出最为合适的量化方案。

大模型量化技术实则是在努力寻求模型性能与资源限制之间的平衡,尽管它目前还存在一些局限性,但随着相关技术的不断发展与优化,量化技术必然会在大模型的广泛应用中发挥愈发重要的作用,从而让大模型能够在更多的场景中"轻装上阵",为人工智能的进一步普及和发展提供坚实有力的支持。大模型压缩技术还有模型蒸馏技术,可以看看。

相关推荐
Hoper.J6 个月前
从加载到对话:使用 Llama-cpp-python 本地运行量化 LLM 大模型(GGUF)
人工智能·python·llm·llama·模型量化·gguf·模型本地部署
Hoper.J6 个月前
GPTQ vs AWQ vs GGUF(GGML) 速览和 GGUF 文件命名规范
模型量化·gptq·awq·gguf·ggml
MonkeyKing_sunyuhua8 个月前
模型量化方法-GPTQ
模型量化
湫然Quin1 年前
llama.cpp 转化 huggingface 模型失败 解决路径
大模型·llama·模型量化·llama.cpp·模型转换
BQW_1 年前
【自然语言处理】【大模型】BitNet:用1-bit Transformer训练LLM
自然语言处理·llm·模型量化·bitnet·高效推理
BQW_1 年前
【自然语言处理】BitNet b1.58:1bit LLM时代
自然语言处理·llm·大语言模型·模型量化·bitnet
deephub1 年前
大语言模型量化方法对比:GPTQ、GGUF、AWQ
人工智能·深度学习·自然语言处理·大语言模型·模型量化
新缸中之脑1 年前
LLM大模型量化原理
模型量化
爱听歌的周童鞋1 年前
TensorRT量化实战课YOLOv7量化:YOLOv7-PTQ量化(一)
pytorch·模型量化·yolov7量化·quantization