消除激活值(outliers),大语言模型低比特量化有新招了 ——
自动化所、清华、港城大团队最近有一篇论文入选了 NeurIPS 2024 (Oral Presentation),他们针对LLM权重激活量化提出了两种正交变换,有效降低了outliers现象,达到了4-bit的新SOTA。
简单理解,在大语言模型(LLM)中,有一些中间层输出的数值(激活值 Activation)会变得非常大,它们被称为“outliers(离群值)”,这些 outliers给模型量化带来了挑战。
补充一下,量化可以将模型中的数值从浮点数转换为整数,以减少模型的大小和计算需求。
而一旦在量化过程中存在大量outliers,会导致量化后的模型性能下降。
明白了这层道理, 我们再来看他们团队的一项名为DuQuant的新研究。
首先, 他们发现在LLM的前馈网络 (FFN) 模块中的, 存在明显的 Massive Outliers (非常大的激活值)。
这种outliers不同于以往发现的Normal Outliers,表现为大于绝对值几百的异常值并局限于个别的tokens中——
它们导致现有的量化算法(如SmoothQuant和OmniQuant)在将模型的权重和激活值量化为4位二进制数时表现不佳。
对此,团队提出了一种新的量化方法,叫做。
DuQuant通过学习旋转和置换变换矩阵,在Activation矩阵内部将outliers转移到其他通道,最终得到平滑的激活矩阵,从而大幅降低了量化难度。
实验显示,使用DuQuant方法,在4位权重和激活量化的设置下, 模型达到了SOTA 。
同时,DuQuant的训练非常快速,可以在 50s内 完成7B模型的量化过程, 即插即用 。
在每个Transformer块的常见模块中,多头自注意力(MSA)和前馈网络(FFN)基本上都由 线性层组成 ,将其表示为:
模型量化通过将浮点数(FP16, BF16)表示的模型权重或激活值转换为低位的浮点数或整数来减少内存占用,权重激活量化可以通过使用低比特乘法的算子进一步加快模型推理的速度。
该工作重点关注 低比特整型量化 ,目标是获得更好的硬件支持。
具体来说,