巨型语言模型的 8 位量化:LLM.int8() 2024-06-12 作者 C3P00 大型语言模型(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 位训练和微调方法。 参考文献 Dettmers, T. , Lewis, M., Belkada, Y., & Zettlemoyer, L. (2022). LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale. arXiv preprint arXiv:2208.07339.✅ GitHub – TimDettmers/bitsandbytes: Accessible large language models via k-bit quantization for PyTorch.
大型语言模型(LLM)在自然语言处理领域取得了巨大成功,但其推理过程需要大量的 GPU 内存。本文将介绍一种针对 Transformer 架构中前馈层和注意力投影层的 8 位矩阵乘法方法,该方法可以将推理所需的内存减半,同时保持与全精度模型相同的性能。
量化困境:精度与规模的博弈
传统 8 位量化方法虽然可以减少内存占用,但往往会导致性能下降,并且需要在训练后进行额外的量化调整。这些方法主要针对参数量小于 3.5 亿的模型,对于参数量更大的模型,无损量化一直是一个挑战。
LLM.int8():突破性能瓶颈
本文提出的 LLM.int8() 方法是首个能够在不损失性能的情况下对参数量达到 1750 亿的 Transformer 模型进行 8 位量化的方案。该方法通过解决两个关键问题实现了这一突破:
异常特征的揭秘:影响深远
研究表明,这些异常特征在 Transformer 模型中具有高度的系统性。它们虽然只占所有特征维度的 0.1%,但却对注意机制和模型的预测性能至关重要。如果将这些异常特征设置为零,模型的注意力 softmax 概率质量会下降 20% 以上,验证困惑度会增加 600-1000%。
LLM.int8() 的优势:内存节省、性能提升
LLM.int8() 方法不仅为大型语言模型的 8 位量化提供了新的思路,还使得一些原本无法在单台服务器上运行的模型,例如 OPT-175B/BLOOM,可以借助消费级 GPU 进行推理。此外,该方法还能够提升大型模型的矩阵乘法速度。
未来展望:更低精度、更广应用
尽管 LLM.int8() 方法已经取得了重大突破,但仍有一些局限性,例如:
参考文献
GitHub – TimDettmers/bitsandbytes: Accessible large language models via k-bit quantization for PyTorch.