大语言模型 (LLM) 已经改变了人工智能,在文本生成、推理和理解方面展现出惊人的能力。但这种强大能力的背后是沉重的代价: 巨大的模型规模、高昂的内存需求和可观的计算成本。如何高效部署这些模型——尤其是在受限硬件上——是一个重大的工程挑战。
量化是缩减这些模型最有效的工具之一。它将模型权重从高精度浮点数 (如 bfloat16) 降低到低精度整数 (如 int4) ,可将内存使用量削减 4 倍或更多,使得强大的模型也能在消费级硬件上运行。
但量化并非易事。精度的过度降低可能会严重损害准确性,尤其是对于那些在量化过程中跳过使用样例数据集的最简单“免校准”方法。
这里的关键“麻烦制造者”是异常值。想象一下,一个矩阵中存在一个异常大的权重值。传统的量化方法必须拉伸整个数值范围来容纳它,这意味着所有其他值都以更粗糙的步长表示,从而导致显著的误差。这就好比创作一幅画,某个巨大角落专门画了一个巨大的太阳,迫使所有其他细节都挤压在狭小的区域中。
来自华为苏黎世研究中心的研究人员在论文《SINO: Sinkhorn-Normalized Quantization for Calibration-Free Low-Precision LLM Weights》中针对这一痛点提出了解决方案。他们引入了 SINQ (Sinkhorn Normalized Quantization,Sinkhorn 归一化量化),一种免校准的方法,通过增加第二组缩放因子优雅地处理异常值。这使得 SINQ 能以单尺度方法无法实现的方式平衡量化误差。下面就来详细解析其工作原理。
异常值的麻烦: 量化入门
在训练后量化 (PTQ) 中,目标是用低精度整数矩阵 \(\mathbf{Q}\) 以及一小组高精度参数来表示高精度权重矩阵 \(\mathbf{W}\),以将数值恢复到原始范围。
最常见的方法是为每个 tile 或权重组使用**一个缩放向量 (\(\vec{s}\)) 和一个零点 **(\(\vec{z}\)) :
\[ \mathbf{W}_{\text{approx}} = \vec{s} \odot (\mathbf{Q} + \vec{z}) \]这里,\(\odot\) 表示逐元素相乘。缩放向量 \(\vec{s}\) 决定量化步长的大小,而 \(\vec{z}\) 则用于将范围居中。当一个组中包含一个巨大的异常值时,其缩放必须被放大以表示它,这迫使该组中所有其他数值使用较大的步长,从而产生较大误差。
应对该问题的策略包括:
- 校准: 如 AWQ 利用样本数据识别重要权重,并以更高精度保留。效果显著,但增加了复杂性、需要数据且可能较慢。
- 非均匀量化: 如 NF4 采用非均匀分布的量化水平,将更多刻度放置在绝大多数权重值所在区域。精度更优,但可能对硬件不够友好。
- 权重空间变换: 如哈达玛变换等旋转操作,可在权重空间中分散异常值,使其更易量化。
SINQ 走了另一条路: 保持均匀量化,避免校准,同时实现可与更复杂方法媲美的效果。
核心方法: SINQ 双尺度缩放
关键洞察在于:
与其仅沿一个维度 (行或列) 控制量化范围,不如同时沿两个维度控制。
新的参数化方式: 双尺度缩放
SINQ 用两个缩放向量取代单缩放向量:
- 行缩放向量: \(\vec{s}\)
- 列缩放向量: \(\vec{t}\)
或者,加上可选的移位向量 \(\vec{z}\):
\[ \mathbf{W}_{\text{approx}} = \vec{s} \odot (\mathbf{Q} + \vec{z}) \odot \vec{t} \]这样带来了新的灵活性。假设位置 \((i, j)\) 有一个异常值。单尺度方法必须放大整行或整列的缩放,从而影响该行或该列的所有其他值。
而使用双尺度缩放,我们可以增加该行的 \(s_i\),同时减小该列的 \(t_j\)——将误差在行和列之间分摊,使影响局部化。
图 1: 与单尺度缩放将异常值影响强行集中在一个维度不同,双尺度缩放允许在行和列之间转移这种影响。
寻找缩放: 矩阵不平衡度指标
双尺度功能强大,但如何最优地选择它们呢?作者定义了一个代理指标:** 矩阵不平衡度**。
不平衡度 \(I(\mathbf{W})\) 定义为:
\[ I(\mathbf{W}) = \frac{\tilde{\sigma}_{\max}(\mathbf{W})}{\tilde{\sigma}_{\min}(\mathbf{W})} \]其中 \(\tilde{\sigma}_{\max}\) 是所有行和列的最大标准差,而 \(\tilde{\sigma}_{\min}\) 是对应的最小标准差。
低不平衡度矩阵在每一行和每一列的分布范围相似——便于量化,因为没有任何一个维度需要不成比例的大缩放。
与 Sinkhorn-Knopp 算法的联系
直接最小化不平衡度很困难——最大/最小运算会干扰基于梯度的优化。作者从 Sinkhorn-Knopp 算法中获得灵感,该算法通常用于归一化行和列的总和。
SINQ 对其进行了改造: 不是归一化总和,而是迭代归一化标准差。
算法概要:
- 从原始权重 \(\mathbf{W}\) 开始。
- 重复 \(n\) 次迭代:
- 将每列除以该列的标准差。
- 将每行除以新的标准差。
- 使用 RTN 或类似方法量化平衡后的矩阵 \(\hat{\mathbf{W}}\);行、列归一化因子即双缩放向量 \(\vec{s}\) 和 \(\vec{t}\)。
该方法收敛迅速,可使行和列的标准差几乎完全一致——从而最小化不平衡度。
图 2: SINQ 的不平衡度优化大幅降低了峰度并改善了困惑度;仅关注峰度则会恶化不平衡度并降低性能。
与其他技术协作: A-SINQ
SINQ 是模块化的——可与其他技术结合。作者展示了 A-SINQ,将 SINQ 与 AWQ 校准结合:
- 应用 SINQ 归一化以平衡矩阵。
- 应用 AWQ 缩放以强调重要权重。
- 进行量化。
这样在保留 AWQ 激活感知的同时,还能利用 SINQ 对异常值的抑制能力。
实验: SINQ 实战测试
团队在 Qwen3 和 DeepSeek 模型上评估了 SINQ,使用的指标包括:
- **困惑度 **(越低越好;衡量语言建模质量)
- **翻转率 **(越低越好;衡量与全精度基线相比预测的变化程度)
免校准、均匀量化
这是 SINQ 的优势领域。
在 3-bit 和 4-bit 场景中,SINQ 始终取得了**最低困惑度 **(表 1) ,优于 RTN、Hadamard+RTN 和 HQQ。在某些情况下,它将与全精度基线的差距缩小了一半。
翻转率结果同样说明问题: 相比竞争方法,SINQ 改变模型答案的频率更低,意味着预测更接近原始模型。
在**内存–困惑度帕累托图 **(图 3) 中,SINQ 位于或接近最优权衡曲线——兼具低内存与低困惑度。
SINQ 也可扩展至大型架构,如 DeepSeek-V2.5-236B MoE,并保持稳健性。
与其他技术的兼容性
- 非均匀量化: 将 SINQ 与 NF4 结合可提升 NF4 基线性能 (表 4) 。对于 32B 模型,均匀 INT4 的 SINQ 甚至优于 NF4——彰显其核心归一化方法的实力。
- 校准量化: A-SINQ (SINQ + AWQ) 经常刷新 SOTA 纪录 (表 5) 。在部分情况下,免校准的 SINQ 甚至超越了 GPTQ 等校准方法。
速度优势: 量化时间
速度是 SINQ 的一大优势。其耗时仅为 RTN 的约 1.1 倍——远快于 HQQ (>2×) ,且显著快于 AWQ (>30×) 或 GPTQ。
结论与启示
SINQ 论文提出了一种简洁而优雅的 LLM 量化方法,其特点是:
- 强大: 双尺度缩放隔离异常值影响,提升精度。
- 巧妙: 矩阵不平衡度是有效的优化目标,使量化更易执行。
- 高速: 在接近 RTN 运行时间下取得 SOTA 级免校准效果——适合时间或数据有限的场景。
- 多用: 可结合非均匀量化及校准方案,进一步提升性能。
在量化方法日益复杂的时代,SINQ 证明了一个深思熟虑、目标明确的想法可以缩小基础免校准量化与复杂技术之间的差距——让高性能 LLM 更小、更快、更易用。