怎么提升BERT的推断速度

发布时间:2022-03-29 14:21:09 作者:iii
来源:亿速云 阅读:587

这篇“怎么提升BERT的推断速度”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么提升BERT的推断速度”文章吧。

导读  

微软刚刚开源了Transformer的突破性优化,大大提升了CPU和GPU上的推理速度。

用于自然语言处理的最流行的深度学习模型之一是BERT。由于需要大量的计算,在大规模推断上BERT计算量非常大,甚至在严格的延迟约束下都不可能。最近,我们分享了“Bing has improved BERT inference on GPU for its real-time”,在必应的延迟限制内,每秒服务超过100万个BERT推断。我们很高兴地宣布,微软已经在ONNX Runtime中开源了这些优化的增强版本,并将它们扩展到GPU和CPU上。

有了ONNX Runtime,人工智能开发人员现在可以很容易地在CPU和GPU硬件上生产出高性能的大型transformer模型,使用和微软一样的技术来服务客户。

Bing里的自然语言处理

为了向我们的客户提供最相关的结果,Bing使用了最先进的自然语言处理(NLP)技术来更好地理解用户查询、网页和其他文档。NLP的一个关键组件是语言表示模型,如BERT、RoBERTa或MT-DNN。必应开发和调优了自己的语言表征模型,用于网络搜索,问答,以及图像的描述等任务上面。

然而,在实时生产环境中使用大型的transformer network会带来延迟和成本方面的挑战,因为为每个查询运行12层或24层的BERT在计算上非常昂贵。正如去年11月宣布的那样,我们首先使用知识蒸馏将较大的模型浓缩成一个三层的BERT模型,没有显著的精度损失,显著降低了计算成本。但是,经过提炼的三层BERT模型仍然以77ms的延迟为基准,每秒运行数百万个查询和文档的速度仍然非常昂贵。为了进一步优化,使用c++ api重新实现了整个模型,充分利用了GPU架构,与CPU相比,该架构实现了800x的吞吐量提升。

一旦这些优化在Bing产品中成功使用,就有更多的事情要做。由于这些大型的transformer network可用于web搜索之外的更多NLP任务,所以我们需要一种简单的方法来为其他人共享这些有益的工作。当前的解决方案要求每个模型开发人员使用我们的c++库重新实现模型,这是非常耗时的。为了进一步普及transformer推理并使其他人能够从这些改进中获益,我们进一步优化了它们,将它们扩展到CPU,并在ONNX Runtime中开放它们的源代码。

使用ONNX Runtime实现17x BERT推理加速

ONNX Runtime是一个高性能的机器学习模型推理引擎。它与PyTorch、TensorFlow以及许多其他支持ONNX标准的框架和工具兼容。ONNX Runtime设计了一个开放和可扩展的体系结构,通过利用内置的图形优化和跨CPU、GPU和边缘设备的各种硬件加速功能,可以轻松地优化和加速推理。ONNX Runtime可以很容易地插入到你的技术堆栈中,因为它可以在Linux、Windows、Mac和Android上工作,并且为Python、c#、c++、C和Java提供了方便的api。

像BERT这样的Transformer模型由许多操作符组成。图形优化,从小的图形简化和节点清除到更复杂的节点融合和布局优化,是构建在ONNX Runtime中的一项基本技术。由于BERT模型主要由堆叠的Transformer单元组成,我们通过将多个基本运算符的关键子图融合成CPU和GPU的单一内核来优化每个单元,包括Self-Attention层、LayerNormalization层和Gelu层。这大大减少了大量基本计算之间的内存复制。

另外,在Self-Attention的CPU实现中,根据Self-Attention heads的数量对矩阵Q、K、V的列进行了划分。通过这种优化,我们可以显著提高并行性,并充分利用可用的CPU内核。并且,Q、K、V全连接后的转置运算可以在GEMM中进行计算,进一步降低了计算成本。

通过这些优化,ONNX Runtime在Azure标准NC6S_v3 (GPU V100)上对128个序列长度和批大小为1的BERT-SQUAD执行推理:

下面是ONNX Runtime上3层fp32 BERT与128序列长度的详细的性能数字。在CPU上,我们看到了17x的加速,在GPU上,我们看到了超过3倍的加速。

怎么提升BERT的推断速度

在全局大规模使用ONNX Runtime推理

随着最新的BERT优化在ONNX Runtime可用,Bing将transformer推理代码库转换为联合开发的ONNX Runtime。ONNX不仅在Bing流量范围内对大型transformer网络进行了推理,而且新的优化还降低了Bing的延时。此外,Bing发现ONNX Runtime更容易使用,并将新场景优化的重用时间从几天缩短到几个小时。

除了Bing之外,ONNX Runtime还被微软的数十种产品和服务所部署,包括Office、Windows、Cognitive services、Skype、Bing Ads和PowerBI等。ONNX Runtime用于计算机视觉、语音、语言处理、预测等各种模型。与以前的推理解决方案相比,团队在相同的硬件上实现了最多18倍的性能改进。

开始使用BERT加速

你可以利用微软的技术在你自己的产品中使用的相同的加速,不管你是针对云还是智能边缘,或者你是使用cpu还是gpu。我们开始:

  1. 使用或从流行的框架(如PyTorch或TensorFlow)加载预训练的模型。
  2. 通过从PyTorch导出或从TensorFlow/Keras转换为ONNX格式,为优化推断准备模型。
  3. 使用ONNX Runtime进行跨多个平台和硬件的高性能推理。

以上就是关于“怎么提升BERT的推断速度”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

推荐阅读:
  1. 提升网站打开速度的关键技巧!
  2. 如何提升python处理速度

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

bert

上一篇:JavaScript如何实现utf8解码

下一篇:JavaScript如何校验是否为一个数字

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》