0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

缓解模型训练成本过高的问题

深度学习自然语言处理 来源:夕小瑶的卖萌屋 作者:jxyxiangyu 2022-05-10 15:05 次阅读

我们都知道,为了让以深度神经网络为基础的模型更快地训练,人们提出了单机多卡、多机多卡等分布式训练的方式,那么,在模型预测推理阶段,有什么方法可以加速推理呢?遗憾的是,并行/分布式的加速方法并不适用于模型推理阶段。

但这并不意味着没有方法可以加速模型的推理。既然多核的方式不行,可以考虑在单核上面的加速,比如减小模型大小(即模型压缩)。

模型压缩可以分为模型剪枝(pruning)和模型蒸馏(distillation)。由于模型中的参数对模型推理的贡献天生就是不平等的,我们可以利用剪枝将贡献度不高的模型参数剪去,从而减小模型大小,但剪枝带来的加速比并不高,最多只有2~3倍的速度提升;蒸馏的方法可以带来较大的加速比,推理精度也不会有太大的损失,但通常情况下,蒸馏会用到大量无标签的数据预训练学生模型(student),然后用任务相关的带标签数据进一步微调或蒸馏学生模型,但是,预训练阶段又可能会花费大量的时间。

那么有没有什么方法既能获得较大的加速比和较低的精度损失,又可以缓解模型训练成本过高的问题呢?

最近丹琦女神组提出了解决这一问题的方法,让我们一起来看看吧。

论文标题:

Structured Pruning Learns Compact and Accurate Models

论文链接:

https://arxiv.org/pdf/2204.00408.pdf

github地址:

https://github.com/princeton-nlp/CoFiPruning

背景介绍

在介绍这篇论文提出的方法之前,还需要简单说明下作者研究的背景。

作者提出的模型压缩方法针对的是原模型(教师模型)为transformer 架构的模型压缩。众所周知, transformer 由多个块组成,每个块由一个多头自注意力(multi-head self-attention,MHA)和两个前馈神经网络(FFN)组成。其中, MHAs 和 FFNs 的参数量比为 1:2。在 GPU 上,两者的推理时间基本相同,而在 CPU 上, FFNs 则会耗费更多的推理时间。

正如前面所述,模型压缩可以归纳为两种方法:知识蒸馏和剪枝。知识蒸馏在通常情况下,需要预先定义一个结构固定的学生网络(当然,也有一些尝试动态学生网络的研究),通过用大量无标签数据预训练学生网络的方式进行模型参数初始化,然后用任务特定的带标签数据微调学生模型,当然,学生模型的初始化方式可以有很多种,例如用教师模型的某些层初始化学生模型等,但基本的解决思想是一致的。

剪枝则指的是从原模型中去除冗余的参数,按照剪枝的粒度可以分为以下几种:

层剪枝(layer pruning):从模型中删去整个 block 块(包括 MHA 和 FFN ),一些研究表明,去除 50% 的层并不会有太多的精度下降,而且还可以获得 2X 的加速比;

头剪枝(head pruning):通过 mask 矩阵只保留一部分 head,但研究表明,这种做法并不能带来较大的加速比,当仅保留一个 head 的时候,加速比为 1.4X;

前馈神经网络剪枝(FFN pruning):去除整个 FFN 层或者去除 FFN 层的某些维度;

更加细粒度的块和非结构化的剪枝:去除 MHA 和 FFN 中更小的块或者去除某些参数权重,目前这种做法很难优化模型,也难以获得推理加速

除此之外,还可以将剪枝和蒸馏融合起来,但目前,该方法具体实现尚不清晰。

结构化剪枝方法 CoFi

为获得较大的加速比和较低的精度损失,以及缓解模型训练成本过高的问题,作者提出了结构化剪枝方法CoFi(Coarse- andFine-grained Pruning),方法由两个部分组成:粗粒度和细粒度的剪枝以及从原模型(未剪枝)到剪枝模型的逐层蒸馏

粗粒度和细粒度的剪枝

在头剪枝(head pruning)中,经常通过由 组成的 mask 矩阵来保留一部分 head ,但是,当 mask 矩阵全为 0,即去除掉所有的 head 时,会使模型优化变得困难。为此,作者为每一层的 MHA 和 FFN 引入两个掩码变量 和 ,多头自注意力和前馈神经网络可以表示为:

其中, 是输入向量, 是 head 数量, , , , 分别是 query、key、value 和输出的权重矩阵, 是 attention 函数, 和 分别是 FFN 的两个权重, 和 分别是掩码矩阵变量。

作者用 和 控制每一层的 MHA 和 FFN 是否剪枝以及 和 控制每一层的 MHA 和 FFN 中的哪些 head 和哪些维度需要剪枝。

除此之外,作者还对 和 的输出在维度上作剪枝操作。具体做法是将掩码变量 应用到模型中所有的权重矩阵,掩码跨层共享的原因是作者考虑到模型中的残差使得隐向量中的每个维度都可以连接到下一层相应的维度。

此外,作者定义了预期稀疏度:

其中, 是整个模型大小, 是 block 层数, 是隐藏层维度, 是多头自注意力的每个 head 的向量维度, 是前馈网络的维度,一般情况下,。

模型训练阶段,所有的掩码元素的值处于之间,推理阶段,会将低于阈值的掩码变量映射为 0,得到最终的剪枝模型,其中,阈值由每个权重矩阵的预期稀疏度确定。

从原模型到剪枝模型的蒸馏

考虑到将剪枝和蒸馏融合可以提高性能,作者提出了用于剪枝的逐层蒸馏方法。与一般的蒸馏做法不同,作者没有预先定义从教师网络到学生网络的固定的层映射,而是动态地搜索两者之间的层映射。具体来说,假设 表示准备将知识蒸馏到学生网络的教师网络的层的集合, 是层映射函数,表示从教师网络的第 层映射到的学生网络的层,那么,隐藏层的蒸馏 可以定义为:

其中, 是线性变换矩阵, 和 分别是第 层学生网络和第 层教师网络的隐藏层表示。 定义如下:

其中,计算两个层集合之间的距离(MSE)的操作是可以并行执行的。通过上面的层映射函数,教师网络和学生网络之间的层映射总是按照最有利于剪枝的方向进行。

最后,作者将逐层蒸馏和来自预测层(模型输出)的蒸馏结合起来,得到最终的loss:

其中, 是超参, 和 分别是学生模型和教师模型的输出概率分布。

实验

数据集

作者使用的是 GLUE 数据集和 SQuAD v1.1 数据集,其中, GLUE 数据集包括 SST2、MNLI、QQP、QNLI、MRPC、CoLA、STS-B 和 RTE 八个数据集。

在四个相对较大的 GLUE 数据集(包括 MNLI、QNLI、SST-2 和 QQP)以及 SQuAD 数据集上,作者训练了 20 个 epoch,并对最终的学生网络微调了额外 20 个 epoch。在前 20 个 epoch 中,作者使用蒸馏的目标函数对模型进行微调 1 个 epoch,然后在 2 个 epoch 之内使模型达到期望的目标稀疏度。而对于四个较小的 GLUE 数据集,作者训练了 100 个 epoch 并微调 20 个 epoch。作者用蒸馏目标函数微调模型 4 个epoch,并在接下来的 20 个 epoch 内将模型剪枝到期望的目标稀疏度。在达到目标稀疏度后,还会在剩余的训练 epoch 阶段继续剪枝以搜索性能更好的网络结构。

作者在每个数据集上依次训练并微调不同目标稀疏度的模型。此外,作者在实验中发现,训练结束后的微调可以有效地保持模型不会有太大的精度损失。

模型对比

作者将 、、、、 作为 baseline,对比了 CoFi 和 baseline 在不同的加速比和模型大小的情况下准确率(acc)和 f1 的变化

e2b658c8-cf96-11ec-bce3-dac502259ad0.png

可以看到,在相同的加速比或相同的模型大小下,作者提出的方法 CoFi 都可以获得更高的准确率(acc)或 f1

此外,作者还展示了 CoFi 和 的对比结果。

e2d4b732-cf96-11ec-bce3-dac502259ad0.png

其中, 使用大量无标签数据通过预训练的方式初始化学生网络,和大规模预训练语言模型一样,这种从大规模语料库中获取通用知识的方式对学生模型性能有着十分重要的作用,但预训练会花费太多的时间,如下图所示:

e2e5e02a-cf96-11ec-bce3-dac502259ad0.png

从表 2 可以看到,CoFi 可以获得和 基本一致的加速比和略高的模型预测准确度,与此同时,CoFi 模型的训练时间较 得到了大幅的缩减,也证明了以蒸馏目标函数训练的剪枝方法在模型压缩方面是经济且高效的。

除此之外,作者还使用相同的任务特定的数据分别为 和 CoFi 做数据增强,并对比了数据增强后的模型性能。

e30231c6-cf96-11ec-bce3-dac502259ad0.png

可以看到,数据增强后,CoFi 也基本有着高于 的模型性能。

e31d6158-cf96-11ec-bce3-dac502259ad0.png

▲sota剪枝和蒸馏方法的性能对比

消融实验

作者做了一系列的消融实验,证明了 CoFi 各个模块的有效性。实验结果如下所示:

e347ac1a-cf96-11ec-bce3-dac502259ad0.png

▲CoFi消融实验-剪枝单元

e35c543a-cf96-11ec-bce3-dac502259ad0.png

▲CoFi消融实验-蒸馏目标函数

剪枝后的模型的结构

作者研究了经过 CoFi 剪枝后得到的模型的结构,作者分别在五个数据集上在不同的目标稀疏度下训练微调得到剪枝后的模型,并对模型的 FFN 层的平均中间维度以及 MHA 层的 head 平均剩余数量做了统计,结果如下:

e378ed0c-cf96-11ec-bce3-dac502259ad0.png

可以看到:

几乎在所有的稀疏度下,前馈神经网络层都存在明显的剪枝,这表明 FFN 层比 MHA 层存在更多的冗余信息

CoFi 倾向于更多地剪枝上层网络结构

作者还详细地展示了不同数据集下经 CoFi 剪枝后的模型的具体结构,下图展示的是每个模型每层 MHA 和 FFN 模块的保留情况。尽管模型大小基本一致,但不同的数据集却训练出结构存在明显差异的模型,从侧面也证明了不同的数据集存在不同的最优学生模型。

e3dcec76-cf96-11ec-bce3-dac502259ad0.png

▲经CoFi剪枝后的模型不同层子模块保留情况

总结

作者提出的结构化剪枝方法 CoFi 在几乎没有太多精度损失的情况下,达到了 10 倍以上的加速比,同时,和常规的蒸馏做法相比,避免了因使用大量无标签数据预训练模型而带来的训练成本过高的问题,按作者的话来说,该方法可以是蒸馏的一个有效替代品。

当然,作者也指出,尽管 CoFi 可以应用到任务无关的模型的剪枝中,比如大规模预训练语言模型,但由于上游剪枝方案设计的复杂性,作者还是将 CoFi 的应用场景限制到任务相关的模型压缩中。试想下,如果可以将任务无关的模型压缩到可以部署到移动设备或者可穿戴智能设备上,那么,世界又会是一番怎样的景象呢?不知道这是不是丹琦女神给我们新开的一个“坑”呢?

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10338

    浏览量

    206235
  • 神经网络
    +关注

    关注

    42

    文章

    4539

    浏览量

    98439
  • 模型
    +关注

    关注

    1

    文章

    2671

    浏览量

    47572

原文标题:ACL'22 | 陈丹琦提出CoFi模型剪枝,加速10倍,精度几乎无损

文章出处:【微信号:zenRRan,微信公众号:深度学习自然语言处理】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    谷歌模型训练软件有哪些?谷歌模型训练软件哪个好?

    谷歌在模型训练方面提供了一些强大的软件工具和平台。以下是几个常用的谷歌模型训练软件及其特点。
    的头像 发表于 03-01 16:24 199次阅读

    谷歌模型训练软件有哪些功能和作用

    谷歌模型训练软件主要是指ELECTRA,这是一种新的预训练方法,源自谷歌AI。ELECTRA不仅拥有BERT的优势,而且在效率上更胜一筹。
    的头像 发表于 02-29 17:37 348次阅读

    【AI简报20231103期】ChatGPT参数揭秘,中文最强开源大模型来了!

    训练中扩展模型大小,节约训练成本的最关键技术之一。相比于当前的 16 位和 32 位浮点混合精度训练,使用 FP8 8 位浮点混合精度训练
    的头像 发表于 11-03 19:15 872次阅读
    【AI简报20231103期】ChatGPT参数揭秘,中文最强开源大<b class='flag-5'>模型</b>来了!

    模型训练为什么不能用4090显卡,GPU训练性能和成本对比

    为什么?一般有 tensor parallelism、pipeline parallelism、data parallelism 几种并行方式,分别在模型的层内、模型的层间、训练数据三个维度上对 GPU 进行划分。三个并行度乘起
    发表于 09-15 11:16 1.3w次阅读
    大<b class='flag-5'>模型</b><b class='flag-5'>训练</b>为什么不能用4090显卡,GPU<b class='flag-5'>训练</b>性能和<b class='flag-5'>成本</b>对比

    请问K510设备什么时候可以支持线上模型训练

    目前官方的线上模型训练只支持K210,请问K510什么时候可以支持
    发表于 09-13 06:12

    开源大模型FLM-101B:训练成本最低的超100B参数大模型

    近期,一支来自中国的研究团队正是针对这些问题提出了解决方案,他们推出了FLM-101B模型及其配套的训练策略。FLM-101B不仅大幅降低了训练成本,而且其性能表现仍然非常出色,它是目前训练成
    的头像 发表于 09-12 16:30 937次阅读
    开源大<b class='flag-5'>模型</b>FLM-101B:<b class='flag-5'>训练成本</b>最低的超100B参数大<b class='flag-5'>模型</b>

    训练大语言模型带来的硬件挑战

    生成式AI和大语言模型(LLM)正在以难以置信的方式吸引全世界的目光,本文简要介绍了大语言模型训练这些模型带来的硬件挑战,以及GPU和网络行业如何针对
    的头像 发表于 09-01 17:14 1053次阅读
    <b class='flag-5'>训练</b>大语言<b class='flag-5'>模型</b>带来的硬件挑战

    卷积神经网络模型训练步骤

    卷积神经网络模型训练步骤  卷积神经网络(Convolutional Neural Network, CNN)是一种常用的深度学习算法,广泛应用于图像识别、语音识别、自然语言处理等诸多领域。CNN
    的头像 发表于 08-21 16:42 922次阅读

    训练好的ai模型导入cubemx不成功怎么解决?

    训练好的ai模型导入cubemx不成功咋办,试了好几个模型压缩了也不行,ram占用过大,有无解决方案?
    发表于 08-04 09:16

    AI大模型时代需要什么样的网络?

    据了解,星脉网络具备业界最高的 3.2T 通信带宽,可提升 40% 的 GPU 利用率、节省 30%~60% 的模型训练成本,进而能为 AI 大模型带来 10 倍通信性能提升。基于腾讯云新一代算力集群,可支持 10 万卡的超大计
    的头像 发表于 07-14 14:46 1250次阅读
    AI大<b class='flag-5'>模型</b>时代需要什么样的网络?

    爆了!GPT-4模型架构、训练成本、数据集信息都被扒出来了

    文章称,他们从许多来源收集了大量有关 GPT-4 的信息,包括模型架构、训练基础设施、推理基础设施、参数量、训练数据集组成、token 量、层数、并行策略、多模态视觉适应、不同工程权衡背后的思维过程、独特的实现技术以及如何减轻与
    的头像 发表于 07-12 14:16 411次阅读
    爆了!GPT-4<b class='flag-5'>模型</b>架构、<b class='flag-5'>训练成本</b>、数据集信息都被扒出来了

    深度学习研究之PEFT技术解析

    PEFT 技术旨在通过最小化微调参数的数量和计算复杂度,来提高预训练模型在新任务上的性能,从而缓解大型预训练模型
    发表于 06-02 12:41 458次阅读
    深度学习研究之PEFT技术解析

    什么是预训练AI模型

    训练 AI 模型是为了完成特定任务而在大型数据集上训练的深度学习模型。这些模型既可以直接使用,也可以根据不同行业的应用需求进行自定义。
    的头像 发表于 05-25 17:10 609次阅读

    如何使用eIQ门户训练人脸检测模型

    我正在尝试使用 eIQ 门户训练人脸检测模型。我正在尝试从 tensorflow 数据集 (tfds) 导入数据集,特别是 coco/2017 数据集。但是,我只想导入 wider_face。但是,当我尝试这样做时,会出现导入程序错误,如下图所示。任何帮助都可以。
    发表于 04-06 08:45

    什么是预训练 AI 模型

    训练 AI 模型是为了完成特定任务而在大型数据集上训练的深度学习模型。这些模型既可以直接使用,也可以根据不同行业的应用需求进行自定义。 如
    的头像 发表于 04-04 01:45 1045次阅读