Press "Enter" to skip to content

使用GPTQ进行4位量化

使用AutoGPTQ量化您自己的LLMs

作者提供的图片

最近在权重量化方面取得的进展使得我们能够在消费级硬件上运行大规模语言模型,比如在RTX 3090 GPU上运行LLaMA-30B模型。这要归功于一些新颖的4-bit量化技术,如GPTQ、GGML和NF4,它们在性能降低最小化方面表现出色。

在上一篇文章中,我们介绍了朴素的8-bit量化技术和出色的LLM.int8()。在本文中,我们将探讨流行的GPTQ算法,以了解其工作原理,并使用AutoGPTQ库来实现它。

您可以在Google Colab和GitHub上找到代码。

🧠 最佳脑量化

我们先介绍一下我们要解决的问题。对于网络中的每一层ℓ,我们希望找到原始权重Wₗ的量化版本Ŵₗ。这被称为逐层压缩问题。具体来说,为了最小化性能降低,我们希望这些新权重的输出(ŴXᵨ)尽可能接近原始权重(WXᵨ)。换句话说,我们要找到:

使用GPTQ进行4位量化 四海 第2张

已经提出了不同的方法来解决这个问题,但我们在这里关注的是最佳脑量化器(OBQ)框架。

这种方法受到了一种精心设计的方法(最佳脑外科医生)的启发,该方法从完全训练好的密集神经网络中精心删除权重。它使用了一种逼近技术,并提供了最佳单个权重w𐞥的显式公式,用于删除和调整剩余未量化权重集合F以弥补删除的损失:

使用GPTQ进行4位量化 四海 第3张

其中quant(w)是由量化给出的权重舍入,Hꟳ是Hessian矩阵。

使用OBQ,我们可以首先量化最简单的权重,然后调整所有剩余的未量化权重,以补偿这种精度损失。然后我们选择下一个要量化的权重,依此类推。

Leave a Reply

Your email address will not be published. Required fields are marked *