当前位置: 首页 > 专利查询>复旦大学专利>正文

基于FPGA的硬件感知可微分BERT层头剪枝方法技术

技术编号:36194320 阅读:26 留言:0更新日期:2022-12-31 21:17
本发明专利技术公开了一种基于FPGA的硬件感知可微分BERT层头剪枝方法。其包括以下步骤:引入可微分NAS的思路,为预训练好的BERT模型的每一个编码层,每一个注意力头,每一个前馈神经网络FFN维度均设置一个架构参数;对单层BERT模型进行仿真,得到四个模块的时延和功耗结果;计算单维子模块对应的时延L

【技术实现步骤摘要】
基于FPGA的硬件感知可微分BERT层头剪枝方法


[0001]本专利技术涉及BERT层头剪枝
,特别涉及一种基于FPGA的硬件感知可微分BERT层头剪枝方法。

技术介绍

[0002]基于Transformer的预训练模型如BERT和RoBerta已经被广泛应用于自然语言处理(NLP)任务中,这类模型利用注意力机制,有效地分析了序列信息之间的依赖关系。然而,这些模型通常有大量的参数,导致较大的推理延迟和内存占用,现有的基于Transformer的模型剪枝方法可分为两大类:非结构化剪枝和结构化剪枝。在非结构化剪枝中,通过将单个权重设置为0来去除它们的影响。但这种剪枝算法往往会产生稀疏的权值矩阵,使其在硬件部署前还需要对这些稀疏矩阵进行进一步的优化处理。而结构剪枝则会去除完整的模型结构块,如神经元、权重矩阵块、注意力头或完整的编码解码层。
[0003]神经网络架构搜索(NerualArchitectureSearch,NAS)是一种自动查找最佳模型体系结构的方法,一般由搜索空间、搜索策略和性能评价策略三部分组成。搜索空间预先定义了可以被发现的模型架构,搜索策略从搜索空间中选择候选架构,性能评估策略对候选体系结构进行评估,并反馈给搜索策略,使在下一次迭代时可以做出更好的选择,目前,常用的搜索策略主要基于强化学习、进化学习,或基于梯度的可微分搜索方法。基于强化学习和进化学习的方法十分耗时,一次搜索需要持续数十甚至数百个GPU天,单一的剪枝策略。基于Transformer模型的主流结构剪枝方法通常是仅仅对注意力头剪枝或仅仅对完整的编码或解码层剪枝,然而,单一的剪枝策略并不能将模型压缩至极致,模型可能仍然存在一些冗余度。
[0004]现有技术已有一些将Transformer模型进行剪枝的工作。但他们目前都面临以下几个问题。第一个问题是不准确的硬件性能代理,为了加快推理时间,有些工作在训练时将FLOPs作为优化目标。然而,FLOPs不能准确反映硬件性能,具有较小FLOPs的模型并不总是具有更好的硬件性能;第二个问题是单一修剪策略,Transformer模型的主流结构剪枝方法通常是单一的注意力头剪枝,或单一的编码层剪枝。然而,单一的修剪策略不能极大地压缩模型,留下潜在的模型冗余,仍然有可以继续优化的余地;第三个问题是计算复杂的NAS,目前基于NAS的Transformer模型剪枝方法通常采用强化学习或从头训练模型的方法,对于资源有限的研究人员来说,这种方法计算复杂,不切实际,其他也有一些工作是基于可微分NAS,或在微调阶段剪枝的NAS。然而,这些方法仍然存在不准确的硬件性能代理和/或单一修剪策略的问题。

技术实现思路

[0005]针对上述现有技术的不足,本专利技术的目的在于提供一种基于FPGA的硬件感知可微分BERT层头剪枝方法,该方法能够实现BERT模型混合层头结构化剪枝,极大的压缩模型,同时保持模型精度。
[0006]本专利技术中,针对修剪前完整的BERT预训练模型基础网络结构,为每一层、每一个注意力头、每一个FFN中间维度都引入一个架构参数,通过可微分NAS对这些架构参数进行更新,训练收敛后,通过比对这些架构参数与预定义阈值的大小,剪枝掉小于阈值的参数对应的结构,这部分是相对不重要的结构,从而完成基于可微分NAS的层头混合的剪枝。本专利技术的技术方案具体介绍如下。
[0007]一种基于FPGA的硬件感知可微分BERT层头剪枝方法,包括以下步骤:
[0008]S1:引入可微分NAS的思路,为预训练好的BERT模型的每一个编码层,每一个注意力头,每一个前馈神经网络FFN维度均设置一个架构参数α。具体的包括以下步骤:
[0009]S101:首先在预训练好的BERT模型中,多头注意机制MHA表示为:
[0010]Multihead
i
=Concat(h
i1
、h
i2
、...、h
im
)
·
W0[0011]其中:Concat表示拼接操作,W
o
为输出的线性变换矩阵,h
im
表示第i个编码层的第m个注意力头,其定义如下:
[0012][0013]其中:X为输入,分别为第i个注意力头的查询矩阵、键值矩阵和值矩阵,d为注意力头的维数大小;
[0014]前馈神经网络FFN表示为:FFN
i
=max(0,W1x+b1)
·
W2+b2[0015]其中:X为输入,W1,b1为FFN第一层线性变换的权重和偏置,W2,b2为FFN第二层线性变换的权重和偏置。
[0016]按层的模型结构表示为:Output=Layer
n
·
{Layer
n
‑1...[Layer1(x)]},
[0017]S102:在本专利技术中,为BERT模型的每个编码层设置一个架构参数α
l
,为每一个注意力头设置一个架构参数αh,为每个FFN层的中间维度设置一个架构参数α
f
。具体来说,引入架构参数后的BERT模型表示如下:
[0018][0019][0020][0021]其中,是第i个编码层第m个注意力头的架构参数,是第i个编码层第j个FFN中间维度的架构参数,是第i个编码层的架构参数,δ是sigmoid函数。
[0022]S2:用高级综合工具Vitis HLS 2020.2对单层BERT模型进行仿真,得到单层BERT中四个模块的时延和功耗的综合结果。
[0023]具体来说,本专利技术实现了单层BERT模型的HLS代码,并对该单层BERT中的嵌入模块、注意力模块、FFN前馈神经网络模块,最终的池化模块进行了仿真。这四个模块分别代表BERT模型中的嵌入层、注意力层、前馈网络层(FFN)和最终池化层。本专利技术用Vitis HLS2020.2高级综合工具,对四个模块的延迟、资源使用和功耗进行分析,综合得到四个模块的时延和功耗仿真结果。
[0024]S3:对S2中仿真得到的四个模块的时延和功耗,除以四个模块对应的维数,得出单
维子模块对应的时延Ls分数和功耗Ps分数。这里下标s指代single,代表单维度子模块。
[0025]具体来说,对于嵌入模块,除以隐藏层维数;对于注意力模块,除以隐藏层维数;对于FFN前馈神经网络模块,除以FFN中间层维数;对于最终的池化模块,除以隐藏层维数。注意,隐藏层维数和FFN中间层维数由剪枝前的预训练模型结构决定。例如,在预训练好的剪枝前的BERT

base模型中,隐藏层维数为768,FFN中间层维数为3072。
[0026]S4:通过四个单维子模块的L
s
分数和P
s
分数,计算得到搜索到的引入架构参数α的完整模型的L
f
分数和P
f
分数。这里下标f指代full,代表完整模型。
[0027]具体来说,通过下式得到完整模本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于FPGA的硬件感知可微分BERT层头剪枝方法,其特征在于:包括以下步骤:S1:引入可微分NAS的思路,为预训练好的BERT模型的每一个编码层,每一个注意力头,每一个前馈神经网络FFN维度分别设置一个架构参数α;S2:对预训练好的BERT模型中的单层进行仿真,得到单层BERT模型中四个模块的时延和功耗的综合结果;所述四个模块为嵌入模块、注意力模块、前馈神经网络FFN模块和最终的池化模块,这四个模块分别代表预训练好的BERT模型中的嵌入层、注意力层、前馈网络FFN层和最终池化层;S3:将S2中仿真得到的四个模块的时延和功耗分别除以预训练好的BERT模型中四个模块对应的维数,得出单维子模块对应的时延分数Ls和功耗分数Ps,其中,预训练好的待剪枝的BERT模型中嵌入模块、注意力模块、最终的池化快的维数为隐藏层维数,FFN前馈神经网络模块的维数为FFN中间层维数;S4:通过四个单维子模块的Ls分数和Ps分数,计算搜索到的引入架构参数α的BERT模型的用于硬件感知的推理时延评估分数Lf和推理功耗评估分数Pf:的用于硬件感知的推理时延评估分数Lf和推理功耗评估分数Pf:其中:layer表示层数,Ls

1、Ls

2、Ls

3、Ls

4是四个单维子模块的时延分数,Ps

1、Ps

2、Ps

3、Ps

4是四个单维子模块的功耗分数,N1和N2分别是搜索到的引入架构参数α的BERT模型的隐藏层尺寸和FFN中间层尺寸;S5:训练更新引入架构参数α的BERT模型的权重和架构参数α,最小化模型完整的损失函数L,损失函数L包括交叉熵损失函数L
ce
,L
f
分数、P
f
分数和损失函数L0‑1:L=L
ce
+L
f
+P
f
+L0‑1其中:损失函数L0
‑...

【专利技术属性】
技术研发人员:白玥寅王堃俞军
申请(专利权)人:复旦大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1