模型量化技术
量化(Quantization)技术专注于用较少的信息表示数据,同时尽量不损失太多准确性。
具体来说,量化会将模型参数使用的数据类型,转换为更少位数表示,并尽可能达到相同信息的效果。
同时,较低的精度还可以加快推理速度,因为使用较少位进行计算所需要的时间更短。
eg:模型权重原始以32位浮点数存储(Float32)
- 如果将他们量化为16位浮点数,则可以将模型大小减半。换句话说,仅需要一半的GPU显存即可加载量化后的模型;
- 如果将模型量化为8位整数,则大约需要四分之一的显存开销;
- 如果将模型量化为4位数据类型Normal Float 4,则几乎需要八分之一的显存开销;
1、GPTQ
GPTQ:Accurate Post-Training Quantization for Generative Pre-trained Transformers是一个高效、准确的量化技术,特别适用于大规模GPT模型,能够在显著降低模型大小和计算需求的同时,保持高准确和推理速度。GPTQ算法具有以下特点:
- 专为GPT模型设计:GPTQ针对大模型GPT模型进行优化,解决了这类模型因规模庞大导致的高计算和存储成本问题;
- 一次性权重量化方法:GPTQ是一种基于近似二阶信息的权重量化方法,能够在一次处理中完成模型的量化;
- 高效率:GPTQ能在大约四个GPU小时内完成1750亿参数的GPT模型的量化;
- 低位宽量化:通过将权重位宽降至每个权重3或4位,GPTQ显著较少了模型的大小;
- 准确度保持:即便在进行显著的位宽减少后,GOTQ也能保持与未压缩模型相近的准确度,减少性能损失;
- 支持极端量化:GPTQ还可以实现更极端的量化,如2位或三元量化,同时保持合理的准确度;
- 推理速度提升:使用GPTQ量化的模型在高端GPU上实现了大约3.25倍的推理速度提升,在成本效益更高的GPU上实现了大约4.5倍速度提升;
- 适用于单GPU环境:GPTQ使得在单个GPU内执行大规模模型的生成推理成为可能,显著降低了部署这类模型的硬件要求;
GPTQ量化算法核心流程
核心步骤:使用存储在Cholesky(切尔斯基)分解中的逆Hessian(海森)信息量化连续列的块,并在步骤结束时更新剩余的权重,在每个块内递归地应用量化过程;
具体步骤如下:
- 块量化:选择一块连续的列,并将其作为当前步骤的量化目标;
- 使用Cholesky分解:利用Cholesky分解得到的逆Hessian信息来量化选定的块。Cholesky分解提供了一种数值稳定的方法来处理逆矩阵,这对维持量化过程的准确性至关重要。
- 权重更新:在每个量化步骤的最后,更新剩余的权重。这个步骤确保了整个量化过程的连贯性和精确性。
- 递归量化:在每个选定的块内部,量化过程是递归应用的。这意味着量化过程首先聚焦于一个较小的子块,然后逐步扩展到整个块。
通过这种方式,GPTQ方法能够在保持高度精度的同时,高效地处理大量的权重,这对于大型模型的量化至关重要。这种策略特别适用于处理大型、复杂的模型,如GPT系列,其中权重数量巨大,且量化过程需要特别小心以避免精度损失。
2、激活感知权重量化(Activation-aeare Weight Quantization,AWQ)
激活感知权重量化算法,其原理不是对模型中的所有权重进行量化,而是仅保留小部分(1%)对LLM性能至关重要的权重。其算法的主要特点如下:
- 低位权重量化:AWQ专为大型语言模型(LLMs)设计,支持低位(即少位数)的权重量化,有效减少模型大小。
- 重点保护显著权重:AWQ基于权重重要性不均的观察,只需要保护大约1%的显著权重,即可减少量化误差。
- 观察激活而非权重:在确定哪些权重是显著的过程中,AWQ通过观察激活分布而非权重分布来进行。
- 无需反向传播或重构:AWQ不依赖于复杂的反向传播或重构过程,因此能够更好地保持模型的泛化能力,避免对特定数据集的过拟合。
- 适用于多种模型和任务:AWQ在多种语言建模任务和领域特定基准测试中表现出色,包括指令调整的语言模型和多模态语言模型。
- 高效的推理框架:与AWQ配套的是一个为LLMs量身定做的高效推理框架,提供显著的速度提升,适用于桌面和移动GPU。
- 支持边缘设备部署:这种方法支持在内存和计算能力有限的边缘设备上部署大型模型。
量化算法对比
特征 | AWQ | GPTQ |
---|---|---|
设计目的 | 量化大型语言模型,特别强调保护显著权重,以减少量化误差 | 专为GPT模型设计,高效地完成权重量化,以减少设计和存储成本 |
量化方法 | 基于激活分布而不是权重来选择保护的权重 | 一次性权重量化,基于近似二阶信息 |
精度和效率 | 在不同模型和位精度上都表现优异,能够提高视觉语言模型的性能 | 在极低位数量化下仍能够保持合理准确度,能在短时间内量化大规模模型 |
硬件适应性 | 支持高效推理框架,适用于桌面和移动GPU | 使得在单个GPU上执行大规模模型成为可能,提高了推理速度 |
应用范围 | 适用于多种模型和任务,包括多模态语言模型 | 专门针对GPT模型,适用于高计算需求的模型 |
推理性能提升 | 提供显著的速度提升,尤其在边缘设备上表现突出 | 在高端和成本效益高的GPU上卷实现显著的推理能力提升 |
3、BitsAndBytes
BitsAndBytes(BNB)是自定义CUDA函数的轻量级包装器,特别是8比特优化器、矩阵乘法和量化函数。特征如下:
- 具有混合精度分解的8比特矩阵乘法
- LLM.int8()推理
- 8比特优化器:Adam、AdamW、RMSProp、LARS、Lion
- 稳定的嵌入层:通过更好的初始化和标准化提高稳定性
- 8比特量化:分位数、线性和动态量化
- 快速的分位数估计:比其他算法快100倍
在Transformers量化方案中,BNB是将模型量化为8位和4位的最简单选择。
- 8位量化将fp16中的异常值与int8中的异常值相乘,将非异常值转换回fp16,然后将它们相加以返回fp16中的权重。这减少了异常值对模型性能产生的降级效果。
- 4位量化进一步压缩了模型,并且通常与QLoRA一起用于微调量化LLM。