深入解析大模型量化技术(一) - 量化初探

171 阅读2分钟

现状

在当前的LLM应用场景下,模型的内存占用推理耗时在产品落地过程中都面临极大的挑战。

量化作为一种能够同时优化空间复杂度、时间复杂度的技术,通常被优先考虑。

背景知识

1、量化:本质是一个离散化的过程。在深度学习中,也被叫做模型的低精度表示。量化过程是从一种数据类型,round到另一种数据类型的过程。

2、数值表示,权重的数值存储形式通常是浮点数(floting point number,或简称为floats):一个带有小数点的正数或负数。这些值由每一位(bit)上的二进制数字表示。

image.png

3、一个80亿参数量的模型,如果用32位全精度来加载,需要28GB,如果用半精度浮点来表示,只需要14GB。

对称量化

1、对称量化,零点直接映射 image.png 2、取tensor.abs().max(),按零点直接映射。

  • scale = 2**(bits-1) / tensor.abs().max()

image.png

3、float32到int8的线性映射

image.png

非对称量化

1、非对称量化,又名零点量化。普通对称量化可以作为非对称量化的一个特殊解。

image.png

scale = 2**bits / (tensor.max()-tensor.min())
zero_point = round(-tensor.min()scale)-2*(bits-1)

离群点优化

1、离群点,脱离一般值,导致正常值量化失效 image.png

2、裁剪,限制量化范围到[5,-5] image.png

3、校准 步骤2中,手动限制量化范围到[5,5]。实际情况下,我们几乎不可能直接手动去限制几十亿参数的范围,所以需要一个校准的过程。
权重和偏置可以视为静态值,因为它们在运行模型之前是已知的。 对于已知的静态权重,选择范围的校准技术包括:
1)手动选择输入范围的百分位数
2)最小化原始值和量化值之间的均方误差(MSE)
3)最小化原始值和量化值之间的熵(KL散度)