机器之心编译编辑:袁铭怿
我们可以压缩大型语言模型以获得更好的性能吗? 本文中,研究者提出了剪枝技术 SparseGPT,可以一次性修剪至少 50% 的稀疏性,而无需任何重新训练,并且准确率损失最小。
GPT 家族的大型语言模型(LLMs)在诸多任务中取得了出色的表现,但模型庞大的规模和高昂的计算成本也增加了部署难度。例如,性能最好的 GPT-175B 模型约有 1750 亿参数,以半精度(FP16)格式计算,总计至少占 320GB(计算 1024 的倍数)的存储空间,所以需要至少 5 个 A100 GPU,且在推理时,每个 GPU 都起码需要有 80GB 的内存。因此,自然就需要通过模型压缩来降低成本。迄今为止,几乎所有现有的 GPT 压缩方法都侧重于量化,即降低单个权重数值表示的精确度。
剪枝是一种较为普遍的模型压缩方法,它将网络元素从单个权重(非结构化剪枝)删除到更高粒度的组件,例如权重矩阵的整行 / 列(结构化剪枝)。该方法已经投入使用一段时间了,能够有效地应用于视觉和较小规模的语言模型和任务。然而,最优的剪枝方法需要对模型进行大量的再训练,以恢复删除的元素所造成的准确率损失,所以遇到向 GPT 这样规模的模型时,成本也会极为高昂。虽然也存在一些 one-shot 剪枝方法,无需重新训练即可压缩模型,但弊端在于,它们的计算成本太高,无法应用于具有数十亿个参数的模型。因此,到目前为止,几乎没有能对 GPT-3 比例模型进行精确剪枝的方法。
本文中,来自奥地利科技学院等机构的研究者提出 SparseGPT,其是目前首个 one-shot 精确剪枝技术,可以在 100 - 1000 亿参数的模型规模上有效地运作。SparseGPT 的工作原理是将剪枝问题简化为大规模的稀疏回归实例。它基于新的近似稀疏回归求解器,用于解决分层压缩问题,其效率足以在几个小时内使用单个 GPU 在最大的 GPT 模型(175B 参数)上执行。同时,SparseGPT 准确率足够高,不需要任何微调,剪枝后所损耗的准确率也可以忽略不计。例如,当在最大的公开可用的生成语言模型(OPT-175B 和 BLOOM-176B)上执行时,SparseGPT 在 one-shot 测试中剪枝到 50-60% 的稀疏性,无论是以困惑度还是 zero-shot 测试准确率来衡量,损失准确率都极小。
论文地址:https://arxiv.org/pdf/2301.00774v1.pdf图 1 为实验结果,有以下两个关键点需要说明:首先,如图 1(左)所示,SparseGPT 可以在 OPT 家族的 1750 亿参数变量中剪枝到高达 60% 的均匀分层稀疏性,而几乎不会损失精度。相比之下,唯一已知的在此规模下工作的 one-shot 基线 —— 幅度剪枝(Magnitude Pruning)的准确率仅保持到 10% 的稀疏度,并在超过 30% 的稀疏度时完全崩掉。
其次,如图 1(右)所示,SparseGPT 还可以在更严格但对硬件友好的 2:4 和 4:8 半结构化稀疏模式中准确地施加稀疏性。尽管相对于密集基线,这些模式往往会失去额外的准确性,特别是对于较小的模型而言,但计算速度可以直接通过这些稀疏模式得出。此外,由技术引起的稀疏性与通过量化获得的额外压缩可以很好地混合在一起。
值得注意的是,该方法仅针对局部,从某种意义上说,它依赖于权重更新,旨在保留每一层的输入输出关系,计算是在没有任何全局梯度信息的梯度下进行的。因此,用户可以直接识别密集预训练模型近邻中的稀疏精确模型。另一处发现如图 1(右)所示:较大的模型更容易稀疏化。具体来说,对于一个固定的稀疏水平,随着模型大小的增加,稠密和稀疏模型变体之间的相对准确率差距会随之缩小,如此一来,如果将最大的模型剪枝到 50% 的稀疏性,实际上不会降低准确率。实验部分会详细说明这一观察结果,对于未来压缩巨型模型的研究而言,这具有极大的鼓舞性。SparseGPT 算法概览SparseGPT 重建算法的可视化。给定一个固定的修剪掩码 M,使用 Hessian 逆序列,增量地修剪权重矩阵 W 的每一列的权重,并更新这些行中的其余权重(位于正在处理的列的右侧)。具体来说,修剪权重的右边(深蓝色部分)将被更新以补偿修剪错误,而未修剪的权重不生成更新(浅蓝色部分)。
下图是完整算法伪代码:
实验结果该研究进行了多项实验。第一组实验研究了 LLM 稀疏化的难度如何随着大小而变化。为此,研究考虑到了整个 OPT 模型家族,并统一剪枝所有线性层(不包括标准的嵌入和头部),分别达到 50% 的非结构化稀疏度,4:8 或 2:4 的半结构化稀疏度。(这三种模式都对应 50% 的整体稀疏度,但 2:4 模式最为严格的,其次是 4:8 和非结构化稀疏度。)表 1 中给出了原始 WikiText2 性能数据,具体可视化结果参见图 1(右)。
接下来,是对目前公开可用最大规模的密集模型 OPT-175B 和 BLOOM-176B 的研究结果,以及对它们的性能如何随着 SparseGPT 或幅度剪枝的稀疏程度而缩放的结果。结果见图 1(左)和图 5(左)。
下面提供了几个 ZeroShot 任务中 OPT-175B 的各种稀疏变体的结果来补充该研究对困惑度的评估。众所周知,ZeroShot 的评估相对嘈杂,但同时更容易阐释。表 2 汇总了所有的数据。
最后,另一个研究方向是将稀疏性和量化结合,即将稀疏性可以加速计算和量化可以节省内存两点相结合。具体来说,如果将一个模型压缩到 50% 稀疏 + 4 位权重,只存储非零权重并使用位掩码来指示它们的位置,那么这与 3 位量化消耗的总体内存是相同的。图 5(右)将 SparseGPT 50% + 4 位数字与最先进的 GPTQ 3 位数字进行比较。虽然似乎有一些异常值,但对于一些模型来说,50% + 4 位模型比各自的 3 位版本更准确,包括 175B 的 8.55 vs. 8.68 3 位。2:4 和 4:8 与 4 位的组合也在 OPT-175B 上进行了测试,产生的测试结果显示:困惑度为 9.20 和 8.86,使用额外的量化技巧(如 blocking)也许能实现进一步的改进。