SmoothQuant: Accurate and Efficient Post-Training Quantization for Large Language Models
发表于 ICML 2023
8-bit weight, 8-bit activation (W8A8) 训练后量化方法(PTQ)
量化的部分是 线性层 以及 矩阵乘法,LayerNorm 以及 Softmax 还是 以 更高精度 的 半精度浮点数 FP16 进行计算的
Insights:
大模型中因为 outliers 的存在,其 activation 比较难以量化,而 Weight 相对平坦则更加容易量化;
因此,作者提出将 Activation 的量化困难性部分迁移到 Weight 上,使得 Weight 和 Activation 二者变得都比较容易量化
具体做法也比较简单,
因为,outlier 是出现在 Activation 的 部分 channel 中。因此,作者首先对 Activation 除以一个 per-channel 的 缩放因子,同时将该因子的倒数乘到相应的 Weight 上,确保 “Smooth” 对于模型来说是一个恒等变换。
矩阵形式的公式如下所示:
Y
=
(
X
diag(s)
−
1
)
⋅
(
diag(s)
W
)
=
X
^
W
^
Y=(X\text{diag(s)}^{-1})\cdot(\text{diag(s)}W)=\hat X \hat W
Y=(Xdiag(s)−1)⋅(diag(s)W)=X^W^
达到的效果如下图所示
缩放因子 s 是通过 预训练数据上取得 的 校准数据估计得到的
具体地,第 j 个 输入channel 的缩放因子
s
j
s_j
sj 以如下的方式计算:
s
j
=
max
(
∣
X
j
∣
)
α
/
max
(
∣
W
j
∣
)
1
−
α
s_j=\text{max}(|X_j|)^\alpha/\text{max}(|W_j|)^{1-\alpha}
sj=max(∣Xj∣)α/max(∣Wj∣)1−α
实验结果
实验配置及 Baselines
-
精度
-
推理速度以及显存占用
-
消融实验
α \alpha α 的 选取