译者 | 李睿
审校 | 重楼
大型语言模型(LLM)应用的一大挑战是其耗费巨大的内存和计算需求,通常需要数十GB的GPU内存。这使得它们不仅昂贵而且难以运行。
为了缓解这些问题,研究人员开发了几种LLM压缩技术,其中包括“量化”。量化通过改变参数的存储方式来减少模型的误差。GPTQ就是这样一种高效快速的算法。GPTQ通过AutoGPTQ库得到了Hugging Face等流行框架的支持,并提供了一种经济有效的解决方案。以下是人们需要知道的关于用GPTQ量化LLM的事项。
什么是量化?
Transformer模型(例如LLM)通常使用16位浮点数字(fp16)存储参数。因此,运行一个有10亿个参数的模型至少需要2GB的内存,外加额外的开销资源。量化通过将这些参数转换为更小的整数格式(例如int8或int4),有效地减小了模型的大小,从而为这个问题提供了解决方案。量化算法面临的挑战是在最小化模型精度损失的同时减少模型的大小。
量化技术主要分为三大类:
- 量化感知训练(QAT):这种技术将量化集成到训练过程中。通过允许模型从一开始就学习低精度表示,QAT减少了通常与量化相关的精度损失。
- 量化感知微调(QAFT):这种方法采用预训练的高精度模型,以较低的精度权重来保持其质量。令人关注的QAFT技术包括QLoRA和参数有效和量化感知自适应(PEQA),它们都是为了在减小模型大小的同时保持模型的训练质量。
- 训练后量化(PTQ):这种方法在模型训练完成之后,将LLM的参数转换为精度较低的数据类型。PTQ的目标是在不改变其架构或不需要重新训练的情况下降低模型的复杂性。
GPTQ
GPTQ是一种训练后量化技术,使其成为非常大的模型的理想选择,在这种模型中,完全训练甚至微调的成本可能高得令人望而却步。它具有将模型量化为2位、3位或4位格式的能力,根据开发人员的特定需求提供灵活性。
GPTQ采用了一套优化技术,在保持模型准确性的同时简化了量化过程。根据研究机构发表的一些论文,与之前提出的一次性量化方法相比,GPTQ的压缩增益增加了一倍多,证明了其优越的效率。
实验结果表明,当使用像NVIDIA A100这样的高端GPU时,GPTQ可以将推理速度提高约3.25倍,当使用更经济的选项(例如NVIDIA A6000)时,GPTQ可以将推理速度提高4.5倍。
在实际比较中,具有1760亿个参数的BLOOM模型可以使用GPTQ在不到4个GPU小时内进行量化。相比之下替代量化算法OBQ需要2个GPU小时来量化小得多的BERT模型,该模型只有3.36亿个参数。
AutoGPTQ
GPTQ的创建者来自IST奥地利分布式算法和系统实验室,他们已经在GitHub上公开了代码。这种实现支持LLM的OPT和BLOOM系列。
还有其他一些将GPTQ应用于LLaMA模型的实现,包括著名的Llama.cpp模型。然而,对于范围更广的Transformer模型,AutoGPTQ库是一个可靠的选择。它与广泛使用的Hugging Face Transformers库兼容,允许开发人员将AutoGPTQ模型上传到Hugging Face,使其可供应用程序和其他开发人员访问。
Hugging Face已经拥有了几个使用AutoGPTQ量化的模型,简化了它们的部署。Hugging Face AutoGPTQ集成还支持AMD GPU和参数高效微调,包括低秩自适应(LoRA)。
开发人员可以使用Hugging Face的文本生成推理(TGI)工具包来运行AutoGPTQ模型。根据Hugging Face的说法,开发人员可以使用AutoGPTQ在一个A100-80GB的GPU上托管700亿个参数的模型,这在fp16格式的模型上是不可能的。
有关代码示例和运行AutoGPTQ的更多信息,可以参阅Hugging Face的Google Colab notebook。
原文标题:How to make your LLMs lighter with GPTQ quantization,作者:Ben Dickson