大家好,明天带来的是无关文心ERNIE 3.0 Tiny新降级内容的文章。
近年来,随着深度学习技术的迅速倒退,大规模预训练范式通过一次又一次刷新各种评测基线证实了其卓越的学习与迁徙能力。在这个过程中,研究者们发现通过一直地扩充模型参数便能继续晋升深度学习模型的威力。然而,参数的指数级增长意味着模型体积增大、所需计算资源增多、计算耗时更长,而这无论出于业务线上响应效率的要求还是机器资源估算问题,都给大模型落地带来了极大的挑战。让咱们一起看看文心ERNIE 3.0 Tiny如何来解决这些问题的吧!
图:模型上线时精度、时延、内显存占用等多重需要示意
如何在保障成果的前提下压缩模型?如何适配 CPU、GPU 等多硬件的减速?如何在端侧场景着落地大模型?如何让减速工具触手可及?这是行业内亟待解决的课题。2022年6月,文心大模型中的轻量化技术加持的多个文心ERNIE 3.0 Tiny轻量级模型(下文简称文心ERNIE 3.0 Tiny v1)开源至飞桨自然语言解决模型库PaddleNLP中,该模型刷新了中文小模型的SOTA问题,配套模型动静裁剪和量化推理计划,被学术与工业界宽泛应用。
近期,文心ERNIE 3.0 Tiny升级版–––文心ERNIE 3.0 Tiny v2也开源了!相较于v1,文心ERNIE 3.0 Tiny v2在Out-domain(域外数据)、Low-resource(小样本数据)的上游工作上精度显著晋升,并且v2还开源了3L128H构造,5.99M参数量的小模型,更实用于端侧等低资源场景。
同时,PaddleNLP依靠PaddleSlim、Paddle Lite、FastDeploy开源了一整套端上语义了解压缩和部署计划。通过模型裁剪、量化感知训练、Embedding量化等压缩计划,在放弃模型精度不降的状况下,推理减速2.1倍,内存占用升高62.18%(升高2.6倍),体积放大92.2%(放大12.8倍)仅5.4M。再联合高性能NLP解决库FastTokenizer对分词阶段进行减速,使端到端推理性能显著晋升,从而将文心ERNIE 3.0 Tiny v2模型胜利部署至端侧。因为端侧部署对内存占用的要求比服务端更高,因而该计划也同样实用于服务端部署。
图:端侧设施示意
文心 ERNIE 3.0 Tiny v2开源
百度文心大模型团队在2021年底公布了百亿级别大模型文心ERNIE 3.0和千亿级别的大模型文心ERNIE 3.0 Titan。为了让大模型的能力可能真正在一线业务施展威力,文心大模型团队推出多个轻量级模型,即文心ERNIE 3.0 Tiny系列,刷新了中文小模型的问题。除了在GPU上,这些模型也能在CPU上轻松调用,极大拓展了大模型的应用场景。本次开源的文心ERNIE 3.0 Tiny v2,使老师模型事后注入上游常识并参加多任务训练,大大提高了小模型在上游工作上的成果。
多任务学习晋升泛化性
文心ERNIE 3.0 Tiny v1间接通过在线蒸馏技术将预训练大模型压缩成预训练小模型。在此基础上,文心ERNIE 3.0 Tiny v2 首先在多个上游工作中微调老师模型,让老师模型学习到上游工作相干常识,并将这些常识通过蒸馏的形式传导给学生模型。只管学生模型齐全没有见过上游数据,也可能蒸馏获取到上游工作的相干常识,进而使上游工作的成果失去晋升。因为老师模型是在多任务上进行微调的,多任务学习带来的强泛化性也能传递给学生模型,从而晋升小模型的泛化性,最终取得的学生模型相比文心ERNIE 3.0 Tiny v1在Out-domain和Low-resource数据集上取得大幅晋升。
图:文心ERNIE 3.0 Tiny v2示意
文心ERNIE 3.0 Tiny v2 蕴含一系列不同尺寸的中文预训练模型,不便不同性能需求的利用场景应用:
- 文心ERNIE 3.0 Tiny-Base-v2 (12-layer, 768-hidden, 12-heads)
- 文心ERNIE 3.0 Tiny-Medium-v2 (6-layer, 768-hidden, 12-heads)
- 文心ERNIE 3.0 Tiny-Mini-v2 (6-layer, 384-hidden, 12-heads)
- 文心ERNIE 3.0 Tiny-Micro-v2 (4-layer, 384-hidden, 12-heads)
- 文心ERNIE 3.0 Tiny-Nano-v2 (4-layer, 312-hidden, 12-heads)
- 文心ERNIE 3.0 Tiny-Pico-v2 (3-layer, 128-hidden, 2-heads)
除以上中文模型外,本次还公布了英文版文心ERNIE 3.0 Tiny-Mini-v2,实用于各类英文工作。多任务学习的能力加持下,在文本分类、文本推理、实体抽取、问答等各种 NLU 工作上,文心ERNIE 3.0 Tiny v2相比文心ERNIE 3.0 Tiny v1在Out-domain、Low-resource数据上均取得显著的成果晋升,在In-domain上也有肯定晋升。
文心ERNIE 3.0 Tiny v2 多任务学习、在线蒸馏计划效果显著,刷新了中文小模型的SOTA问题。具体比照数据见如下模型精度-时延图,横坐标示意在 ARM CPU(高通865芯片)上,基于ARMv8 arch测试(batch_size=1, seq_len=32)的推理时延(Latency,单位毫秒),纵坐标是 CLUE 10 个工作上的均匀精度(蕴含文本分类、文本匹配、自然语言推理、代词消歧、浏览了解等工作),其中CMRC2018浏览了解工作的评估指标是Exact Match(EM),其它工作的评估指标均是Accuracy。模型名下方标注了模型的参数量。
图中越靠左上方的模型,精度和性能程度越高。能够看到文心ERNIE 3.0 Tiny v2在等同规模的开源模型中,综合实力当先其余同类型轻量级模型,这波开源厉害了!与UER/RoBERTa-Base相比,12L768H的文心ERNIE 3.0 Base均匀精度晋升了4.5个点;6L768H的文心ERNIE 3.0 Medium相比12L768H的UER/Chinese-RoBERTa高2.4,并且节俭一倍运算工夫;另外值得一提的是,这些小模型可能间接部署在CPU上,几乎是CPU开发者的心愿之光!
在PaddleNLP中,可一键加载以上模型。
from paddlenlp.transformers import *tokenizer = AutoTokenizer.from_pretrained("ernie-3.0-tiny-medium-v2-zh")# 用于分类工作(本我的项目中的用意辨认工作)seq_cls_model = AutoModelForSequenceClassification.from_pretrained("ernie-3.0-tiny-medium-v2-zh")# 用于序列标注工作(本我的项目中的槽位填充工作)token_cls_model = AutoModelForTokenClassification.from_pretrained("ernie-3.0-tiny-medium-v2-zh")# 用于浏览了解工作qa_model = AutoModelForQuestionAnswering.from_pretrained("ernie-3.0-tiny-medium-v2-zh")
此外,PaddleNLP还提供了CLUE Benchmark的一键评测脚本,并提供了大量中文预训练模型在CLUE上的成果。PaddleNLP接入了Grid Search策略,反对在超参列表范畴内主动搜寻超参,保留最佳后果和对应的超参数,不便一键复现模型成果,且买通了CLUE各个工作数据处理、训练、预测、后果提交的流程,不便用户疾速提交CLUE榜单。
以上模型均已开源,如有帮忙,欢送star反对。
- 模型地址
https://github.com/PaddlePadd...
端上语义了解压缩、部署计划
由文心大模型蒸馏失去的文心ERNIE 3.0 Tiny v2能够间接在上游工作上微调利用,如果想要将模型部署在挪动端、边缘端,或者想要进一步压缩模型体积,升高推理时延,可应用PaddleNLP开源的端上语义了解压缩计划。以边缘端业务上线场景为例,模型通过压缩后,精度根本无损,端到端推理速度达到原来的2.13倍,内存占用减小了62.18%,体积减小了92.2% !
联合飞桨模型压缩工具PaddleSlim,PaddleNLP公布了端上语义了解压缩计划,蕴含裁剪、量化级联压缩,如下图所示:
基于PaddleNLP提供的的模型压缩API,可大幅升高开发成本。压缩API反对对ERNIE、BERT等ransformer类上游工作微调模型进行裁剪和量化。只须要简略地调用compress()即可一键启动裁剪量化流程,并主动保留压缩后的模型。
from paddlenlp.trainer import PdArgumentParser, CompressionArguments# Step1: 应用 PdArgumentParser 解析从命令行传入的超参数,以获取压缩参数 compression_args;parser = PdArgumentParser(CompressionArguments)compression_args = parser.parse_args_into_dataclasses()# Step2: 实例化 Trainer 并调用 compress()trainer = Trainer( model=model, args=compression_args, data_collator=data_collator, train_dataset=train_dataset, eval_dataset=eval_dataset, criterion=criterion)trainer.compress()
PaddleNLP模型裁剪、量化应用示例
上面会对压缩计划中的词表裁剪、模型宽度裁剪、量化感知训练、词表量化进行介绍。
词表裁剪
端侧部署对内存占用的要求较高,而文心ERNIE 3.0 Tiny预训练模型的词表参数量在总参数量中占比很大,因而在上游工作微调之前,能够依照词频对词表进行裁剪,去除呈现频次较低的词,这样可能缩小分词后[UNK]的呈现,使精度失去最大限度放弃。例如,某数据集4w大小的词表,高频呈现的词不到1w个,此时通过词表裁剪能够节俭不少内存。
模型宽度裁剪
基于DynaBERT宽度自适应裁剪策略,通过常识蒸馏的办法,在上游工作中将文心ERNIE 3.0 Tiny的常识迁徙到宽度更窄的学生网络中,最初失去成果与老师模型靠近的学生模型。一般来说,对于4到6层的NLU模型,宽度裁剪1/4可根本保障精度无损。DynaBERT宽度自适应裁剪策略次要分为以下3个步骤:
Step1
依据Attention Head和FFN中神经元的重要性对神经元进行从新排序,将新模型作为待压缩的模型,这样能够保障之后对神经元的裁剪能够更大程度地保留更重要的神经元。
Step2
用老师模型同时蒸馏按不同比例压缩宽度的多个模型。
Step3
在蒸馏后失去的不同宽度的学生模型中,抉择大小和精度符合要求的模型并导出。
量化感知训练
模型量化是一种通过将训练好的模型参数、激活值从FP32浮点数转换成INT8整数来减小存储、放慢计算速度、降低功耗的模型压缩办法。目前次要有两种量化办法:
- 动态离线量化:应用大量校准数据计算量化信息,可疾速失去量化模型;
- 量化感知训练:在模型中插入量化、反量化算子并进行训练,使模型在训练中学习到量化信息 。
图:量化感知训练 vs 离线量化
在对文心ERNIE 3.0 Tiny的压缩中,更举荐应用量化感知训练的形式。通常状况下,应用量化感知训练的办法可能比应用动态离线量化获得更高的精度。这是因为在量化感知训练之前,压缩API在模型的矩阵乘算子前插入量化、反量化算子,使量化带来的误差能够在训练过程中被建模和优化,可能使模型被量化后精度根本无损。
Embedding 量化
端侧部署对显存的要求比拟高,为了能进一步节俭内存占用,可对模型的 Embedding 权重进行INT8量化,并将精度的损失放弃在0.5%之内。Embedding 量化次要分两步:
Step1
离线统计权重在log域上的散布并进行分桶,依据分桶后果将FP32权分量化成INT8权重。如图所示,量化算子会统计权重在log域上量化后的数值散布,取呈现次数top k的FP32数值,记录在对应的x轴上,作为buckets的value,其中key为 [-128,127] 范畴内的整数。
Step2
结构INT8推理模型:将权重设置为量化后的INT8权重,并在Embedding对应的算子后,插入反量化算子,反量化算子依据buckets将INT8数值类型的输出 [5, 3, 6] 反量化为 [1.51, 0.75, 2.50],实现形式为查表。
部署
模型压缩后,精度根本无损,体积减小了92.2%,仅有5.4MB。到此,算法侧的工作根本实现。为了进一步升高部署难度,能够应用飞桨FastDeploy对模型进行部署。FastDeploy是一款全场景、易用灵便、极致高效的AI推理部署工具,提供开箱即用的部署体验。
FastDeploy为NLP工作提供了一整套残缺的部署Pipeline,提供文心ERNIE 3.0 Tiny模型从文本预处理、推理引擎Runtime以及后处理三个阶段所须要的接口模块,开发者能够基于这些接口模块在云、边、端上部署各类常见的NLP工作,如文本分类、序列标注、信息抽取等。
FastDeploy中的Paddle Lite后端基于算子交融和常量折叠对深度模型进行优化,无缝连接了Paddle Lite的FP16和INT8的推理能力,可使模型推理速度大幅晋升。其集成的高性能NLP解决库FastTokenizer(视觉畛域集成了高性能AI解决库FlyCV),可能对分词阶段进行减速,适配GPU、CPU等多硬件。例如在麒麟985芯片上测试,单条文本的分词时延低于0.1毫秒。
在端到端部署方面,FastDeploy在Android端目前反对CV和NLP中的7+场景,35+模型的开箱即用,以及简略统一的API,让Android开发者疾速实现AI落地,并且取得思考前后解决在内端到端高性能的部署体验。
综上,基于FastDeploy部署工具,可实现文心ERNIE 3.0 Tiny端侧和服务端的高效部署。以下动图展现了基于文心ERNIE 3.0 Tiny v2的用意辨认、槽位填充联结模型,应用FastDeploy部署在Android APP上进行推理的成果展现:
- GitHub地址
https://github.com/PaddlePadd...
总结来说,以上各类压缩策略以及对应的推理性能如果从零实现非常复杂,飞桨模型压缩工具库PaddleSlim和飞桨高性能深度学习端侧推理引擎Paddle Lite提供了一系列压缩、推理工具链。飞桨AI推理部署工具FastDeploy对其进一步封装,使开发者能够通过更简略的API去实现模型压缩、推理部署流程,适配多畛域模型,并兼容多硬件。PaddleNLP依靠以上工具,提供NLP模型数据处理、训练、压缩、部署全流程的最佳实际。
文心大模型
随着数据井喷、算法提高和算力冲破,成果好、泛化能力强、通用性强的预训练大模型(以下简称“大模型”),成为人工智能倒退的要害方向与人工智能产业利用的根底底座。
文心大模型源于产业、服务于产业,是产业级常识加强大模型,涵盖根底大模型、工作大模型、行业大模型,大模型总量达36个,并构建了业界规模最大的产业大模型体系。文心大模型配套了丰盛的工具与平台层,包含大模型开发套件、API以及内置文心大模型能力的EasyDL和BML开发平台。 百度通过大模型与国产深度学习框架交融倒退,打造了自主翻新的AI底座,大幅升高了AI开发和利用的门槛,满足实在场景中的利用需要,真正施展大模型驱动AI规模化利用的产业价值。
- 文心大模型官网地址
https://wenxin.baidu.com/
相干我的项目地址
- 官网地址
https://www.paddlepaddle.org.cn
- PaddleNLP
https://github.com/PaddlePadd...
- FastDeploy
https://github.com/PaddlePadd...
- PaddleSlim
https://github.com/PaddlePadd...
- Paddle Lite
https://github.com/PaddlePadd...
参考文献
[1] Liu W, Chen X, Liu J, et al. ERNIE 3.0 Tiny: Frustratingly Simple Method to Improve Task-Agnostic Distillation Generalization[J]. arXiv preprint arXiv:2301.03416, 2023.
[2] Su W, Chen X, Feng S, et al. ERNIE-Tiny: A Progressive Distillation Framework for Pretrained Transformer Compression[J]. arXiv preprint arXiv:2106.02241, 2021.
[3] Wang S, Sun Y, Xiang Y, et al. ERNIE 3.0 Titan: Exploring Larger-scale Knowledge Enhanced Pre-training for Language Understanding and Generation[J]. arXiv preprint arXiv:2112.12731, 2021.
[4] Sun Y, Wang S, Feng S, et al. ERNIE 3.0: Large-scale Knowledge Enhanced Pre-training for Language Understanding and Generation[J]. arXiv preprint arXiv:2107.02137, 2021.
[5] Hou L, Huang Z, Shang L, Jiang X, Chen X and Liu Q. DynaBERT: Dynamic BERT with Adaptive Width and Depth[J]. arXiv preprint arXiv:2004.04037, 2020.[6] Wu H, Judd P, Zhang X, Isaev M and Micikevicius P. Integer Quantization for Deep Learning Inference: Principles and Empirical Evaluation[J]. arXiv preprint arXiv:2004.09602v1, 2020.