AiPaper
论文状态:已完成

FlatQuant: Flatness Matters for LLM Quantization

发表:2024/10/12
原文链接PDF 下载
价格:0.10
价格:0.10
已有 1 人读过
本分析由 AI 生成,可能不完全准确,请以原文为准。

TL;DR 精炼摘要

本文提出了一种新的训练后量化方法FlatQuant,通过优化权重和激活的平坦度,显著减少了大语言模型的量化误差。FlatQuant为每个线性层识别最佳仿射变换,利用克罗内克积降低运行时开销,实验表明其在LLaMA-3-70B模型上设立了新基准,准确率下降不到1%,速度提升达2.3倍。

摘要

Recently, quantization has been widely used for the compression and acceleration of large language models (LLMs). Due to the outliers in LLMs, it is crucial to flatten weights and activations to minimize quantization error with equally spaced quantization points. Prior research explores various pre-quantization transformations to suppress outliers, such as per-channel scaling and Hadamard transformation. However, we observe that these transformed weights and activations can still exhibit steep and dispersed distributions. In this paper, we propose FlatQuant (Fast and Learnable Affine Transformation), a new post-training quantization approach that enhances the flatness of weights and activations. Our approach identifies optimal affine transformations for each linear layer, calibrated in hours via a lightweight objective. To reduce runtime overhead of affine transformation, we apply Kronecker product with two lightweight matrices, and fuse all operations in FlatQuant into a single kernel. Extensive experiments demonstrate that FlatQuant establishes a new state-of-the-art benchmark for quantization. For example, it achieves less than 1% accuracy drop for W4A4 quantization on the LLaMA-3-70B model, surpassing SpinQuant by 7.5%. Additionally, it provides up to 2.3x prefill speedup and 1.7x decoding speedup compared to the FP16 model. Code is available at: https://github.com/ruikangliu/FlatQuant.

思维导图

论文精读

中文精读

1. 论文基本信息

1.1. 标题

FlatQuant: Flatness Matters for LLM Quantization (FlatQuant: 平坦度对大语言模型量化至关重要)

1.2. 作者

Yuxuan Sun, Ruikang Liu, Haoli Bai, Han Bao, Kang Zhao, Yuening Li, Jiaxin Hu, Xianzhi Yu, Lu Hou, Chun Yuan, Xin Jiang, Wulong Liu, Jun Yao

1.3. 发表期刊/会议

该论文作为预印本发表于 arXiv

1.4. 发表年份

2024年10月12日 (UTC)

1.5. 摘要

近期,量化 (quantization) 已被广泛用于大语言模型 (LLMs) 的压缩和加速。由于 LLMs 中存在离群值 (outliers),为了使用等间隔量化点 (equally spaced quantization points) 来最小化量化误差 (quantization error),平坦化 (flatten) 权重 (weights) 和激活 (activations) 至关重要。先前的研究探索了各种预量化转换 (pre-quantization transformations) 以抑制离群值,例如每通道缩放 (per-channel scaling) 和 Hadamard 变换 (Hadamard transformation)。然而,作者观察到这些转换后的权重和激活仍然可能呈现出陡峭和分散的分布。

本文提出了 FlatQuant (Fast and Learnable Affine Transformation),一种新的训练后量化 (post-training quantization) 方法,旨在增强权重和激活的平坦度。该方法为每个线性层 (linear layer) 识别最优的仿射变换 (affine transformations),通过一个轻量级目标在数小时内完成校准 (calibrated)。为了减少仿射变换的运行时开销 (runtime overhead),FlatQuant 采用克罗内克积 (Kronecker product) 与两个轻量级矩阵相结合,并将 FlatQuant 中的所有操作融合 (fuse) 到一个单一的内核 (kernel) 中。

广泛的实验表明,FlatQuant 建立了量化领域的新最先进 (state-of-the-art) 基准。例如,在 LLaMA-3-70B 模型上,W4A4 量化 (weight 4-bit, activation 4-bit quantization) 的准确率下降不到 1%,超过 SpinQuant 7.5%。此外,与 FP16 模型相比,它在预填充 (prefill) 阶段提供高达 2.3 倍的速度提升,在解码 (decoding) 阶段提供 1.7 倍的速度提升。

1.6. 原文链接

https://arxiv.org/abs/2410.09426v4 PDF 链接: https://arxiv.org/pdf/2410.09426v4.pdf

2. 整体概括

2.1. 研究背景与动机

大语言模型 (LLMs) 的参数量不断增长,带来了巨大的计算和内存开销,使得其部署和推理变得困难。量化是解决这一问题最有效的方案之一,它通过降低模型参数和激活的精度来减少内存占用并加速推理。然而,LLMs 中普遍存在的离群值 (outliers) 对量化构成了严峻挑战。这些离群值会导致权重和激活的分布变得尖锐和分散,使得在使用等间隔量化点进行量化时产生较大的量化误差 (quantization error)。

为了缓解离群值的影响,现有研究提出了多种预量化转换 (pre-quantization transformations) 方法,例如 per-channel scaling (每通道缩放) 和 Hadamard transformation (Hadamard 变换)。per-channel scaling 尝试通过调整通道间的尺度来平衡离群值,但它无法将离群值分布到非离群值通道上。Hadamard transformation 旨在通过旋转通道来重新分配离群值。然而,作者观察到这些现有方法在促进权重和激活的平坦度 (flatness) 方面仍然存在局限性,转换后的分布可能依然陡峭和分散,从而导致次优的量化性能。此外,这些线性转换通常会引入额外的推理开销。

因此,论文的动机在于开发一种更有效的训练后量化 (post-training quantization) 方法,能够显著增强权重和激活的平坦度,同时最大程度地减少推理开销,从而实现高性能的低比特 LLM 量化。

2.2. 核心贡献/主要发现

本文提出了 FlatQuant,一种新的训练后量化方法,其核心贡献和主要发现如下:

  • 强调平坦度对量化的重要性: 论文强调了权重和激活分布的平坦度对于有效 LLM 量化的重要性,并指出平坦分布有助于减少量化误差以及 Transformer 层间的误差传播。
  • 提出快速可学习的仿射变换 (Fast and Learnable Affine Transformation): FlatQuant 为每个线性层学习最优的仿射变换,以增强权重和激活的平坦度。这些变换通过一个轻量级、块级(block-wise)的校准目标在数小时内完成优化。
  • 引入克罗内克积 (Kronecker product) 降低开销: 为了最小化仿射变换带来的推理开销,FlatQuant 采用两个轻量级矩阵的克罗内克积来近似大型仿射变换矩阵,显著减少了内存和计算需求。
  • 设计高效内核融合 (Efficient Kernel Fusion): FlatQuant 将仿射变换和量化操作融合到一个单一的 Triton 内核中,消除了冗余的内存访问和 kernel launch overhead,进一步提升了推理速度。
  • 实现最先进的量化性能: 实验结果表明,FlatQuant 在各种基准测试中(包括语言建模和零样本问答任务)均达到了新的最先进水平。例如,在 LLaMA-3-70B 模型上,W4A4 量化仅导致不到 1% 的准确率下降,显著优于现有方法。
  • 显著提升推理速度: FlatQuant 在 W4A4 量化下,与 FP16 模型相比,在预填充 (prefill) 阶段提供高达 2.3 倍的速度提升,在解码 (decoding) 阶段提供 1.7 倍的速度提升。

3. 预备知识与相关工作

3.1. 基础概念

为了更好地理解 FlatQuant 的工作原理及其在 LLM 量化中的重要性,我们首先介绍一些核心概念:

  • 大语言模型 (LLMs - Large Language Models): 指的是参数量巨大(通常数十亿到数千亿)、基于 Transformer 架构的深度学习模型,它们在各种自然语言处理任务中展现出卓越的性能,但同时也带来了巨大的计算和内存开销。
  • 量化 (Quantization): 一种模型压缩技术,通过将模型参数(如权重)和中间计算结果(如激活)从高精度(如 FP32 或 FP16 浮点数)转换为低精度(如 INT8 或 INT4 整数)表示,以减少模型的内存占用和计算复杂度,从而加速推理过程。
  • 权重 (Weights) 和 激活 (Activations):
    • 权重 (Weights): 神经网络中的可学习参数,它们在训练过程中被优化以捕捉数据中的模式。在线性层中,权重通常表示为一个矩阵 W\mathbf{W}
    • 激活 (Activations): 神经网络层输出的中间计算结果。在神经网络的前向传播过程中,输入 X\mathbf{X} 经过线性层和激活函数后产生激活。
  • 离群值 (Outliers): 在权重或激活分布中,数值远超其他大部分值的极端数值。LLMs 因其深度和复杂性,在激活中尤其容易出现这种离群值,它们对低比特量化带来巨大挑战,因为少数量化点难以精确表示这些极端值,从而导致较大的量化误差。
  • 量化误差 (Quantization Error): 全精度值与量化后的低精度值之间的差异。量化旨在最小化这种误差,以保持模型性能。
  • 等间隔量化点 (Equally Spaced Quantization Points): 在常见的对称量化或非对称量化中,量化范围内的离散值点通常是均匀分布的。当数据分布平坦时,这些等间隔点能更好地覆盖数据范围,减少量化误差。
  • 平坦度 (Flatness): 在本文中,平坦度描述了权重和激活值分布的均匀性。一个“平坦”的分布意味着其值更均匀地分散在一个范围内,没有显著的尖峰或离群值。这种分布更易于量化,因为少量均匀分布的量化点就能较好地覆盖整个值域,从而降低量化误差。
  • Transformer 架构: LLMs 的基础架构,由多个堆叠的 Transformer 块组成。每个块通常包含:
    • 自注意力机制 (Self-Attention Mechanism): 允许模型在处理序列中的每个词元时,关注序列中的其他词元。
    • 前馈网络 (Feed-forward Network - FFN): 通常包含两个线性层和一个激活函数,用于对每个词元的位置进行独立的非线性变换。
    • 层归一化 (Layer Normalization - LayerNorm): 一种归一化技术,用于稳定网络训练和加速收敛。
  • 量化函数 Q()\mathcal{Q}(\cdot) 将全精度浮点数转换为低比特整数表示的函数。对于一个 bb 比特权重量化,可以表示为: W^=Qb(W)=sΠΩ(b)(W/s) \hat { \mathbf { W } } = \mathcal { Q } _ { b } ( \mathbf { W } ) = s \cdot \Pi _ { \Omega ( b ) } ( \mathbf { W } / s ) 其中:
    • WRm×n\mathbf{W} \in \mathbb{R}^{m \times n} 是全精度权重矩阵。
    • W^\hat{\mathbf{W}} 是量化后的权重矩阵。
    • ss 是量化步长 (quantization step size),决定了量化值的粒度。
    • Π()\Pi(\cdot) 是投影函数 (projection function),将浮点数投影到最近的整数点。
    • Ω(b)={0,1,,2b1}\Omega(b) = \{0, 1, \dots, 2^b - 1\}bb 比特整数点集合,表示 bb 比特能够表示的所有离散值。
    • W/s\mathbf{W}/s 将权重缩放到整数范围,然后通过 Π()\Pi(\cdot) 投影到最近的整数,最后乘以 ss 恢复到原始尺度,但已是量化后的值。

3.2. 前人工作

LLM 量化领域发展迅速,旨在平衡模型性能和部署效率。本文的工作建立在以下关键的前人研究之上:

  • 每通道缩放 (Per-channel Scaling):
    • SmoothQuant (Xiao et al., 2023) 等方法提出并广泛采用,主要用于解决 LLM 激活中的离群值问题。它通过引入一个通道级的缩放因子 cRn\mathbf{c} \in \mathbb{R}^n,将输入激活 X\mathbf{X} 和权重 W\mathbf{W} 转换为 (Xdiag(c)1)(\mathbf{X} \mathrm{diag}(\mathbf{c})^{-1})(diag(c)W)(\mathrm{diag}(\mathbf{c}) \mathbf{W}^\top)。这样可以在不改变最终输出 Y=XW\mathbf{Y} = \mathbf{X} \mathbf{W}^\top 的情况下,联合调整激活和权重的尺度,使得它们在量化友好范围内。缩放因子通常根据激活和权重的幅度(例如 cj=max(Xjα)/max(Wj1α)\mathbf{c}_j = \mathrm{max}(|\mathbf{X}_j|^\alpha) / \mathrm{max}(|\mathbf{W}_j|^{1-\alpha}))计算,以平衡两者的离群值。缩放后的权重 diag(c)W\mathrm{diag}(\mathbf{c}) \mathbf{W}^\top 可以离线预处理并合并到模型中,避免运行时开销。OmniQuant (Shao et al., 2023) 和 Outlier Suppression (Wei et al., 2023) 等进一步探索了可学习的缩放和偏移参数。
  • Hadamard 变换 (Hadamard Transformation):
    • QuaRot (Ashkboos et al., 2024)、SpinQuant (Liu et al., 2024c) 和 QUIK-4B (Ashkboos et al., 2023) 等近期工作发现,Hadamard 矩阵 H{+1,1}n×n\mathbf{H} \in \{+1, -1\}^{n \times n} 对平滑激活中的离群值特别有效。与只调整对角元素的 per-channel scaling 不同,Hadamard 变换通过正交旋转(orthogonal rotation)重新分配离群值。利用 Hadamard 矩阵的正交性(即 HH=I\mathbf{H}^\top \mathbf{H} = \mathbf{I}),可以保持线性层输出不变:Y=XW=(XH)(HW)\mathbf{Y} = \mathbf{X} \mathbf{W}^\top = (\mathbf{X} \mathbf{H}) (\mathbf{H}^\top \mathbf{W}^\top)transformed weight HW\mathbf{H}^\top \mathbf{W}^\top 同样可以离线预处理,减少运行时开销。
  • 训练后量化 (Post-Training Quantization - PTQ) 和 量化感知训练 (Quantization-Aware Training - QAT):
    • PTQ 在模型训练完成后进行量化,无需重新训练,通常成本较低但性能可能受限。
    • QAT 在训练过程中模拟量化误差,并进行微调,通常能达到更好的性能,但计算成本更高。本文 FlatQuant 属于 PTQ 范畴。
  • 其他量化方法:
    • GPTQ (Frantar et al., 2022): 一种基于 Hessian 信息、逐层(layer-wise)进行权重更新的 PTQ 方法,能够有效减少量化误差。
    • AffineQuant (Ma et al., 2024): 提出使用仿射变换来优化量化,与 FlatQuant 有相似的目标,但在变换的具体实现和优化策略上有所不同。

3.3. 技术演进

LLM 量化技术从最初的简单 Round-To-Nearest (RTN) 量化,逐步发展到更复杂的策略:

  1. 基础量化: RTNmin-max 裁剪是最初的尝试,但对 LLM 中的离群值敏感,性能下降严重。

  2. 离群值抑制: SmoothQuant 引入 per-channel scaling,通过缩放将激活中的离群值转移到权重中,以实现更平滑的分布,从而改善量化性能。

  3. 高级变换: Hadamard transformation (QuaRot, SpinQuant) 进一步通过正交旋转来重新分配离群值,试图从根本上消除其影响。

  4. 可学习变换: AffineQuant 提出了使用可学习的仿射变换来优化量化。

    FlatQuant 处于这一演进的最新阶段,它在可学习变换的基础上,进一步强调了“平坦度”的重要性,并引入了 Kronecker product 和内核融合等技术,以实现更高效、更精确的量化。

3.4. 差异化分析

FlatQuant 与现有主要量化方法的区别和创新点在于:

  • Per-channel Scaling (如 SmoothQuant) 的区别:

    • 核心机制: Per-channel scaling 仅通过对角矩阵进行尺度调整,主要目标是平衡权重和激活的离群值。它无法将离群值有效分散到所有通道。
    • FlatQuant 优势: FlatQuant 采用更通用的仿射变换,能够对权重和激活的分布进行更复杂的“旋转”和“拉伸”,从而实现更彻底的平坦化,而不仅仅是尺度调整。此外,FlatQuant 仍保留了可学习的 per-channel scaling 作为其转换的一部分,以增强平衡离群值的能力。
  • Hadamard Transformation (如 QuaRot, SpinQuant) 的区别:

    • 核心机制: Hadamard transformation 使用固定的 Hadamard 矩阵进行正交旋转,以重新分配离群值。它不考虑每个线性层的具体特性。
    • FlatQuant 优势: FlatQuant 使用可学习的仿射变换,这意味着它能针对每个线性层自适应地找到最优转换,从而实现更精细和更有效的平坦化。
  • AffineQuant 的区别:

    • 核心机制: AffineQuant 也使用仿射变换,但 FlatQuant 引入了 Kronecker product 来分解大型仿射变换矩阵,大大降低了存储和计算开销,使其在实际部署中更具效率。此外,FlatQuant 还集成了 per-channel scaling 和可学习裁剪阈值,并设计了高效的内核融合,形成一个更全面的解决方案。
  • 关于开销: 现有方法引入的预量化转换往往会带来额外的推理开销。FlatQuant 通过 Kronecker product高效内核融合将转换操作与量化紧密结合,显著降低了运行时开销,确保了整体的加速效果。

    总结来说,FlatQuant 的核心创新在于提出了针对每个线性层、快速可学习的仿射变换,并通过克罗内克积实现高效分解,并辅以每通道缩放、可学习裁剪阈值和内核融合,从而在量化性能和推理效率上达到了新的平衡。

4. 方法论

4.1. 方法原理

FlatQuant 的核心思想是通过引入可学习的仿射变换,自适应地调整每个线性层的权重和激活分布,使其变得更加平坦 (flat),从而在低比特量化时显著减少量化误差。直观上,一个平坦的分布意味着数据点更均匀地分布在一定范围内,没有极端离群值或过于集中的区域。对于等间隔的量化点来说,这种平坦的分布更容易被精确表示,从而降低了全精度值与量化值之间的差异。

该方法通过优化一个轻量级的损失函数来学习这些仿射变换,并且为了确保这些变换不会引入过多的运行时开销,FlatQuant 巧妙地使用了克罗内克积 (Kronecker product) 来分解大的仿射变换矩阵为两个小的矩阵,从而大幅减少了计算和内存需求。最后,为了最大限度地提升推理速度,FlatQuant 将这些轻量级的仿射变换操作与实际的量化操作融合 (fuse) 到一个定制的 GPU 内核中,避免了冗余的内存访问和 kernel launch overhead

4.2. 核心方法详解

4.2.1. 快速可学习的仿射变换 (Fast and Learnable Affine Transformation)

对于一个标准线性层,其计算为 Y=XW\mathbf{Y} = \mathbf{X} \mathbf{W}^\top,其中 XRk×n\mathbf{X} \in \mathbb{R}^{k \times n} 是输入激活,WRm×n\mathbf{W} \in \mathbb{R}^{m \times n} 是权重矩阵,YRk×m\mathbf{Y} \in \mathbb{R}^{k \times m} 是输出。FlatQuant 的目标是找到一个最优的可逆矩阵 PRn×n\mathbf{P}^* \in \mathbb{R}^{n \times n},使得在引入 PP 及其逆矩阵 $P

^{-1}后,量化误差最小化。理想情况下,这个目标可以表示为:P=argminPYQ(XP)Q(P1W)F2其中: 后,量化误差最小化。
理想情况下,这个目标可以表示为:
```

\mathbf { P } ^ { * } = \arg \operatorname* { m i n } _ { \mathbf { P } } \| \mathbf { Y } - \boldsymbol { \mathcal { Q } } ( \mathbf { X } \mathbf { P } ) \boldsymbol { \mathcal { Q } } ( \mathbf { P } ^ { - 1 } \mathbf { W } ^ { \top } ) \| _ { F } ^ { 2 }

```
其中:
*   \mathbf{P}^*是待求的最优仿射变换矩阵。 是待求的最优仿射变换矩阵。
*   \mathbf{Y}是原始全精度输出。 是原始全精度输出。
*   \mathbf{X}是原始全精度输入激活。 是原始全精度输入激活。
*   \mathbf{W}^\top是原始全精度权重矩阵的转置。 是原始全精度权重矩阵的转置。
*   \mathbf{P}是可学习的仿射变换矩阵。 是可学习的仿射变换矩阵。
*   \mathbf{P}^{-1}\mathbf{P}的逆矩阵。 的逆矩阵。
*   \boldsymbol{\mathcal{Q}}(\cdot)是量化函数,将全精度张量量化为低比特表示。 是量化函数,将全精度张量量化为低比特表示。
*   \| \cdot \|_F^2Frobenius范数的平方,表示量化输出与原始输出之间的均方误差(MSE)。该公式的目标是最小化原始线性层输出 是 `Frobenius` 范数的平方,表示量化输出与原始输出之间的均方误差 (MSE)。
    该公式的目标是最小化原始线性层输出 \mathbf{Y}与经过 与经过 \mathbf{P}变换、量化后再通过 变换、量化后再通过 \mathbf{P}^{-1}逆变换的量化输出之间的Frobenius范数平方。其中 逆变换的量化输出之间的 `Frobenius` 范数平方。其中 \mathbf{P}^{-1} \mathbf{W}^\top可以像Hadamardtransformation一样离线预计算。然而,直接使用一个全尺寸的 可以像 `Hadamard transformation` 一样离线预计算。
然而,直接使用一个全尺寸的 \mathbf{P} \in \mathbb{R}^{n \times n}矩阵会带来巨大的计算成本和内存开销,因为它的参数量是 矩阵会带来巨大的计算成本和内存开销,因为它的参数量是 n^2,并且每次矩阵乘法会使计算量加倍。

#### 克罗内克积 (Kronecker Product)
为了解决上述挑战,`FlatQuant` 引入了**克罗内克积**来构建一个高效的轻量级仿射变换矩阵 \mathbf{P}。具体来说,。具体来说,\mathbf{P}被分解为两个较小矩阵的克罗内克积: 被分解为两个较小矩阵的克罗内克积:\mathbf{P} = \mathbf{P}_1 \otimes \mathbf{P}_2,其中,其中 \mathbf{P}_1 \in \mathbb{R}^{n_1 \times n_1}\mathbf{P}_2 \in \mathbb{R}^{n_2 \times n_2}都是可逆矩阵,且 都是可逆矩阵,且 n = n_1 n_2。利用克罗内克积的性质(即。
利用克罗内克积的性质(即 \mathrm{vec}(\mathbf{V}) (\mathbf{P}_1 \otimes \mathbf{P}_2) = \mathrm{vec}(\mathbf{P}_1^\top \mathbf{V} \mathbf{P}_2)),上述公式(2)中的矩阵乘法可以重写为:Q(XP)Q(P1W)=Q(P1×1X~×2P2)×Q(P11×1W~×2(P21))其中:),上述公式 (2) 中的矩阵乘法可以重写为:
```

\begin{array} { r l r } { \mathcal { Q } ( \mathbf { X } \mathbf { P } ) \mathcal { Q } ( \mathbf { P } ^ { - 1 } \mathbf { W } ^ { \top } ) = } \\ & { } & { \mathcal { Q } ( \mathbf { P } _ { 1 } ^ { \top } \times _ { 1 } \tilde { \mathbf { X } } \times _ { 2 } \mathbf { P } _ { 2 } ) \times \mathcal { Q } ( \mathbf { P } _ { 1 } ^ { - 1 } \times _ { 1 } \tilde { \mathbf { W } } \times _ { 2 } ( \mathbf { P } _ { 2 } ^ { - 1 } ) ^ { \top } ) ^ { \top } } \end{array}

```
其中:
*   \mathbf{P}_1 \in \mathbb{R}^{n_1 \times n_1}\mathbf{P}_2 \in \mathbb{R}^{n_2 \times n_2}是通过克罗内克积构建 是通过克罗内克积构建 \mathbf{P}的两个轻量级可逆矩阵。 的两个轻量级可逆矩阵。
*   \tilde{\mathbf{X}} \in \mathbb{R}^{k \times n_1 \times n_2}\tilde{\mathbf{W}} \in \mathbb{R}^{m \times n_1 \times n_2}是将原始输入激活 是将原始输入激活 \mathbf{X}和权重 和权重 \mathbf{W}相应地重塑(reshaped)后的张量。 相应地重塑(`reshaped`)后的张量。
*   \times_i表示对第 表示对第 i个轴进行操作(例如,张量乘法或约简)。 个轴进行操作(例如,张量乘法或约简)。
*   \mathbf{P}_1^\top\mathbf{P}_1的转置。 的转置。
*   \mathbf{P}_1^{-1}\mathbf{P}_1的逆矩阵。 的逆矩阵。
*   (\mathbf{P}_2^{-1})^\top\mathbf{P}_2逆矩阵的转置。这种设计可以将存储内存节省高达 逆矩阵的转置。
    这种设计可以将存储内存节省高达 n/2倍(当 倍(当 n_1=n_2=\sqrt{n}时),计算量节省 时),计算量节省 \sqrt{n}/2倍。在实践中,选择 倍。在实践中,选择 n_1^*, n_2^* = \arg\min(n_1+n_2)且满足 且满足 n_1n_2=nn_1 \le n_2的条件,例如对于 的条件,例如对于 n=8192,最佳配置是,最佳配置是 (n_1^*, n_2^*) = (64, 128)。这种策略能够在不影响性能的情况下提供最佳加速比。

#### 每通道缩放 (Per-channel Scaling)
为了进一步增强平衡权重和激活离群值的能力,`FlatQuant` 在预量化转换之前显式引入了一个可学习的缩放向量 \mathrm{diag}(c) \in \mathbb{R}^n。这个缩放向量可以像 `SmoothQuant` 一样,与前一个层归一化 (`Layer Normalization`) 或线性层进行合并,从而不产生额外的推理开销。

#### 可学习裁剪阈值 (Learnable Clipping Thresholds)
为了进一步减少上述转换后可能存在的离群值,`FlatQuant` 结合了可学习的裁剪阈值 \alpha_w, \alpha_a \in (0, 1)。这些阈值通过sigmoid函数应用于每个线性层(包括KV缓存)的权重和激活。与之前通过网格搜索(gridsearch)寻找裁剪阈值的方法不同,FlatQuant发现学习这些阈值能获得更好的结果。这些参数是层特定的,并与线性变换矩阵。这些阈值通过 `sigmoid` 函数应用于每个线性层(包括 KV 缓存)的权重和激活。与之前通过网格搜索 (grid search) 寻找裁剪阈值的方法不同,`FlatQuant` 发现学习这些阈值能获得更好的结果。这些参数是层特定的,并与线性变换矩阵 \mathbf{P}和缩放向量 和缩放向量 \mathrm{diag}(c) 一起进行联合优化。

#### 训练目标 (The Training Objective)
`FlatQuant` 采用训练后量化(`post-training quantization`)策略,通过在少量校准数据(例如 128 个随机采样的句子)上顺序最小化每个 `Transformer` 块的均方误差(`MSE`)。对于第 lTransformer块,其训练目标为:minΘFl(X)F^l(X;Θ)F2其中: 个 `Transformer` 块,其训练目标为:
```

\operatorname* { m i n } _ { \Theta } \Big \| \mathcal { F } _ { l } \big ( \mathbf { X } \big ) - \hat { \mathcal { F } } _ { l } \big ( \mathbf { X } ; \Theta \big ) \Big \| _ { F } ^ { 2 }

```
其中:
*   \mathcal{F}_l(\cdot)表示原始的全精度第 表示原始的全精度第 lTransformer块。 个 `Transformer` 块。
*   \hat{\mathcal{F}}_l(\cdot; \Theta)表示经过量化的第 表示经过量化的第 lTransformer块,其参数为 个 `Transformer` 块,其参数为 \Theta。
*   \mathbf{X}是输入到该Transformer块的激活。 是输入到该 `Transformer` 块的激活。
*   \Theta = \{ \mathbf{P}, c, \alpha_a, \alpha_w \}简化表示该块内所有可学习的参数:变换矩阵 简化表示该块内所有可学习的参数:变换矩阵 \mathbf{P}( (由 \mathbf{P}_1\mathbf{P}_2构成)、缩放向量 构成)、缩放向量 c、以及激活和权重的裁剪阈值、以及激活和权重的裁剪阈值 \alpha_a, \alpha_w。
    为了高效准确地计算公式 (3) 中的矩阵逆,`FlatQuant` 采用了奇异值分解 (`singular value decomposition - SVD`) 和自动混合精度 (`automatic mixed precision - AMP`) 技术。

### 4.2.2. 与 Transformer 架构的集成 (Integration with the Transformer Architecture)
`FlatQuant` 与 `LLaMA` 类似的 `Transformer` 块架构集成,对所有线性层采用低比特矩阵乘法,而 `Layer Normalization`、预量化转换、`RoPE embeddings` 和 `attention scores` 保持 FP16 精度。

#### 自注意力机制 (Self-Attention)
自注意力模块配备了四种变换矩阵:\{ \mathbf{P}_a, \mathbf{P}_o, \mathbf{P}_h, \mathbf{P}_v \}。
*   \mathbf{P}_a:用于平坦化查询(query)、键(key)和值(value)投影的输入激活。:用于平坦化查询 (query)、键 (key) 和值 (value) 投影的输入激活。
*   \mathbf{P}_o:用于平滑输出投影的输入激活。:用于平滑输出投影的输入激活。
*   \mathbf{P}_h\mathbf{P}_v:分别用于逐头(headbyhead)转换键和值缓存(keyandvaluecache)。作者只分解:分别用于逐头 (`head by head`) 转换键和值缓存 (`key and value cache`)。
    作者只分解 \mathbf{P}_a\mathbf{P}_o,而,而 \mathbf{P}_h\mathbf{P}_v保持原始形状,因为perheadquantization在头维度显著小于隐藏维度时已经带来了廉价的转换。此外,为了减少开销, 保持原始形状,因为 `per-head quantization` 在头维度显著小于隐藏维度时已经带来了廉价的转换。此外,为了减少开销,\mathbf{P}_o\mathbf{P}_v 进一步融合,这被经验性证明不会导致额外的精度损失。

#### 前馈网络 (Feed-forward Network - FFN)
FFN 采用两个变换矩阵:\mathbf{P}_{ug}\mathbf{P}_d。
*   \mathbf{P}_{ug}:用于平坦化LayerNormalization之后FFN的输入。:用于平坦化 `Layer Normalization` 之后 FFN 的输入。
*   \mathbf{P}_d:用于平坦化向下投影层的输入。这两个变换都进行分解以最小化推理开销。此外,:用于平坦化向下投影层的输入。
    这两个变换都进行分解以最小化推理开销。此外,\mathbf{P}_d 的每通道缩放被合并到向上投影层的权重中,确保没有额外的计算开销。

#### 层归一化 (Layer Normalization)
与 `QuaRot` 和 `SpinQuant` 修改 `LayerNorm` 为 `RMSNorm` 并将正交变换合并到前一层不同,`FlatQuant` 保留了 `LayerNorm`,并允许在 `LayerNorm` 之后对不同的层使用其快速可学习的仿射变换,从而增强了模型的表达能力。

#### 整体框架图示

下图(原文 Figure 3)展示了 `FlatQuant` 的整体框架:

![该图像是示意图,展示了论文中提出的 FlatQuant 方法的关键组成部分和相关符号。图中包括权重合并的过程以及量化/反量化的步骤,强调了各层线性变换的设计。图的左侧显示了自注意力机制和前馈网络的结构,右侧则展示了线性层中的权重重分配和处理方式。符号定义如 P^{-1} W表示合并的量化权重, 表示合并的量化权重,QP分别为量化和仿射变换矩阵。](/files/papers/691a1949110b75dcc59ae36a/images/3.jpg)该图像是示意图,展示了论文中提出的FlatQuant方法的关键组成部分和相关符号。图中包括权重合并的过程以及量化/反量化的步骤,强调了各层线性变换的设计。图的左侧显示了自注意力机制和前馈网络的结构,右侧则展示了线性层中的权重重分配和处理方式。符号定义如 分别为量化和仿射变换矩阵。](/files/papers/691a1949110b75dcc59ae36a/images/3.jpg)
*该图像是示意图,展示了论文中提出的 FlatQuant 方法的关键组成部分和相关符号。图中包括权重合并的过程以及量化/反量化的步骤,强调了各层线性变换的设计。图的左侧显示了自注意力机制和前馈网络的结构,右侧则展示了线性层中的权重重分配和处理方式。符号定义如 P^{-1} W表示合并的量化权重, 表示合并的量化权重,QP分别为量化和仿射变换矩阵。Figure3:FlatQuant的整体框架。左侧展示了FlatQuant中的必要符号;右侧展示了FlatQuant与传统LLaMA层的集成,其中合并的参数用红色分组,在线转换和下投影层,其中diag(c)上的缩放向量在实践中合并到 分别为量化和仿射变换矩阵。*

Figure 3: `FlatQuant` 的整体框架。左侧展示了 `FlatQuant` 中的必要符号;右侧展示了 `FlatQuant` 与传统 `LLaMA` 层的集成,其中合并的参数用红色分组,在线转换和下投影层,其中 `diag(c)` 上的缩放向量在实践中合并到 W_u。该图详细展示了FlatQuant如何将仿射变换集成到Transformer块的自注意力机制和前馈网络中。红色的合并参数表示可以在离线预处理的步骤。在线转换。

该图详细展示了 `FlatQuant` 如何将仿射变换集成到 `Transformer` 块的自注意力机制和前馈网络中。红色的合并参数表示可以在离线预处理的步骤。在线转换 PP_1 x_1 P_2 位于 `LayerNorm` 之后,直接作用于激活,然后进行量化。

### 4.2.3. 高效内核设计 (Efficient Kernel Design)
`FlatQuant` 设计了一个高效的定制内核,将仿射变换和量化操作融合为一个单一的操作。这种设计基于两个关键因素:
1.  **低计算强度:** 通过 `Kronecker product` 分解后的仿射变换 \mathbf{P}_1^\top \times_1 \tilde{\mathbf{X}} \times_2 \mathbf{P}_2涉及到两个轻量级矩阵的乘法,其计算强度较低,使得预填充和解码过程主要是内存密集型(memorybound)2.量化内存密集型:量化操作本身也已知是内存密集型。为了解决这些问题,作者使用OpenAITriton(Tilletetal.,2019) 涉及到两个轻量级矩阵的乘法,其计算强度较低,使得预填充和解码过程主要是内存密集型 (`memory-bound`)。
2.  **量化内存密集型:** 量化操作本身也已知是内存密集型。

    为了解决这些问题,作者使用 `OpenAI Triton` (Tillet et al., 2019) 将 \mathcal{Q}(\mathbf{P}_1^\top \times_1 \tilde{\mathbf{X}} \times_2 \mathbf{P}_2)融合到一个单一的内核中。具体实现如下:SRAM加载:整个 融合到一个单一的内核中。具体实现如下:
*   **SRAM 加载:** 整个 \mathbf{P}_1 \in \mathbb{R}^{n_1 \times n_1}\mathbf{P}_2 \in \mathbb{R}^{n_2 \times n_2}矩阵被加载到SRAM(高速缓存)中。线程块处理:每个线程块(threadblock) 矩阵被加载到 `SRAM` (高速缓存) 中。
*   **线程块处理:** 每个线程块 (`thread block`) 从 \tilde{\mathbf{X}}中切片出一个tilingblock 中切片出一个 `tiling block` \bar{\mathbf{X}} \in \mathbb{R}^{n_1 \times n_2}计算与量化:线程块执行矩阵乘法。
*   **计算与量化:** 线程块执行矩阵乘法 \mathbf{P}_1 \bar{\mathbf{X}} \mathbf{P}_2,并立即 (`on the fly`) 对结果进行量化。
*   **内存访问优化:** 在整个过程中,所有中间结果都存储在 `SRAM` 中,直到最终结果被写回全局内存 (`global memory`)。这种设计消除了中间结果的冗余内存访问,并减少了 `kernel launch overhead` (内核启动开销)。
*   **后续整合:** 在上述输出之后,`FlatQuant` 遵循 `QuaRot` (Ashkboos et al., 2024) 采用 `CUTLASS` 内核进行 INT4 矩阵乘法,并使用 `FlashInfer` (Ye, 2023) 进行 KV 缓存量化。

#### 内核设计细节图示

下图(原文 Figure 8)展示了内核融合的详细设计,包括了处理内存不足的 `corner cases`:

![该图像是示意图,展示了三种不同的设计方案,分别为(a)默认设计,(b)角落情况1,以及(c)角落情况2。图中说明了张量在高带宽内存(HBM)与静态随机存取存储器(SRAM)之间的分布,以及量化过程中的数据流。公式示例为 P_1 imes ilde{X},形式化了操作关系。](/files/papers/691a1949110b75dcc59ae36a/images/8.jpg)该图像是示意图,展示了三种不同的设计方案,分别为(a)默认设计,(b)角落情况1,以及(c)角落情况2。图中说明了张量在高带宽内存(HBM)与静态随机存取存储器(SRAM)之间的分布,以及量化过程中的数据流。公式示例为,形式化了操作关系。](/files/papers/691a1949110b75dcc59ae36a/images/8.jpg)
*该图像是示意图,展示了三种不同的设计方案,分别为(a)默认设计,(b)角落情况1,以及(c)角落情况2。图中说明了张量在高带宽内存(HBM)与静态随机存取存储器(SRAM)之间的分布,以及量化过程中的数据流。公式示例为 P_1 imes ilde{X},形式化了操作关系。Figure8:(a)默认设计,(b)角落情况1(c)角落情况2的内核融合设计,用于处理SRAM不足以容纳中间结果的情况。默认设计(DefaultDesign)SRAM足够大以容纳所有源矩阵,形式化了操作关系。*

Figure 8: (a) 默认设计,(b) 角落情况 1 和 (c) 角落情况 2 的内核融合设计,用于处理 SRAM 不足以容纳中间结果的情况。

*   **默认设计 (Default Design):** 当 `SRAM` 足够大以容纳所有源矩阵 \mathbf{P}_1, \mathbf{P}_2, \bar{\mathbf{X}}及其所有中间结果 及其所有中间结果 \bar{\mathbf{X}}'时,所有操作(矩阵乘法和量化)都在一个内核中完成。角落情况1(CornerCase1) 时,所有操作(矩阵乘法和量化)都在一个内核中完成。
*   **角落情况 1 (Corner Case 1):** 当 n_1过大以至于无法将整个 过大以至于无法将整个 \mathbf{P}_1\bar{\mathbf{X}}加载到SRAM时, 加载到 `SRAM` 时,P_1的非约简维度被切片为 的非约简维度被切片为 t_{n_1}块。FlatQuant 块。`FlatQuant` 将 \bar{\mathbf{P}}_1 \bar{\mathbf{X}} \mathbf{P}_2操作融合到一个内核中,其中 操作融合到一个内核中,其中 \bar{\mathbf{P}}_1\mathbf{P}_1的一个切片。随后,调用一个单独的融合内核进行量化(计算量化尺度并缩放输入)。角落情况2(CornerCase2) 的一个切片。随后,调用一个单独的融合内核进行量化(计算量化尺度并缩放输入)。
*   **角落情况 2 (Corner Case 2):** 当 n_1n_2都非常大,导致 都非常大,导致 \mathbf{P}_1, \bar{\mathbf{X}}, \mathbf{P}_2无法同时加载到SRAM时,首先计算 无法同时加载到 `SRAM` 时,首先计算 \bar{\mathbf{X}}' = \mathbf{P}_1^\top \bar{\mathbf{X}}。每个线程块切片。每个线程块切片 P_1\bar{\mathbf{X}}的非约简维度,形状为 的非约简维度,形状为 b_{n_1}。输出。输出 \tilde{\mathbf{X}}'写回全局内存,释放SRAM。然后,切片 写回全局内存,释放 `SRAM`。然后,切片 \tilde{\mathbf{X}}'\mathbf{P}_2的非约简维度,大小为 的非约简维度,大小为 b_{n_2},计算矩阵乘法,并立即量化结果。

# 5. 实验设置

## 5.1. 数据集
实验主要在以下数据集上进行评估:

*   **语言生成任务 (Language Generation Tasks):**
    *   **WikiText-2 (Merity et al., 2016):** 一个小型维基百科文章数据集,常用于语言模型的困惑度(Perplexity - PPL)评估。
    *   **C4 (Raffel et al., 2020):** 一个从 Common Crawl 过滤而来的大规模文本数据集,也常用于语言模型的 PPL 评估。
*   **常识推理问答任务 (Commonsense Reasoning QA Tasks):** 评估模型在零样本(zero-shot)设置下的推理能力。使用了六个数据集:
    *   **ARC-Challenge (Clark et al., 2018):** 一个科学问答数据集,要求模型进行多步推理。
    *   **ARC-Easy (Clark et al., 2018):** ARC-Challenge 的简化版本。
    *   **HellaSwag (Zellers et al., 2019):** 旨在测试模型在给定上下文后选择最合理后续文本的能力,通常包含一些模棱两可或常识性的选择。
    *   **LAMBADA (Paperno et al., 2016):** 一个需要广泛语篇上下文才能准确预测最后一个词元的数据集。
    *   **PIQA (Bisk et al., 2020):** 物理常识问答数据集,要求模型选择解决日常物理任务的正确方法。
    *   **WinoGrande (Sakaguchi et al., 2021):** 一个对抗性的 `Winograd Schema Challenge` 数据集,旨在测试模型理解代词消解的能力,区分语义上相似但含义不同的句子。
*   **校准数据 (Calibration Data):** 用于 `FlatQuant` 训练的校准集包括从 `WikiText-2` 中随机采样的 128 个句子,每个句子包含 2048 个词元。

## 5.2. 评估指标
论文中使用了以下评估指标:

*   **困惑度 (Perplexity - PPL):**
    1.  **概念定义:** 困惑度是衡量一个语言模型好坏的指标,表示模型对一个给定的文本序列预测的“困惑”程度。一个模型的困惑度越低,表示它对文本序列的预测越准确,生成文本的流畅度越高。
    2.  **数学公式:**
```

        \mathrm{PPL}(W) = \exp\left(-\frac{1}{N}\sum_{i=1}^N \log P(w_i|w_1, \dots, w_{i-1})\right)
        3.  **\text{符号解释:}**
        *   $W = (w_1, w_2, \dots, w_N)$ \text{是一个给定文本序列。}
        *   $N$ \text{是序列中词元的总数。}
        *   $w_i$ \text{是序列中的第} $i$ \text{个词元。}
        *   $P(w_i|w_1, \dots, w_{i-1})$ \text{是语言模型在给定前} `i-1` \text{个词元的情况下,预测第} $i$ \text{个词元} $w_i$ \text{的概率。}
        *   $\log P(\cdot)$ \text{表示自然对数概率。}
        *   $\sum_{i=1}^N \log P(w_i|w_1, \dots, w_{i-1})$ \text{是整个序列的对数概率之和。}
        *   $-\frac{1}{N}\sum_{i=1}^N \log P(w_i|w_1, \dots, w_{i-1})$ \text{是平均负对数似然} (negative log-likelihood) \text{或交叉熵} (cross-entropy)\text{。}
        *   $\exp(\cdot)$ \text{是指数函数,将平均负对数似然转换回困惑度。}
*   <strong>\text{准确率} (Accuracy - Acc)\text{:}</strong>
    1.  **\text{概念定义:}** \text{准确率是分类任务中最常见的评估指标之一,它衡量模型在所有预测中正确预测的比例。在问答任务中,它表示模型正确回答问题的百分比。}
    2.  **\text{数学公式:}**
        \mathrm{Accuracy} = \frac{\text{Number of Correct Predictions}}{\text{Total Number of Predictions}}
        \\$
    3.  **符号解释:**
        *   `Number of Correct Predictions` 是模型做出正确预测的数量。
        *   `Total Number of Predictions` 是模型做出预测的总数量。
*   MT-Bench (Multi-turn Benchmark):
    1.  **概念定义:** MT-Bench 是一个专门设计用于评估大型语言模型在多轮对话中表现的基准测试。它通过一系列精心设计的提示(`prompts`)来测试模型在不同领域和能力(如写作、角色扮演、推理、数学、编码、信息提取、STEM、人文学科等)下的表现,并使用 GPT-4 或人类专家作为裁判对模型的回答进行评分。分数通常在 1 到 10 之间。
    2.  **数学公式:** `MT-Bench` 的评分通常不直接通过一个简单的数学公式计算,而是基于评估者(如 `GPT-4`)对模型响应质量的判断。最终结果通常是各个类别平均分的加权平均或简单平均。
    3.  **符号解释:**
        *   `Writing`, `Roleplay`, `Reasoning`, `Math`, `Coding`, `Extraction`, `STEM`, `Humanities`:表示 `MT-Bench` 评估模型性能的八个主要类别。
        *   `Avg`:表示所有类别的平均得分。

## 5.3. 对比基线
论文将 `FlatQuant` 与多种流行的 `INT4` 训练后量化 (PTQ) 方法进行了比较,这些基线具有代表性,涵盖了不同策略:

*   `SmoothQuant` (Xiao et al., 2023): 采用每通道缩放(`per-channel scaling`)来缓解激活中的离群值问题,通过将离群值从激活转移到权重。通常结合 `RTN` 量化。
*   `OmniQuant` (Shao et al., 2023): 一种全方位校准的量化方法,通过联合优化量化参数(如缩放因子和裁剪阈值)来实现更好的性能。
*   `AffineQuant` (Ma et al., 2024): 提出使用仿射变换来优化量化,与 `FlatQuant` 的目标有相似之处,但具体实现方式和效率优化不同。
*   `QUIK-4B` (Ashkboos et al., 2023): 旨在实现端到端 4 比特生成式 LLM 推理,通常结合 `GPTQ` 量化。
*   `QuaRot` (Ashkboos et al., 2024): 一种最先进的方法,通过 Hadamard 变换 (`Hadamard transformation`) 对 LLM 进行旋转,以消除离群值并实现 4 比特推理。
*   `SpinQuant` (Liu et al., 2024c): 也是一种近期提出的先进方法,通过学习的旋转(`learned rotations`)进行 LLM 量化。

**权重和激活量化器:**
为了公平比较,`FlatQuant` 采用 `per-channel` 对称量化用于权重,`per-token` 对称量化用于激活。对于权重,使用了两种常见的量化器:
*   `Round-To-Nearest` (RTN): 最简单的量化方法,将浮点值四舍五入到最近的量化点。
*   `GPTQ` (Frantar et al., 2022): 一种基于 `Hessian` 信息的闭式(`closed-form`)权重更新方法,通常能在 PTQ 中达到更好的性能。`GPTQ` 使用与 `FlatQuant` 相同的校准数据。

**KV 缓存量化:**
`FlatQuant` 也可用于 KV 缓存量化,采用组级(`group-wise`)非对称量化,组大小为 128,与 `LLaMA` 的头维度匹配,以利用自注意力机制的内存密集型特性。

## 5.4. 实现细节
*   **框架:** 基于 `Huggingface` (Wolf, 2019) 和 `PyTorch` (Paszke et al., 2019) 实现。
*   **优化器:** 采用 `AdamW` 优化器,初始学习率为 5e-3,并使用余弦退火学习率衰减策略。裁剪阈值的学习率设置为 5e-2。
*   **训练:** `FlatQuant` 在包含 128 个 `WikiText-2` 句子的校准集上训练 15 个 `epochs`,每个句子包含 2048 个词元。
*   **批处理大小:** 训练时的批处理大小设置为 4。
*   **GPU 内存与时间:** 默认校准过程在 LLaMA-3-8B 模型上需要约 26GB `GPU` 内存,耗时约 0.9 小时(单张 GPU)。
*   **初始化:** `FlatQuant` 对初始化具有鲁棒性,使用随机仿射变换矩阵作为起点。
*   **矩阵逆计算:** 为了高效准确地计算矩阵逆,采用了奇异值分解 (`SVD`) 和自动混合精度 (`AMP`)。`SVD` 能够将 PP1PP^{-1} 的元素精度提高到 FP16 精度下的 1×1061 \times 10^{-6} 量级。`AMP` 可将训练时间和内存使用减少 50%,同时保持几乎无损的精度。

# 6. 实验结果与分析

## 6.1. 核心结果分析

### 6.1.1. 语言生成任务结果
以下是原文 Table 1 的结果:

Method W Quantizer WikiText-2 C4
2-7B 2-13B 2-70B 3-8B 3-70B 2-7B 2-13B 2-70B 3-8B 3-70B
FP16 - 5.47 4.88 3.32 6.14 2.86 7.26 6.73 5.71 9.45 7.17
SmoothQuant RTN 83.12 35.88 26.01 210.19 9.60 77.27 43.19 34.61 187.93 16.90
OmniQuant RTN 14.74 12.28 - - : 21.40 16.24 - - -
AffineQuant RTN 12.69 11.45 - - 15.76 13.97 - - -
QuaRot RTN 8.56 6.10 4.14 10.60 55.44 11.86 8.67 6.42 17.19 79.48
SpinQuant RTN 6.14 5.44 3.82 7.96 7.58 9.19 8.11 6.26 13.45 15.39
FlatQuanT RTN 5.79 5.12 3.55 6.98 3.78 7.79 7.09 5.91 11.13 7.86
QUIK-4B GPTQ 8.87 7.78 6.91 - - - - - - -
QuaRot GPTQ 6.10 5.40 3.79 8.16 6.60 8.32 7.54 6.12 13.38 12.87
SpinQuant GPTQ 5.96 5.24 3.70 7.39 6.21 8.28 7.48 6.07 12.19 12.82
FLATQUaNT GPTQQ 5.78 5.11 3.54 6.90 3.77 7.86 7.11 5.92 11.21 7.93
表 1: LLaMA 模型 4 比特权重和激活量化在 WikiText-2 和 C4 上的困惑度。 * **`FlatQuant` 的卓越性能:** 从 Table 1 可以看出,无论使用 `RTN` 还是 `GPTQ` 作为权重量化器,`FlatQuant` 在 `WikiText-2` 和 `C4` 数据集上的困惑度 (PPL) 结果均持续优于所有现有的最先进方法。 * **接近 FP16 基线:** 对于 LLaMA-2-70B 模型,`FlatQuant` 的 PPL 分数仅比 FP16 基线高 0.23,这表明其在保持模型性能方面非常有效。 * **LLaMA-3-8B 上的显著提升:** 在 LLaMA-3-8B 模型上,`FlatQuant` 将 PPL 从 `SpinQuant` 的 7.39 降低到 6.98,将与 FP16 基线的差距缩小到 0.84。 * **`RTN` 与 `GPTQ` 的可比性:** 值得注意的是,`FlatQuant` 结合 `RTN` 的性能已经与结合 `GPTQ` 的性能相当,而 `RTN` 量化器的校准时间通常显著更短。这对于实际部署具有重要意义。 这些结果强有力地验证了 `FlatQuant` 所提出的可学习变换在增强权重和激活平坦度、缓解离群值影响方面的有效性,从而在低比特 LLM 量化领域建立了新的最先进基准。 ### 6.1.2. 零样本问答任务结果 以下是原文 Table 2 的结果:
Model Method W Quantizer ARC-C ARC-E HellaSwag LAMBADA PIQA Winogrande Avg
2-7B FP16 - 46.16 74.54 75.98 73.92 79.05 69.06 69.79
QuaRot RTN 36.60 61.41 65.07 48.06 72.20 63.06 57.73
SpinQuant RTN 39.42 65.32 71.45 66.16 75.30 63.46 63.52
FLATQUaNT RTN 43.26 72.05 73.64 72.04 77.26 69.53 67.96
QuaRot GPTQ 42.32 68.35 72.53 65.40 76.33 65.11 65.01
SpinqQuant GPTQ 41.72 69.28 72.90 71.28 76.17 66.06 66.23
2-13B FlatQuaNt GPTQ 43.00 71.21 73.31 72.06 77.53 67.72 67.47
FP16 - 49.15 77.44 79.39 76.73 80.47 72.14 72.55
QuaRot SpinQquant RTN 42.83 69.95 73.54 65.62 77.69 67.88 66.25
FLaTQuaNT RTN RTN 43.69 48.04 72.43 76.64 75.52 77.59 72.42 76.60 78.40 79.38 68.90 70.24 68.56 71.42
QuaRot GPTQ 69.01 79.05 70.64
SinqQuant GPTQ 45.48 49.15 73.27 77.19 76.03 76.86 73.86 78.67 69.85 68.91 70.93
FLaTQuaNT GPTQ 48.38 76.94 77.88 76.40 79.65 70.56 71.64
2-70B FP16 - 57.17 81.02 83.81 79.60 82.70 77.98 77.05
QuaRot RTN 52.22 76.60 79.96 74.61 81.12 76.32 73.47
SpinQuant RTN 55.03 79.17 81.76 78.87 81.45 74.27 75.09
FLATQUuANT RTN 56.14 80.30 83.01 79.60 82.75 77.90 76.62
QuaRot GPTQ 55.46 79.76 81.58 79.35 81.83 76.09 75.68
SpinqQuant GPTQ 55.38 79.04 82.57 78.75 82.37 78.22 76.06
3-8B FLAtQUaNT GPTQ 56.40 80.09 82.91 80.01 82.92 76.87 76.53
FP16 - 53.50 77.57 79.12 75.51 80.74 72.93 73.23
QuaRot RTN 38.65 66.54 68.82 57.20 71.82 65.04 61.34
SpinQuant FlaTQuaNt RTN 45.73 71.38 74.07 67.67 76.66 66.38 66.98
RTN 50.00 75.80 76.80 72.91 79.16 72.69 71.23
QuaRot SinqQuant GPTQ 45.73 70.83 72.97 62.70 75.35 67.17 65.79
FLaTQuaNT GPQ GPTQ 47.27 74.20 74.55 70.29 77.37 68.51 68.70
3-70B FP16 50.51 75.88 76.49 73.20 79.00 72.93 71.33
- 64.25 85.94 84.93 79.37 84.44 80.74 79.95
QuaRot SpinQuant RTN 22.18 34.30 32.15 13.35 57.67 52.49 35.36
FLAATQUANT RTN RTN 44.03 69.07 74.57 63.34 76.99 65.98 80.03 65.66
QuaRot 62.12 84.97 83.95 78.73 84.28 79.01
SpinQuant GPTQ GPTQ 49.49 74.37 77.22 71.69 78.89 71.03 70.45
51.96 77.40 77.29 71.90 79.33 72.06 71.66
FlatQuaNt
GPTQ 61.95 84.47 83.87 77.99 83.95 79.24 78.58
表 2: LLaMA 模型 4 比特权重和激活量化在零样本问答任务上的结果。 * **显著缩小性能差距:** 在六个 `zero-shot commonsense QA` 任务上,`FlatQuant` 显著缩小了量化模型与 FP16 基线之间的性能差距。 * **LLaMA-3 系列的挑战与 `FlatQuant` 的表现:** LLaMA-3 模型通常被认为对量化更具挑战性,但 `FlatQuant` 在 LLaMA-3-8B 上实现了 2.00% 的准确率损失,在 LLaMA-3-70B 上仅有 0.94% 的准确率损失,表现出色。 * **`RTN` 模式的竞争力:** 值得注意的是,`QuaRot` 在 `RTN` 模式下的平均准确率比 `GPTQ` 模式低 4% 以上,而 `FlatQuant` 在 `RTN` 模式下就已经能够获得与 `GPTQ` 相当的结果,这进一步凸显了 `FlatQuant` 的有效性和实用性。 ### 6.1.3. 推理延迟 (Inference Latency) 所有推理延迟实验均在 RTX3090 GPU 上进行。 #### 端到端加速比 (End-to-end Speedup) 下图(原文 Figure 4)展示了 `FlatQuant` 在不同批处理大小下的预填充和解码加速比,预填充使用 2048 个词元序列,解码使用 256 个词元序列。 ![该图像是图表,展示了Batch Size对Prefill Speedup和Decoding Speedup的影响。从左侧的图表可见,FlatQuant方法在不同Batch Size下的Prefill Speedup表现优于其他方法;右侧图表则显示了Decoding Speedup的变化,FlatQuant w/ Kernel Fusion也表现突出。](/files/papers/691a1949110b75dcc59ae36a/images/4.jpg) *该图像是图表,展示了Batch Size对Prefill Speedup和Decoding Speedup的影响。从左侧的图表可见,FlatQuant方法在不同Batch Size下的Prefill Speedup表现优于其他方法;右侧图表则显示了Decoding Speedup的变化,FlatQuant w/ Kernel Fusion也表现突出。* Figure 4: 在 LLaMA-2-7B 模型上,不同批处理大小下的预填充和解码加速比。预填充序列长度为 2048,解码序列长度为 256。 * **有内核融合的显著加速:** 即使没有内核融合,`FlatQuant` 也能实现与 `QuaRot` 相当的加速比,这得益于两个轻量级矩阵的 `Kronecker product`。 * **内核融合的优势:** 结合内核融合后,`FlatQuant` 在批处理大小为 64 时,预填充加速比高达 2.30x,解码加速比高达 1.76x,明显快于 `QuaRot`。虽然与纯 INT4 量化仍有微小差距,但其显著提升的精度使其在实际应用中更具价值。 #### 克罗内克积:大小与困惑度 (Kronecker Product: Sizes and Perplexities) 下图(原文 Figure 5)研究了公式 (3) 中不同分解矩阵大小对模型性能和加速比的影响。 ![Figure 5: Prefill speedup and WikiText2 PPL results of different decomposed matrix sizes on LLaMA-2-7B model. We decompose the hidden dimension 4096 into n1timesn2n _ { 1 } \\times n _ { 2 } and range \$n _ {…](/files/papers/691a1949110b75dcc59ae36a/images/5.jpg) *该图像是图表,展示了在 LLaMA-2-7B 模型上,不同降维矩阵大小对预填充速度和 WikiText2 PPL 结果的影响。x 轴为降维大小,y 轴分别表示速度加速比和 PPL 值,速度加速比用红色星形标记,PPL 值用蓝色圆点标记。* Figure 5: 在 LLaMA-2-7B 模型上,不同分解矩阵大小对预填充速度和 WikiText2 PPL 结果的影响。我们将隐藏维度 4096 分解为 n1×n2n_1 \times n_2,并将 n1n_1 的范围从 1 设到 2048,其中 n1=1n_1=1 相当于保持一个全尺寸的变换矩阵。更多细节可在附录 C.6 中找到。 * **矩阵大小对加速比的影响:** 如图所示,克罗内克积矩阵的不同大小显著影响加速比。当 P1\mathbf{P}_1P2\mathbf{P}_2 大小相等时(即 n1=n2=n=64n_1 = n_2 = \sqrt{n} = 64),加速比达到峰值,这与第 3.1 节的理论分析预测一致。 * **对困惑度的影响有限:** 不同的分解矩阵大小对生成文本的困惑度影响有限,这表明 `Kronecker product` 可以在保持量化精度的同时有效最小化推理开销。 这些结果进一步证明了 `FlatQuant` 在通过 `Kronecker product` 最小化推理开销同时保持量化精度方面的有效性。 #### 各在线转换的开销 (Overhead of Each Online Transformation) 下图(原文 Figure 6)考察了 `FlatQuant` 中五个在线转换(即 {Pa,Po,Ph,Pug,Pd}\{ \mathbf{P}_a, \mathbf{P}_o, \mathbf{P}_h, \mathbf{P}_{ug}, \mathbf{P}_d \})对整体加速比的影响。 ![Figure 6: Prefill speedup of LLaMA-2-7B on a sequence length of 2048 under a batch size of 64 after applying different online transformations. We incorporate different online transformations sequenti…](/files/papers/691a1949110b75dcc59ae36a/images/6.jpg) *该图像是一个图表,展示了在序列长度为2048、批量大小为64的情况下,LLaMA-2-7B在应用不同在线变换后的预填充加速。横轴表示应用的在线变换(Ph,Po,Pd,Pa,PugP_h, P_o, P_d, P_a, P_{ug}),纵轴显示加速比(Speedup)。不同颜色和形状的点分别表示采用不同变换的效果,包括FlatQuant无内核融合和有内核融合的情况,此外,INT4和QuaRot也作为对比参考。* Figure 6: 在 LLaMA-2-7B 模型上,在批量大小为 64、序列长度为 2048 的情况下,应用不同在线转换后的预填充加速比。我们依次添加不同的在线转换以评估它们对最终加速比的影响。X 轴上的每个点表示添加了一个新的在线转换。 * **`FlatQuant` 的低开销:** 即使有五个每层转换,`FlatQuant` 导致的端到端减速仅为 0.07x,显著优于 `QuaRot`(其仅三个 Hadamard 转换就导致 0.26x 的减速)。 * **具体转换的贡献:** * Pd\mathbf{P}_d 导致 0.04x 的减速,而 `QuaRot` 的对应转换导致 0.17x。 * Po\mathbf{P}_o 导致 0.01x 的减速,而 `QuaRot` 的对应转换导致 0.1x。 * 其余转换(Pa\mathbf{P}_aPug\mathbf{P}_{ug})的影响微不足道,小于 0.01x。 * **`Kronecker product` 的贡献:** 即使没有内核融合,`FlatQuant` 的额外转换开销仍然与 `QuaRot` 持平,这主要归功于两个轻量级矩阵的 `Kronecker product`。 这些分析表明,`FlatQuant` 即使在引入多个可学习变换的情况下,也能通过巧妙的设计有效控制推理开销。 ## 6.2. 消融实验/参数分析 ### 6.2.1. 消融研究 (Ablation Study) 以下是原文 Table 3 的结果,展示了 `FlatQuant` 主要组件的消融研究:
LT PS LCT WikiText-2 C4 Avg
1266.60 936.41 30.99
>>>> 8.50 13.51 66.82
7.95 12.74 67.08
7.11 11.47 70.72
6.98 11.13 71.23
表 3: LLaMA-3-8B 模型上 `FlatQuant` 主要组件的消融研究。 * **组件效果分析:** * 可学习变换 (LT): 启用 `LT` 后,`WikiText-2` 上的 PPL 从 1266.60 显著降低到 8.50。这表明 `LT` 是 `FlatQuant` 的最核心组件,能够自适应地平坦化权重和激活的分布,对量化性能贡献最大。 * 每通道缩放 (PS): 在 `LT` 的基础上,引入 `PS` 使 `WikiText-2` PPL 进一步降低 0.55 (从 8.50 到 7.95)。这验证了 `PS` 在平衡权重和激活离群值方面的必要性。 * 可学习裁剪阈值 (LCT): 在 `LT` 和 `PS` 的基础上,加入 `LCT` 使 `WikiText-2` PPL 再次降低 0.84 (从 7.95 到 6.98),进一步提升了性能。这表明 `LCT` 有效地处理了转换后可能残余的离群值。 这些结果证明了 `FlatQuant` 的每个组件都是不可或缺的,它们共同作用以增强量化模型的性能。 ### 6.2.2. `FlatQuant` 导致平坦度 (FLATQuant Leads to Flatness) 为了量化 `FlatQuant` 如何促进平坦度,作者通过分析权重和激活的通道级幅度分布进行评估。每个分布表示为一个一维向量 d\mathbf{d}。平坦度通过 d\mathbf{d} 与理想完美平坦分布 d\mathbf{d}' 之间的均方误差 (MSE) 来衡量。理想平坦分布 d\mathbf{d}' 定义为所有通道具有相等幅度且与 d\mathbf{d} 具有相同的 2\ell_2 范数,即 d=d2N1N\mathbf{d}' = \frac{\|\mathbf{d}\|_2}{\sqrt{N}} \cdot \mathbf{1}_N,其中 NN 是通道数,1N\mathbf{1}_N 是一个所有元素为 1 的 NN 维向量。因此,欧几里得距离 dd2\| \mathbf{d} - \mathbf{d}' \|_2 作为平坦度指标,值越小表示分布越接近均匀。 下图(原文 Figure 7)展示了 LLaMA-3-8B 模型在训练过程中,不同 `Transformer` 块的平坦度和训练目标(公式 4)的演变。 ![该图像是一个示意图,展示了不同 Transformer 块(第 7、15、23 和 31 块)在训练过程中平坦度和均方误差(MSE)随 Epochs 的变化。图中蓝线表示 MSE,红线表示平坦度。](/files/papers/691a1949110b75dcc59ae36a/images/7.jpg) *该图像是一个示意图,展示了不同 Transformer 块(第 7、15、23 和 31 块)在训练过程中平坦度和均方误差(MSE)随 Epochs 的变化。图中蓝线表示 MSE,红线表示平坦度。* Figure 7: LLaMA-3-8B 模型在 `FlatQuant` 训练过程中,不同 `Transformer` 块的平坦度和均方量化误差 (MSE)。平坦度指标计算为 `Transformer` 块内所有权重和激活的欧几里得距离之和 dd2\| \mathbf{d} - \mathbf{d}' \|_2。 * **训练与平坦度的关系:** 随着训练损失(MSE)的不断下降,通道分布变得越来越平坦(平坦度指标减小)。 * **验证核心论点:** 这表明 `FlatQuant` 确实学习到了更好的变换来获得更平坦的分布,最终有助于减小量化误差。这强有力地支持了论文的核心论点:“平坦度对 LLM 量化至关重要”。 ## 6.3. 更多可视化 ### 权重和激活分布的可视化 下图(原文 Figure 1)展示了 LLaMA-3-8B 和 LLaMA-3-70B 模型中,不同方法处理后权重和激活的分布。 ![Figur Distributons f weights and inputs from LLaMA-3-8B and LLaMA-3-70B,sorted by the chane magitude (i.e., the Frobenius norm) in descending order. In a Transformer layer, mathbfWo\\mathbf { W } _ { o } an…](/files/papers/691a1949110b75dcc59ae36a/images/1.jpg) *该图像是一个图表,展示了 LLaMA-3-8B 和 LLaMA-3-70B 模型中权重和输入的分布。左侧显示的是第 10 层 Transformer 的 WoW_o(a)和 XoX_o(b);右侧则是第 30 层 Transformer 的 WgW_g(c)和 XgX_g(d)。数据按照信号幅值(Frobenius 范数)降序排列,图中比较了原始数据、每通道缩放、Hadamard 变换和 FlatQuant 方法的效果。* Figure 1: LLaMA-3-8B 和 LLaMA-3-70B 模型中权重和输入的分布,按通道幅度(即 Frobenius 范数)降序排列。在 Transformer 层中,Wo\mathbf{W}_oXo\mathbf{X}_o 分别表示自注意力层中输出投影层的权重矩阵和输入;Wg\mathbf{W}_gXg\mathbf{X}_g 分别表示前馈网络中门控线性层的权重和输入。更多可视化可在附录 D 中找到。 从图 1 可以直观地看到: * **原始分布的陡峭性:** 原始的权重和激活分布通常非常陡峭和分散,带有明显的离群值(如 Figure 1a, 1b)。 * **现有方法的局限性:** `Per-channel scaling` 虽能平坦化激活,但可能导致权重分布更陡峭(如 Figure 1a, 1c)。`Hadamard transformation` 虽有所改善,但有时仍不尽如人意(如 Figure 1a, 1b)。 * **`FlatQuant` 的优势:** 相比之下,`FlatQuant` 始终能使权重和激活的分布更加平坦和均匀(如 Figure 1a-1d 中的黄色曲线),这使得它们更容易进行量化。 ### 量化误差景观的可视化 下图(原文 Figure 2)展示了 LLaMA-3-8B 模型在不同方法下,均方误差 (MSE) 的二维景观。 ![该图像是多个3D图示,展示了不同量化方法在层与标记之间分布的效果,包括(a) Per-channel Scaling,(b) Hadamard Transform,(c) FlatQuant以及(d) Stacked View。这些图形旨在比较量化方法在减少重量和激活分散性方面的有效性。](/files/papers/691a1949110b75dcc59ae36a/images/2.jpg) *该图像是多个3D图示,展示了不同量化方法在层与标记之间分布的效果,包括(a) Per-channel Scaling,(b) Hadamard Transform,(c) FlatQuant以及(d) Stacked View。这些图形旨在比较量化方法在减少重量和激活分散性方面的有效性。* Figure 2: LLaMA-3-8B 模型在不同量化方法下的均方误差 (MSE) 景观。更多细节和可视化可在附录 D 中找到。 * **离群值对误差的影响:** 在初始词元(`pivot tokens`)处,存在大量离群值,导致巨大的量化误差(如 Figure 2a-2b)。`Per-channel scaling` 和 `Hadamard transformation` 对这些误差无能为力。 * **`FlatQuant` 的误差控制:** `FlatQuant` 在 `pivot tokens` 处的误差明显更低(Figure 2c)。 * **误差传播控制:** 量化误差会逐层增加,但沿输入序列的增加不那么明显。`FlatQuant` 在控制误差传播方面表现最佳,其次是 `Hadamard transformation`,最后是 `per-channel scaling`(Figure 2d)。这表明 `FlatQuant` 有效地减少了误差的累积和传播。 # 7. 总结与思考 ## 7.1. 结论总结 本研究重新审视了权重和激活平坦度对于有效量化的重要性,并指出现有解决方案在预量化转换后仍会产生陡峭且分散的值。为此,论文提出了 `FlatQuant`,一种新颖的训练后量化方法,旨在为每个线性层识别快速且可学习的仿射变换,以促进权重和激活的平坦度。 广泛的实验证明了 `FlatQuant` 的优越性,例如,在 LLaMA-3-70B 模型上,W4A4 量化仅导致不到 1% 的准确率下降,显著优于现有最先进的方法。此外,通过将仿射变换和量化融合到高效的定制内核中,`FlatQuant` 在预填充阶段实现了高达 2.3 倍的速度提升,在解码阶段实现了 1.7 倍的速度提升,相比于 FP16 推理。这项工作有望推动低比特量化在 LLMs 实际应用中的进展。 ## 7.2. 局限性与未来工作 论文作者指出了 `FlatQuant` 的以下局限性: * **量化设置的探索不足:** 目前 `FlatQuant` 仅专注于基于超参数的量化方案,未能充分探索其他高级量化技术。 * **新型数据类型的结合:** 作者认为,未来可以探索将 `FlatQuant` 与诸如 `MXFP` 等新型数据类型相结合,这可能带来超越 `INT4` 的优势。 基于这些局限性,作者提出了以下未来研究方向: * 将 `FlatQuant` 扩展到与混合精度量化 (`mixed-precision quantization`) 结合,根据不同层的敏感性采用不同比特宽度的量化。 * 探索 `FlatQuant` 在其他新兴硬件平台和数据类型(如 `MXFP`)上的应用,以充分发挥其潜力。 * 进一步优化 `Kronecker product` 的分解策略,使其能够更自适应地选择 n1,n2n_1, n_2 以适应不同的模型和硬件特性,而非固定或基于启发式规则。 ## 7.3. 个人启发与批判 ### 7.3.1. 个人启发 这篇论文的启发性主要体现在以下几个方面: * “平坦度”作为核心优化目标: 论文将“平坦度”提升到核心地位,并明确指出其对量化误差和误差传播的关键影响。这提供了一个直观且有效的指导原则,将量化问题从单纯的数值逼近提升到分布形态的优化。 * **可学习仿射变换的有效性:** 证明了通过学习针对每个线性层的仿射变换,能够比固定变换(如 `Hadamard`)或简单缩放(如 `per-channel scaling`)更精细、更有效地调整权重和激活的分布,从而实现更高的量化精度。 * **克罗内克积的巧妙应用:** 在保证转换能力的同时,通过 `Kronecker product` 将大型仿射变换矩阵分解为轻量级矩阵,极大地降低了计算和存储开销。这种设计是工程与算法结合的典范,解决了“复杂变换有效但开销大”的普遍难题。 * **高效内核融合的实践价值:** 将仿射变换和量化操作融合到单一的 `Triton` 内核中,避免了 `memory-bound` 操作带来的瓶颈,实现了显著的端到端加速。这对于将量化技术真正落地到高性能推理中至关重要。 * **`RTN` 性能的提升:** `FlatQuant` 使得 `RTN` 量化器的性能足以媲美甚至超越结合 `GPTQ` 的其他SOTA方法,这对于简化部署流程和减少校准时间具有巨大吸引力。 ### 7.3.2. 批判与潜在改进 尽管 `FlatQuant` 取得了显著的进展,但仍有一些潜在问题或可以改进的地方: * **校准数据的依赖和训练成本:** 尽管 `FlatQuant` 属于 `PTQ` 范畴且校准时间较短,但它仍然需要校准数据和数小时的训练。对于一些极端资源受限或需要零样本部署的场景,这仍然是一个额外的步骤。未来的工作可以探索减少校准数据量或实现更快速校准的方法。 * **`Kronecker product` 分解的通用性:** 论文中选择了 n1,n2n_1^*, n_2^* 的启发式规则(最小化 n1+n2n_1+n_2)。虽然实验证明了其有效性,但这种最优分解是否对所有模型架构、隐藏维度和硬件都具有普适性?是否可以通过更智能的自动化搜索或学习机制来确定最佳分解,以进一步优化性能和效率? * **与混合精度量化的结合:** 论文提到了这是一个未来的研究方向。`FlatQuant` 提供的“平坦化”能力理论上可以更好地支持混合精度量化,即为对量化更敏感的层保留更高的比特数,而对不敏感的层使用极低比特数。如何将 `FlatQuant` 的可学习变换与更细粒度的混合精度策略(例如,层内不同部分采用不同比特)结合,是一个值得深入探索的方向。 * **离群值检测与处理的深度:** 尽管 `FlatQuant` 能够通过仿射变换平坦化分布,但对于极其稀疏和巨大的离群值,是否还有更优化的、基于检测的特定处理方法(例如,将极少数离群值保留为高精度或使用专门的编码)可以与 `FlatQuant` 结合,以进一步榨取性能? * **对 `pivot tokens` 的特定优化:** 论文指出 `pivot tokens` 处存在大量离群值和量化误差。虽然 `FlatQuant` 降低了这些误差,但能否针对 `pivot tokens` 设计更专门的、更强大的平坦化策略或量化方案? * **硬件后端支持:** `Triton` 内核融合是性能提升的关键。但定制内核的开发和维护成本相对较高,且对不同硬件平台(如 `TPU` 或其他 `AI` 加速器)的适配可能存在挑战。未来可能需要更自动化的内核生成或更通用的编译器支持。

相似论文推荐

基于向量语义检索推荐的相关论文。

暂时没有找到相似论文。