只需几个小操作,就能让transformer模型推理速度加3.5倍
你在用 PyTorch 写 transformer 吗?只需请关注下这个项目。
大多数关于在生产中部署 Transformer 类模型的操作教程都是基于 PyTorch 和 FastAPI 构建的。两者都是型推很好的工具,但在推理方面的理速性能不是很好。
而如果你花费时间进行研究,度加可以在 ONNX Runtime 和 Triton 推理服务器上构建一些更好的只需东西。与普通 PyTorch 相比,操作推理速度通常会快 2 到 4 倍。型推
如果你想要在 GPU 上获得一流的理速性能,那么只有一种可能的度加组合:Nvidia TensorRT 和 Triton。与普通 PyTorch 相比,只需最终可以获得 5 倍的操作推理速度。有时它甚至能将推理速度提高 10 倍。型推
然而 TensorRT 并不是理速以简单易用著称的,对于 Transformer 模型更是度加如此,它需要使用特定的技巧。

然后,如果你花一些时间,你可以在 ONNX Runtime 和 Triton 推理服务器上构建一些东西。WordPress模板与普通 Pytorch 相比,你的推理速度通常会快 2 到 4 倍。
近日,Hugging Face 发布了一款名为 Infinity 的商业产品,可以以非常高的性能进行推理(与 PyTorch + FastAPI 部署相比,速度非常快)。不幸的是,根据该公司产品总监的说法,即使对于部署在一台机器上的单个模型,这也是一种付费产品,成本为 2 万美元(没有公开的具体规模信息)。
在 GitHub 上有一个项目 Transformer-deploy,它是一种基于企业级软件的开源替代版:
推理服务器:Nvidia Triton(它接受查询,传输给引擎,并添加对推理有用的功能,如动态批处理或多推理引擎调度) 推理引擎:Microsoft ONNX Runtime(用于 CPU 和 GPU 推理)和 Nvidia TensorRT(仅限 GPU)我们似乎不费吹灰之力,就可以轻松匹敌极少数 HF Infinity 公共基准。
但事实上,现在仍然有机会进一步加快推理性能,AFAIK 尚未被任何其他 OSS 项目利用:对所有 Transformer 模型的 GPU 量化!
如下是亿华云计算对 Roberta-base、seq len 256、batch 32、MNLI 数据集的测试结果:

执行 GPU 量化需要修改模型源代码(在矩阵乘法等代价高昂的操作上添加一些称为 QDQ 的特定节点),这既容易出错,又很枯燥,并且是件自己给自己挖坑的事。对此,项目作者已经为多个模型手动完成了这项工作。在作者看来,只需修补模型模块抽象语法树(也就是源代码)就可以自动完成这项工作。
从用户端看,在 GPU 上执行模型的基本量化看起来就像这样:

如基准测试结果所示,要获得比普通 PyTorch 快 4.5 倍的模型,在 MNLI 数据集上的准确率需要牺牲 0.4 个百分点,这在许多情况下是一个合理的权衡。如果不希望损失准确度,加速也可以降到 3.2 倍左右。当然,实际应用时的 trade-off 取决于模型、数据集等,网站模板但它给出了一个基本概念。与该项目的先前版本相比,这是一个很大的改进。
成倍加速的背后,transformer 的源代码被解析为 AST,像 matmul 或 LayerNorm 这样的算子被一个量化器包装,线性层被它们的量化版本替换,一些不支持的 TensorRT 算子被替换等等。然后还有一部分新的源代码替换。
作者表示,他们目前已经成功测试了 ALBERT、BERT(包括 miniLM)、DistilBERT、Roberta(包括 Camembert、XLM-R、DistilRoberta 等)、Electra 的推理。对于任何可以导出为 ONNX 格式的 transformer 模型,它应该都是开箱即用的,或者只需很少的努力。
关于 CPU 的推理、量化非常容易,且也是由 Transformer-deploy 项目支持的。但是在极端情况下,transformer 的性能会变得非常差(如没有批处理、非常短的序列和蒸馏模型时)。另外如使用基于上代英特尔 CPU 的实例,如 C6 或 M6,与像 Nvidia T4 这样的廉价 GPU 相比,在 AWS 上的性价比会很低。
综上所述,在 Transformer 推理上,除非你对慢速推理感到满意并采用小实例,否则并不推荐使用 CPU 推理。
参考链接:https://www.reddit.com/r/MachineLearning/comments/rr17f9/p_45_times_faster_hugging_face_transformer/
【本文是专栏机构“机器之心”的原创译文,微信公众号“机器之心( id: almosthuman2014)”】
戳这里,看该作者更多好文
相关文章
电脑开机报0164错误解决办法(解决电脑开机报0164错误的简单方法)
摘要:当我们打开电脑时,有时会遇到电脑屏幕上显示“0164键盘错误,请按F1继续”这样的错误信息。这个错误通常是由于键盘连接问题或键盘故障引起的。本文将介绍一些简单的方法来解决这个问题。...2025-11-04
很多时候,我们希望有一种方法可以避免某种CSS问题或行为的发生。我们知道,网页内容是动态的,网页上的东西可以改变,从而增加了出现CSS问题或奇怪行为的可能性。防御式 CSS是一个片段的集合,可以帮助我2025-11-04
昨天聊了下SQLSERVER的spinlock,当时我认为spinlock是与Oracle LATCH相对应的结构,事实上碎片化的阅读会带来一些知识掌握的不准确。Oracle的LATCH是通过spin2025-11-04
Python网络爬虫之js逆向之远程调用(rpc)免去抠代码补环境简介
大家好,我是黑脸怪。这篇文章主要给大家介绍jsrpc,方便大家日后在遇到JS逆向的时候派上用场。前言jsrpc是指在浏览器开启一个ws和go服务连接,以调用http接口的形式来通信,浏览器端收到调用通2025-11-04电脑设计支架设计教程(让你的电脑工作更高效、更舒适、更健康)
摘要:在现代社会中,电脑已经成为我们工作、学习和娱乐不可或缺的一部分。然而,长时间使用电脑却往往会给我们的身体带来不适,尤其是颈椎、腰椎等部位。为了解决这一问题,设计一个合适的支架成为了...2025-11-04
昨天下午快下班的时候,无意中听到公司两位同事在探讨批量向数据库插入数据的性能优化问题,顿时来了兴趣,把自己的想法向两位同事说了一下,于是有了本文。公司技术背景:数据库访问类xxx.DataBase.D2025-11-04

最新评论