没有合适的资源?快使用搜索试试~ 我知道了~
1E.T.:基于GPU陈世扬1,黄绍义2,李冰冰2,王光荣。高3,龙正3,蔡文丁2,刘航1这些作者贡献相当。1史蒂文斯理工学院2康涅狄格大学3特拉华大学摘要基于transformer的深度学习模型已经成为一种无处不在的工具,可以推动各种自然语言处理(NLP)相关任务超越其准确性上限。然而,这些模型也受到两个明显的挑战,即巨大的模型尺寸和延长的周转时间。为此,我们引入E.T.本文提出了一种新的自注意力结构,它包含了两个自注意力算子和相应的序列长度感知算子,TensorRT(82.4μs,约500万个条目)层规范线性变换激活线性变换层规范Self-attention输入E.T.(37.1μs,约1.3百万条目)E.T.(27.7μs,约650K条目)线性变换MatMulSoftMax掩蔽量表MatMulQK V线性变换21.5 μs~ 590 K条目9 μs~ 98 K条目16.8 μs~ 196 K条目10.4 μs~ 196 K条目23.6 μs,约190万个条目TensorRT(81.3μs2.98M条目)优化和操作重排序优化。其次,我们提出了一个注意力感知的修剪设计,明智地使用各种修剪算法,以减少更多的计算,从而实现显着缩短周转时间。对于剪枝算法,我们不仅改进了现有的剪枝算法,而且为Transformer模型量身定制了新的剪枝算法综合考虑,我们评估E.T.在Transformer、BERTBASE和DistilBERT的各种基准测试提供了优于主流项目的性能,包括流行的Nvidia企业解决方案,即,TensorRT和FasterTransformer。ACM参考格式:陈世扬1,黄绍义2,李冰冰2,王光荣。高3,龙正3,蔡文丁2,刘航1。2021年E.T.:重新思考GPU上的Transformer模型 在高性能计算,网络,存储和分析国际会议(SC '21),2021年11月14日至19日,圣。关闭KY,USA.ACM,纽约州纽约市,美国,13页。https://doi.org/10.1145/3458817.34761381引言基于transformer的模型已经成为一种无处不在的工具,用于驱动各种NLP相关任务,超越其准确性上限,例如机器翻译[28],文 本 摘 要 [63] , 语 音 识 别 [13] 和 问 答 系 统 [50] 。 最 近 ,Transformer模型在计算机视觉相关任务方面也取得了令人印象深刻的性能[22],例如,iGPT [6]和允许免费制作本作品的全部或部分的数字或硬拷贝,以供个人或课堂使用,前提是制作或分发副本的目的不是为了盈利或商业利益,并且副本的第一页上有本声明和完整的引用。 本作品的版权归ACM以外的其他人所有,必须予以尊重。允许使用学分进行摘要以其他方式复制、重新发布、在服务器上发布或重新分发到列表中,需要事先获得特定许可和/或付费。请求权限请发邮件至permissions@acm.org。SC关闭MO,USA© 2021计算机协会ACM ISBN 978-1-4503-8442-1/21/11。. . 15美元https://doi.org/10.1145/3458817.3476138(a)编码器工作流程(b)自我注意工作流程图1:四头编码器的架构。时间消耗是在WikiText-2数据集[30]上测量的,其中输入序列有128个令牌。我们的修剪率是80%。ViT [14]获得了与最先进的基于CNN的网络相似的性能。这种现象表明了基于transformer的模型的巨大潜力。鉴于注意力的成功,各种注意力机制激增[28]。 其中,自我注意力[9],它将单个序列中的各种标记联系起来以导出序列表示,脱颖而出。最后,Transformer [51]取得了突破,而不是依赖于递归神经网络(RNN),完全基于多头自注意机制的模型。尽管基于Transformer的模型取得了显著的成功,但其巨大的模型大小是一个广泛认识到的现实世界应用程序的障碍。 图1描述了一个编码器的体系结构,它是Transformer模型中的构建块。简而言之,一个编码器将序列的字嵌入作为输入 这些嵌入通过自我注意机制产生注意矩阵。该矩阵通过层归一化、线性变换和激活来获得输出。各种Transformer模型变体通常将编码器和解码器的集合堆叠在一起。注意,解码器的架构类似于编码器[51],关于注意机制的更多细节在第2.1节中讨论。如图1所示,一个编码器可以很容易地达到数百万个条目与多个头。当它走到极端时,例如,GPT-3 [3],模型的大小可以飙升到1750亿个参数。如此大的模型尺寸,加上“模块化系统实现概念”,通常会导致基于变压器的特别地,“模块化系统实现”将程序分成独立的模块,使得每个模块仅满足功能的一个方面,以便减少软件开发工作。比如说,2∼××SCLouis,MO,USA Shiyang Chen et al.绝大多数基于Transformer的库[1,17,21,42,44,53]简单地将Transformer编码器分解成基本的矩阵运算的集合,例如密集矩阵乘法、采样密集矩阵乘法和矩阵标量乘法。然后,他们求助于现有的CUDA库(例如,cuBLAS [33]和CUT- LASS [35])来实现各种Transformer模型。然而,这种设计导致两个性能问题:(i)通常必须将输出矩阵从GPU全局存储器中的一个运算符转移到另一个运算符;(ii)运算符之间的切换引入了片上和片外数据移动,因为片上变量的寿命不能跨越内核。尽管最先进的优化,例如来自TensorRT的垂直和水平内核融合[40],可以减轻问题(i)的开销,但问题(ii)仍然存在。 根本原因在于TensorRT无法改变每个操作符的实现方式。这种现象促使我们提出一个问题:我们能否引入一些transformer特定的原语,可以在一个操作符中执行各种矩阵计算,从而在很大程度上减轻问题(i)和(ii)引起的开销?动机如下:尽管TensorRT的单个编码器已经非常快,即,160,现实世界的应用仍然在追求更快的编码器。证据越来越多:Transformer模型通常用于时间关键型应用,例如自动驾驶[46]和实时翻译[28],在这些应用中,更短的周转时间总是首选。为了实现这一目标,我们重新设计了自注意力架构与新的运营商,以及引入有趣的注意力感知和张量核友好修剪设计。如图1所示E.T. 可以将单个编码器的计算时间减少2.5,并将WikiText-2数据集上的模型大小减少80%。尤其是外星人作出以下贡献:首先,我们介绍了一种新的自注意力架构,其中包括两个定制的自注意力运营商与相应的- ING序列长度感知优化,和操作重排优化。特别地,(i)我们的即时注意力算子解决了自注意力中五个算子之间的数据依赖性,即,图1(b)中的黄色框,并在共享存储器和寄存器的帮助下在一个操作符中执行这五个操作,因此避免了中间结果的昂贵全局存储器访问这与TensorRT [40]中的内核融合优化有根本不同。(ii)我们研究了自注意力架构,并找到了将矩阵V的线性变换和图1(b)中的最终线性变换算子相结合的机会。 新组合的算子降低了所需的修剪率,并且可以预先计算以潜在地避免计算。(iii)我们的序列长度感知优化探索了我们的动态注意力算子的极限情况性能问题,并揭示了当序列长度相对较长时,动态执行较少的计算将产生更多的好处。(iv)最后,我们确定使用张量核的纯FP16在自注意力计算期间会遇到溢出问题。相应地,我们重新排序的缩放算子,以实现纯FP16为基础的自注意力计算,这是更有效的比混合精度为基础的同行。 如图1所示,我们新的自我注意力计算比现有的TensorRT实现获得了2.9的加速比。其次,我们提出了一个注意力感知和张量核心友好的修剪设计,明智地使用各种修剪算法,以减少更多的计算,从而实现显着更短的周转时间。尽管修剪是一种众所周知的策略,可以减少基于Transformer的模型的安装大小,但人们担心,不规则修剪[23](即,修剪任意位置的权重)将阻止使用张量核心或基于块的权重修剪[31](在张量瓦片级别修剪)将遭受低修剪率和准确性损失。 在本文中,我们首先努力推导出张量核友好的矩阵表示的权重矩阵的列和行修剪,这使我们既享受修剪的计算减少,并利用现有的基于张量核的高度优化的通用矩阵乘法(GEMM)例程快速线性变换。此外,为了实现张量核友好和高修剪率&精度,我们提出了第一个基于张量瓦片的修剪算法,用于Transformer模型,使用组套索正则化的重新加权方法[4]。该算法首先对权值矩阵进行张量分片,然后利用张量2范数更新惩罚因子。然后,我们更新总损失并基于2范数进行修剪。最后,我们重新训练模型中的非零条目,以保持修剪后的准确性。 最后,我们引入了一种注意力感知的自适应剪枝算法设计,该算法针对不同的权重矩阵选择不同的剪枝算法,可以减少更多的计算量并缩短周转时间。第三,我们证明了E.T.的有效性 广泛的基准和模型。特别是 , 我 们 评 估 我 们 的 修 剪 算 法 上的 WikiText-2 数 据 集 的Transformer,和胶水基准套件的BERT BASE和DistilBERT。与最新技术相比,该评估涵盖了更广泛的基准和模型类型[21]。值得一提的是,我们新颖的自我注意力架构以及注意力感知修剪平均提供了1131个在所有GLUE基准测试中,预测延迟为500毫秒(BERTBASE)和500毫秒(DistilBERT),同时保持95%的预测准确度/得分(表1)。据我们所知外星人是第一个在GPU上实现基于transformer的模型如此短的周转时间,同时保持高预测精度的工作。这得益于我们新颖的注意力感知剪枝算法设计和高效的自注意力计算系统实现。本文的其余部分组织如下:第2节介绍了背景。第3节和第4节分别讨论了高效的自注意计算和注意感知张量核友好剪枝算法设计。我们评估外星人在第五节中,描述了第六节中的相关工作,展示了E.T. 在第7节,并在第8节结束。2背景2.1Transformer是一个序列到序列的NLP模型[51],它使用注意力机制来绘制输入和输出。 它将一个词汇集的单词嵌入序列作为输入,并生成另一个词汇集中的标记概率。该模型主要由编码和解码组件组成编码组件是一个326257’××××·、·×和3(b)。因此,所有操作都在共享()(,)·E.T.:重新思考自我关注Transformer Modelson GPUSC '21,November 14-19,2021,St. 关闭MO,USA编码器在结构上都是相同的,但它们的权重是独立训练的。同样,解码组件也是解码器的堆栈。请注意,编码器和解码器的数量可以调整,以达到不同的Transformer模型。例如,BERT只包含编码器[25]。 BERT BASE在编码器堆栈中有12层,而BERTLARGE在编码器堆栈中有24层。C= AB +CFP 32FP 16BFP 16TF 32OpenAI GPT-3 [3]只有12层解码器。在编码器处理单词嵌入之前,我们将标记的位置信息添加到序列中,以便模型知道标记在每个序列中的位置。我们使用正弦和余弦函数来编码这个位置信息[51]:PE(平均值,2μ m)=平均值(平均值/100002μ m/μ m模型),(1)PE(单位:200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000其中,是单词在序列中的位置;d模型是每个单词嵌入的维度,而m是单词嵌入向量中的第m个 ���这些位置值被添加到每个标记的嵌入中。如图1所示,自我关注是编码器的关键在线性变换期间,输入X乘以三个权重矩阵,即,查询(WQ)、键(WK)和值(WV),以分别到达Q、K和V即Q=X·WT,K=X·WT(a) FMA矩阵乘法(b)浮点变量图2:张量核心规范:(a)矩阵乘法的FMA和(b)浮点变体。有了张量核,一个大的矩阵乘法问题可以通过一组小的矩阵乘法来完成。 如图2(a)所示,为了执行16和16的矩阵乘法,FMA可以一次执行A和B的一个16 16矩阵乘法,并将结果累积为C中的张量瓦片16 16的最终结果。张量核心具有精度变化。首先,V100S FMA运算支持混合精度,这意味着矩阵乘法是FP16,而加法是FP32 [34]。 如图2(b)所示,IEEE 754 FP32格式通常需要1个符号位,8个指数位,并将剩余的23位用于精度(尾数)。V100 S支持FP16,可减少VTQK指数和精度。最近的A100和Google Tensor Pro-=X W V. 然后,我们按照等式3执行注意力计算:Q·KT处理单元(TPU)还支持Brain浮点16(BFP 16),它从尾数中削减更多位,以便它可以以较低的精度表示更宽的值范围A100GPU还支持新的Z=Q,K,V = softmaxV。(三)请注意,在softmax之前应用掩码以排除某些字对字的交互。一种流行的掩码机制是将掩码的下三角形部分设置为0,上三角形部分设置为负无穷大。 当应用于Q KT时,这个掩码实际上防止了后面的单词的位置信息影响前面的单词。多头注意扩展了等式3。注意力模型具有多组W Q、W K、W V,允许模型联合注意来自不同位置的不同表示子空间的信息,每组权重是一个头部。由于存在等式3的多个ZDK是点积���������TensorFloat-32(TF 32)类型,Int 8,Int 4和Binary类型[37]。2.3TensorRTTensorRT是一个高性能神经网络推理框架,包括网络优化器和运行时引擎。给定一个已训练好的神经网络,通过融合各层、选择最优的核实现和根据网络结构重组计算来优化网络。简而言之,TensorRT对神经网络计算图进行了三项关键优化。首先,它消除了生成未使用的输出的层,以避免不必要的计算。第二,在可能的情况下,它融合了卷积,偏置,ReLU层以形成一个单一的层。第三,如果多个层采用相同的输入张量,或者执行相同的人头数H操作相似的参数同时,它也融合如图1所示,在自我注意模块之后,有一个多层感知器(MLP)模块,由两个线性变换层组成,它们之间有一个激活层在自注意和MLP之后分别应用层归一化,其输入将与模块的输入相加2.2 GPU和Tensor核心在最近的GPU架构中,流处理器(SMX)通常包含通用核和张量核。以V100S GPU为例,这些层,这被称为水平层融合。请注意,这些图形优化不会更改底层计算。相反,他们的目标是重新构造图形,以更快,更有效地执行操作。3新颖的自我关注建筑3.1定制的自注意算子我们介绍两个量身定制的运营商:(一)在飞行注意操作,例如,一个SMX包含64个单浮点核,64个整数核,ator,即, - 在图3(a)中,以及-在图3(b)中,以及(ii)核心,32个双浮点核心和8个张量核心。作为一个十-预先计算的线性变换,也称为,图3(b)中的步骤排序核可以在每个周期执行64个融合乘加(FMA)操作。 这意味着一个SMX可以使用张量核每个周期执行1,024次操作,或者张量核比一般核快8倍。请注意,当使用一种类型的内核时,其他内核不能即时注意操作员。通过在运行中执行注意力运算符,我们不需要将中间结果分别写入GPU全局内存或从GPU全局内存读取中间结果。在这里,中间结果是图3(a)中的Q1·KT=Q2·KT和S因为所有这些核心都共享某些硬件资源[34]。12指数精度(尾数)8位23位S5位10位SS7比特SB一签4۹ڄۿ ȁȁ ۹ڄۿ面具softmax4 5行i۽7۽缩放(缩放)23ۿۿȁȁ ۹ڄ۹ڄQKSZ行i6ڄȁȁǤV1ۿ1۹1ۿ۹输入十)、(行i即时注意操作员77’6’h=112O,1O,2)和softmax(1.噢,.噢,V,h并行计算Q1KT的行,并行约简,·WSh·( X· WV,h· WO,h)=Sh·X·(WV,h·WO,h).不1SCLouis,MO,USA Shiyang Chen et al.欧 TPU 不۹ڄۿ ȁȁ ۹ڄۿ面具softmaxS行i45行i6’ሾڄǡ۽ǡ缩放(缩放)3ۿۿȁȁ ۹ڄ۹ڄ||]的一种ǡ۽ǡ2QKǡǡ||=ȁȁǡ۽ǡǡ۽ǡ1’1۹1||=۽۽ǡ۽ǡۿ7’ۿ۹ǡଵ۽ǡଵȁȁǡଶ۽ǡଶ预计算线性变换算子不)(十)PU在不TPU欧即时关注操作者我行(a) 不含预先计算的线性变换算子的动态注意力算子(b) 动态注意力算子w/预先计算的线性变换算子。图三:我们的自我注意力架构是一个由三个标记组成的序列,每个标记有四个特征,两个头,每个头都是一个较厚的边框。我们假设(a)对WQ、WK和WO使用张量瓦片修剪,对WV使用行修剪。在(b)中,WQ和WK保持张量瓦片修剪,而WO是行修剪,并且WV是稠密的。请注意,符号“”表示不同头部的连接。存储器或寄存器。请注意,我们的动态注意力操作符不同于将各种内核融合到一个内核中的TensorRT。在步骤S102中导出最终输出矩阵图3(a)如下:也就是说,TensorRT仍然需要将中间结果写入到OutputTHHT.HT(四)全局内存TensorRT内核融合只能避免将数据从一个内核的全局内存复制到另一个内核。=Z·WO=(h=1Zh)·(h=1WO,h)=h=1Zh·WO,h,即时注意力需要解决数据依赖性这里我们假设Z和WO都有H头。我们利用骗局-从Z到Q、K和V,如图3(a)所示有两个层次连接算子将它们连接在一起。直觉,数据依赖性,即头和行级依赖性:(i)Z的每个头依赖于Q和K的相应头。因此,我们可以独立地计算Z的每个头(ii)Z的每一行也是独立的。同样重要的是要注意软-等式4表明,实际上将Z的每个头部与WT的对应头部相乘,以到达该头部的剩余矩阵。在我们完成任务后,所有头的合成矩阵一起到达输出。max需要从一个head的整行中找到最大值这也在图3(a)的步骤中观察到,其中输出=年q1 · 第二季度· KT. 因此,Z中一个头的一行是最小的Z1·WT+Z2·WT。Q不独立的单位,我们可以得到。由于头级依赖性是设S=softmax(λ·K),则可得:Z=S·V,进一步简单地说,我们在下面解释行级依赖性。如图3(a)所示,我们计算Q1·KT中的每一行���Zh=Sh· Vh表示每个头h。用这个方程来代替一次 该行通过缩放Q1(2)的一行来计算1)和等式4,我们得到:将该缩放的行乘以KT(3)。 我们将行存储 在共享内存中用于掩码(45)计算。由于协同线程阵列(CTA)是现代GPU中可以共享同一共享内存区域的最大线程单元,因此我们将CTA调度到S中的行 上。每个CTA中的线程输出H=h=1.H=h=1(Sh·Vh)·WT=不Hh=1TSh·(Vh·WT).HTh=1(五)不softmax,并到达S中的行x1。仍然在这对飞行注意等式5中的变换允许我们计算运算符,这一行S从V加载头并执行W V与W之间的矩阵乘法 不是象预料此外,本发明还乘法以导出Z(6)的一行。如图3(b)所示,在预先计算时,动态注意力算子略有修改。因为WV和WOO在推理计算之前是已知的引入了线性变换算子当部署在我们可以预先计算WT的每个头噢,噢。张量核每次计算Z中的一行图块同样重要的是要注意,即使一个CTA负责16行图3(b)示出了预先计算的线性变换算子如何针对图3(a)中的相同示例工作。我们允许最近的基于变压器的模型,将WV和WO中的每个头相乘得出(WT·根据[56],处理≥12个股骨头,具有≥768个特征,公司简介WT.然后,X五,1有足够的工作负载来饱和一个V100S GPU。1)A(V,2·O,2)与此矩阵相乘,1 '。最后,图3(b)中的步骤导出输出。 除了预先计算的线性变换算子。对于多头注意,我们使用WO来组合Z的各种头部,75上述推导,我们对真实世界数据集的评估也表明,这种预先计算的线性变换算子产生与原始设计相同的结果[51]。63330WFSGMPX21·1·W121212ǁ··不1E.T.:重新思考自我关注Transformer Modelson GPUSC '21,November 14-19,2021,St. 关闭MO,USA3.2基于序列长度的动态注意力算子优化由于序列长度,即,图3(a)中的Q1KTQ2KT的一个头部中的列数增加,E. T。可能潜在地遭受两个性能问题:(i)驻留在共享存储器中的中间结果变得更大并且可能超过共享存储器容量(ii)我们需要加载整个K来计算每行3.3用于纯FP16注意力计算的重排序自注意力架构图4:当我们使用张量核计算Q1时,注意力机制所面临的溢出问题的热图。KTQ2·KT,在那里的橙色在图3(a)中的步骤处的QKT步骤6也是如此。这可能是12导致压倒性的存储器访问流量。对于第一个性能问题,区块行所需的总共享存储器空间与序列长度的关系如下:d模型阴影颜色是溢出条目在这里,我们在维基文本-2上使用transans- former,序列长度= 16,单词嵌入的维数为256。我们观察到,在Q中乘以行的一个瓦片的结果瓷砖高度·H+xtileHeight·s eqLen 、(六)图3a中Q的第i行图3( a)中S的第i行其中K中的一个瓦片超出FP 16的值范围图4x_秒_________秒________显示了基于Q1·KTQ2的纯FP16所面临的全部问题。()下一页其中Q1·KT中的行的长度是序列长度,即,K2。显然,可以观察到大多数条目是影子银行意味着它们面临着溢出问题。在这种情况下,需要使用基于精度的混合张量seqLen,tileHeight = 16,d模型1是em这个词的维度操作混合精度意味着每一行���Q1·KT <$Q2·bedding,H表示模型中的头数,KT必须存储在FP32中,并转换回FP16,以便根据[56],范围从2到128如果我们使用BERT大中的一个或多个条目,该条目2后续的张量核操作。混合精度引入了两个16个头,d模型=1,024,序列长度为384,总共需要共享内存7KB。 由于像V100S这样的商用GPU通常每个处理器有96 KB的共享内存,与纯基于FP16的注意力相比,开销方面(i) 当存储行数据时,(ii)将FP 32转换回FP 16以用于随后的转换;即时注意力可以服务于相对长的序列长度。1 2对于第二性能问题,图3(a)的步骤,其中屏蔽和softmax计算。为了实现纯粹的基于FP16的注意力计算,我们将Q的每一行都需要访问K的整个头部,缩放操作,即,在图3(a)和3(b)中,在矩阵之前,实时计算,以避免写入和读取一个头Q1·KT<$Q2·KT矩阵,分别从全局存储器和全局存储器。乘法运算3. 注意,如图1所示,在获得Q1·KT<$Q2·KT之后执行操作,我们的即时注意力将GEMM分解为Q乘以KT中的头部的行向量,使得每个CTA执行最先进的项目,如PyTorch [42]和TensorRT [40]。由于Q1·KT→Q2·KT的每一行将被转换回FP16,行向量和列向量的内积头部因此,完成整个结果矩阵需要Q被访问一次,而KT被访问多次。类似地,对于步骤6,我们需要为S的每一行访问V的整个头部。因此,只有当K和V相对较小时,动态注意力才是有益的,这意味着GPU带宽可以为Q的各行重复加载它们。另外,我们采用基于外积的GEMM来减少计算时的内存流量。使用图3(a)作为示例,我们可以加载第一列Q,KT的第一行来计算整个Q1KT的部分结果。这意味着我们的重新排序保证了纯FP16在注意力计算期间不会遇到溢出问题。同样重要的是要注意,改变缩放操作的位置和优化softmax精度只意味着避免溢出错误,这表明我们的重新排序在没有这种调整的情况下会产生相同的结果4注意力感知模型修剪4.1转换现有修剪设计1之后,我们对Q的后续列执行此操作转换成Tensor Core Friendly1,行的KT。一旦Q1的每一列都乘以相应的-WXWW修剪1TW修剪通过K1的行,我们得到Q1K1. 此设计仅加载Q1和K1一次。但是,我们需要调度整个GPU来执行这个计算,将结果写入全局内存,进行全局同步,然后加载一行Q1KT在共享内存中,用于后续的掩码、softmax和最终不X修剪X(调整后)373362·不修剪与V相乘,类似于Q2KT。我们发现序列长度是决定是否我们应该采用基于外部产品的GEMM,从而打破和从我们的飞行注意力。因此,一种自适应解决方案,(a) 行修剪(b)列修剪需要在运行中和断开之间以及从运行中切换。在评估部分,我们将对这一设计探索进行深入的图5:行/列修剪权重矩阵的线性变换示例。 是输入嵌入矩阵。6W×=×=83=14、{b}=1、{b}××修剪×××∈ ×������WT{W},{b}公司简介中国香港特别行政区(8)���SCLouis,MO,USA Shiyang Chen et al.压缩张量核心的行/列修剪。Af-基于图块的权重修剪可以写为在权重矩阵W的行或列修剪[21]之后,我们提出移除修剪的行或列,并精简现有的min. {W}=1}(七)将非零行或非零列修剪成新的密集权重矩阵W。这里,W可以表示WQ、WK、WV和WO。随后,委员会注意到,在W中的非零瓦片的数量小于1/2的情况下,其中,非零瓦片的期望数量损失函数-我们可以求助于基于张量核心的高度优化的GEMM rou,快速矩阵乘法的时间我们进一步发现该行和用表示 。{W }=1- 是的为了减轻指控-列修剪生成可能影响后续注意力计算的不同权重矩阵。这引起了我们的注意-为了避免直接修剪权值带来的损失,我们通过在目标函数中加入正则化项来放松当我们使用group Lasso时,正则化项为感知修剪(第4.3节)。.. .������ǁW���ǁ2,where��� and��� are the number of(tile-层,分别。一起我们将修剪后的W分解为2 × 4的稠密W修剪矩阵。最后我们将等式7的权重修剪问题重写为:将输入X与修剪和转置的权重矩阵相乘.- 是 的��� .��� .���修剪这里,由于X和WT是密集格式的,可以使用=1=1=1修剪张量核来加速GEMM列修剪采用类似的思想来启用基于张量核的GEMM,但过程略有不同。如图5(b)所示,权重矩阵是列修剪,然后转置并最终与输入矩阵X相乘。因为只有第一列和第三其中,k是正则化强度的权重惩罚因子我们使用一个8 × 4权重矩阵(两个头,每个头有4 × 4)来说明训练过程,如图6所示培训有以下步骤。(i)- 是的我们从一个预先训练好的模型开始。(ii)我们检查当前纪元是否落入预定义的里程碑(即,第101、���102、···、100个时期)。如果是,我们选择瓷砖修剪W中的非零项,仅X的第一列和第三将有非零项与之相乘因此,可以使用尺寸×as 2×���2和划分权重矩阵���������×X调整与WT相乘。(4 × 2)子矩阵。我们计算每个图块的范数������不规则的修剪,这不会产生有希望的时间控制,并使用图块惩罚因子λ λ=1/(λWλ-1λ2+λ)来更新图块惩罚因子λλ,���为了完整起见,这里包括了消耗节省特别地,不规则修剪产生具有散布在权重矩阵中的随机位置处的非零条目的权重矩阵。我们从最近的研究[59]中采用分层稀疏格式来实现基于张量核的不规则修剪线性变换。该格式包含两个级别的稀疏性:(i)基于位图的格式,用于将每个张量图块存储在包含至少一个非零值的权重矩阵中。(ii)块压缩稀疏行或列(BCSR或BCSC)格式,用于存储各种非零张量图块。其中,k是防止被零除的小值(iii)我们更新模型损失,如公式8所示请注意,在这一步中,我们将和视为常数。 (iv)我们训练Transformer模型并更新参数。当重新加权的训练准确率略有下降时,我们停止增加训练精度 因此,将生成一组经过良好训练的参数。(v)我们基于2范数执行权重修剪。 1我们首先将权值矩阵8 4划分为8 2 2子矩阵。 2我们计算子矩阵的 2范数以产生一个4 2范数矩阵。我们将选择具有最大组的值在一个瓦片中的102个标准如果该值小于预设百分位数(例如50%),我们将该值设置为0。我们生成一个剪枝掩码矩阵4.2Transformer的张量瓦片修剪(8× 4,全为0和1),适用于10×10块瓷砖。我们把面具模型尽管行/列/不规则修剪的权重矩阵可以被转换成利用张量核的格式,但是需要在预处理输入和后处理所得矩阵上支付不平凡的开销。本节介绍一种基于张量瓦片的修剪算法,该算法要么排除权重的整个张量瓦片,要么在权重矩阵内保持整个张量瓦片完整。显然,与第4.1节中的上述方法相比,这种基于张量瓦片的修剪引入了明显更好的存储和控制流逻辑。下面,我们将这种修剪设计公式化为一种类似于重新加权的RISK1方法的算法[4]。考虑 一个第n层的Transformer,其中第n层中的权重和偏置 的集合分别由W 和b 表示。我们将瓦片行表示为���,瓦片列表示为 。将原始权重矩阵WR×划分为瓦片,其中,���= . 在权重修剪中,我们的目标是修剪权重。因此,我们最小化损失函数的约束下,不同的重量分布在每一层。形式上,这个张量矩阵与原始权重矩阵逐元素地合并,以获得张量瓦片修剪的权重矩阵。最后(vi),我们重新训练非零条目几个时期(例如,4)、恢复精度。4.3新型注意力感知自适应剪枝由于不规则剪枝引入了巨大的开销,只有基于行、列和张量瓦片的剪枝算法才能带来性能。曼斯收益。然而,矩阵Q或K的行修剪严重降低了预测精度。 根本原因是注意力神经网络可以被解释为一个检索过程,其中Q和K中的行向量被认为是查询和键[51]。查询和关键字的点积是计算它们在特征空间中的距离。因此,删除整行意味着减少输入数据的大小。这会显著影响从模型中捕获的信息。因此,我们只对WQ和WK进行列和图块修剪。对于W0,行、列和图块修剪是可能的候选。现在,我们考虑WQ和WK。一方面,因为列修剪它们中的任何一个都会导致X之后的稠密矩阵,行修剪。图5(a)说明了行修剪设计。=1=1=1日假设第二行和最后一行在W中被修剪。我们将其精练wise)中的行和列以得到具有两个非零列的合成矩阵最小值92.12.12.12.12.12.12.12.1没有(i)初始化1.1 2.1 1.71.20.5 2.3 0.4 1.50.9 1.80.1 3.30.8 0.11.8 5.10.7 0.6 1.5 3.61.6 0.7 0.8 0.90.6 2.12.6 0.52.1 1.31.4 0.3l-范数1.1 2.11.7 1.2hl范数训练W0.52.30.90.81.5更新笔-l-范数备用系数:高精度0.80.6 1.10.31.2 2.1-0.41.21.3-0.5-0.13. 60.8 0.6 1.1 0.3 2(1)A=1(||Wij__+1.2 2.1 -0.4 1.51.3-0.5-0.13.63.32.62.26.42.0 4.1修剪遮罩(vi)重新训练nonezero4个epoch的3是的0.7 0.61.6 0.7(iii)使用公式更新(八)3.3 3.00.4 1.5 2.1 5.11 0.4 1.5 2.1 5.120.6 2.1 2.6 0.52.1 1.3 1.4 0.31.6 1.1 1.7 1.20.6 1.8 0.4 1.52.3 1.5 0.1 3.60.72.1 0.6 1.81.6 1.1 1.7 1.20.6一点八 0.41.510011101 142.3 1.5 0.1 3.60.7 2.1 0.6 1.83.3006.404.13.301 1指数1 11 13 (五)幅度修剪基于l范数1.12.10 00.5 2.30 000 0.1 3.300 1.8 5.100 1.5 3.600 0.8 0.90.6二、一 002.1 1.3 0 00.6-0.60 01.1-1.20000 0.2 0.500 3.9 1.700 0.8 3.300- 0.24.21.7 1.6 0 01.7一点九 000.30.34.13.50.40.42.62.71.5 3.60.8 0.90.20.56.62.10.10.50.42.02.60.1 3.32.1 5.11.80.46h=1h=1h=1E.T.:重新思考自我关注Transformer Modelson GPUSC '21,November 14-19,2021,St. 关闭MO,USA11111111图6:重新加权训练、修剪和掩码再训练;我们使用8 × 4权重矩阵(两个头;每个头4 × 4)作为示例。与WQ或WK的转置相乘。因此,不能享受修剪的结果矩阵用于未来的操作。另一方面,张量瓦片修剪矩阵可以避免列修剪所遭受的预处理和后处理开销。因此,我们对W Q和W K使用基于张量瓦片的修剪。对于WV和WO,优选的修剪模式是高度去重的。这取决于我们是否采用预先计算的线性变换如果我们不采用预先计算的线性变换,如图3(a)所示,我们更喜欢列修剪的WV,以及张量瓦片修剪的WO。否则,由于我们预先计算了多-在WV和WO之间的重叠,我们更关心修剪维度d模型 = 768;自我注意头H = 12)。对于变换器,存在2个编码器层(L =2;嵌入维度d_model= 800;自注意头部d_model =4)。评价指标。我们测量推理的延迟,不同的模型和稀疏性。它将词嵌入作为输入,并为特定任务的后处理生成输出 对于修剪算法,在WikiText-2上,我们使用下一个单词预测的准确性。在所有的GLUE基准测试中,我们按照[52]中的约定报告指标,即,报告了MNLI、SST-2、QNLI和WNLI的准确性评分;报告了QQP 、MRPC的F1评分;报告了STS-B的Spearman相关性。结果矩阵中的模式(BHH不V,h不噢, )的。所示实施细节。我们实施E.T.而不是使用TensorRT [40]。虽然TensorRT提供了图3(b),我们对WO采用行修剪,而将WV保留为稠密矩阵有两个原因。首先,WO被行修剪,因为重新我们发现,开发人员可以使用API添加定制的内核作为插件,选择矩阵X·(λH不V,h不噢, )将保持列修剪这样做会破坏TensorRT对整个实现的优化。此外,TensorRT的优化器工作在这可以使图3(b)中的步骤受益。第二,WV不修剪操作员级别,而不是源代码级别。它只能融合因为修剪WV不仅不会导致稀疏性改变,在X·(XH)中不V,h不噢, ),但也阻止我们修剪更多通过从预定义的规则和实现中搜索内置运算符另外,我们还要付包装费其他权重矩阵中的条目我们将该方法简化为注意力感知修剪在以下上下文中。5实验5.1实验装置数据集。 对于Transformer模型,我们在Wikitext-2数据集上进行实验[30]。 对于BERT BASE [11]和DistilBERT [48]模型,我们在GLUE基准测试[52]上进行了实验,GLUE基准测试是自然语言理解任务的综合集合,涵盖三个NLP类别,即: 推理任务(MNLI[55],Quora问题对(QQP)[62],QNLI [52](来自SQuAD [45]的一组超过100,000+的问答对),单句(SST-2 [49]),副短语相似性匹配(STS-B [5],Microsoft Research Para- phrase Corpus(MRPC [12])和WNLI [26])。基线模型。 我们的基准模型是未修剪的trans-former、BERT BASE和DistilBERT。 我们在第一行中列出了BERT BASE和DistilBERT从原始论文中报告的预测精度,如表1所示。对于BERT,我们使用官方的BERTBASE[11],uncased模型作为我们的预训练模型。有12个编码器层(L =12;嵌入维度d模型=
下载后可阅读完整内容,剩余1页未读,立即下载
cpongm
- 粉丝: 5
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功