大模型 LLM 量化的 5 个基础技术知识
撰写本文的原因在于下载 Qwen 110B 模型时发现不同量化方案占用的内存差异巨大,旨在探究量化对推理能力的影响。
Qwen1.5-110B-Chat 的显存全精度部署 (32 位精度) 占用 220GB;8bit 量化部署需要 113GB 显存;4bit 量化部署需要 62GB 显存。
大型语言模型(LLMs)的量化是减小其大小和内存使用的关键策略,同时努力保持其质量。这种压缩技术对于在计算能力有限的设备上部署高级模型至关重要。
两种主要量化方式
量化是指将连续的无限值映射到较小的离散有限值集合的过程。在大型语言模型(LLMs)的背景下,量化是指将模型的权重从高精度数据类型转换为低精度数据类型的过程。
1. 训练后量化 (Post-Training Quantization, PTQ)
PTQ 是指将已经训练好、微调好的模型权重转换为较低精度,而无需进行重新训练。这种方法简单易行,但由于权重值的精度降低,可能会稍微影响模型的性能。
简单理解:想象你有一个已经写好的程序,现在你想让它在更简单的计算机上运行,你可以把程序中的数字变得更简单。但是,这可能会让程序稍微变得没那么好用。
大多数 LLM 使用 Auto-GPTQ(Hugging Face 库中可用)来量化,包括 Llama、Qwen 等。
pip install auto-gptq optimum
有的用户不想要官方量化版本,可以下载全参数模型,使用 Auto-GPTQ 自行量化。
GPTQ 其实也是 PTQ 的一种,但它有一些特别之处。它使用一种混合的量化方案,将模型的权重量化为 4 位整数(int4),而保留激活值(activation)为 16 位浮点数(float16)。在推理(模型使用)时,权重会被动态地转换回浮点数,然后进行实际计算。这种方法带来了接近 4 倍的内存节省和可能的速度提升,因为权重使用了更低的带宽。
之所以要保留 activation 值为 float16,是因为 activation 4bit 量化后的效果会很糟糕,而权重 4bit 量化对质量影响较小。
![量化原理示意图]
2. 量化感知训练 (Quantization-Aware Training, QAT)
与 PTQ 不同,QAT 在训练阶段或者在训练后的微调阶段(fine-tuning)就进行权重转换。这通常会带来更好的模型性能,但需要更多的计算资源。一种广泛使用的 QAT 技术是 QLoRA。
简单理解:想象你在写程序的时候,就想着怎么让它在更简单的计算机上运行。这需要你花更多时间和精力,但最后程序可能会更好用。
在用 QAT 量化大型语言模型(LLMs)时,面临主要挑战:保持零样本泛化能力(zero-shot)。
LLMs 在预训练时表现出很强的零样本泛化能力,这意味着它们能在没有见过的任务上也能表现不错。为了在量化后保持这种能力,选择合适的微调数据集很重要。如果 QAT 数据集的领域太窄或与原始预训练数据分布差异太大,可能会影响模型性能。
在《LLM-QAT: Data-Free Quantization Aware Training for Large Language Models》这篇论文中,主要引入了一种'无数据量化感知训练'(data-free QAT)方法。以 LLaMA models (7B, 13B, and 30B) 为例,这种方法使用模型自己生成的数据来进行训练。这样做可以更好地保持原始模型的输出分布,即使不使用原始训练数据也能取得很好的效果,尤其在较低位数的量化中。
LLM-QAT 量化了权重、激活值和 KV 缓存。
![QLoRA 架构示意图]
我在看这篇论文时,根据提供的图表,PTQ 和 QAT 差别也不大。
![PTQ 与 QAT 对比图]
量化模型 4 个评估标准
Perplexity(困惑度):作为评估语言模型性能的常用指标,用于衡量模型预测下一个词的不确定性。
BLEURT:基于 BERT 架构的学习型评估指标,专注于预测文本与参考材料之间的语义相似度。
ChrF:用于评估文本生成系统质量的自动评估指标,特别适用于机器翻译任务。
Frugalscore:提供快速评估文本质量的评估指标,适用于计算资源有限的环境。
METEOR:用于自然语言处理中评估机器翻译系统产生的文本质量的评估指标。
困惑度分析:不同 LLM 量化方法的平均困惑度值与未量化模型相比没有显著偏差,但 2 位 GPTQ 量化方法显示出较高的困惑度,表明可能会降低预测性能。


