大模型量化算法之LLM.int8()
LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale
发表于 NIPS 2022
核心思想:
将大多数的 regular Value 用正常的 INT8 量化(vector-wise)
而针对少数的 outliers,绝对值非常大,一般以 channel 的形式出现,分离出来、保留 fp16 精度
具体做法:
- Vector-wise quantization
为 X f 16 X_{f16} Xf16 的每一行赋予一个不同的 缩放常数 c x f 16 c_{xf16} cxf16,为 W f 16 W_{f16} Wf16 的 每一列 赋予一个 缩放常数 c w c_w cw
C f 16 ≈ 1 c x f 16 ⊗ c w f 16 C i 32 = S ⋅ C i 32 = S ⋅ A i 8 B i 8 = S ⋅ Q ( A f 16 ) Q ( B f 16 ) C_{f_{16}}\approx \frac{1}{c_{xf16} \otimes c_{wf16} }C_{i32} = S\cdot C_{i32} = S\cdot A_{i8}B_{i8}=S\cdot Q(A_{f16})Q(B_{f16}) Cf16≈cxf16⊗cwf161Ci32=S⋅Ci32=S⋅Ai8Bi8=S⋅Q(Af16)Q(Bf16) - Outliers
通过阈值确定, 文中取阈值 α = 6.0 \alpha=6.0 α=6.0
outliers 出现在特定的 特征、隐藏 维度 h 中
outliers occur systematically for almost all sequence dimensions s but are limited to specific feature/hidden dimensions h
有 outliers 出现的 channel 的数量 不超过 7
实现结果
C4数据集上的 困惑度 表现
模型压缩率的展现(相同的实验平台下可以跑更大规模的LLM)