为千亿参数模型量身定制,最高可实现 60% 的稀疏化水平。
自 2020 年 gpt-3 横空出世以来,chatgpt 的爆火再一次将 gpt 家族的生成式大型语言模型带到聚光灯下,它们在各种任务中都已显示出了强大的性能。
但模型的庞大规模也带来了计算成本的上升和部署难度的增加。
比如,gpt‑175b 模型总计至少占 320gb 半精度 (fp16) 格式的存储空间,在推理时,起码需要五个 80 gb 存储空间的 a100 gpu。
模型压缩(model compression)是当前使用较多的一种降低大模型计算成本的方法,但迄今为止,几乎所有现有的 gpt 压缩方法都专注于量化(quantization),即降低单个权重的数值表示的精度。
另一种模型压缩方法是剪枝(pruning),即删除网络元素,包括从单个权重(非结构化剪枝)到更高粒度的组件如权重矩阵的整行/列(结构化剪枝)。这种方法在视觉和较小规模的语言模型中很有效,但会导致精度损失,从而需要对模型进行大量再训练来恢复精度,所以遇到 gpt 这样大规模的模型时,成本就又变得过于昂贵了。虽然也有一些单次剪枝方法,无需重新训练即可压缩模型,但它们计算量太大,难以应用于具有数十亿参数的模型。
那么针对 gpt-3 这种规模的大模型,有没有一种方法能够对其作精确的剪枝、同时保持最小的精度损失且降低计算成本?
近日,来自奥地利科学技术研究所 (ista) 的两名研究人员 elias frantar 和 dan alistarh 合作了一项研究,首次针对 100 至 1000 亿参数的模型规模,提出了精确的单次剪枝方法 sparsegpt。
论文地址:https://arxiv.org/pdf/2301.00774.pdf
sparsegpt 可以将 gpt 系列模型单次剪枝到 50% 的稀疏性,而无需任何重新训练。目前最大的公开可用的 gpt-175b 模型,只需要使用单个 gpu 在几个小时内就能实现这种剪枝。
而且,sparsegpt 还很准确,能将精度损失降到最小。比如在目前最大的开源模型 opt‑175b 和 bloom‑176b 上执行sparsegpt 时,可以达到 60% 的稀疏度,同时将精度损失降到最小。
超大模型的研究近几年非常活跃,但到目前为止,还没有一个百亿参数以上的模型能够实现非常准确的高度稀疏化。
现有方法对计算成本的要求都过高,以目前最准确的训练后方法 obc 为例,对于十亿参数模型,它需要 1 个小时以上的时间来进行压缩。已知最快的训练后方法 adaprune 也需要几分钟来对十亿参数模型进行剪枝,按此速度,gpt-3 规模的模型估计需要数百小时(几周)的计算。
大多数现有的剪枝方法如渐进幅度剪枝(gradual magnitude pruning),需要在剪枝步骤后进行大量的再训练以恢复准确性,而 gpt 规模的模型通常需要大量的用于训练或微调的计算量和参数调整量,这使得基于再训练的方法难以应用。因此,在 gpt 规模上应用这种渐进的剪枝方法是行不通的。
ista 团队的这项工作提出了 sparsegpt 方法,可以实现几个小时内在单个 gpu 上运行千亿以上参数的模型,并且足够准确,可将模型修剪到 50%-60% 的稀疏度水平,而不会大幅度降低性能。
sparsegpt 的核心是一种新的大规模近似稀疏回归算法,它可以推广到半结构化(2:4 和 4:8)模式,并且与现有的权重量化方法兼容。
图注:sparsegpt 重建算法的可视化。给定一个固定的剪枝掩码 m,使用 hessian 逆序列(huj )并更新这些行中位于列“右侧”的剩余权重,逐步修剪权重矩阵 w 的每一列中的权重处理。具体来说,修剪后权重(深蓝⾊)“右侧”的权重将被更新以补偿修剪错误,而未修剪的权重不会生成更新(浅蓝⾊)。
大多数现有的剪枝方法如渐进幅度剪枝(gradual magnitude pruning),需要在剪枝步骤后进行大量的再训练以恢复准确性,而 gpt 规模的模型通常需要大量的用于训练或微调的计算量和参数调整量,这使得基于再训练的方法难以应用。因此,在 gpt 规模上应用这种渐进的剪枝方法是行不通的。
sparsegpt 是针对 gpt 规模模型的后训练(post-training)方法,因为它不执行任何微调。
目前有许多量化 gpt 规模模型的后训练的方法,如 zeroquant、llm.int8() 和 nuqmm 等,但由于异常特征的存在,激活量化可能会很困难。gptq 利用近似二阶信息将权重精确量化到 2‑4 位,适用于最大的模型,而且当它与高效的 gpu 内核相结合时,可以带来2‑5 倍的推理加速。
但由于 gptq 侧重于稀疏化而不是量化,因此 sparsegpt是对量化方法的补充,二者可以结合应用。
另外,除了非结构化修剪,sparsegpt 也适用于半结构化的模式,比如流行的 n:m 稀疏格式,在 ampere nvidia gpu 上可以 2:4 的比例实现加速。
对 sparsegpt 压缩模型的效果进行评估后,研究人员发现,大型语言模型进行稀疏化的难度与模型大小成比例,与已有的幅度剪枝(magnitude pruning)方法相比,使用 sparsegpt 能够实现更高的模型稀疏化程度,同时保持最低限度的精度损失。
研究人员在 pytorch 上中实现了 sparsegpt,并使用 huggingface 的 transformers 库来处理模型和数据集,并且都在具有 80gb 内存的单个 nvidia a100 gpu 上进行。在这样的实验条件下,sparsegpt 可以在大约 4 小时内对 1750 亿参数的模型实现完全稀疏化。
研究人员按顺序依次稀疏 transformer 层,这显著降低了内存需求,并且还大大提高了并行处理所有层的准确性。所有的压缩实验都是一次性进行,没有任何微调。
评估对象主要是 opt 系列模型,包含从 1.25 亿到 1750 亿参数的一套模型,方便观察剪枝相对于模型大小的缩放表现。此外还分析了 bloom 的 1760 亿参数变体。
在数据集和评估指标方面,实验采用了原始 wikitext2 测试集的困惑度来评估 sparsegpt 压缩方法的准确性,同时为了增加可解释性,还使用了一些 zeroshot 精度指标。另外,评估的重点在于稀疏模型相对于密集模型基线的准确性,而非绝对数字。
研究人员对 opt 整个模型系列的所有线性层进行剪枝(不包括标准的嵌入和头部),分别达到 50% 的非结构化稀疏度、全 4:8 或全 2:4 的半结构化稀疏度,结果如下图。
图注:opt 模型家族在原始 wikitext2 测试集的困惑度
可见,使用幅度剪枝来压缩的模型准确性在所有尺寸上都很糟糕,而且模型越大,准确度下降得越厉害。
而使用 sparsegpt 来压缩的模型趋势不同,在 27 亿参数下,困惑度损失 100。
另外,sparsegpt 能够从这些模型中移除大约 1000 亿个权重,对模型准确性的影响有限。
最后总结一下,该研究首次表明,基于 transformer 的大规模预训练模型可以通过一次性权重修剪压缩到高稀疏性,无需任何再训练,精度损失也很低。
值得注意的是,sparsegpt 的方法是局部的:在每个修剪步骤之后,它都会执行权重更新,旨在保留每一层的输入输出关系,这些更新是在没有任何全局梯度信息的情况下计算的。因此,大规模 gpt 模型的高度参数化似乎使这种方法能够直接识别密集预训练模型“近邻”中的稀疏精确模型。
另外,由于实验所采用的的准确度指标(困惑度)非常敏感,因此生成的稀疏模型输出似乎与密集模型的输出密切相关。
这项研究在缓解大模型的算力限制方面具有很大的积极意义,将来的一个工作方向是研究大模型的微调机制来进一步恢复精度,同时,扩大 sparsegpt 的方法在模型训练期间的适用性,将会减少训练大模型的计算成本。
6月2日一起见证鸿蒙的真面目吧
【解决方案】还在为电机安全监测难而烦恼?采温方案这样搞
如何激活“衰老”的笔记本电池
盘点三星不为人知的黑科技
未来热轧钢厂去氧化皮的主要趋势将会是怎样的
为千亿参数模型量身定制,最高可实现60%的稀疏化水平
低功耗蓝牙模块在运动健身追踪中的革新应用
1kA脉冲电流发生器测控电路的设计案例
余压监控系统厂家为你讲述余压监控主机的功能
三星2018年量产折叠面板 板上钉钉的消息
断网的原因有哪些
联芯科技推出首款TD/GSM+GSM双卡双待方案
贝塔射线扬尘在线监测系统的详细介绍
为何在外媒眼里,特斯拉不如比亚迪?
CY4型云母电容器
人工智能和机器学习还有深度学习是什么关系
亮点:简易LED环保灯
开关电源的常用电路详解
固定电阻器的检测
八进制计数器设计方案汇总(四款模拟电路原理实现过程)