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

昨日,腾讯发布了在 GitHub 上的第 100 个开源项目「TurboTransformers」,在多种 CPU 和 GPU 硬件测试中,这款 Transformer 推理加速工具获得了超越 PyTorch/TensorFlow 和目前主流优化引擎的性能表现。


自然语言处理领域,以 BERT 为代表的 Transformer 神经网络模型是近年来最重要的模型创新,为诸如阅读理解、文章摘要、语义分类、同义改写等 NLP 任务带了显著的效果提升。但 Transformer 在提高模型精度的同时,也引入了更多的计算量,这导致 Transformer 的线上 NLP 服务在部署方面面临着巨大挑战。


业界普遍采用 TensorFlow 或者 Pytorch 来完成 Transformer 的训练部分,但由于深度学习的训练和推理任务存在差异,训练框架直接应用于线上推理并不能得到极致的性能。

昨日,腾讯宣布开源 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 已应用在腾讯内部多个线上 BERT 服务服务场景,微信常用问题回复服务获得 1.88x 加速,公有云情感分析服务获得 2.11x 加速,QQ 看点推荐服务获得 13.6x 加速。

整体架构

TurboTransformers 在算子优化、框架优化和接口部署方式简化三个方面做了改进。

TurboTransformers 软件架构图。

算子层优化


上图 (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 运算。

类似于 NVIDIA FasterTransformers 方案,TurboTransformers 将所有 GEMM 运算之间的计算融合成一个调用核心。这样有两个好处,一是减少了内存访问开销,二是减少多线程启动开销。

对于这些核心,TurboTransformers 在 CPU 上采用 openmp 进行并行,在 GPU 上使用 CUDA 进行优化实现。对于比较复杂的 LayerNorm 和 Softmax 算子,它们包含了不适合 GPU 上并行的规约操作,TurboTransformers 为它们设计了创新并行算法,极大降低了这些算子的延迟。

框架层优化

由于 NLP 的采用变长输入特性,每次运算中间结果的大小其实并不相同。为了避免每次都分配释放内存,TurboTransformers 通过 Caching 方式管理显存。

此外,团队为 TurboTransformers 提供了一些脚本,将二者的预训练模型转化为 npz 格式供其读入,以无缝支持 pytorch/tensorflow 训练好的序列化模型。考虑到 pytorch huggingface/transformers 是目前最流行的 transformer 训练方法,TurboTransformers 支持直接读入 huggingface/transformers 预训练模型。

应用部署

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

性能测试

团队首先在三个 CPU 硬件平台上测试了 TurboTransformers 的性能,下图显示了在 Intel Xeon 6133 CPU 上的性能测试结果(150 次迭代的均值):



接下来在四个 GPU 硬件平台上进行测试,下图显示了在 NVIDIA RTX 2060 GPU 和 NVIDIA V100 GPU 上的性能测试结果(150 次迭代的均值):

NVIDIA RTX 2060 GPU 测试结果。

NVIDIA V100 GPU 测试结果。

此外,团队还在多个CPU和GPU等平台上测试了 TurboTransformers,更多性能测试结果可见项目主页。

目前,TurboTransformers 暂时只支持 FP32 的计算,未来腾讯将对其进一步改进,包括对 GPU FP16 的支持等能力等。
工程NLPTransformer腾讯
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

分桶技术

将一个特征(通常是连续特征)转换成多个二元特征(称为桶或箱),通常是根据值区间进行转换。例如,您可以将温度区间分割为离散分箱,而不是将温度表示成单个连续的浮点特征。假设温度数据可精确到小数点后一位,则可以将介于 0.0 到 15.0 度之间的所有温度都归入一个分箱,将介于 15.1 到 30.0 度之间的所有温度归入第二个分箱,并将介于 30.1 到 50.0 度之间的所有温度归入第三个分箱。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

推理引擎技术

推理机是实施问题求解的核心执行机构,常见于专家系统。它是对知识进行解释的程序,根据知识的语义,对按一定策略找到的知识进行解释执行,并把结果记录到动态库的适当空间中去。

堆叠技术

堆叠泛化是一种用于最小化一个或多个泛化器的泛化误差率的方法。它通过推导泛化器相对于所提供的学习集的偏差来发挥其作用。这个推导的过程包括:在第二层中将第一层的原始泛化器对部分学习集的猜测进行泛化,以及尝试对学习集的剩余部分进行猜测,并且输出正确的结果。当与多个泛化器一起使用时,堆叠泛化可以被看作是一个交叉验证的复杂版本,利用比交叉验证更为复杂的策略来组合各个泛化器。当与单个泛化器一起使用时,堆叠泛化是一种用于估计(然后纠正)泛化器的错误的方法,该泛化器已经在特定学习集上进行了训练并被询问了特定问题。

腾讯机构

腾讯科技股份有限公司(港交所:700)是中国规模最大的互联网公司,1998年11月由马化腾、张志东、陈一丹、许晨晔、曾李青5位创始人共同创立,总部位于深圳南山区腾讯大厦。腾讯由即时通讯软件起家,业务拓展至社交、娱乐、金融、资讯、工具和平台等不同领域。目前,腾讯拥有中国国内使用人数最多的社交软件腾讯QQ和微信,以及中国国内最大的网络游戏社区腾讯游戏。在电子书领域 ,旗下有阅文集团,运营有QQ读书和微信读书。

http://www.tencent.com/
推荐文章
暂无评论
暂无评论~