用"软骰子"量化大模型: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-bit | 57.38 | -21.61 |
| QuIP 2-bit | 61.57 | -17.42 |
| EfficientQAT 2-bit | 71.43 | -7.56 |
| GSQ 2-bit | 75.57 | -3.42 |
| QTIP (VQ) | 77.25 | -1.74 |
| PV-Tuning (VQ) | 76.27 | -2.72 |
更令人印象深刻的是三值量化(1.58-bit):GSQ 的三值量化甚至超过了 2-bit 的 GPTQ 和 QuIP,证明在低比特领域,优化质量远比比特数重要。
MoE 模型:Kimi K2.5
在 1T 参数的 Kimi K2.5 上,GSQ 将专家权重量化到 2-bit:
| 基准 | 原始模型 | GSQ 2-bit |
|---|---|---|
| AIME 25 | 95.33 | 93.00 |
| MATH500 | 96.68 | 97.32 |
| LiveCodeBench v6 | 61.37 | 69.37 |
推理速度
标量量化的另一个优势是推理速度。在 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 等)部署,不需要任何自定义算子。对于已经在生产环境中使用标量量化的团队来说,这是一个几乎零成本的升级路径。
---
> 注:截至本文撰写时,该论文暂未发现公开代码仓库。如后续开源,建议关注论文作者团队的 GitHub 页面。