作者/机构: Andrey Kuzmin, Mart Van Baalen, Yuwei Ren, Markus Nagel, Jorn Peters, Tijmen Blankevoort, Qualcomm AI Research

A1 主要贡献

本文深入研究了在神经网络推理中使用低比特浮点数(FP)格式的潜在优势,特别是与广泛使用的整数(INT)格式相比。研究的核心问题是,浮点格式通过将部分比特分配给指数,提供了一个额外的自由度,这对于处理数据分布中的离群点可能更有利。

研究目标与创新点:

  1. 理论分析与实践验证的结合:论文从三个层面系统地研究了量化格式的影响:

    • 分析层面:针对几种常见的数据和权重分布(如均匀分布、高斯分布、学生t分布),从理论上分析了INT8与不同配置的FP8格式(如5M2E, 4M3E等)的预期量化误差,揭示了指数位数与数据分布(特别是离群点)之间的关系。
    • 训练后量化(PTQ)层面:在多种真实世界的神经网络(涵盖图像分类、语言理解、语义分割等任务)上进行了广泛的PTQ实验,验证了理论分析的结论。
    • 量化感知训练(QAT)层面:进一步探索了在QAT场景下,不同格式的表现,并观察到训练过程本身可以缓解格式之间的差异。
  2. 新颖高效的FP8模拟方法:提出了一种新颖的浮点量化模拟实现方法。该方法不仅能快速进行PTQ和QAT实验,更重要的是,它使得FP8格式的关键参数(如指数偏置、尾数与指数的比特分配)可以被学习。这为自动优化FP8格式提供了可能,避免了手动调整。

  3. 对FP8格式选择的深刻洞见

    • 核心结论:在PTQ场景下,对于广泛的神经网络,FP8格式在准确性上优于INT8。
    • 指数位数的选择:最佳的指数位数由网络中离群点的严重程度决定。离群点越严重,需要的指数位数越多,以提供更大的动态范围。
    • QAT的影响:在QAT中,由于网络会通过训练来适应量化,减少离群点的影响,FP8相对于INT8的优势会减小。

下图直观地展示了FP格式与INT格式在表示能力上的区别。FP格式在值较大时精度较低,但动态范围更广,而这正是其处理离群点的优势所在。


图 1: 左图:无符号INT4量化与两种不同偏置的无符号FP4 2M2E量化的比较。非规格化范围用叉号标记,规格化范围用圆圈标记。与均匀量化相比,FP量化具有更大的动态范围,但对于较大的值精度较低。右图:8位有符号整数和不同8位有符号浮点格式可表示值的直方图。直方图的箱体采用对数间隔,以显示不同格式在动态范围(即箱体数量)和精度(即每个箱体的值数量)之间的关系。FP8格式允许更大动态范围的值,但以牺牲精度为代价。直观地说,为每个分布更改(浮点)偏置值会将这些直方图向左或向右移动,而不改变其形状。

A3 背景知识与设计原则

2.1 整数(Integer)量化

量化过程。量化通常用于实现高效的整数矩阵乘法,以替代昂贵的32位浮点(FP32)乘法。一个矩阵 $X \in R^{m \times n}$ 被量化为一个整数矩阵 $X^{(\text{int})}$ 和一个相关的缩放因子 $s$,其过程如下:$X^{(\text{int})} = \text{clip}(\lfloor \frac{X}{s} \rceil, x_{\text{min}}, x_{\text{max}})$,其中 $\lfloor \cdot \rceil$ 表示四舍五入到最近整数的操作,而 $\text{clip}(\cdot, \cdot, \cdot)$ 是逐元素的裁剪操作,确保 $X^{(\text{int})}$ 可以在所选的位宽内表示【索引34,A white paper on neural network quantization+2021+ArXiv】。

反量化与矩阵乘法。反量化操作则产生一个矩阵 $X^{(q)}$,它是输入矩阵 $X$ 的量化近似:$X^{(q)} = sX^{(\text{int})} \approx X$。这使得可以使用高效的整数矩阵乘法【索引34,A white paper on neural network quantization+2021+ArXiv】。对于另一个矩阵 $Y \in R^{n \times k}$,其乘积可以近似计算如下:

2.2 浮点数(Floating point)系统

浮点数定义。一个浮点数集合 $F \subset R$ 的元素定义如下:

其中 $s \in \{0, 1\}$ 是符号位, $d_i \in \{0, 1\}$ 是m位尾数,$p \in Z; 0 \le p < 2^e$ 是e位指数,而 $b$ 是一个整数指数偏置,通常定义为 $2^{e-1}$。

精度与动态范围的权衡。浮点数可以看作是在两个连续的2的整数次幂 $2^a, 2^{a+1}$ 之间的一个包含m位精度的均匀网格。在这个区间 $[2^a, 2^{a+1}]$ 内,网格点之间的距离是 $2^{a-m}$。因此,增加尾数位数 $m$ 会增加每个区间 $[2^a, 2^{a+1}]$ 内的网格点数量,即提高精度。而浮点数系统能够表示的区间 $[2^a, 2^{a+1}]$ 的数量,则由指数位数 $e$ 决定。增加指数位数 $e$ 会增加可表示值的动态范围(即最大非零值与最小非零值之比)。任何固定位宽的浮点数系统都必须在可表示值的动态范围(由 $e$ 决定)和精度(由 $m$ 决定)之间做出权衡。例如,IEEE-754标准的32位“全精度”浮点数(FP32)使用1个符号位、23个尾数位和8个指数位。与整数格式相比,浮点格式在接近零时具有更高的精度,因为对于较小的 $a$ 值,区间 $[2^a, 2^{a+1}]$ 会更小,而在远离零时精度较低。这在图1的左图中有所展示。直观上,浮点数更适合于像高斯分布这样在0附近密度更高的峰态分布,也更适合于像学生t分布这样具有长尾和离群点的分布。图1的右图展示了各种FP8格式的值分布情况。


图 2: (左)不同量化网格的舍入误差:FP8(4位指数)、FP8(3位指数)、INT8。(中)由第一列的概率密度函数加权的舍入误差。(右)FP8格式下零均值高斯分布的指数偏置消融实验。我们考虑了该格式的三个版本:固定偏置为$2^{e-1}$的格式、整数偏置、FP32缩放。

非规格化数。需要注意的是,上述定义不允许表示0。为了能够表示0,指数值 $p = 0$ 被保留用于表示非规格化数(subnormal numbers)。在这种情况下,指数值被隐式地设置为1,并且 $f = (-1)^s 2^{1-b} (0 + \frac{d_1}{2} + \frac{d_2}{2^2} + \dots + \frac{d_m}{2^m})$。除了允许精确表示0之外,非规格化数还允许平滑地表示接近0的值。图1直观地解释了这一点。在第4节中,我们展示了类似于INT8的(反)量化操作。

2.3 假设与扩展

本文的设定。在这项工作中,我们做出了一些假设并考虑了标准浮点格式的几种扩展。我们假设指数偏置 $b$ 不局限于 $2^{e-1}$ 这个值。相反,我们引入了一个(per-tensor或per-channel的)量化缩放因子 $\gamma$,类似于整数量化中使用的缩放因子【索引34,A white paper on neural network quantization+2021+ArXiv; 26, Quantizing deep convolutional networks for efficient inference: A whitepaper+2018+ArXiv】。由于8位浮点格式没有标准的尾数和指数比特分配,我们考虑了多种分配方式,因为我们假设在较低的浮点位宽下,精度和动态范围之间的权衡选择将产生更大的影响。我们使用符号xMyE来表示一个具有x位尾数和y位指数的格式。具体来说,我们考虑了5M2E、4M3E、3M4E和2M5E这几种格式。

3 预期量化误差

分析基础。在本节中,我们对FP8和INT8格式进行分析性研究,并表明当存在离群点时,具有更多指数位的格式表现更好。这一理论结果为比较这两种格式奠定了基础,并能预测何时应使用FP8格式以及应使用多少指数位。

分析方法。我们研究了对从几种有代表性的分布中抽取的值进行量化所引起的误差,并以预期的均方误差(MSE)作为衡量标准,因为已有研究表明它能很好地指示神经网络的最终损失【索引33,Up or down? Adaptive rounding for post-training quantization+2020+ICML】。

3.1 预期量化误差

量化误差定义。给定一个量化网格 $\alpha = \{\alpha_1, \alpha_2, \dots, \alpha_k\}$,我们可以定义量化操作 $Q_\alpha(w)$ 和相应的量化误差 $R_\alpha(w)$:

图2(左)展示了3M4E、4M3E和INT8格式的舍入误差函数示例。我们将神经网络的权重建模为随机变量 $W \sim p_w(w)$。量化均方误差(MSE)的期望值可以表示如下:

其中 $\alpha_{\text{min}} = \min_i \alpha_i$ 和 $\alpha_{\text{max}} = \max_i \alpha_i$ 是量化范围的边界。第一项对应于舍入误差,而其余两项对应于裁剪误差。我们将使用这个公式来分析计算不同分布的量化误差。这是通过将积分分割成对应于量化网格每个点的子区间来实现的。我们在附录A.1中提供了此过程的更多细节。图2(中)给出了由概率密度加权的舍入误差函数的一个例子。


图 3: (左) 不同分布和格式(包括Lloyd-Max非均匀量化器【索引30,Least squares quantization in pcm+1982+IEEE transactions on information theory; 32,Quantizing for minimum distortion+1960+IRE Transactions on Information Theory】)的量化预期信噪比(SQNR)。学生t分布在[-100, 100]处被裁剪以避免无限误差。(中) 标量积的预期SQNR。(右) ResNet18一个层的预期SQNR。

3.2 标量积量化误差

误差模型。现在我们可以为量化标量积的预期输出误差建模,这是全连接层和卷积层基本构建块。为了对激活值进行建模,我们引入一个随机变量 $X \sim p_x(x)$ 和相应的量化网格 $\beta = \{\beta_1, \beta_2, \dots, \beta_k\}, \beta_i \in R$。在计算 $X$ 和 $W$ 的标量积时,我们只考虑由输入量化引起的误差,因为由输出 $Y$ 量化引起的误差与前一节描述的输入量化误差是相同的。我们将输出张量表示为 $Y = WX$,其量化版本为 $Y_Q$。量化误差 $\Delta Y$ 可以表示为:

误差期望。样本均值 $\Delta Y^2$ 对应于两个向量 $W \in R^n$ 和 $X \in R^n$ 之间标量积的平均误差,其中 $W_i \sim p_w(w)$ 和 $X_i \sim p_x(x)$ 分别是权重和激活的样本:

计算不同分布和量化网格的 $E(\Delta Y^2)$ 使我们能够分析它们在实际场景中的工作方式。在许多情况下,预期的输出MSE可以由以下对 $W$ 和 $X$ 的舍入误差的加权和来近似:

我们看到输出误差主要取决于输入的量化误差和输入分布的离散程度。我们在附录A.2中描述了计算 $E(\Delta Y^2)$ 的完整过程和进一步的分析。

分析结论。我们使用这些公式来分析计算几种分布的量化误差,包括均匀分布、高斯分布和学生t分布。后者本质上是一个比高斯分布尾部更重的分布,使我们能够模拟当引入离群点时会发生什么。正确选择FP8格式中的偏置项非常重要。我们在图2(右)中看到,将偏置设置为 $2^{e-1}$ 的标准固定格式可能会失效。这种情况发生在值被过度裁剪,或者因为可表示范围太大而没有充分利用网格点。我们还看到,使用整数偏置比使用浮点偏置效果更差。这与INT8量化中发生的情况类似,正确设置缩放参数可以对网络性能产生巨大影响【索引34,A white paper on neural network quantization+2021+ArXiv】。由于偏置会移动动态范围,这种效应对具有高指数位的FP8格式(其动态范围本身就很大)影响较小。对于指数位较少的格式,最好使用逐通道的偏置/缩放参数,类似于逐通道量化中所做的那样【索引26,Quantizing deep convolutional networks for efficient inference: A whitepaper+2018+ArXiv】。第5.2节为此提供了进一步的理由。

不同格式的比较。我们还分析了不同尾数和指数位数设置的影响。结果呈现在图3中。我们观察到一个清晰的模式。对于均匀分布,INT8格式表现最佳。对于高斯分布,具有2个指数位的格式(5M2E)表现最佳。然后,当通过减少学生t分布的自由度来增加相对离群点时,最佳格式趋向于具有更多的指数位。在神经网络中,大多数权重和激活可以相对较好地用高斯分布来建模。因此,基于这一分析,我们预计5M2E格式对于大多数行为良好、离群点少的层效果最好。特别是在权重中,离群点不常见,因为权重通常会受到显式或隐式的正则化【索引45,Understanding deep learning (still) requires rethinking generalization+2021+Communications of the ACM】。例如,我们考虑一个在ImageNet上预训练的Resnet18模型的一个层。我们对权重和激活样本拟合高斯分布,并在图3(右)中分析计算了预期MSE。我们看到,在这种情况下,5M2E格式效果最好。更详细的逐层研究见附录B.1。

对离群点的预测。然而,分布中的离群点越强,具有更高位数指数的FP8格式就越能帮助其量化表示。因此,我们预测对于具有严重离群点的网络,像4M3E这样的格式会表现得更好。我们将在第5节中展示这些预测在真实网络中成立,并且像Transformer这样已知具有较大激活离群点的网络,从更多的指数位中获益最多。

A2 方法细节

在前一节中,我们的分析表明,理论上FP8量化可以比INT8量化产生更好的张量重建均方误差(MSE),但关键在于仔细选择指数和尾数之间的比特分配,以及指数偏置的值。我们研究了这些发现是否可以推广到神经网络的FP8量化。为此,我们需要一个高效的FP8量化模拟方法。常用于FP8量化的方法要么太慢,例如最近网格点搜索或位掩码【索引22,All-you-can-fit 8-bit flexible floating-point format for accurate and memory-efficient inference of deep neural networks+2021】;要么太复杂,例如自定义CUDA核【索引40,Hybrid 8-bit floating point (hfp8) training and inference for deep neural networks+2019+NeurIPS】,不适合快速实验。本节我们介绍一种新颖的FP8量化模拟方法。该方法可以轻松地在常见的深度学习框架中实现。此方法的另一个好处是,它暴露了FP8量化器的参数(即尾数/指数的位数和指数偏置),从而允许这些参数通过反向传播进行学习。

4.1 FP8模拟量化公式

基于统一量化网格联合的FP8模拟。在我们的FP8量化器中,我们利用了这样一个事实:FP8量化可以看作是连续的2的整数次幂 $[2^{p-b}, 2^{p+1-b}]$ 之间m位均匀量化网格的并集。这意味着我们可以使用与2.1节中描述的模拟均匀量化相同的方法来模拟输入向量x的FP8量化,区别在于x中的每个元素 $x_i$ 都有其自己关联的缩放因子 $s_i$:

其中 $x^{(q)}_i$ 表示 $x_i$ 被量化为浮点数。

尺度和裁剪的实现细节。缩放因子 $s_i$ 取决于尾数位数 $m$ 和 $x_i$ 所在的范围 $[2^{p-b}, 2^{p+1-b})$。它由 $\log_2 s_i = p_i = \lfloor\log_2|x_i|\rfloor - m$ 给出。为了确保在给定的 $m, e$ 和 $b$ 的情况下可以表示 $x^{(q)}_i$,需要对 $x^{(q)}_i$ 和 $s_i$ 进行裁剪。大于最大值 $c$ 或小于 $-c$ 的 $x^{(q)}_i$ 值分别被裁剪为 $c$ 和 $-c$,其中 $c = (2 - 2^{-m})2^{2^e-b-1}$ 是给定浮点格式可表示的最大值。由于 $2^{1-b-m}$ 是可表示的最小值,小于 $1 - b - m$ 的 $p_i$ 值被裁剪为 $1 - b - m$。

与标准量化操作的等价性。请注意,只要公式8中的舍入模式与公式3中对等距于$F$中两个数的数字的平局决胜程序相匹配,这种方法就与公式3中定义的量化操作是等价的。直观解释见图4。


图 4: FP8量化器的图形化描述。

引入全局缩放因子。如果缩放因子 $\gamma \ne 1$,这需要在 $p_i$ 中反映出来。为了容纳这个缩放因子,我们首先将其折叠到一个重新参数化的偏置值 $\tilde{b} = b - \log_2 \gamma$ 中。然后我们按如下方式计算 $p_i$:

4.2 使用FP8进行量化感知训练

QAT的修改。为了使用这个量化器进行量化感知训练(QAT),我们需要做一些改动。首先,为了让梯度能够流经量化器的每一步,我们对不可微的舍入操作的梯度使用直通估计器(STE)。其次,我们发现学习最大裁剪值 $c$ 而不是 $\tilde{b}$ 可以提高训练稳定性。$\tilde{b}$ 可以从 $c$ 中计算得出:$\tilde{b} = 2^e - \log_2 c - \log_2(2 - 2^{-m}) - 1$。最后,我们将 $\lfloor\log_2|x_i|\rfloor + \tilde{b}$ 视为一个不接收梯度的常数。这可以防止该操作相对于 $x_i$ 的(有时是极大的)梯度向后传播。这样做的结果是,$x$ 接收到整个量化过程的“直通”梯度,即 $\frac{\partial}{\partial x} F(x_i, m, c) = 1$,其中 $F(\cdot, \cdot, \cdot)$ 表示FP8量化器。

4.3 玩具实验:在常见分布上学习最小MSE

验证参数学习能力的玩具实验。为了研究我们的量化器是否确实可以学习最大值 $c$ 和尾数位数 $m$,我们进行了一个玩具实验。我们从正态分布 $N(0, 1)$ 中采样 $10^5$ 个值,并用3M4E和一个偏置8来初始化一个FP8量化器,这对应于最大值 $c = 240$。然后我们使用SGD来学习能够最小化重构损失的 $c$ 和 $m$ 的值:$L(M, c) = \frac{1}{N} \sum_i (x_i - F(x_i, m, c))^2$。经过500次迭代后,$c$ 收敛到4.35,而 $m$ 在5.5左右振荡。这种振荡行为可以解释为,通过增加 $m$ 来提高精度可以进一步最小化MSE,但是将 $m$ 增加到6会得到一个均匀量化器,这反而导致更高的MSE。在均匀量化中也观察到了类似的行为【索引35,Overcoming oscillations in quantization-aware training+2022+arXiv】。线性搜索表明,确实是 $m=5$ 和 $c=4.37$ 在目标数据上最小化了MSE,这意味着我们的算法在这个例子中找到了最优值。详情见图5。


图 5: 左图:目标数据的直方图,以及初始格式(3M4E)和学习后的格式(5M2E)可表示值的直方图。右图:最大值和尾数位数的演变过程。大约350次迭代后,尾数位数开始在5.5的值附近振荡。

A4 实验

实验环境

模型与数据集
* 图像分类 (ImageNet): ResNet18【索引19,Deep residual learning for image recognition+2016+CVPR】, MobileNetV2【索引38,Mobilenetv2: Inverted residuals and linear bottlenecks+2018+CVPR】, ViT【索引14,An image is worth 16x16 words: Transformers for image recognition at scale+2020】
* 语言理解 (GLUE): BERT-base【索引12,Bert: Pre-training of deep bidirectional transformers for language understanding+2018】
* 语义分割 (Cityscapes): HRNet【索引39,Deep high-resolution representation learning for human pose estimation+2019+CVPR】
* 语义分割 (Pascal VOC): DeepLabV3【索引7,Rethinking atrous convolution for semantic image segmentation+2017】
* LIDAR点云分割 (SemanticKITTI): SalsaNext【索引11,Salsanext: Fast, uncertainty-aware semantic segmentation of lidar point clouds for autonomous driving+2020】

基线设置
* 对比基线: INT8量化。
* 预处理: 不进行批量归一化(batch normalization)折叠,但在最终验证前重新估计批量归一化统计量(运行均值和方差),因为这对所有模型都有提升。
* 范围估计: 对权重和激活分别考虑了多种范围估计方法,并对权重使用了逐通道(per-channel)和逐张量(per-tensor)的范围估计。报告的结果是最佳配置组合下的结果。

软硬件配置
* 硬件: NVIDIA Tesla V100 和 A100 GPUs。
* 软件: 代码使用PyTorch实现。

实验结果

Post-training quantization (PTQ) 结果

实验设置
本节比较了使用INT8和FP8进行PTQ的效果。为了公平比较,除了5.1节中描述的方法外,没有使用任何先进的PTQ改进技术。FP8的结果分为三种设置:
1. 完全固定格式(fully fixed format): 整个网络使用相同的 $m, e, b$ 组合。
2. 灵活偏置格式(flexible bias format): 整个网络固定 $m$ 和 $e$,但 $b$ 可以逐通道或逐张量设置(取最优者)。
3. 完全灵活格式(fully flexible format): 每个张量可以有不同的 $m$ 和 $e$,每个通道可以有不同的 $b$,以最小化MSE为目标。具体方法见附录E。

结果与讨论 (见表1)
1. 离群点的影响: 具有较大激活离群点的网络(如ViT, Bert, SalsaNext, HRNet)在使用更多指数位(从而拥有更大动态范围)的格式时表现更好。这验证了第3节的理论预测。
2. CNNs的偏好: 卷积神经网络(CNNs)中的权重和激活张量更适合用具有更多尾数位的格式来表示。然而,增加尾数位意味着减小动态范围,因此为每个通道找到合适的偏置值变得至关重要。
3. 灵活格式的局限性: 完全灵活的格式仅在少数情况下略微优于固定 $m/e$ 的格式。作者认为这可能是由于他们采用的局部贪心搜索方法(为每个张量独立优化 $m, e, b$)可能无法找到全局最优的配置。


表 1: PTQ结果,比较了固定格式、灵活偏置格式、完全灵活格式与原始模型(FP32)和INT8的结果。

Quantization-aware training (QAT) 结果

实验设置
本节研究通过QAT能否进一步提升FP8 PTQ的结果。
* 对比基线: INT8 QAT。
* FP8 QAT初始化: 使用表1中PTQ的最佳结果进行初始化,分为三种情况:最佳固定格式、最佳灵活偏置格式、最佳完全灵活格式。
* 学习策略: 对每种初始化,进行了三种QAT实验:(1) 格式固定,只训练模型权重;(2) 学习最大裁剪值 $c$;(3) 同时学习 $c$ 和尾数位数 $m$。
* 训练细节: 模型训练20个周期,模型参数使用Adam优化器,量化参数使用SGD优化器。

结果与讨论 (见表2)
1. QAT的有效性: QAT能够提升FP8量化模型的性能。
2. 学习量化参数的效果: 对于ResNet18和MobileNetV2,在固定格式和灵活偏置格式下,同时学习最大值 $c$ 和尾数位数 $m$ 能够比仅学习权重带来更好的结果(见图6示例)。
3. 学习策略的局限性: 当使用完全灵活的PTQ初始化时,学习 $c$ 和 $m$ 的优势消失了。对于BERT模型,学习这些参数甚至会轻微损害性能,但差异不显著。
4. 核心发现: QAT缩小了不同量化格式之间的准确性差距。这是因为网络的权重可以自适应地调整,以更好地匹配量化器所能表示的数值分布。


表 2: QAT结果,比较了固定格式、灵活偏置格式、完全灵活格式与原始模型(FP32)和INT8 QAT的结果。


图 6: 训练前后的最大值c和尾数位数m。在这个实验中,最大值初始化为c=60,尾数位数初始化为m=3。

A5 结论

本文对FP8格式及其在量化神经网络推理中的优势进行了全面分析,得出以下结论:

  1. 理论层面:分析表明,对于神经网络中常见的高斯分布,FP8格式优于INT8格式。当数据中出现离群点时,具有更多指数位的FP8格式因其更大的动态范围而表现更佳。

  2. 方法层面:提出了一种新颖的FP8量化模拟方法,该方法在FP32硬件上运行,不仅加快了模拟速度,还使得学习偏置和尾数-指数比特分配的权衡成为可能。

  3. 实践层面 (PTQ):在多种网络上的PTQ实验验证了理论分析。通常情况下,5M2E和4M3E的FP8格式表现最好。对于像Transformer这样具有更多离群点的网络,增加指数位数(如4M3E或3M4E)效果更佳。

  4. 实践层面 (QAT):在进行量化感知训练时,FP8格式的许多优势会减弱。这是因为网络本身会学习适应量化网格,即使是对于INT8这种相对不灵活的格式,也能通过训练达到很好的性能。

A6 附录

A 预期量化误差的分析计算

A.1 输入量化误差

误差分解。公式4(量化误差)可以分解为舍入误差 $E_{rw}$ 和裁剪误差 $E_{cw}$ 两项:



裁剪误差。由于权重和激活张量的值是有界的,我们假设分布 $p_w(w)$ 在区间 $(w_{\text{min}}, w_{\text{max}})$ 内被裁剪。因此,裁剪误差可以写为:

其中 $1_{\alpha_{\text{max}}

舍入误差。舍入误差 $E_{rw}$ 的计算可以分解为每个区间 $(\alpha_i, \alpha_{i+1})$ 的两个子区间,第一个子区间对应向上舍入,第二个子区间对应向下舍入:

为了简化计算,我们引入以下函数:

因此,我们可以将公式14重新定义为:

这是两个可表示网格点之间每个区间的舍入误差之和。我们注意到裁剪误差 $E_{cw}$ 也可以用 $I_w(a, b, w_0)$ 表示:

附录A.3给出了不同分布下 $I(w_{\text{min}}, \alpha_{\text{min}}, \alpha_{\text{min}})$ 的解析表达式。因此,只要有量化网格和概率密度函数的明确定义,我们就可以分析计算不同分布(如高斯、均匀或学生t分布)的舍入误差。

A.2 标量积量化误差

计算方法。本节描述了一种分析计算标量积预期MSE $E(\Delta Y^2)$ 的实用方法。实际上,W和X的协方差矩阵是对角占优的,因此我们可以假设它们是独立的。于是期望值 $E(\Delta Y^2)$ 可以进一步表示为:


我们注意到第一项就是W上的舍入误差(见公式(4)),由X的非中心二阶矩加权,该矩不依赖于量化网格。第二项的结构非常相似,只是W和X互换了位置。由于前两项是唯一的非负函数积分,它们在实践中占主导地位,主要决定了MSE的大小。

解析形式。为了分析地计算标量积误差,我们将公式(19)改写为以下形式:

其中各项定义如下。$M_w$ 和 $M_x$ 分别是W和X的非中心二阶矩。这些项可以使用函数 $I_w(a, b, w_0)$ 和 $I_x(a, b, x_0) := \int_a^b (x - x_0)^2 p_x(x) dx$ 计算:

$E_{rw}$ 和 $E_{rx}$ 是W和X上的舍入误差,与公式(4)中的表达式类似:

最后,$E_{sw}$ 和 $E_{sx}$ 是以下积分:

与公式14中计算舍入误差类似,$E_{sw}$ 和 $E_{sx}$ 的计算可以分解为子区间。对于 $E_{sw}$:

我们定义 $J_w(a, b, w_0)$ 如下:

因此,我们可以将公式24中的 $E_{sw}$ 项表示为:

$E_{sx}$ 项可以用类似的方式计算。附录A.3给出了不同分布下 $J_w(a, b, w_0)$ 的公式。

A.3 积分 $I_x(a, b, x_0)$ 和 $I_w(a, b, w_0)$ 的公式

本节给出了不同分布下函数 $I_x(a, b, x_0)$ 和 $J_x(a, b, x_0)$ 的公式,这些公式是分析计算舍入误差和标量积误差所必需的。$I_w(a, b, w_0)$ 和 $J_w(a, b, w_0)$ 的公式类似,只是使用 $p_w(w)$ 作为概率密度函数。这些公式是通过符号计算得到的。
* 高斯分布


* 均匀分布

* 学生t分布

其中 hyp2f1(a, b, c, d) 是高斯超几何函数。

B 消融实验

B.1 量化误差消融实验

实验内容。本节基于标量积误差的分析计算,分析了权重和激活的不同浮点格式组合。我们考虑两个高斯分布,分别拟合到预训练的Resnet18模型某层的权重和激活分布。结果如图7所示。

实验结论。我们观察到,权重和激活的最佳格式均为5M2E。为了便于视觉比较不同数量级的MSE值,我们绘制了SQNR,其定义如下:


图 7: 对预训练Resnet18模型一个层的研究。我们将两个高斯分布拟合到权重和激活样本上。权重 $W \sim N(-1.0 \times 10^{-3}, 1.7 \times 10^{-2})$,裁剪范围为[-0.35, 0.35];激活 $X \sim N(0.06, 0.11)$,裁剪范围为[0, 3.63]。权重和激活的最佳格式均为M5E2。

B.2 分析舍入误差与经验舍入误差的比较

实验内容。本节比较了分析计算的预期舍入误差与经验舍入误差。结果如图8所示。为了视觉效果,我们绘制了信噪比(SQNR)而不是MSE。SQNR与MSE是对数比例关系,即最小化MSE的值将最大化SQNR。输入张量X的SQNR定义为:


图 8: 分析计算的预期量化误差与经验量化误差的比较。为Resnet18和Bert随机选择了30个权重/激活张量的子集。

C Bert中的张量示例

本节给出了Bert中张量存在强离群点的例子(图9)。


图 9: Bert前向传播中张量的例子。图(b)和(d)分别是图(a)和(b)的缩放版本。分布的尾部包含大量离群点。

D 离群点的重要性

实验内容。在此消融实验中,我们展示了离群点对选择最佳浮点格式的影响。该实验基于舍入误差的分析计算。我们考虑一个自由度 $\nu = 2$ 的学生t分布,并逐渐增加量化范围。使用Min-max量化器范围估计器,分布在量化范围内被裁剪。结果如图10所示。

实验结论。随着量化范围的增加,最优的指数位宽值从零(INT8格式)增长到5位指数。


图 10: 自由度 $\nu = 2$ 的学生t分布在不同量化器范围下的SQNR。随着量化范围的扩大,最优指数位宽值增加。

E 基于MSE的尾数位和偏置选择

方法描述。在我们的量化设置中,每个张量都有一个独立的量化器。量化器可以采用逐张量或逐通道量化。如果使用逐通道量化,每个通道都有自己的裁剪值 $c$(因此也有自己的 $b$ 值),而尾数位数 $m$ 是为整个张量设置的,因此在所有通道间共享。

参数搜索。在量化器初始化期间,我们使用输入权重张量或一批激活(统称为X),并找到能最小化重构MSE的 $m$ 和 $c$ 值。为此,我们对 $m$ 和 $c$ 的值进行网格搜索。对于 $m$,我们考虑1、2、3、4、5和6位。对于 $c$,我们找到X的绝对最大值 $\sigma$(或者在逐通道量化的情况下,是X中每个通道的最大值),然后在 $0.1\sigma$ 和 $1.2\sigma$ 之间的111个均匀间隔的值上进行网格搜索。然后我们记录最小化MSE的 $m$ 和 $c$ 的值,并用这些值初始化量化器。

逐通道策略。在逐通道量化的情况下,我们为每个通道单独执行此过程。在每个通道上,对于每个 $m$ 值,我们存储在该通道上最小化量化的 $c$ 值。然后,我们通过多数投票来选择一个逐张量的 $m$ 值,即在所有通道中出现最频繁的 $m$ 值。如果出现平局,我们选择累积MSE最低的 $m$ 值。最后,我们将 $c$ 设置为对于该逐张量 $m$ 值最小化MSE的值。我们也尝试过直接根据最低累积MSE选择 $m$,但发现最终准确性差异可忽略不计。我们决定使用多数投票,以确保具有相对较大数量级的通道能够主导 $m$ 的选择。图11和12展示了最小化MSE的位宽选择的逐层分析。


图 11: ResNet18每层的SQNR。


图 12: BERT每层的SQNR(分为权重和激活)。

F 输出激活中的MSE与模型准确率的相关性

实验内容。本节提供了一个例子,说明了某一层输出激活中的MSE与整个模型准确率之间的相关性。我们取一个预训练的Resnet18模型,并考虑其一个层。我们向其权重值注入振幅不断增加的高斯噪声,并测量该层输出激活的MSE以及最终的top-1分类准确率。结果如图13所示。

实验结论。MSE值与最终准确率表现出强相关性,即该实验的归一化相关系数为0.98。


图 13: 在ImageNet上预训练的Resnet18的一个层上进行的消融实验。向该层的权重添加振幅不断增加的高斯噪声。输出激活的MSE与模型top-1准确率的下降有很强的相关性。

G 完整的实验细节

QAT设置。对于我们的QAT实验,我们使用在固定格式、灵活偏置格式和完全灵活格式下取得最佳结果的设置来初始化模型。详情见表1和附录I中的表格。然后我们对ResNet18训练20个周期,对MobileNetV2训练10个周期。我们使用Adam优化器【索引25,Adam: A method for stochastic optimization+2014+arXiv】来优化权重。我们考虑了 $10^{-5}$ 和 $10^{-6}$ 的初始学习率,因为这些在初步实验中效果最好。学习率使用余弦衰减到初始学习率的 $10^{-2}$。

量化参数学习。在同时学习FP8参数($c$ 和 $m$)的实验中,我们使用不带动量的SGD。我们考虑了 $10^{-2}, 10^{-3}, 10^{-4}$ 和 $10^{-5}$ 的学习率。所有模型均未应用权重衰减。

基线。基线INT8 QAT结果遵循【索引34,A white paper on neural network quantization+2021+ArXiv】中描述的程序。

H FP8量化器的梯度

如前所述,FP8量化器对于待量化的值给出了“直通”梯度【索引3,Estimating or propagating gradients through stochastic neurons for conditional computation+2013+arXiv】:

相对于 $c$ 的梯度如下:

最后,相对于 $m$ 的梯度如下:

I PTQ结果

表3显示了在5.2节中考虑的所有模型上,INT8、固定偏置的FP8(针对每种尾数/指数划分)、灵活偏置的FP8和完全灵活的FP8的最佳结果。


表 3: 所有模型上的PTQ结果。固定偏置:每种尾数/指数划分下所有固定偏置值中的最佳结果。灵活偏置:每种尾数/指数划分下所有初始化方法中的最佳结果。粗体数字分别标记了所有固定偏置和灵活偏置结果中每个模型的最佳结果。‘灵活’列中的粗体数字表示‘灵活’PTQ优于其他PTQ方法的结果。

表4包含了BERT在所有GLUE任务上的逐任务结果。


表 4: BERT在所有GLUE任务上的逐任务结果。每个任务的最佳量化结果用粗体标出。

J DeepLabV3权重分布

现象。DeepLabV3在“固定格式”PTQ设置中比其他考虑的模型表现出更大的性能下降。

原因分析。图14显示了DeepLabV3中每个权重张量的值分布。我们认为其在固定格式PTQ上性能较低的原因是,DeepLabV3骨干网络早期的一些层具有相对较大的离群点(例如,backbone.features.2.conv.0.weight,第1行第4列),需要相对较多的指数位;而骨干网络后期和解码器中的一些层则具有只需要很少指数位的分布(例如,backbone.high_level_features.15.conv.3.weight;decoder.last_conv.8.weight)。这种差异也存在于其他网络中,最著名的是MobileNetV2,但没有在这个网络中那么突出。


图 14: 一张图表,显示了我们实验中使用的DeepLabV3模型实例中每个权重张量的分布。