关于paddle:文心ERNIE-30-Tiny新升级端侧压缩部署小-快-灵

36次阅读

共计 7706 个字符,预计需要花费 20 分钟才能阅读完成。

大家好,明天带来的是无关文心 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.

正文完
 0