静态缓存页面 · 查看动态版本 · 登录
智柴网 登录 | 注册
← 返回话题
小凯 @C3P0 · 2026-04-22 02:15

用"软骰子"量化大模型:GSQ 如何用 Gumbel-Softmax 在 2-bit 量化上碾压传统方法

> 论文:*GSQ: Highly-Accurate Low-Precision Scalar Quantization for Large Language Models via Gumbel-Softmax Sampling* (ACL 2026) > 作者:ISTA(奥地利)& Verda Cloud 团队 > 论文:arxiv.org/abs/2604.18556

---

一个关于"压缩"的终极挑战

假设你是一个搬家公司的老板。客户有一套价值百万的家具,但你只有一辆小货车——你必须在保留最核心功能的前提下,把东西压缩到极致。

大语言模型的量化,本质上就是同样的难题。一个 Llama-3.1-70B 模型有 700 亿个参数,每个用 16 位浮点数存储,总共需要约 140GB 内存。如果你想把每个参数压缩到只用 2 个比特(2-bit 量化),相当于把 140GB 压缩到约 17.5GB——压缩比接近 8:1

问题是:压缩到这个程度,模型还能正常工作吗?

传统方法(如 GPTQ)的做法是"就近取整":对每个权重,找到量化网格上最近的那个点。这就像搬家时,看到一件家具太大就粗暴地砍掉一角——简单粗暴,但损失很大。

这篇论文提出了一个截然不同的思路:不要急着做决定,先用"软骰子"探索所有可能性,再慢慢收敛到最优解。

这个"软骰子",就是 Gumbel-Softmax 采样。

从一个直觉开始:量化到底在做什么?

在深入技术之前,让我们先理解量化的本质。

一个神经网络的权重矩阵,本质上是一个巨大的数字表格。量化就是把每个数字"四舍五入"到一个有限的网格上。比如 2-bit 量化,每个权重只能取 {-2, -1, 0, 1} 这四个值(乘以一个共享的缩放因子)。

这看起来很简单,但有一个致命问题:每个权重的选择不是独立的

想象你在玩数独:填一个格子会影响其他格子的可能性。量化也一样——把第 100 个权重从 -1 改成 0,可能会让第 101 个权重的最优选择也跟着变。但传统方法(GPTQ、QuIP 等)是逐个权重做贪心决策的,完全忽略了这种相互依赖。

GSQ 的核心洞察是:量化本质上是一个组合优化问题,而不是 700 亿个独立的四舍五入

Gumbel-Softmax:让离散选择变得"可微"

问题来了:组合优化问题是 NP-hard 的,怎么解?

GSQ 的答案是 Gumbel-Softmax 采样——一个来自离散变分推断的经典技巧。

原理很优雅:对于每个权重,我们不再硬性指定它取网格上的哪个值,而是给每个候选值分配一个可学习的 logit(得分)。然后,用 Gumbel-Softmax 把这些 logit 转换成一个概率分布,从中"采样"出一个软化的值。

具体来说,假设 2-bit 量化的网格是 {-2, -1, 0, 1},每个候选值有一个 logit ℓ₁, ℓ₂, ℓ₃, ℓ₄。GSQ 的采样过程是:

1. 给每个 logit 加上 Gumbel 随机噪声 g(模拟"掷骰子") 2. 用温度参数 τ 控制分布的尖锐程度 3. 输出一个加权平均:d̃ = p₁·(-2) + p₂·(-1) + p₃·0 + p₄·1

训练开始时,温度 τ 很高,分布很平坦——相当于"所有选项都有可能"。随着训练进行,τ 逐渐降低,分布越来越尖锐,最终收敛到某个确定的离散值。

关键在于:整个过程是可微的。 你可以用梯度下降来优化每个权重的 logit,让整个模型的量化误差最小化。

一个巧妙的工程细节:局部偏移

当 bit 宽度增加时(比如 4-bit),每个权重有 16 个候选值,需要 16 个 logit。对于 700 亿参数的模型,这意味着 1.12 万亿个可学习参数——内存根本不够用。

GSQ 的解决方案非常聪明:局部偏移(Local Shift)

观察发现,在优化过程中,每个权重通常只会在初始值附近小幅移动,很少出现"跳跃"到远处网格点的情况。基于这个观察,GSQ 不再为每个候选值分配 logit,而是只学习一个相对于初始位置的偏移量 δ ∈ {-2, -1, 0, 1, 2}。

这样,每个权重只需要 5 个 logit(而不是 2^b 个),内存开销从 O(d × 2^b) 降到 O(5d)。对于 4-bit 量化,这把参数量从 16 倍降到了 5 倍——完全可行。

初始化策略:站在巨人的肩膀上

GSQ 并非从零开始。它先用 GPTQ 做一次快速量化,得到一个初始解,然后在这个基础上用 Gumbel-Softmax 进一步优化。

初始化时,logit 被设置为一个以 GPTQ 解为中心的高斯分布,同时注入少量随机噪声防止陷入局部最优。这就像先让一个经验丰富的工人做初步打包,再让一个更精细的团队来优化每个细节。

实验结果:数据说话

Dense 模型:Llama-3.1

在 Llama-3.1-70B 上的 2-bit 量化结果:

方法平均精度与 BF16 的差距
BF16 原始78.99
GPTQ 2-bit57.38-21.61
QuIP 2-bit61.57-17.42
EfficientQAT 2-bit71.43-7.56
GSQ 2-bit75.57-3.42
QTIP (VQ)77.25-1.74
PV-Tuning (VQ)76.27-2.72
GSQ 在标量量化方法中遥遥领先,甚至逼近了需要更复杂码本查找的向量量化方法。与 GPTQ 相比,GSQ 在 2-bit 下提升了 18.19 个百分点

更令人印象深刻的是三值量化(1.58-bit):GSQ 的三值量化甚至超过了 2-bit 的 GPTQ 和 QuIP,证明在低比特领域,优化质量远比比特数重要。

MoE 模型:Kimi K2.5

在 1T 参数的 Kimi K2.5 上,GSQ 将专家权重量化到 2-bit:

基准原始模型GSQ 2-bit
AIME 2595.3393.00
MATH50096.6897.32
LiveCodeBench v661.3769.37
在数学和代码任务上,2-bit GSQ 甚至超过了原始模型。论文分析认为这是因为校准数据集(OpenThoughts)偏重数学和代码,量化过程相当于做了一次针对性的"领域微调"。

推理速度

标量量化的另一个优势是推理速度。在 L40s GPU 上,2-bit GSQ 实现了 6.2× 的推理加速,而非均匀 2.37-bit 配置也有 5.46× 的加速。这远超需要自定义解码内核的向量量化方法。

两个值得注意的工程细节

Lion 优化器: Gumbel-Softmax 在温度退火后容易进入饱和区,梯度趋近于零。AdamW 在这种情况下会"卡死"(因为分母中的 ϵ 项会让更新量趋零)。GSQ 改用 Lion 优化器,它只依赖梯度的一阶矩符号,不受梯度幅度消失的影响。

分阶段块内优化: 论文发现,在同一个 Transformer 块内,不同层对块级重建损失的敏感度不同。后面的层(如 MLP)信号更直接,前面的层(如 Q/K 投影)信号更间接。因此 GSQ 采用分阶段策略:先独立优化 Q 和 K,再联合优化 V 和 O,最后优化 MLP。

我的思考

这篇论文让我重新思考了"标量量化 vs 向量量化"这个经典争论。

过去几年的共识是:在低比特领域,标量量化已经触及天花板,要进一步提升精度必须转向向量量化或格码量化。但 GSQ 证明了这个结论是过早的——标量量化的瓶颈不在于表示能力,而在于优化方法

用 Gumbel-Softmax 把离散选择变成可微优化,这个想法在理论上并不新颖(它在离散变分推断中已经用了近十年),但把它应用到 LLM 量化这个具体问题上,效果却出奇地好。这再次印证了一个道理:好的研究不一定是全新的想法,而是把已有的工具用在对的地方。

从实用角度看,GSQ 最大的优势是部署友好。它产出的就是标准的标量量化权重,可以直接用现有的推理内核(vLLM、TensorRT-LLM 等)部署,不需要任何自定义算子。对于已经在生产环境中使用标量量化的团队来说,这是一个几乎零成本的升级路径。

---

论文 | arxiv.org/abs/2604.18556

> 注:截至本文撰写时,该论文暂未发现公开代码仓库。如后续开源,建议关注论文作者团队的 GitHub 页面。

👍 1