十三 发自 凹非寺
量子位 报道 | 公众号 QbitAI

近年来,基于Transformer的模型,可以说是在NLP界杀出了一片天地。

虽然在提高模型模型精度上,Transformer发挥了不容小觑的作用,但与此同时,却引入了更大的计算量

那么,这个计算量有多大呢?

来看下数据。

因此,实现一个能充分发挥CPU/GPU硬件计算能力的Transformer推理方法,就成了急需解决的问题。

近日,腾讯便开源了一个叫TurboTransformers的工具,对Transformer推理过程起到了加速作用,让你的推理引擎变得更加强大。

这个工具已经在微信、腾讯云、QQ看点等产品中广泛应用,在线上预测场景中可以说是“身经百战”。

Turbo具有如下三大特性

  • 优异的CPU/GPU性能表现。

  • 为NLP推理任务特点量身定制。

  • 简单的使用方式。

值得一提的是,TurboTransformers,是腾讯通过Github对外开源的第100个项目。

那么,具有如此“纪念意义”的开源工具,到底有多厉害?

接下来,我们将一一讲解。

多项性能测试“摘桂冠”

Turbo在CPU/GPU性能上的表现可以说是非常优异。

在多种CPU和GPU硬件上获得了超过pytorch/tensorflow和目前主流优化引擎的性能表现。

CPU上的测试结果

首先,是在CPU 硬件平台上,测试了 TurboTransformers 的性能表现。

选择 pytorch、pytorch-jit 和 onnxruntime-mkldnn 和 TensorRT 实现作为对比。

性能测试结果为迭代 150 次的均值。为了避免多次测试时,上次迭代的数据在 cache 中缓存的现象,每次测试采用随机数据,并在计算后刷新的 cache 数据。

下图是Intel Xeon 6133 CPU的性能测试结果。

GPU上的测试结果

其次,是在GPU硬件平台上,测试了 TurboTransformers 的性能表现。

选择对比的对象分别是:pytorch、NVIDIA Faster Transformers、onnxruntime-gpuTensorRT。

性能测试结果为迭代 150 次的均值。

下图是在NVIDIA RTX 2060 GPU的性能测试结果。

接下来,是在NVIDIA P40 GPU的性能测试结果。

最后,是在NVIDIA V100 GPU的性能测试结果。

Turbo技术原理

能够取得如此好的推理性能,这背后的计算原理又是什么呢?

TurboTransformers的软件架构如下图,它让微信内部众多NLP线上应用能够充分榨取底层硬件的计算能力,让算法更好地服务的用户。

具体来说TurboTransformers可以在算子优化、框架优化和接口部署方式简化三个方面做了工作。

算子层优化

Transformer都包含了什么计算呢?

如下图所示,图(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方案,将所有GEMM运算之间的计算融合成一个调用核心。融合会带来两个好处,一是减少了内存访问开销,二是减少多线程启动开销。

对于这些核心,在CPU上采用openmp进行并行,在GPU上使用CUDA进行优化实现。

对于比较复杂的LayerNorm和Softmax算子,它们包含了不适合GPU上并行的规约操作,TurboTransformers为它们设计了创新并行算法,极大降低了这些算子的延迟。

理论上Transformers推理延迟应该近似于矩阵乘法延迟。

框架层优化

TurboTransformers采用了一个有效的内存管理方式。

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

为了能够无缝支持pytorch/tensorflow训练好的序列化模型,提供了一些脚本可以将二者的预训练模型转化为npz格式,供TurboTransformers读入。

特别的,考虑到pytorch huggingface/transformers是目前最流行的transformers训练方法,支持直接读入huggingface/transformers预训练模型。

应用部署

Turbo提供了C++和Python调用接口,可以嵌入到C++多线程后台服务流程中,也可以加入到pytorch服务流程中。

研究人员建议TurboTransformers通过docker部署,一方面保证了编译的可移植性,另一方面也可以无缝应用于K8S等线上部署平台。

传送门

GitHub项目地址:
https://github.com/Tencent/TurboTransformers/blob/master/README_cn.md

PaddleCV 专题大课首场4月28日线上开讲

百度AI快车道——企业深度学习实战营系列报名开始啦!

本次集训营,共5场学习内容,聚焦CV技术专题内容,带领大家围绕计算机视觉的图像分类、目标检测、图像分割、各类文字识别模型压缩这五大常见任务,系统性学习,提供CV领域的前沿技术和快速应用之道。

课程结束,通过学习评测,可获得课程结业证书

扫码免费报名

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

喜欢就点「在看」吧 !

微信也在用的Transformer加速推理工具 | 腾讯第100个对外开源项目相关推荐

  1. 腾讯第100个开源项目:微信开源推理加速工具TurboTransformers

    出品 | AI科技大本营(ID:rgznai100) 4月24日,腾讯正式宣布开源Transformer推理加速工具TurboTransformers.该工具面向自然语言处理领域中Transforme ...

  2. 让Transformer的推理速度提高4.5倍,这个小trick还能给你省十几万

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI 最近,N ...

  3. 北京 | 免费高效训练及OpenVINO™加速推理深度学习实战,送Intel神经计算棒二代...

    当今人工智能时代,深度学习极大得促进了计算机视觉技术的快速应用和成熟,也是算法工程师们必须掌握的一项技能,然而,不同环境的依赖部署,高算力的需求,海量数据量需求及算法应用高硬件成本也让深度学习陷入了规 ...

  4. 使用deepstream对自己模型进行加速推理以及与ROS通信

    背景:deepstream检测到的结果:框位置和目标类型.概率值需要进一步传递到ros节点中分析使用,本例是采用TCP/IP通信协议将这些数据发送出去 来源:使用darknet框架,利用yolov3- ...

  5. onnx标准 onnxRuntime加速推理引擎

    onnx标准 & onnxRuntime加速推理引擎 文章目录 onnx标准 & onnxRuntime加速推理引擎 一.onnx简介 二.pytorch转onnx 三.tf1.0 / ...

  6. Intel N100工控机使用核显加速推理yolov5模型

    Intel N100工控机使用核显加速推理yolov5模型 前言 安装openvino环境 核显加速运行yolov5 进一步加速 再进一步量化压榨 前言 今年3月初开始,某平台开始陆续上货基于英特尔A ...

  7. 微信小程序开发05 研发加速:使用 Webpack 提升小程序研发效率

    你好,我是俊鹏.从今天开始,我会用四节课的时间带你学习微信小程序在工程化方面的实践方案. 小程序发展到今天已经成为很多产品的重要流量入口,随着用户量的增加,功能不断复杂化,小程序的体量不断增长,原始的 ...

  8. 【码云周刊第 61 期】四款开源项目教你玩转微信游戏

    为什么80%的码农都做不了架构师?>>>    码云项目推荐 前段时间小编的朋友圈几乎被一款微信小游戏霸屏,很多玩过的朋友戏称"根本停不下来",没错就是" ...

  9. 23个Python爬虫开源项目代码:微信、淘宝、豆瓣、知乎、微博...

    文末有干货 "Python高校",马上关注 真爱,请置顶或星标 来源:Python数据科学 今天为大家整理了23个Python爬虫项目.整理的原因是,爬虫入门简单快速,也非常适合新 ...

最新文章

  1. Eureka 注册中心/服务发现框架
  2. 野指针与内存泄漏那些事
  3. Python教程:Python基础知识点梳理!
  4. ACM-ICPC 2018 徐州赛区网络预赛 D. EasyMath
  5. [Leedcode][JAVA][第289题][生命游戏]
  6. 《天天数学》连载04:一月四日
  7. ubuntu10.10升级到11.4出错之问题解决
  8. Android SDK上手指南:用户交互
  9. NLP领域首个国家杰青,回归母校!
  10. Android音视频开发
  11. JAVA王思聪吃热狗程序_王思聪吃热狗小游戏, 程序员开发路上
  12. 系统服务器iis如何启动不了,无法启动win7系统下IIS服务器怎么办
  13. Python3 豆瓣《前任3》评论的词云
  14. 常见的SREng操作
  15. 从明年1月开始,Oracle要对JDK8就要收费了,怎么办?
  16. learn the python in hard way习题36~39的附加习题
  17. 乐鑫Esp32学习之旅② 巧用eclipes编辑器,官方教程在Windows下搭建esp32开发环境,打印 “Hello World”。
  18. 武汉科技大学计算机科学与技术分数,2019武汉科技大学研究生分数线汇总(含2016-2019历年复试)...
  19. “机器学习实战”刻意练习1/8周
  20. Golang之上下文Context

热门文章

  1. 对当前JAVA流行框架的一些小感悟
  2. megalo -- 网易考拉小程序解决方案
  3. 再见乱码:5分钟读懂MySQL字符集设置
  4. 除了数据,生活中还有这些......
  5. 谈谈自己对REST、SOA、SOAP、RPC、ICE、ESB、BPM知识汇总及理解
  6. 关于cisco与中兴三层设备ospf互连
  7. 80后,从爱情,到婚姻
  8. interrupt InterruptException
  9. java前端div浮动靠左_前端进阶第5周打卡题目汇总
  10. AndoridSQLite数据库开发基础教程(4)