前语 本文是一篇总述性的博客,探讨总结当下常用的大型 transformer 功率优化计划。

本文转载自机器之心

作者丨Lilian Weng

欢迎重视大众号CV技能攻略,专心于核算机视觉的技能总结、最新技能盯梢、经典论文解读、CV招聘信息。

核算机视觉入门1v3辅导班

大型 Transformer 模型现在已经成为主流,为各种使命创造了 SOTA 成果。固然这些模型很强大,但练习和运用起来价值十分贵重。在时刻和内存方面存在有极高的推理本钱。概括来说,运用大型 Transformer 模型进行推理的难点,除了模型的规划不断扩展外,还有两个不行忽略的地方:

  • 内存耗费大:推理时,需求把模型参数和中心状态都保存到内存中。例如:KV 存储机制下的缓存中的内容在解码期间需求存储在内存中,举例来说,关于 batch size 为 512,上下文长度为 2048 的设置来说,KV 缓存里需求的空间规划为 3TB,这是模型巨细的 3 倍;注意力机制的推理本钱和输入序列的长度呈正相关;

  • 低并行性:推理生成进程以自回归的办法履行,使解码进程难以并行。

在这篇文章中,领导 OpenAI 运用研讨的 Lilian Weng 写了一篇博客,文中介绍了几种进步 transformer 推理功率的办法****。一些是通用的网络紧缩办法,而另一些则运用于特定的 transformer 架构

一文总结当下常用的大型 transformer 效率优化方案

模型总述

一般将以下内容视为模型推理优化的目标:

  • 运用更少的 GPU 设备和更少的 GPU 内存,削减模型的内存占用;

  • 削减所需的 FLOP,下降核算复杂度;

  • 削减推理推迟,运行得更快。

能够运用几种办法来下降推理进程在内存中的本钱,而且加快速度。

  • 在多 GPU 上运用各种并行机制来完成对模型的扩展。模型组件和数据的智能并行使得运行具有万亿级参数的大模型成为或许;

  • 将暂时未运用的数据卸载到 CPU,并在今后需求时读回。这样做对内存比较友爱,但会导致更高的推迟;

  • 智能批处理战略;例如 EffectiveTransformer 将接连的序列打包在一起,以删去单个批次中的 padding;

  • 神经网络紧缩技能,例如剪枝、量化、蒸馏。就参数数量或位宽而言,小规范的模型应该需求少量的内存,也就运行得更快;

  • 特定于目标模型架构的改善。许多架构上的改动,尤其是注意力层的改动,有助于进步 transformer 的解码速度。

本篇文章的重点是网络紧缩技能和 transformer 模型在特定体系结构下的改善。

量化战略

在 深度神经网络上运用量化战略有两种常见的办法:

  • 练习后量化(PTQ):首先需求模型练习至收敛,然后将其权重的精度下降。与练习进程比较,量化操作起来往往价值小得多;

  • 量化感知练习 (QAT):在预练习或进一步微调期间运用量化。QAT 能够取得更好的功能,但需求额定的核算资源,还需求运用具有代表性的练习数据。

值得注意的是,理论上的最优量化战略与实践在硬件内核上的体现存在着客观的差距。由于 GPU 内核对某些类型的矩阵乘法(例如 INT4 x FP16)缺乏支撑,并非下面一切的办法都会加快实践的推理进程。

Transformer 量化挑战

许多关于 Transformer 模型量化的研讨都有相同的调查成果:练习后将参数简略地量化为低精度(例如 8 位)会导致功能显着下降,这首要是由于一般的激活函数量化战略无法覆盖悉数的取值区间。

一文总结当下常用的大型 transformer 效率优化方案

图 1. 只将模型权重量化为 8 位,激活函数运用完好的精度的时候能取得较好的作用

激活函数量化为 8 位时,无论权重是否为低精度(W8A8 和 W32A8)作用都不如 W8A32。

Bondarenko 等人在一个小型 BERT 模型中调查到,由于输出张量中存在强异常值,FFN 的输入和输出具有十分不同的取值区间。因而,FFN 残差和的逐一张量的量化或许会导致显著的差错。

跟着模型参数规划继续增长到数十亿的等级,高量级的离群特征开端在一切 transformer 层中呈现,导致简略的低位量化作用欠安。 Dettmers 等人调查到大于 6.7B 参数的 OPT 模型就会呈现这种现象。模型大了,有极点离群值的网络层也会变多,这些离群值特征对模型的功能有很大的影响。在几个维度上的激活函数异常值的规划就能够比其他大部分数值大 100 倍左右。

一文总结当下常用的大型 transformer 效率优化方案

图 2. 不同规划的 OPT 模型在四个言语使命(WinoGrande、HellaSwag、PIQA、LAMBADA)上的平均零样本准确率。

混合精度量化

处理上述量化挑战的最直接办法是以不同的精度对权重和激活函数进行量化。

GOBO 模型是第一批将练习后量化运用于 transformer 的模型之一(即小型 BERT 模型)。GOBO 假定每一层的模型权重遵守高斯分布,因而能够经过盯梢每层的均值和规范差来检测异常值。异常值特征坚持原始办法,而其他值被分到多个 bin 中,而且仅存储相应的权重索引和质心值。

依据对 BERT 中只要某些激活层(例如 FFN 之后的残差衔接)导致功能大幅下降现象的调查,Bondarenko 等人经过在有问题的激活函数上运用 16 位量化而在其他激活函数上运用 8 位来选用混合精度量化。

LLM.int8 () 中的混合精度量化是经过两个混合精度分化完成的:

  • 由于矩阵乘法包括一组行和列向量之间的独立内积,所以能够对每个内积进行独立量化。每一行和每一列都按最大值进行缩放,然后量化为 INT8;

  • 异常值激活特征(例如比其他维度大 20 倍)仍保存在 FP16 中,但它们只占总权重的极小部分,不过需求经历性地识别离群值。

一文总结当下常用的大型 transformer 效率优化方案

图 3.LLM.int8()两种混合精度分化办法。

细粒度量化

一文总结当下常用的大型 transformer 效率优化方案

简略地量化一层中的整个权重矩阵(逐一张量或逐一层量化)是最容易完成的,但量化粒度往往不尽善尽美。

Q-BERT 将分组量化运用于微调的 BERT 模型,将 MHSA(多头自注意力)中每个头的单个矩阵 W 视为一个组,然后运用依据 Hessian 矩阵的混合精度量化。

Per-embedding group (PEG) 激活函数量化的规划动机是调查到离群值仅呈现在少量几个维度中。对每个嵌入层都量化的价值十分贵重,比较之下,PEG 量化将激活张量沿嵌入维度分成几个巨细均匀的组,其间同一组中的元素同享量化参数。为保证一切异常值都分组在一起,PEG 运用了一种依据取值规模的嵌入维度摆放算法,其间维度按其取值规模排序。

ZeroQuant 与 Q-BERT 一样都对权重运用分组量化,然后还对激活函数运用了 token-wise 量化战略。为了防止价值贵重的量化和反量化核算,ZeroQuant 构建了共同的内核来将量化操作与其之前的运算符交融。

运用二阶信息量化

Q-BERT 针对混合精度量化开发了 Hessian AWare 量化 (HAWQ)。其动机是,具有更高 Hessian 谱的参数对量化更灵敏,因而需求更高的精度。这种办法本质上是一种识别异常值的办法。

从另一个角度来看,量化问题是一个优化问题。给定一个权重矩阵 W 和一个输入矩阵 X ,想要找到一个量化的权重矩阵 W^ 来最小化如下所示的 MSE 丢失:

一文总结当下常用的大型 transformer 效率优化方案

GPTQ 将权重矩阵 W 视为行向量 w 的调集,并对每一行独立量化。GPTQ 运用贪心战略来挑选需求量化的权重,并迭代地进行量化,来最小化量化差错。更新被选定的权重会生成 Hessian 矩阵办法的闭合解。GPTQ 能够将 OPT-175B 中的权重位宽削减到 3 或 4 位,还不会形成太大的功能丢失,但它仅适用于模型权重而不适用于激活函数。

异常值滑润

众所周知,Transformer 模型中激活函数比权重更难量化。SmoothQuant 提出了一种智能处理计划,经过数学等效改换将异常值特征从激活函数滑润到权重,然后对权重和激活函数进行量化 (W8A8)。正由于如此,SmoothQuant 具有比混合精度量化更好的硬件功率。

一文总结当下常用的大型 transformer 效率优化方案

​图 5. SmoothQuant 将规范方差从激活函数迁移到离线权重,以下降激活函数量化的难度。由此发生的新权重和激活矩阵都易于量化。

依据每个通道的滑润因子 s,SmoothQuant 依据以下公式缩放权重:

一文总结当下常用的大型 transformer 效率优化方案

依据滑润因子能够很容易地在离线状态下交融到前一层的参数中。超参数 操控从激活函数迁移到权重的程度。该研讨发现 =0.5 是试验中许多 LLM 的最佳取值。关于激活异常值较大的模型,能够将 调大。

量化感知练习 (QAT)

量化感知练习将量化操作交融到预练习或微调进程中。这种办法会直接学习低位表明的模型权重,并以额定的练习时刻和核算为价值取得更好的功能。

最直接的办法是在与预练习数据集相同或代表预练习数据集的练习数据集上量化后微调模型。练习目标能够与预练习目标相同(例如通用言语模型练习中的 NLL/MLM)或特定于的下流使命(例如用于分类的穿插熵)。

另一种办法是将全精度模型视为教师模型,将低精度模型视为学生模型,然后运用蒸馏丢失优化低精度模型。蒸馏一般不需求运用原始数据集。

剪枝

网络剪枝是在保存模型容量的情况下,经过修剪不重要的模型权重或衔接来减小模型巨细。剪枝或许需求也或许不需求从头练习。剪枝能够是非结构化的也能够是结构化的。

  • 非结构化剪枝允许丢掉任何权重或衔接,因而它不保存原始网络架构。非结构化剪枝一般对硬件要求比较严苛,而且不会加快实践的推理进程;

  • 结构化剪枝不改动权重矩阵本身的稀少程度,或许需求遵循某些方式约束才能运用硬件内核支撑的内容。本文专心于那些能完成 transformer 模型的高稀少性的结构化剪枝。

构建剪枝网络的常规工作流程包括三个进程:

1. 练习密布型的神经网络直到收敛;

2. 修剪网络以去除不需求的结构;

3. (可挑选)从头练习网络,让新权重坚持之前的练习作用。

经过剪枝在密布模型中发现稀少结构,一起稀少网络仍然能够坚持相似功能的创意是由彩票假定激起的:这是一个随机初始化的密布前馈网络,它包括一个子网络池。其间只要一个子集(稀少网络)是中奖彩票(winning tickets),这个中奖彩票在独立练习时能够到达最佳功能。

怎么剪枝

Magnitude pruning 是最简略但一起又十分有用的剪枝办法 – 只裁剪那些绝对值最小的权重。事实上,一些研讨发现,简略的量级剪枝办法能够取得与复杂剪枝办法相当或更好的成果,例如变分 dropout 和 l_0 正则化。Magnitude pruning 很容易运用于大型模型,并在相当大的超参数规模内完成相当共同的功能。

Zhu & Gupta 发现,大型稀少模型能够比小型但密布的模型取得更好的功能。他们提出了 Gradual Magnitude Pruning (GMP) 算法,该算法在练习进程中逐步添加网络的稀少性。在每个练习进程中,具有最小绝对值的权重被屏蔽为零以到达所需的稀少度而且屏蔽的权重在反向传达期间不会得到梯度更新。所需的稀少度跟着练习进程的添加而添加。GMP 进程对学习率步长战略很灵敏,学习率步长应高于密布网络练习中所运用的,但不能太高以防止收敛。

迭代剪枝屡次迭代上述三个进程中的第 2 步(剪枝)和第 3 步(从头练习),每次只要一小部分权重被剪枝,而且在每次迭代中从头练习模型。不断重复该进程,直到到达所需的稀少度等级。

怎么再练习

再练习能够经过运用相同的预练习数据或其他特定于使命的数据集进行简略的微调来完成。

Lottery Ticket Hypothesis 提出了一种权重 rewinding 再练习办法:剪枝后,将未剪枝的权重从头初始化回练习初期的原始值,然后以相同的学习率时刻表进行再练习。

学习率 rewinding 仅将学习率重置回其前期值,而坚持未剪枝的权重自最后一个练习阶段完毕以来不变。研讨者调查到 (1) 运用权重 rewinding 的再练习成果优于经过跨网络和数据集进行微调的再练习,以及 (2) 在一切测验场景中学习率 rewinding 与权重 rewinding 的作用持平甚至更优。

稀少化

稀少化是扩展模型容量一起坚持模型推理核算功率的有用办法。本文考虑两种类型的 transformer 稀少性:

  • 稀少化的全衔接层,包括自注意力层和 FFN 层;

  • 稀少模型架构,即 MoE 组件的合并操作。

经过剪枝完成的 N:M 稀少化

N:M 稀少化是一种结构化的稀少化方式,适用于现代 GPU 硬件优化,其间每 M 个接连元素中的 N 个元素为零。例如,英伟达 A100 GPU 的稀少张量中心支撑 2:4 稀少度以加快推理速度。

一文总结当下常用的大型 transformer 效率优化方案
图 6. 2:4 结构化稀少矩阵及其紧缩表明。

为了使密布型神经网络的稀少化遵循 N:M 结构化稀少方式,英伟达建议运用三步操作来练习剪枝后的网络:练习 –> 剪枝以满意 2:4 稀少性 –> 从头练习。

(1) 对矩阵中的列进行摆放能够在剪枝进程中提供更多或许,以坚持参数的数量或满意特殊约束,如 N:M 稀少性。只要两个矩阵对应的轴按相同的次序摆放,矩阵乘法的成果就不会改动。例如,(1) 在自注意力模块中,假如 query 的嵌入矩阵 Q 的轴 1 和 key 嵌入矩阵 K^⊤的轴 0 选用相同的摆放次序,则 QK^⊤的矩阵乘法最终成果坚持不变。

一文总结当下常用的大型 transformer 效率优化方案

图 7. Q(轴 1)和 K^⊤(轴 0)上相同摆放,自注意力模块的成果不变。

(2) 在包括两个 MLP 层和一个 ReLU 非线性层的 FFN 层内,能够将第一个线性权重矩阵 W_1 沿轴 1 摆放,然后第二个线性权重矩阵 W_2 沿轴 0 按相同次序摆放。

一文总结当下常用的大型 transformer 效率优化方案

图 8. W_1(轴 1)和 W_2(轴 0)上有着相同的摆放,能够坚持 FFN 层的输出不变。为简略起见,图示省略了误差项,但也应对它们运用相同的摆放。

为了推动 N:M 结构稀少化,需求将一个矩阵的列拆分为 M 列的多个 slide(也称为 stripe),这样能够很容易地调查到每个 stripe 中的列次序和 stripe 的次序对 N:M 稀少化发生的约束。

Pool 和 Yu 提出了一种迭代式的贪心算法来寻觅最优摆放,使 N:M 稀少化的权重起伏最大化。一切通道对都被推测性地沟通,而且只选用起伏添加最大的沟通,然后生成新的摆放并完毕单次迭代。贪心算法或许只会找到部分极小值,因而他们引进了两种技能来逃避部分极小值:

1. 有界回归:在实践中,两个随机通道的最大沟通次数是固定的。每次查找只要一个通道能够进行沟通,以坚持查找空间宽而浅;

2. 窄且深的查找:挑选多个 stripe 并一起优化它们。

一文总结当下常用的大型 transformer 效率优化方案

​图 9. 贪心算法完成迭代地寻觅 N:M 稀少化最佳摆放的算法。

与按默许通道次序对网络进行剪枝比较,假如在剪枝之前对网络进行置换,能够取得更好的功能。

为了从头开端练习具有 N:M 稀少化的模型,Zhou & Ma 扩展了常用于模型量化中的反向传达更新的 STE,用于起伏剪枝和稀少参数更新。

STE 核算剪枝后的网络 的密布参数的梯度 , 并将其作为近似值运用于稠密 网络 W:

一文总结当下常用的大型 transformer 效率优化方案

STE 的扩展版本 SR-STE(稀少精化 STE)经过以下办法更新稠密权重 W:

一文总结当下常用的大型 transformer 效率优化方案

​其间 是 的掩码矩阵, 是元素对应位置相乘。SR-STE 经过 (1) 约束 中对权重的剪枝, 以及 (2) 维持 中末被剪枝的权重, 来防止二进制掩码剧烈改动。

一文总结当下常用的大型 transformer 效率优化方案

图 10. STE 和 SR-STE 的对比。⊙的比较是元素乘积;⊗是矩阵乘法。

与 STE 或 SR-STE 不同,Top-KAST 办法能够在前向和反向传达的整个练习进程中坚持稳定的稀少性,还不需求运用具有稠密参数或梯度的前向传达。

在练习到第 t 步时,Top-KAST 进程如下:

稀少前向传递:挑选参数的一个子集,包括每层按巨细摆放的前 K 个参数,约束为权重的前 D 比例。假如时刻 t 的参数化 ^t 不在 A^t(活动权重)中,则参数化为零。

一文总结当下常用的大型 transformer 效率优化方案

其间 TopK (,x) 是依据巨细排序后从 中的前 x 个权重。

稀少向后传递:然后将梯度运用于更大的参数子集, 其间 B 包括 (D+M), A⊂B。扩展需求更新的权重比例能够更有用地探索不同的剪枝掩码,从而更有或许将前 D% 的激活权重摆放好。

一文总结当下常用的大型 transformer 效率优化方案

练习分为两个阶段,调集 B∖A 中的附加坐标操控引进的探索量。探索量会在练习进程中逐步削减,最终掩码会稳定下来。

一文总结当下常用的大型 transformer 效率优化方案

图 11. Top-KAST 的剪枝掩码会随时刻稳定下来。

为了防止马太效应,Top-KAST 经过 L2 正则化丢失来惩罚激活权重,以鼓舞发生更多新的探索。在更新期间,B∖A 中的参数比 A 受到更多的惩罚以稳定掩码。

一文总结当下常用的大型 transformer 效率优化方案

稀少 Transformer

稀少 Transformer 将 Transformer 架构中的自注意力层和 FFN 层稀少化,使单个样本推理的速度进步了 37 倍。

一文总结当下常用的大型 transformer 效率优化方案

图 12. 当在不同网络层上运用稀少化时,Transformer 模型解码单个 token(非批量推理)的速度。

稀少 FFN 层:每个 FFN 层包括 2 个 MLP 和中心的一个 ReLU。由于 ReLU 会引进很多零值,所以该办法在激活函数上规划了一个固定结构,来强制要求在一个包括 N 个元素的块中只包括 1 个非零值。稀少方式是动态的,每个 token 都不同。

一文总结当下常用的大型 transformer 效率优化方案

其间 (sparse ) 中的每个激活函数成果对应于 W_1 中的一列和 W_2 中的一行。控 制器是一个低秩的 bottleneck 全衔接层, 其间 、 .在练习期间运用 argmax 进行推理以挑选哪些列应为非零和, 以及 Gumbel-softmax 技巧。由于能够在加载 FFN 权重矩阵之前核算 Controller ( ), 所以能够知道哪些列将被清零, 因而挑选不将它们加载到内存中以加快推理速度。

一文总结当下常用的大型 transformer 效率优化方案

图 13. (a) 稀少 FFN 层;赤色列未加载到内存中以进行更快的推理。(b) 1:4 稀少度的稀少 FFN 操控器。

稀少注意力层:在注意力层中,维度 d_(model) 被划分为 S 个模块,每个模块的巨细为 M=d_(model)/S。为了保证每个细分都能够拜访嵌入的任何部分,Scaling Transformer 引进了一个乘法层(即,一个乘法层将来自多个神经网络层的输入按元素相乘),它能够表明恣意摆放,但包括的参数少于全衔接层。

给定输入向量 ,乘法层输出:

一文总结当下常用的大型 transformer 效率优化方案

乘法层的输出是一个巨细为size 的张量。然后由二维卷积层对其进行处理,其间 length 和 S 被视为图画的高度和宽度。这样的卷积层进一步削减了注意力层的参数数量和核算时刻。

一文总结当下常用的大型 transformer 效率优化方案

图 14. (a) 引进乘法层以使分区能够拜访嵌入的任何部分。(b) 乘法全衔接层和二维卷积层的结合削减了注意力层的参数数量和核算时刻。

为了更好地处理长序列数据,Scaling Transformer 进一步配备了来自 Reformer 的 LSH(部分灵敏哈希)注意力和 FFN 块循环,从而发生了 Terraformer 模型。

混合专家体系 MoE

专家混合体系 (MoE) 模型是一种专家网络的调集,每个样本仅激活网络的一个子集来取得猜测成果。这个想法起源于上世纪九十年代而且与集成办法密切相关。有关怎么将 MoE 模块合并到 Transformer 的详细信息,能够查看本文作者之前写的关于大型模型练习技能的帖子和 Fedus 等人关于 MoE 的论文。

运用 MoE 架构,在解码时仅运用部分参数,因而节约了推理本钱。每个专家的容量能够经过超参数容量因子 C 进行调整,专家容量界说为:

一文总结当下常用的大型 transformer 效率优化方案

每个 token 需求挑选前 k 个专家。较大的 C 会扩展专家容量,进步功能,但这样做核算本钱更高。当 C>1 时,需求添加一个松弛容量;当 C<1 时,路由网络需求忽略一些 token。

路由战略改善

MoE 层有一个路由网络来为每个输入 token 分配一个专家子集。原生 MoE 模型中的路由战略是将每个 token 以不同的办法路由到按天然次序呈现的首选专家。假如路由到的专家已经没有多余的空间,token 将被标记为溢出并被越过。

V-MoE 将 MoE 层添加到 ViT (Vision Transformer) 中。它与曾经的 SOTA 模型的功能相匹配,但只需求一半的推理核算。V-MoE 能够扩展成一千五百万个参数。有研讨者在试验中将 k=2、专家需求 32 位,每 2 位专家间放置一层 MoE。

由于每个专家的能力有限,假如某些重要且信息丰厚的 token 在预界说的序列次序(例如语句中的单词次序或图画中 patch 的次序)中呈现得太晚,则或许不得不丢掉它们。为了防止原生路由计划中的这种缺陷,V-MoE 选用 BPR(批量优先路由)首先将专家分配给具有高优先级分数的 token。BPR 在专家分配之前核算每个 token 的优先级分数(前 k 名路由器得分的最大值或总和),并相应地更改 token 的次序。这保证了中心的 token 能优先运用专家容量的缓冲区。

一文总结当下常用的大型 transformer 效率优化方案

​图 15. 当 C<1 时,依据优先级分数丢掉图画 patch 的办法。

当 C≤0.5 时,BPR 比一般路由作用更好,此时模型开端丢掉大量 token。这使模型即使在十分低的容量下也能与稠密网络一较高低。

在研讨怎么解释图画的类别与专家之间的关系时,研讨者调查到前期的 MoE 层更通用,而后期的 MoE 层能够专门用于某类图画。

使命级 MoE 将使命信息考虑在内,而且将路由 token 在使命级的视角来处理。研讨者以 MNMT(多言语神经机器翻译)为例,依据目标言语或言语对进行翻译使命分组。

Token 级路由是动态的,每个 token 的路由决议计划是不相交的。因而,在推理时,服务器需求预加载一切专家。比较之下,使命级路由是静态的,甚至是固定的使命,因而一个使命的推理服务器只需求预加载 k 个专家(假定 top-k 才有路由)。依据研讨者的试验,与稠密模型的 baseline 比较,使命级 MoE 能够完成与 token MoE 相似的功能增益,峰值吞吐量高 2.6 倍,解码器小 1.6%。

使命级 MoE 本质上是依据预界说的启发式办法对使命分布进行分类,并将此类人类常识归入路由器。当这种启发式不存在时,使命级 MoE 就难以运用了。

PR MoE 让每个 token 经过一个固定的 MLP 和一个选定的专家。由于靠后的 MoE 更有价值,PR MoE 在靠后的层上规划了更多的出口。DeepSpeed 库完成了灵活的多专家、多数据并行,以支撑运用不同数量的专家来练习 PR MoE。

一文总结当下常用的大型 transformer 效率优化方案

图 16。PR MoE 架构与规范 MoE 的对比图。

内核方面的改善办法

专家网络能够托管在不同的设备上。但是,当 GPU 数量添加时,每个 GPU 上的专家数量就会削减,专家之间的通讯本钱变得愈加贵重。跨多个 GPU 的专家之间的多对多通讯依赖于 NCCL 的 P2P API,这个接口不能占据高速链路一切的带宽,这是由于运用的节点越多,单个 chunk 越小。现有的多对多算法在大规划问题上功能较差,单个 GPU 的工作量不能提升。针对这种情况,有多种内核改善办法来完成更高效的 MoE 核算,例如使多对多通讯更便宜 / 更快。

DeepSpeed 库和 TUTEL 都完成了依据树的分层多对多算法,该算法在节点内运用多对多算法处理,然后再在节点间完成多对多。这种算法将通讯跳数从 O(G)削减到 to ,其间 G 是 GPU 节点的总数,G_(node) 是每个节点的 GPU 内核数。虽然在这样的完成中通讯量添加了一倍,但当批巨细较小时 11 卷积层存在推迟,因而能够更好地扩展 batch 的规划。

DynaMoE 运用动态再编译使核算资源适应专家之间的动态工作负载。再编译机制需求从头开端编译核算图,而且只在需求时从头分配资源。它会揣摩分配给每个专家的样本数量,并动态调整其容量因子 C,以削减运行时的内存和核算需求。这种办法依据在练习前期对专家和样本的分配关系的调查,在模型收敛后引进样本分配缓存,然后运用再编译算法消除门控网络和专家之间的依赖性。

架构优化

论文《Efficient Transformers: A Survey》回顾了一系列新的 Transformer 架构,并针对进步核算和内存功率进行了一些改善,除此以外,咱们还能够阅览这篇文章《The Transformer Family》,以深入了解几种类型的 Transformer 改善。

一文总结当下常用的大型 transformer 效率优化方案

图 17. 高效 transformer 模型的分类

自注意力机制的二次时刻复杂度和内存复杂性问题是进步 transformer 解码功率的首要瓶颈,因而一切高效 transformer 模型都对本来稠密的注意力层运用了某种办法的稀少化办法。

1. 固定方式:运用预界说的固定方式约束注意力矩阵的感触野:

  • 能够将输入序列分成固定的块;

  • 图画 transformer 运用了部分注意力;

  • 稀少 transformer 运用了跨线注意力方式;

  • Longformer 运用了 dilated 注意力窗口;

  • 能够运用 strided 卷积紧缩注意力来削减序列长度。

2. 组合方式:对输入的 token 进行排序 / 聚类以完成更优化的序列大局视图,一起坚持固定方式的功率优势

  • 稀少 transformer 结合了跨步和部分注意力;

  • 给定高维输入张量,axial transformer 不会将输入 flattened 后再运用注意力机制,而是运用多注意力机制,一个注意力对应着输入张量的一个轴;

  • Big Bird 模型规划了一些关键组件,即(1)大局 token,(2)随机注意力(query 向量随机绑定 key 向量)和(3)固定方式(部分滑动窗口)。

3. 可学习方式:经过学习确定最佳注意力方式:

  • Reformer 运用部分灵敏哈希将 token 聚类;

  • 路由 transformer 用 k-means 将 token 聚类;

  • Sinkhorn 排序网络会对输入序列块的排序算法进行学习。

4. 递归:经过递归衔接多个 block/segment:

  • Transformer-XL 经过在 segment 之间重用躲藏状态来获取更长的上下文;

  • 通用 transformer 将自注意力与 RNN 中的循环机制相结合;

  • Compressive transformer 是 Transformer-XL 的扩展,具有额定的内存,具有 n_m 个内存槽和 n_(cm) 个紧缩内存槽。每当有新的输入段被输入到模型当中时,主内存中最久未更新的前 n_s 个激活函数都会被转移到紧缩内存中。

5.Side Memory:运用能够一次拜访多个 token 的 Side Memory 模块

  • Set Transformer 规划了一种受概括点办法启发的新注意力;

  • ETC(Extended transformer construction)是 Sparse Transformer 的变体,具有新的大局 – 部分注意力机制;

  • Longformer 也是 Sparse Transformer 的变体,运用 dilated 滑动窗口。跟着模型网络的深入,感触野也会逐步添加。

6. 节约内存:更改架构以运用更少的内存:

  • Linformer 将 key 和 value 的代表长度的维度投影到低维表明(N→k),因而内存复杂度从 NN 下降到 Nk;

  • Shazeer 等人提出了多 query 注意力,在不同注意力头之间同享 key 和 value,大大削减了这些张量的巨细和内存本钱。

7. 运用内核:运用内核能够让自注意力机制的公式书写起来更简略。需求注意的使,这儿的内核是指内核办法中的内核,而不是 GPU 操作程序。

8. 自适应注意力:让模型学习最佳注意力广度,或决议何时按每个 token 提前退出:

  • 自适应注意力广度练习模型,经过 token 和其他 key 之间的 soft mask 机制,为每个 token、每个注意力头学习最佳的注意力广度;

  • 通用 transformer 结合了循环机制,并运用 ACT(自适应核算时刻)来动态决议循环几次;

  • 深度自适应 transformer 和 CALM 运用一些置信度度量办法来学习何时提前退出每个 token 的核算层,这样能够在功能和功率之间找到一种平衡。

原文链接:lilianweng.github.io/posts/2023-…

欢迎重视大众号CV技能攻略,专心于核算机视觉的技能总结、最新技能盯梢、经典论文解读、CV招聘信息。

【技能文档】《从零搭建pytorch模型教程》122页PDF下载

QQ沟通群:444129970。群内有大佬担任回答咱们的日常学习、科研、代码问题。

模型部署沟通群:732145323。用于核算机视觉方面的模型部署、高功能核算、优化加快、技能学习等方面的沟通。

其它文章

深度理解变分自编码器(VAE) | 从入门到精通

核算机视觉入门1v3辅导班

核算机视觉沟通群

用于超大图画的练习战略:Patch Gradient Descent

CV小常识讨论与分析(5)究竟什么是Latent Space?

【免费送书活动】关于语义切割的亿点思考

新计划:从过错中学习,点云切割中的自我规范化层次语义表明

经典文章:Transformer是怎么进军点云学习范畴的?

CVPR 2023 Workshop | 首个大规划视频全景切割竞赛

怎么更好地应对下流小样本图画数据?不平衡数据集的建模的技巧和策

Transformer沟通群

U-Net在2022年相关研讨的论文推荐

用少于256KB内存完成边缘练习,开支不到PyTorch千分之一

PyTorch 2.0 重磅发布:一行代码提速 30%

Hinton 最新研讨:神经网络的未来是前向-前向算法

聊聊核算机视觉入门

FRNet:上下文感知的特征强化模块

DAMO-YOLO | 逾越一切YOLO,统筹模型速度与精度

《医学图画切割》总述,详述六大类100多个算法

怎么高效完成矩阵乘?万文长字带你从CUDA初学者的角度入门

近似乘法对卷积神经网络的影响

BT-Unet:医学图画切割的自监督学习结构

语义切割该怎么走下去?

轻量级模型规划与部署总结

从CVPR22动身,聊聊CAM是怎么激活咱们文章的热度!

入门必读系列(十六)经典CNN规划演变的关键总结:从VGGNet到EfficientNet

入门必读系列(十五)神经网络不work的原因总结

入门必读系列(十四)CV论文常见英语单词总结

入门必读系列(十三)高效阅览论文的办法

入门必读系列(十二)池化各要点与各办法总结

TensorRT教程(三)TensorRT的安装教程

TensorRT教程(一)初度介绍TensorRT

TensorRT教程(二)TensorRT进阶介绍