热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

十三发自凹非寺量子位报道|公众号QbitAI近年来,基于Transformer的模型,可以说是在NLP界杀出了一片天地。虽然在提高模型模型精度上,Transformer发挥了不容小
十三 发自 凹非寺
量子位 报道 | 公众号 QbitAI

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

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

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

来看下数据。

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

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

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

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

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

Turbo具有如下三大特性

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

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

  • 简单的使用方式。

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

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

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

多项性能测试“摘桂冠”

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

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

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

CPU上的测试结果

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

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

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

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

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

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

GPU上的测试结果

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

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

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

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

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

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

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

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

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

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

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

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

Turbo技术原理

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

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

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

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

算子层优化

Transformer都包含了什么计算呢?

如下图所示,图(a)展示了论文Transformer结构示意图,这里称灰色方框内的结构为一个Transformer Cell,BERT encoder堆叠了Nx个这样的Transformer Cell。

图(b)将一个Cell的细节加以展开,每一个矩形都是一个独立的计算核心。

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

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领域的前沿技术和快速应用之道。

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

扫码免费报名

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

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

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

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

喜欢就点「在看」吧 !


推荐阅读
  • 全面解析Java虚拟机:内存模型深度剖析 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • 深入理解Spark框架:RDD核心概念与操作详解
    RDD是Spark框架的核心计算模型,全称为弹性分布式数据集(Resilient Distributed Dataset)。本文详细解析了RDD的基本概念、特性及其在Spark中的关键操作,包括创建、转换和行动操作等,帮助读者深入理解Spark的工作原理和优化策略。通过具体示例和代码片段,进一步阐述了如何高效利用RDD进行大数据处理。 ... [详细]
  • NVIDIA最新推出的Ampere架构标志着显卡技术的一次重大突破,不仅在性能上实现了显著提升,还在能效比方面进行了深度优化。该架构融合了创新设计与技术改进,为用户带来更加流畅的图形处理体验,同时降低了功耗,提升了计算效率。 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 深入解析Java虚拟机内存模型(JMM)及其核心机制
    为了深入理解Java内存模型(JMM),首先需要对计算机硬件体系有全面的认识,尤其是CPU与主存之间的多级缓存架构。这些硬件特性直接影响了JMM的设计和实现,确保在多线程环境下数据的一致性和可见性。 ... [详细]
  • MySQL:不仅仅是数据库那么简单
    MySQL不仅是一款高效、可靠的数据库管理系统,它还具备丰富的功能和扩展性,支持多种存储引擎,适用于各种应用场景。从简单的网站开发到复杂的企业级应用,MySQL都能提供强大的数据管理和优化能力,满足不同用户的需求。其开源特性也促进了社区的活跃发展,为技术进步提供了持续动力。 ... [详细]
  • 深入解析零拷贝技术(Zerocopy)及其应用优势
    零拷贝技术(Zero-copy)是Netty框架中的一个关键特性,其核心在于减少数据在操作系统内核与用户空间之间的传输次数。通过避免不必要的内存复制操作,零拷贝显著提高了数据传输的效率和性能。本文将深入探讨零拷贝的工作原理及其在实际应用中的优势,包括降低CPU负载、减少内存带宽消耗以及提高系统吞吐量等方面。 ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 在第七天的深度学习课程中,我们将重点探讨DGL框架的高级应用,特别是在官方文档指导下进行数据集的下载与预处理。通过详细的步骤说明和实用技巧,帮助读者高效地构建和优化图神经网络的数据管道。此外,我们还将介绍如何利用DGL提供的模块化工具,实现数据的快速加载和预处理,以提升模型训练的效率和准确性。 ... [详细]
  • Hihaveannewbieissuewithobjective-c,cocoa&iPhone.IvedeclaredmapViewinmyapplicatio ... [详细]
  • kubernetes官网关于nodelocaldns缓存的介绍 ... [详细]
  • PyThon_Swift 势必取代 Python?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Swift势必取代Python?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • SpringBoot与缓存使用及原理(上),Go语言社区,Golang程序员人脉社 ... [详细]
author-avatar
手机用户2702933712
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有