腾讯开源TurboTransformers,推理加速性能超TensorRT主流优化引擎

      最后更新:2020-04-29 11:35

      机器心脏报告

      机器编辑部之心

      4月24日,腾讯在GitHub上发布了第100个开源项目“涡轮变压器”。在各种CPU和GPU硬件测试中,Transformer推理加速工具的性能超过了PyTorch/TensorFlow和当前主流的优化引擎。

      在自然语言处理领域,以BERT为代表的Transformer神经网络模型是近年来最重要的模型创新,它显著提高了阅读理解、文章摘要、语义分类、同义词重写等自然语言处理任务。然而,在提高模型准确性的同时,Transformer也引入了更多的计算,这给部署Transformer的在线NLP服务带来了巨大的挑战。

      TensorFlow或Pytorch在工业中广泛用于完成变压器的培训部分。然而,由于深度学习的训练和推理任务的不同,直接应用于在线推理的训练框架无法达到最终的性能。

      4月24日,腾讯宣布开源变压器推理加速工具“涡轮变压器”。涡轮的意思是“涡轮”,通常用来增加发动机的氧含量并带来更多的动力。涡轮变压器意味着使推理引擎更强大。

      项目地址:https://github.com/Tencent/TurboTransformers

      从行业的痛点出发:高速、实用和简单

      具体来说,涡轮变压器有三个特点:高速、实用和简单:

      1.出色的中央处理器/图形处理器性能

      面对英特尔多核处理器和NVIDIA GPU硬件平台,TurboTransformers通过核心融合和并行算法优化,充分利用各级硬件的并行计算能力。PyTorch/TensorFlow和当前主流优化引擎(如OnxRuntime-MKLDNN/OnxRuntime-GPU、TorchJIT、NVIDIA快速转换器)的性能在各种CPU和GPU硬件上均已超越。

      2.为自然语言处理推理任务特征定制

      涡轮变压器可以支持可变长度输入序列处理,而不会因序列零填充、截断或桶分裂而导致无用的计算,也不会在推理之前对计算图进行任何预优化处理。

      3.简单使用方法

      涡轮变压器支持python和C++接口进行调用。涡轮变压器支持加载TensorFlow和PyTorch预训练模型。它可以用作huggingface/transformers的推理加速插件,BERT模型的端到端加速效果可以通过添加几行python代码来获得。

      与ONNX-runtime、TensorRT、Torchlib等推理优化引擎相比,TurboTransformers在性能和使用上具有优势。

      此前,TurboTransformers已经在腾讯内部应用于多个在线BERT服务场景。微信普通问答服务速度提高了1.88倍,公众云情感分析服务速度提高了2.11倍,QQ手表推荐服务速度提高了13.6倍

      整体结构

      TurboTransformers在三个方面进行了改进:运营商优化、框架优化和界面部署简化。

      涡轮变压器软件架构图。

      操作员层优化

      上图(a)显示了纸质变压器的结构示意图。灰色方框中的结构称为变压器单元,BERT编码器堆叠Nx个这样的变压器单元。图(b)显示了细胞扩增的细节。每个矩形都是独立的计算核心。

      变压器单元计算包括8个GEMM(通用矩阵乘法)运算。通过调整英特尔MKL和cuBLAS的GEMM调用方法获得最佳GEMM性能,在硬件许可的情况下,使用张量核方法在GPU上执行GEMM操作。

      与英伟达快速变压器相似,涡轮变压器将所有GEMM操作之间的计算集成到一个呼叫核心中。这有两个优点,一个是减少内存访问开销,另一个是减少多线程启动开销。

      对于这些内核,涡轮变压器使用openmp在CPU上进行并行,使用CUDA在GPU上进行优化。对于更复杂的层形式和软最大操作符,它们包括不适合在GPU上并行的协议操作。涡轮变压器为他们设计了创新的并行算法,大大减少了这些运营商的延迟。

      框架优化

      因为NLP使用可变长度输入,所以每个操作中中间结果的大小实际上是不同的。为了避免每次分配和释放内存,TurboTransformers通过缓存管理视频内存。

      此外,该团队为TurboTransformers提供了一些脚本,将他们的预培训模型转换成npz格式供他们读入,以便无缝地支持pytorch/tensorflow培训的序列化模型。考虑到pytorch拥抱脸/变压器是目前最流行的变压器培训方法,TurboTransformers支持直接阅读拥抱脸/变压器预培训模型。

      应用程序部署

      为了降低用户开发的难度,TurboTransformers提供了C++和Python调用接口,可以嵌入到C++多线程后台服务流程中,也可以添加到pytorch服务流程中。可以添加几行代码来获得端到端的BERT加速。在这一阶段,建议通过docker部署TurboTransformers,这一方面保证了编译的可移植性,另一方面可以无缝地应用于在线部署平台,如K8S。

      特性试验

      该团队首先在三个中央处理器硬件平台上测试了涡轮变压器的性能。下图显示了英特尔至强6133处理器的性能测试结果(平均150次迭代):

      接下来,在四个GPU硬件平台上进行测试。下图显示了英伟达RTX 2060图形处理器和英伟达V100图形处理器的性能测试结果(平均150次迭代):

      英伟达RTX 2060图形处理器测试结果。

      NVIDIA V100图形处理器测试结果。

      此外,该团队还在几个平台上测试了涡轮变压器,如中央处理器和图形处理器,更多的性能测试结果可以在项目主页上找到。

      目前,TurboTransformers暂时只支持FP32计算,腾讯未来将进一步完善,包括支持图形处理器FP16等功能。

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类