量子位@| 腾讯第100个对外开源项目,微信也在用的Transformer加速推理工具

十三发自凹非寺
近年来 , 基于Transformer的模型 , 可以说是在NLP界杀出了一片天地 。
虽然在提高模型模型精度上 , Transformer发挥了不容小觑的作用 , 但与此同时 , 却引入了更大的计算量 。
那么 , 这个计算量有多大呢?
来看下数据 。
量子位@| 腾讯第100个对外开源项目,微信也在用的Transformer加速推理工具
文章图片
因此 , 实现一个能充分发挥CPU/GPU硬件计算能力的Transformer推理方法 , 就成了急需解决的问题 。
近日 , 腾讯便开源了一个叫TurboTransformers的工具 , 对Transformer推理过程起到了加速作用 , 让你的推理引擎变得更加强大 。
量子位@| 腾讯第100个对外开源项目,微信也在用的Transformer加速推理工具
文章图片
这个工具已经在微信、腾讯云、QQ看点等产品中广泛应用 , 在线上预测场景中可以说是“身经百战” 。
Turbo具有如下三大特性:
优异的CPU/GPU性能表现 。
为NLP推理任务特点量身定制 。
简单的使用方式 。
值得一提的是 , TurboTransformers , 是腾讯通过Github对外开源的第100个项目 。
那么 , 具有如此“纪念意义”的开源工具 , 到底有多厉害?
接下来 , 我们将一一讲解 。
多项性能测试“摘桂冠”
Turbo在CPU/GPU性能上的表现可以说是非常优异 。
在多种CPU和GPU硬件上获得了超过pytorch/tensorflow和目前主流优化引擎的性能表现 。
量子位@| 腾讯第100个对外开源项目,微信也在用的Transformer加速推理工具
文章图片
CPU上的测试结果
首先 , 是在CPU硬件平台上 , 测试了TurboTransformers的性能表现 。
选择pytorch、pytorch-jit和onnxruntime-mkldnn和TensorRT实现作为对比 。
性能测试结果为迭代150次的均值 。 为了避免多次测试时 , 上次迭代的数据在cache中缓存的现象 , 每次测试采用随机数据 , 并在计算后刷新的cache数据 。
下图是IntelXeon6133CPU的性能测试结果 。
量子位@| 腾讯第100个对外开源项目,微信也在用的Transformer加速推理工具
文章图片
量子位@| 腾讯第100个对外开源项目,微信也在用的Transformer加速推理工具
文章图片
GPU上的测试结果
其次 , 是在GPU硬件平台上 , 测试了TurboTransformers的性能表现 。
选择对比的对象分别是:pytorch、NVIDIAFasterTransformers、onnxruntime-gpuTensorRT 。
性能测试结果为迭代150次的均值 。
下图是在NVIDIARTX2060GPU的性能测试结果 。
量子位@| 腾讯第100个对外开源项目,微信也在用的Transformer加速推理工具
文章图片
量子位@| 腾讯第100个对外开源项目,微信也在用的Transformer加速推理工具
文章图片
接下来 , 是在NVIDIAP40GPU的性能测试结果 。
量子位@| 腾讯第100个对外开源项目,微信也在用的Transformer加速推理工具
文章图片
量子位@| 腾讯第100个对外开源项目,微信也在用的Transformer加速推理工具
文章图片
最后 , 是在NVIDIAV100GPU的性能测试结果 。
量子位@| 腾讯第100个对外开源项目,微信也在用的Transformer加速推理工具
文章图片
量子位@| 腾讯第100个对外开源项目,微信也在用的Transformer加速推理工具
文章图片
Turbo技术原理
能够取得如此好的推理性能 , 这背后的计算原理又是什么呢?
TurboTransformers的软件架构如下图 , 它让微信内部众多NLP线上应用能够充分榨取底层硬件的计算能力 , 让算法更好地服务的用户 。
具体来说TurboTransformers可以在算子优化、框架优化和接口部署方式简化三个方面做了工作 。
量子位@| 腾讯第100个对外开源项目,微信也在用的Transformer加速推理工具
文章图片
算子层优化
Transformer都包含了什么计算呢?
如下图所示 , 图(a)展示了论文Transformer结构示意图 , 这里称灰色方框内的结构为一个TransformerCell , BERTencoder堆叠了Nx个这样的TransformerCell 。