巨型语言模型的 8 位量化:LLM.int8()

大型语言模型(LLM)在自然语言处理领域取得了巨大成功,但其推理过程需要大量的 GPU 内存。本文将介绍一种针对 Transformer 架构中前馈层和注意力投影层的 8 位矩阵乘法方法,该方法可以将推理所需的内存减半,同时保持与全精度模型相同的性能。

量化困境:精度与规模的博弈

传统 8 位量化方法虽然可以减少内存占用,但往往会导致性能下降,并且需要在训练后进行额外的量化调整。这些方法主要针对参数量小于 3.5 亿的模型,对于参数量更大的模型,无损量化一直是一个挑战。

LLM.int8():突破性能瓶颈

本文提出的 LLM.int8() 方法是首个能够在不损失性能的情况下对参数量达到 1750 亿的 Transformer 模型进行 8 位量化的方案。该方法通过解决两个关键问题实现了这一突破:

  • 超越 10 亿参数规模的量化精度问题: LLM.int8() 使用了向量级量化,为矩阵乘法中的每个内积分配独立的量化归一化常数,从而提高了量化精度。
  • 系统性大值异常特征的处理: 在参数量超过 67 亿的 Transformer 模型中,会出现一些具有极大值的异常特征,这些特征会破坏量化精度。LLM.int8() 采用了一种混合精度分解方案,将这些异常特征维度分离出来,并使用 16 位矩阵乘法进行计算,而其他 99.9% 的值仍然使用 8 位矩阵乘法。

异常特征的揭秘:影响深远

研究表明,这些异常特征在 Transformer 模型中具有高度的系统性。它们虽然只占所有特征维度的 0.1%,但却对注意机制和模型的预测性能至关重要。如果将这些异常特征设置为零,模型的注意力 softmax 概率质量会下降 20% 以上,验证困惑度会增加 600-1000%。

LLM.int8() 的优势:内存节省、性能提升

LLM.int8() 方法不仅为大型语言模型的 8 位量化提供了新的思路,还使得一些原本无法在单台服务器上运行的模型,例如 OPT-175B/BLOOM,可以借助消费级 GPU 进行推理。此外,该方法还能够提升大型模型的矩阵乘法速度。

未来展望:更低精度、更广应用

尽管 LLM.int8() 方法已经取得了重大突破,但仍有一些局限性,例如:

  • 仅针对 Int8 数据类型: 未来可以研究 8 位浮点 (FP8) 数据类型,以进一步提升精度和性能。
  • 尚未研究 1750 亿参数以上的模型: 未来需要研究更大规模模型的量化方法。
  • 未对注意力机制进行 8 位量化: 未来可以研究针对注意力机制的 8 位量化方法。
  • 尚未研究训练和微调: 未来可以研究 8 位训练和微调方法。

参考文献


GitHub – TimDettmers/bitsandbytes: Accessible large language models via k-bit quantization for PyTorch.


发表评论