论文阅读(第二部分):Full Stack Optimization of Transformer Inference: a Survey

论文阅读(第二部分):Full Stack Optimization of Transformer Inference: a Survey

原文链接:https://arxiv.org/pdf/2302.14017.pdf

模型分析

  • 1.3.1 负载分析

    端到端的浮点运算:

    floating-point operations (FLOPs)

    • 它可以通过将FLOPs总数除以访问的字节总数(也称为MOPs,或内存操作)来计算。
      A r i t h m e t i c I n t e n s i t y = F L O P s M O P s Arithmetic Intensity=\frac{FLOPs}{MOPs} ArithmeticIntensity=MOPsFLOPs

    FLOPs and MOPs scale super-linearly for all models, especially in the long sequence length regime, due to the quadratic complexity with respect to sequence length in the act-to-act matmuls
    End-to-end Arithmetic Intensity:

**Arithmetic Intensity(算术强度)**是指在深度神经网络中,对每个字节的数据执行的操作数量。它是一个重要的性能指标,**用于衡量计算和内存带宽之间的关系。算术强度的计算方式是通过将操作数量除以内存带宽来得到。**如果算术强度超过了特定阈值,那么该操作就是计算受限的,可以相应地进行优化。相反,如果算术强度低于阈值,那么该操作就是内存受限的,对处理器进行参数调整以更有效地利用处理器是无效的。

在深度神经网络中,算术强度的高低对于性能优化至关重要。例如,大型层相对于内存访问的计算量更大,这会导致较高的算术强度。另一方面,激活函数、池化和批量归一化等操作几乎总是内存受限的。

算术强度的计算方式是通过将操作数量除以内存带宽来得到。如果算术强度超过了特定阈值,那么该操作就是计算受限的,可以相应地进行优化。相反,如果算术强度低于阈值,那么该操作就是内存受限的。

在实际应用中,通过使用性能分析工具来获取浮点运算次数和内存访问次数,可以计算出算术强度。例如,PyTorch分析器中包含了计算浮点运算次数的功能,可以用来计算每个模块或PyTorch操作符的浮点运算次数。

  • 对于BERT-Base和BERT-Large,算术强度最初随着序列长度的增加而增加,直到512,然后随着序列长度的增加而降低。
  • the FFN module that has higher arithmetic intensity than the MHA module
  • 在这里插入图片描述
  • 图中的非线性算子叫做other

**Latency Breakdown**是指计算机系统中的延迟分析。在计算机科学中,延迟是指从发出请求到收到响应之间的时间。延迟分解是对延迟进行详细分析,以确定造成延迟的各种因素。这有助于识别和解决系统中的性能瓶颈。

In comparison to encoder-only BERT inference, decoder-only GPT-2 inference exhibits significantly lower arithmetic intensity

decoder 仅由矩阵-向量算子组成,因此限制了数据重用的机会

  • 对于一个矩阵-向量算子:当数据不能在每个token之间共享时,对每个参数加载执行一次乘法和一次加法,这导致在执行参数加载时执行两个操作。
  • 注意到GPT-2相比于BERT-Base在长序列增长时具有更低的FLOPs,但是由于它的低算数密度,使得它的推理更具挑战性。与只有编码器的BERT模型相比,这使得它的性能内存带宽受限。

Per-Layer FLOPs, MOPs, and Arithmetic Intensity:

  • these operations have lower arithmetic intensity compared to the projection layers in the FFN and MHA modules这也解释了为什么只有encoder的模型面对长序列的时候算数密度下降

  • 相对于投影层,act-to-act matmul的算术密度较低,因为这两个操作中的 d h \frac{d}{h} hd维度相对于投影层的维度(𝑑和 d F F N d_{FFN} dFFN)和𝑙来说是小的

  • 当序列逐渐边长,小维度矩阵带来更低的算术密度。由于矩阵中的每个元素需要执行更少的算子,导致减少重用。更少的算数密度随着大的激活数量而急剧增加,激活需要必须为act-t-act的数学运算加载和存储。

  • each head has its own activation (attention score) in the multi-head scheme

  • 非线性算子整体上具有较小的FLOPs但是如果处理不合适也会带来较大的性能影响
    在这里插入图片描述
    图:在GPT-2上每一层的decoder分析

  • which demonstrates the significantly reduced arithmetic intensity across all layers, compared to the encoder-only model, resulting from a large number of memory operations.由于大量的存储操作大大降低了算数密度

  • memory operationsThe two operations allowed in memory are *reading* a value and *writing* a value.

Comparision with ResNet50:
在这里插入图片描述
图:a breakdown of the FLOPs, MOPs, and arithmetic intensity for ResNet50

  • ResNet50 without any operator fusion consumes 3.07 times fewer FLOPs and 1.28 times fewer MOPs导致更小的端到端的算术密度,这事因为很少的非线性操作FLOPs消耗但是有比较大的MOPs消耗类似于BERT-Base encoder。
  • 在推理过程中,不同于transformer中的非线性操作,ResNet50中的可以和之前的matmuls进行融合*。*特别是:the ReLU operations can be applied directly to the accumulated outputs, and the BatchNorm operations can actually be folded into the prior convolutions
  • 融合ReLU消除了该操作所需的MOPs,折叠BatchNorm消除了该操作所需的flop和MOPs

operation fusion refers to a methodology in which the output values from one operation (e.g., a matmul or convolution) are directly used as input to the subsequent operation(e.g., a ReLU or BatchNorm)

  • 不能讲输出值一次写入off-chip 内存,算子融合减轻了不必要的内存加载和存储对于非线性算子

  • 注意,在理想情况下,算法强度提供了对不同模型和操作可能重用多少数据的粗略估计。

  • 1.3.2 Profilling

    Latency breakdown:

    End-to-end Latency:

在这里插入图片描述
图:normalized latency for different sequence lengths for BERT-Base, BERT-Large, and GPT-2

A model with higher arithmetic intensity can run faster with the same (or possibly even more) FLOPs than a model with lower arithmetic intensity.

These observations confirm our findings that decoder inference is a memory-bound problem and not a compute-bound problem

summary:

  • 由于act - to - act矩阵的二次复杂性,所有Transformer模型的FLOP和归一化延迟都与序列长度呈超线性比例。然而,这种趋势在序列长度较小的情况下不太明显,其中对整体计算起主要贡献的是随序列长度线性伸缩的FFN,而不是MHA模块
  • 对于只有编码器的模型,算术强度最初随着序列长度的增加而增加。然而,对于较大的序列,它会减少,因为MHA模块(特别是具有较低算术强度的act-to-act matmuls)成为总计算的主要贡献者
  • 仅解码器模型的算术强度明显低于仅编码器模型,导致相同序列长度的端到端延迟明显更长。这是由于解码器模型涉及有限数据重用的矩阵向量操作,使它们受内存带宽限制而不是计算限制
  • Matmuls在仅有编码器和仅有解码器的模型中都消耗了99 %以上的FLOPs,非线性操作在总体FLOPs中占比较小。然而,非线性操作具有极低的算术强度,特别是对于大序列长度,由于它们需要加载和存储大量的激活。
  • 24
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值