自2020年GPT-3诞生以来,ChatGPT的爆发再次带来了生成式大规模语言GPT家族的模型走在了前列。身处聚光灯下,他们在各项任务中都表现出了强劲的表现。但是模型的庞大规模也带来了计算成本的增加和部署的难度。例如,GPT?175B模型总共需要至少320GB半精度(FP16)格式的存储,需要至少5个A100GPU和80GB存储才能进行推理。模型压缩(modelcompression)是目前广泛使用的降低大型模型计算成本的方法,但迄今为止,几乎所有现有的GPT压缩方法都集中在量化(quantization)上,即减少单个权重的数值表示.精确。模型压缩的另一种方法是修剪,它删除了从单个权重(非结构化修剪)到更细粒度的组件(例如权重矩阵的整行/列(结构化修剪))的网络元素。这种方法适用于视觉和较小规模的语言模型,但会导致精度损失,需要对模型进行大量的重新训练才能恢复精度,因此当涉及到GPT等大规模模型时,成本变得过于昂贵。虽然也有一些单次剪枝方法可以压缩模型而无需重新训练,但它们的计算成本太高,无法应用于具有数十亿参数的模型。那么对于GPT-3大小的大型模型,有没有一种方法可以准确地对其进行剪枝,同时保持最小的精度损失并降低计算成本?近日,奥地利科技学院(ISTA)的两位研究人员EliasFrantar和DanAlistarh合作开展的一项研究首次提出了一种针对10到1000亿参数模型规模的精确单次剪枝方法SparseGPT。论文地址:https://arxiv.org/pdf/2301.00774.pdfSparseGPT可以单次将GPT系列模型剪枝到50%的稀疏度,无需任何重新训练。最大的公开可用模型GPT-175B仅使用一个GPU在几个小时内实现了这种修剪。而且,SparseGPT非常准确,可以将准确率的损失降到最低。例如,SparseGPT在目前最大的开源模型OPT-175B和BLOOM-176B上执行时,可以实现60%的稀疏度,同时将精度损失降至最低。电驱动SparseGPT算法超大模型的研究近年来非常活跃,但迄今为止,还没有一个参数超过100亿的模型能够实现非常精确的高层次稀疏化。现有方法对计算成本的要求太高。以目前最精准的训练后方法OBC为例,十亿参数模型压缩需要1个多小时。已知最快的训练后方法AdaPrune也需要几分钟来修剪十亿参数模型,按照这个速度,GPT-3规模模型估计需要数百小时(数周)的计算。大多数现有的剪枝方法,如渐进幅度剪枝,需要在剪枝步骤后进行大量的再训练以恢复准确性,而GPT尺度模型通常需要大量的计算和参数调整,这使得基于再训练的方法难以应用。因此,在GPT规模上应用这种渐进式剪枝方法是不可行的。ISTA团队的这项工作提出了一种SparseGPT方法,可以在几个小时内在单个GPU上运行一个超过1000亿个参数的模型,并且足够准确,可以将模型剪枝到50%-60%的稀疏度水平而不显着降低性能。SparseGPT的核心是一种新的大规模近似稀疏回归算法,可泛化到半结构化(2:4和4:8)模式,并与现有的权重量化方法兼容。大多数现有的剪枝方法,如渐进幅度剪枝,需要在剪枝步骤后进行大量的再训练以恢复准确性,而GPT尺度模型通常需要大量的计算和参数调整,这使得基于再训练的方法难以应用。因此,在GPT规模上应用这种渐进式剪枝方法是不可行的。SparseGPT是GPT规模模型的后训练方法,因为它不执行任何微调。GPT-scale模型训练后量化的方法有很多,例如ZeroQuant、LLM.int8()和nuQmm等,但由于异常值特征的存在,激活量化可能很困难。GPTQ利用近似二阶信息将权重精确量化到2-4位,适用于最大的模型,结合高效的GPU核心,可以带来2-5倍的推理加速。但由于GPTQ侧重于稀疏化而不是量化,因此SparseGPT是对量化方法的补充,两者可以结合使用。此外,除了非结构化剪枝,SparseGPT还适用于半结构化模式,比如流行的n:m稀疏格式,在AmpereNVIDIAGPU上可以达到2:4的加速比。SparseGPT:稀疏度高,精度损失小在评估了SparseGPT压缩模型的效果后,研究人员发现大型语言模型的稀疏化难度与模型的大小成正比,这与现有的量级剪枝(MagnitudePruning)方法与SparseGPT相比,可以实现更高程度的模型稀疏化,同时保持最小的精度损失。研究人员在PyTorch中实现了SparseGPT,并使用HuggingFace的Transformers库来处理模型和数据集,所有这些都在具有80GB内存的单个NVIDIAA100GPU上进行。在这些实验条件下,SparseGPT可以在大约4小时内完全稀疏一个1750亿参数的模型。研究人员顺序稀疏Transformer层,这显着降低了内存需求,也大大提高了并行处理所有层的准确性。所有压缩实验都在一次通过中进行,没有任何微调。评估对象主要是OPT系列模型,包括一组1.25亿到1750亿参数的模型,便于观察剪枝相对于模型尺寸的缩放性能。此外,还分析了BLOOM的1760亿个参数变体。在数据集和评估指标方面,实验利用原始WikiText2测试集的困惑度来评估SparseGPT压缩方法的准确性,同时为了增加可解释性,还使用了一些ZeroShot准确性指标。此外,评估侧重于稀疏模型相对于密集模型基线的准确性,而不是绝对数字。研究人员将OPT模型系列中的所有线性层(不包括标准嵌入和头部)剪枝到50%非结构化稀疏度、全4:8或全2:4半结构化稀疏度,分别度,结果如下图所示。可以看出,使用幅度剪枝压缩的模型在所有尺寸下的精度都很糟糕,模型越大,精度下降得越多。使用SparseGPT压缩的模型趋势不同。27亿参数下,perplexityloss<1point,660亿参数下,perplexityloss为零损失。此外,与密集模型基线相比,在非常大的模型尺寸下的准确性甚至有所提高。较大的模型更容易稀疏化。大模型更容易稀疏化是一种普遍趋势。在固定的稀疏度水平下,稀疏模型相对于密集模型的相对精度下降会随着模型大小的增加而缩小。.作者推测这可能是由于它们的参数化程度更高,整体抗噪能力更强。与密集模型基线相比,在最大尺度下,当使用SparseGPT将模型压缩到4:8和2:4稀疏度时,困惑度增长仅为0.11和0.39。这个结果意味着我们可以在实践中实现2倍的加速,商业NVIDIAAmpereGPU已经支持2:4稀疏度。作者研究了OPT-175B和BLOOM-176B两千亿模型的性能与使用SparseGPT带来的稀疏度之间的关系,结果如下图所示。可以看出,对于OPT-175B模型,幅度剪枝最多可以实现10%的稀疏度,随之而来的是精度损失较大。而SparseGPT在perplexity增加的情况下可以达到60%的稀疏度。对于BLOOM-176B模型,虽然幅度剪枝可以实现30%的稀疏度,而不会造成明显的精度损失,相比之下,SparseGPT可以实现50%的稀疏度,提高了1.66倍。此外,在80%的稀疏度下,使用SparseGPT压缩的模型的困惑度保持在一个合理的水平,但是当幅度修剪达到40%的OPT稀疏度和60%的BLOOM稀疏度时,困惑度已经>100。此外,SparseGPT能够从这些模型中删除大约1000亿个权重,同时对模型精度的影响有限。总而言之,这项研究首次表明,基于Transformer的大规模预训练模型可以通过一次性权重剪枝压缩到高稀疏度,无需任何重新训练,并且精度损失很小。值得注意的是,SparseGPT的方法是局部的:在每个剪枝步骤之后,它都会执行权重更新,旨在保留每一层的输入输出关系,这些更新是在没有任何全局梯度信息的情况下计算的。因此,大规模GPT模型的高度参数化似乎使该方法能够直接识别密集预训练模型的“最近邻”中的稀疏准确模型。此外,由于实验中使用的精度指标(困惑度)非常敏感,因此生成的稀疏模型的输出似乎与密集模型的输出密切相关。该研究对于缓解大型模型的计算能力限制具有重要的积极意义。未来的工作方向之一是研究大型模型的微调机制,进一步恢复精度。同时,拓展SparseGPT方法在模型训练过程中的适用性。它将降低训练大型模型的计算成本。
