大模型也能切片,微软SliceGPT让LLAMA-2计算效率大增
大型语言模型(LLM)的参数动辄数十亿,背后是数万亿 token 的训练数据——这种规模带来的部署成本有多高,想必大家心里都有数。也正因如此,业界一直在探索各种压缩技术来降低计算需求。常见的路线大致分四类:蒸馏、张量分解(包括低秩因式分解)、剪枝和量化。其中,剪枝算是个老牌方法,但问题在于,不少剪枝方案需要在压缩后做恢复微调(RFT)才能保住性能,这反而让整个过程变得昂贵且难以规模化。
那么,有没有一种方法既能砍掉冗余参数,又不依赖昂贵的微调步骤?来自苏黎世联邦理工学院和微软的研究团队给出了一个答案——SliceGPT。思路非常直接:删除权重矩阵中的整行和整列,直接降低网络的嵌入维数,同时尽可能保持模型性能。研究显示,借助 SliceGPT,用单个 GPU 花几个小时就能压缩一个大模型,即便不做恢复微调,在生成任务和下游任务上也能交出有竞争力的成绩。该论文已被 ICLR 2024 接收。
论文概览:
- 论文标题:SLICEGPT: COMPRESS LARGE LANGUAGE MODELS BY DELETING ROWS AND COLUMNS
- 论文链接:https://arxiv.org/pdf/2401.15024.pdf
传统的剪枝方法,本质上是把权重矩阵中的某些元素置零,然后(有选择性地)调整周围元素来补偿。这种做法会产生一种稀疏模式——在神经网络的前向传播中,部分矩阵乘法运算可以被跳过。运算速度的提升幅度,取决于稀疏程度以及稀疏模式的结构化程度:模式越合理,计算收益越明显。
SliceGPT 的做法则更“激进”。它不是零散地置零,而是直接切掉权重矩阵的整行或整列。在动手切之前,研究团队会对网络做一次变换,保证预测结果基本不变,同时让剪切操作带来的影响降到最低。最终得到的是一个更小的权重矩阵,同时网络各模块之间传递的信号也变少了——本质上就是降低了神经网络的嵌入维度。下面这张图(图1)对比了 SliceGPT 与现有稀疏性方法的差异。

实验结果相当亮眼:对于 LLAMA-2 70B、OPT 66B 和 Phi-2 模型,SliceGPT 能去除多达 25% 的参数(包括嵌入层),同时零样本任务性能分别保持在密集模型的 99%、99% 和 90%。压缩后的模型可以在更少的 GPU 上运行,计算速度也更快——无需任何额外的代码优化。比如,在 24GB 的消费级 GPU 上,LLAMA-2 70B 的推理总计算量被降到了密集模型的 64%;在 40GB 的 A100 GPU 上,这个数字是 66%。
值得一提的是,这项研究还提出了一个关键概念——Transformer 网络中的计算不变性(computational invariance),正是这个概念让 SliceGPT 成为可能。
SliceGPT 详解
SliceGPT 的核心,在于利用了 Transformer 架构内在的计算不变性。简单来说,你可以对一个组件的输出施加一个正交变换,只要在下一个组件中把它“撤销”回去,整个网络的输出就不会改变。研究团队发现,网络各区块之间的 RMSNorm 运算不会干扰这种变换——它们之间是可交换的。
在论文中,作者先阐述了在 RMSNorm 连接的 Transformer 网络中如何实现这种不变性,然后说明如何把用 LayerNorm 连接训练的网络转换成 RMSNorm。接着,他们介绍了用主成分分析法(PCA)来计算各层变换的方法,从而把区块之间的信号投射到其主成分上。最后,他们解释了删除次要主成分为何等价于切掉网络的行或列。
Transformer 网络的计算不变性
用 Q 表示正交矩阵。注意,向量 x 乘以 Q 不会改变向量的 norm(因为在这项工作中,Q 的维度始终与 Transformer 的嵌入维度 D 相匹配)。
假设 X_ℓ 是 Transformer 一个区块的输出,经过 RMSNorm 处理后,以 RMSNorm (X_ℓ) 的形式输入下一个区块。如果在 RMSNorm 之前插入一个带有正交矩阵 Q 的线性层,并在 RMSNorm 之后插入 Q^⊤,那么网络保持不变——因为信号矩阵的每一行都会依次乘以 Q、经过归一化、再乘以 Q^⊤。
由于网络中的每个注意力或 FFN 块都对输入和输出进行线性运算,我们完全可以把额外的运算 Q“吸收”到这些线性层中。当然,因为网络包含残差连接,还必须将 Q 应用于所有之前的层(一直到嵌入层)和所有后续层(一直到 LM Head)的输出。
所谓不变函数,就是指输入变换不会导致输出改变的函数。在这个案例中,对 Transformer 的权重施加任何正交变换 Q 都不会改变最终结果,这意味着计算可以在任何变换状态下进行。作者将这一特性定义为计算不变性,并在下文的定理中给出了正式定义。
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名