AB
AiBoss
Wiki

什么是 SmoothQuant?一种面向大语言模型的无训练后训练量化方法

SmoothQuant 是一种免训练、保持精度的通用后训练量化(PTQ)方案,用于对大语言模型做 8 比特权重、8 比特激活(W8A8)量化。它利用权重易量化、激活难量化的事实,通过数学等价变换把激活中的离群值带来的量化难度离线迁移到权重上,从而让大语言模型中所有矩阵乘法都能以 INT8 执行。

SmoothQuant 是一种免训练(training-free)、保持精度(accuracy-preserving)且通用的后训练量化(post-training quantization,PTQ)方案,用于对大语言模型(large language model,LLM)实现 8 比特权重、8 比特激活(W8A8)的整数量化。它要解决的问题是:大语言模型计算与显存开销很大,量化本可以降低显存占用并加速推理,但已有方法难以同时兼顾精度与硬件效率,尤其是激活值中的离群值使激活难以被低比特表示。

为什么重要

大语言模型在各类任务上表现优异,但推理阶段的计算和内存开销都很高。量化是压缩模型、降低显存占用并加速推理的常用手段,然而按照该论文的表述,现有方法无法同时保持精度与硬件效率。

问题的根源在于权重与激活的量化难度不对称:权重容易量化,激活不容易量化。激活中存在的离群值会显著拉大量化误差,如果直接对激活做低比特量化,精度损失往往难以接受;而如果只量化权重、让激活保持高精度,又无法充分利用低位宽整数运算带来的吞吐与显存收益。SmoothQuant 的出发点正是绕开这一不对称性,使权重和激活可以同时以 INT8 表示,从而在矩阵乘法层面获得硬件效率。

工作机制

该论文给出的核心做法可以概括为以下几点:

  • 离线平滑激活离群值。 SmoothQuant 通过一个数学上等价的变换,在离线阶段把量化的难度从激活迁移到权重。变换后激活的离群值被削弱,权重则承担了更多的动态范围压力,而模型的数学计算结果保持不变。
  • 免训练。 该方案不需要重新训练或微调模型,属于后训练量化,因此可以直接作用于已经训练好的大语言模型。
  • 覆盖全部矩阵乘法。 借助上述等价变换,SmoothQuant 使大语言模型中所有矩阵乘法都可以采用权重与激活均为 INT8 的量化形式,而不是只对部分算子做低比特处理。
  • 面向硬件的 W8A8 形式。 权重和激活同为 8 比特整数,便于在支持 INT8 运算的硬件上获得实际的加速与显存收益,这也是该方案区别于仅量化权重方案的关键。

需要说明的是,上述机制描述来自该论文自身的表述;论文将其定位为一种「即插即用」(turn-key)的方案,用以降低硬件成本并让更多使用者能够部署大语言模型。这是作者的主张,而非独立评测结论。

典型例子

根据该论文摘要,SmoothQuant 的 INT8 量化适用于大语言模型中的全部矩阵乘法,论文中列举的模型家族包括 OPT、BLOOM、GLM、MT-NLG、Llama-1/2、Falcon、Mistral 与 Mixtral。论文报告称,在这些模型上可实现最高 1.56 倍的加速与 2 倍的显存降低,而精度损失可以忽略;并称该方案使得在单个节点内服务 530B 规模的大语言模型成为可能。这些数字均为论文作者给出的实验结果,具体测试条件与基线需参见原文。

该工作发表于 ICML 2023,论文标注前两位作者贡献相同。论文的提交历史显示,初版于 2022 年 11 月 18 日提交,此后经过多次修订。

边界与常见误解

首先,SmoothQuant 是一种量化方法,而不是模型结构或推理框架;它改变的是数值表示与相应的变换,不改变模型本身的参数语义。其次,「免训练」不等于「无条件适用」:该论文的验证覆盖了其列举的若干模型家族,但论文并未声称对所有模型、所有任务或所有硬件后端都能获得同等收益,实际效果取决于模型、校准数据与部署环境。

另一个常见误解是把论文报告的加速比与显存降低当作普遍保证。1.56 倍加速与 2 倍显存降低是论文在特定设置下测得的结果,属于作者报告的数据,不能直接外推为任意场景的预期。此外,W8A8 的收益依赖硬件对 INT8 运算的支持程度,在缺乏相应支持的环境中,低位宽表示未必能转化为实际吞吐提升。

还应区分 SmoothQuant 与仅量化权重的方案:后者通常保留较高精度的激活,因而在激活主导的计算路径上收益有限;SmoothQuant 的目标正是让激活也进入 8 比特,但代价是需要引入额外的平滑变换与相应的缩放参数,并在部署时正确融合这些变换。

参考资料