GPT-3、PaLM 和 Bloom 等大型言语模型 (LLM) 在生成类人文本方面表现出了令人印象深入的才能。但是,它们的巨大规模和数千亿个参数使得其运转核算本钱昂扬,阻止了它们的普及,昂扬的费用也让具有很多核算资源的大型科技公司却步。
最近的研讨强调了稀少微调处理这一挑战的潜力。在特定使命的练习期间,稀少微调有选择地修剪模型中不太重要的衔接。这会导致权重稀少,然后使模型能够以最小的精度丢失运转得更快。
在本文中,将深入探讨这项有前途的技能的细节并讨论其原理。
要害词:大型言语模型、GPT-3、PaLM、Bloom、稀少微调、依据 Transformer 的模型、自监督、BERT、核算本钱、稀少权重、预练习、微调、稀少性、结构化剪枝、冗余、专业化、从头练习、自回归言语建模、掩码言语建模、结构化稀少性、蒸馏丢失、硬件感知剪枝。
LLMs昂扬本钱的练习本钱
GPT-3 等依据 Transformer 的模型以自我监督的办法对很多文本数据进行练习。经过让他们触摸言语中的统计形式和关系,他们能够学习强壮的表征,然后很好地转移到下流 NLP 使命。
但是,随着规模的扩大,它们的才能明显前进。例如,
GPT-3
具有1750
亿个参数,比BERT
等之前的模型大几个数量级。但这种缩放需求付出巨大的核算本钱。练习和运转如此巨大的模型需求专门的硬件,例如只要少数组织能够拜访的多 GPU 服务器。研讨人员估计,像GPT-3
这样的模型的练习本钱将到达460 万
至1200 万
美元!即使经过培训,为搜索、谈天机器人和内容生成等应用布置LLMs依然很昂贵。它们的内存占用和核算要求突破了现代硬件的束缚。
显然,减轻这种核算负担的技能能够大大前进 LLMs 的生存才能,这就是稀少微调的用武之地。
稀少微调的概念
现在,大多数大言语模型首要以自我监督的办法在通用语料库上进行预练习。然后,这种预练习模型在特定于使命的数据集上进行微调,以使其专门用于下流应用程序。
例如,能够依据网络文本对模型进行预练习,然后依据客户支撑日志进行微调以创立谈天机器人。或者能够在科学论文上对其进行微调,以答复特定范畴的问题。
稀少微调在第二阶段将稀少性引进到模型权重中。稀少性是指参数值为零,不需求任何核算。权重以结构化办法修剪,将某些块或行/列设置为零,而不是随机删去各个权重。这坚持了能够有用运用的常规稀少形式。
理想情况下,能够在对模型精度影响最小的情况下引进高稀少性(例如 75-90%
)。由此发生的稀少模型需求更少的核算,然后完成更快、更高效的推理。
为什么稀少微调有帮助
稀少微调能够有用紧缩 LLM 有以下几个原因:
- 大型模型中的冗余:大型模型具有许多非必要参数的明显冗余。结构化修剪体系地消除了这些冗余。
- 新使命的专业化:将模型微调到一个狭隘的范畴。权重的稀少子集能够捕获范畴常识。
- 从头练习康复精确性:从头练习稀少模型使其收敛,答应剩下参数补偿修剪后的参数。
相反,对预练习模型的简略修剪通常会严峻损害精确性。稀少微调修剪与特定使命练习相结合,供给了更大的灵活性。
此外,参数功率使得能够运用有限的数据进行练习。以受控办法减少模型容量以避免过度拟合。
稀少微调如何作业
稀少微调涉及三个要害步骤:
1. 预练习密布模型
首要,在未符号的文本上以自监督的办法预练习具有数千亿参数的大型密布模型。最常见的办法是自回归言语建模,其中模型经过练习以在给定从前上下文的情况下猜测下一个符号。BERT 中的屏蔽言语建模等变体也被运用。
这使得模型无需人工符号即可构建通用言语标明。现代核算基础设施和扩展技能使得经过这种办法预练习具有数万亿个参数的模型成为或许。
2. 权重的结构化剪枝
接下来,对预练习模型进行修剪以发生结构化稀少性。
- 一种办法是将权重划分为块并将整个块修剪在一起。例如,修剪
50%
的transformer
块或注意力头会均匀地下降一半的权重。 - 另一种技能是矩阵细分,其中删去权重矩阵中的
行/列
块,这坚持了线性代数的功率。
修剪能够迭代地进行,增加稀少性,同时检查每轮后的精确性下降。逐渐修剪能够让网络平稳调整。
方针是在保存预练习才能的同时诱导高度稀少性(修剪 75-90%
的权重)。这或许需求多次修剪迭代并细心选择要删去的权重。
3. 方针使命的稀少微调
最终,稀少模型针对下流使命的符号数据进行微调,以康复精确性。
微调经过梯度更新使剩下参数适应使命分布,修剪所施加的正则化能够避免过度拟合。
在练习稀少模型以匹配原始密布模型的输出时,也能够合并蒸馏丢失。
经过微调后,能够布置专门的稀少模型以进行有用的推理,常规零形式答应优化核算。整个过程有用地将密布的预练习常识转移到为特定应用程序定制的紧凑稀少模型中。
经过稀少微调取得有希望的结果
最近的研讨标明,不同的LLMs和数据集具有高度稀少性和最小精度丢失的潜力。
最近的论文《用于大型言语模型推理加快的稀少微调》中, Neural Magic 和奥地利科学技能研讨所 (ISTA) 合作探索了如何将微谐和稀少性结合起来处理这些问题,以完成精确的猜测,能够布置在CPU上的模型。
研讨人员将 7B
参数 Mosaic MPT
模型紧缩了 75%
,而在数学应用题数据集上的精确度下降了不到 1%
。稀少模型在 CPU 上的运转速度能够前进 2
倍以上。
在运用 T5
模型的英德翻译使命中,完成了 70%
的稀少性和 2.1 倍
的加快,而 BLEU
分数仅下降了 0.9
。运用 Whisper
进行的语音转录也显示出 1.5-2 倍
的加快速度和 50-70%
的稀少性。
其他作业标明,GPT-3
大小的模型在 GLUE
基准测试中密度下降了 5-10 倍
。
只要稀少形式是规矩的,紧缩存储、高效批处理和模型并行性等优化就能够加快履行。至关重要的是,与量化不同,稀少微调对模型精度的束缚最小。
办法尝试
Neural Magic DeepSparse 是一种 CPU 推理运转时,可完成优化以运用稀少性和量化来加快推理性能。DeepSparse 支撑多种模型架构,包括 BERT
、ViT
、ResNet
、EfficientNet
、YOLOv5/8
等 CNN 和 BERT 等纯编码器转换器。在过去的几个月里,对 DeepSparse 进行了调整,以支撑 Llama 2 和 MPT 等流行模型运用的仅解码器架构,并具有专门的基础设施来处理 KV 缓存和针对解码器模型底层要害操作的新稀少数学内核。
装置
pip install deepsparse
要实验最新功用,能够运用 nightly
构建版别,pip install deepsparse-nightly
或者运用克隆办法从源装置 pip install -e path/to/deepsparse
。
硬件要求
- 硬件:
x86 AVX2
、AVX-512
、AVX-512 VNNI
和ARM v8.2+
- 操作体系:Linux
- Python:3.8–3.11
- ONNX 版别 1.5.0–1.15.0、ONNX opset 版别 11 或更高版别
对于运用 Mac 或 Windows 的用户,建议将 Linux 容器与 Docker 结合运用。
布置API
DeepSparse 包括三个布置 API:
- 引擎是最底层的API。运用 Engine,能够编译 ONNX 模型,传递张量作为输入,并接纳原始输出。
- 管道经过预处理和后处理包裹了引擎。运用 Pipeline,能够传递原始数据并接纳猜测。
- 服务器运用 FastAPI 经过 REST API 包装管道。运用服务器,能够经过 HTTP 发送原始数据并接纳猜测。
引擎
下面的示例从 SparseZoo 下载 ONNX 格局的用于情感剖析的 90%
修剪量化 BERT 模型,编译模型,并对随机生成的输入运转推理。用户能够供给自己的ONNX模型,无论是密布的仍是稀少的。
from deepsparse importEngine
# 下载onnx,编译
zoo_stub = "zoo:nlp/sentiment_analysis/obert-base/pytorch/huggingface/sst2/pruned90_quant-none"
compiled_model = Engine(model=zoo_stub, batch_size=1)
# 运转推理(输入是原始 numpy 张量,输出是原始分数)
inputs = compiled_model.generate_random_inputs()
output = compiled_model(inputs)
print(output)
# > [array([[-0.3380675 , 0.09602544]], dtype=float32)] << raw scores
Pipeline
管道经过预处理和后处理包裹引擎,能够传递原始数据并接纳后处理的猜测。下面的示例从 SparseZoo 下载 ONNX 格局的用于情感剖析的 90%
剪枝量化 BERT 模型,设置管道并对示例数据运转推理。
from deepsparse import Pipeline
# 下载onnx,设置管道
zoo_stub = "zoo:nlp/sentiment_analysis/obert-base/pytorch/huggingface/sst2/pruned90_quant-none"
sentiment_analysis_pipeline = Pipeline.create(
task="sentiment-analysis", # name of the task
model_path=zoo_stub, # zoo stub or path to local onnx file
)
# 运转推理(输入是语句,输出是猜测)
prediction = sentiment_analysis_pipeline("I love using DeepSparse Pipelines")
print(prediction)
# > labels=['positive'] scores=[0.9954759478569031]
挑战和束缚
但是,要充分发挥稀少微调的优势,需求克服一些要害挑战:
- 练习不稳定:微调过程中的简略修剪或许会导致丢失出现峰值和发散。需求细心的调度和丢失公式。
- 不规矩稀少性:结构化剪枝假定规矩零形式。但非结构化稀少性更难优化。
- 硬件功率:需求定制稀少核算内核来最大限度地前进加快速度,尤其是在 GPU 上。
- 可扩展性:极度稀少是否适用于 100 万亿参数模型还有待观察。
总结
稀少微调为缩小最先进的LLMs与可行布置之间的巨大差距供给了一条有希望的途径。经过 10-100
倍的紧缩系数,这些模型能够变得更简单拜访。
主动修剪算法、高效练习技能和专用硬件的前进将进一步前进稀少LLMs的速度和可行性。
未来,模型甚至或许被设计为稀少束缚下的可练习性。经过模型、优化技能和硬件加快器的协同设计,深度学习范畴取得了令人难以置信的前进。