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


机器之心报道
机器之心编辑部
4月24日 , 腾讯发布了在 GitHub 上的第 100 个开源项目「TurboTransformers」 , 在多种 CPU 和 GPU 硬件测试中 , 这款 Transformer 推理加速工具获得了超越 PyTorch/TensorFlow 和目前主流优化引擎的性能表现 。
:腾讯开源TurboTransformers,推理加速性能超TensorRT主流优化引擎
本文插图
在自然语言处理领域 , 以 BERT 为代表的 Transformer 神经网络模型是近年来最重要的模型创新 , 为诸如阅读理解、文章摘要、语义分类、同义改写等 NLP 任务带了显著的效果提升 。 但 Transformer 在提高模型精度的同时 , 也引入了更多的计算量 , 这导致 Transformer 的线上 NLP 服务在部署方面面临着巨大挑战 。
:腾讯开源TurboTransformers,推理加速性能超TensorRT主流优化引擎
本文插图
业界普遍采用 TensorFlow 或者 Pytorch 来完成 Transformer 的训练部分 , 但由于深度学习的训练和推理任务存在差异 , 训练框架直接应用于线上推理并不能得到极致的性能 。
4月24日 , 腾讯宣布开源 Transformer 推理加速工具「TurboTransformers」 。 Turbo 的意思是「涡轮」 , 一般用来增加发动机氧气含量 , 带来更大动力 , TurboTransformers 则意味着可使推理引擎更加强劲 。
项目地址:https://github.com/Tencent/TurboTransformers
从业界痛点出发:高速、实用、简单
具体而言 , TurboTransformers 具备高速、实用、简单三个特点:
1. 优异的CPU/GPU 性能表现
面向 Intel 多核 CPU 和 NVIDIA GPU 硬件平台 , 通过核心融合和并行算法优化 , TurboTransformers 充发挥硬件的各层级并行计算的能力 。 在多种 CPU 和 GPU 硬件上获得了超过 PyTorch/TensorFlow 和目前主流优化引擎(如 onnxruntime-mkldnn/onnxruntime-gpu, torch JIT, NVIDIA faster transformers)的性能表现 。
2. 为NLP推理任务特点量身定制
TurboTransformers 可以支持变长输入序列处理 , 无需序列补零、截断或者分桶带来的无用计算 , 也无需任何针对计算图在推理前进行预调优的过程 。
3. 使用方式简单
TurboTransformers 支持 python 和 C++接口进行调用 。 TurboTransformers 支持 TensorFlow 和 PyTorch 预训练模型的载入 。 它可以作为 huggingface/transformers 的推理加速插件 , 通过加入几行 python 代码获得 BERT 模型的端对端加速效果 。
和 ONNX-runtime、TensorRT、Torchlib 等推理优化引擎相比 , TurboTransformers 在性能和使用方式上都具备优势 。
:腾讯开源TurboTransformers,推理加速性能超TensorRT主流优化引擎
本文插图
此前 , TurboTransformers 已应用在腾讯内部多个线上 BERT 服务服务场景 , 微信常用问题回复服务获得 1.88x 加速 , 公有云情感分析服务获得 2.11x 加速 , QQ 看点推荐服务获得 13.6x 加速 。
整体架构
TurboTransformers 在算子优化、框架优化和接口部署方式简化三个方面做了改进 。
:腾讯开源TurboTransformers,推理加速性能超TensorRT主流优化引擎
本文插图
TurboTransformers 软件架构图 。
算子层优化
:腾讯开源TurboTransformers,推理加速性能超TensorRT主流优化引擎
本文插图
上图 (a) 展示了论文 Transformer 结构示意图 , 灰色方框内的结构称为一个 Transformer Cell , BERT encoder 堆叠了 Nx 个这样的 Transformer Cell 。 图 (b) 为 Cell 的展开细节 , 每一个矩形都是一个独立的计算核心 。
Transformer Cell 计算包含了 8 个 GEMM(通用矩阵乘法 , General Matrix Multiplication)运算 , 通过调优 Intel MKL 和 cuBLAS 的 GEMM 调用方式来获得最佳 GEMM 性能 , 并在硬件允许条件下 , 在 GPU 上使用 tensor core 方式进行 GEMM 运算 。