Transformer家族5 -- 推理加速(Faster-Transformer、TurboTransformers)

    技术2022-07-10  99

    系列文章,请多关注Transformer家族1 – Transformer详解和源码分析Transformer家族2 – 编码长度优化(Transformer-XL、Longformer)Transformer家族3 – 计算效率优化(Adaptive-Span、Reformer、Lite-Transformer)Transformer家族4 – 通用性优化(Universal-Transformer)Transformer家族5 – 推理加速(Faster-Transformer、TurboTransformers)NLP预训练模型1 – 综述

    1 背景

    之前介绍了从编码长度、计算效率、通用性等角度对Transformer进行优化,并介绍了几个重要模型。本文介绍如何进行Transformer推理加速。相比于离线训练,在线推理加速更加关键。一方面由于在线流量大,加速可带来硬件成本的节省。另一方面在线推理加速,可大大提升AI应用的用户体验。 事实上,之前的多种方法,特别是计算效率优化,对推理加速很有帮助。这些模型从算法的角度,进行了推理速度优化。本文主要从框架层的角度,讲解如何对推理进行加速。主要带来NVIDIA的Faster-Transformer框架和腾讯的Turbo-Transformer框架。

    2 Faster-Transformer

    PPT资料:https://on-demand.gputechconf.com/gtc-cn/2019/pdf/CN9468/presentation.pdf代码地址:https://github.com/NVIDIA/DeepLearningExamples/tree/master/FasterTransformer

    实现方案

    Faster-Transformer算法结构和原版Transformer基本一致,主要是从框架层角度来实现计算加速。主要方法有

    算子融合。对除矩阵乘法外的所有算子,进行了合并。比如Add、Sub。从而减少了GPU kernel调度和显存读写。半精度F16优化。GELU激活函数、层正则化、softmax等调用频次很高的操作的优化

    效果

    Encoder效果对比如上。Faster-Transformer基本吊打TF XLA,提升速度一倍多。Decoder效果对比如上。对比了32bit和16bit的结果。Decoding FP32和Decoding FP16为Faster-Transformer 的结果,也是吊打原始TensorFlow。

    3 TurboTransformers

    代码地址 https://github.com/Tencent/TurboTransformers

    实现方案

    和Faster-Transformer一样,进行了算子融合。从而减少GPU kernel调用和显存占用对于LayerNorm和softmax,由于不适合并行计算,重新开发并实现了并行计算版本。内存缓存,避免频繁释放和分配内存。

    和其他方案的对比

    效果

    V100上的QPS,越高代表框架性能越好。对比了PyTorch、TensorFlow、Faster-Transformer、turboTransformers的效果,其中turboTransformers效果最好

    系列文章,请多关注Transformer家族1 – Transformer详解和源码分析Transformer家族2 – 编码长度优化(Transformer-XL、Longformer)Transformer家族3 – 计算效率优化(Adaptive-Span、Reformer、Lite-Transformer)Transformer家族4 – 通用性优化(Universal-Transformer)Transformer家族5 – 推理加速(Faster-Transformer、TurboTransformers)NLP预训练模型1 – 综述

    Processed: 0.012, SQL: 9