只需几个小操作,就能让transformer模型推理速度加3.5倍

简介: 只需几个小操作,就能让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 推理服务器上构建一些东西。与普通 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/

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
传感器 监控
基于STM32的智能农业环境监测系统设计与实现
基于STM32的智能农业环境监测系统设计与实现
1601 0
|
机器学习/深度学习 计算机视觉 知识图谱
YoloV8最新改进手册——高阶篇
本专栏是讲解如何改进Yolov8的专栏。改进方法采用了最新的论文提到的方法。改进的方法包括:增加注意力机制、更换卷积、更换block、更换backbone、更换head、更换优化器等;每篇文章提供了一种到N种改进方法。 评测用的数据集是我自己标注的数据集,里面包含32种飞机。每种改进方法我都做了测评,并与官方的模型做对比。 代码和PDF版本的文章,我在验证无误后会上传到百度网盘中,方便大家下载使用。 这个专栏,求质不求量,争取尽心尽力打造精品专栏!!! 专栏链接: ''' https://blog.csdn.net/m0_47867638/category_12295903
2618 0
|
Linux Shell 网络安全
|
8月前
|
机器学习/深度学习 自然语言处理 并行计算
大模型应用:混合专家模型(MoE):大模型性能提升的关键技术拆解.37
MoE(混合专家模型)是一种高效大模型架构,通过“智能调度+稀疏激活”机制,让多个专业化子网络(专家)按需协作。它兼顾性能与效率:参数规模大但推理仅激活2-4个专家,显著降本提速;既保持通用能力,又在医疗、法律等细分领域更专精,是当前大模型落地的关键技术。
1464 17
|
11月前
|
存储 安全 数据安全/隐私保护
HashiCorp Vault 镜像拉取与 Docker 部署全指南
Vault是HashiCorp推出的企业级秘密管理工具,支持集中存储、细粒度访问控制、动态凭证生成与全链路审计。通过Docker部署可实现环境一致、安全隔离、快速迭代,适用于开发测试及生产环境,助力企业高效安全管理敏感信息。
717 3
|
缓存 安全 应用服务中间件
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇(二)
Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇(二)
1248 1
|
机器学习/深度学习 算法
探索机器学习在金融风控中的应用
本文将深入探讨机器学习技术如何革新金融风控领域,包括算法选择、模型构建以及实际应用案例。我们将通过具体数据和实验结果来揭示机器学习在提高风险识别准确性和操作效率方面的潜力。文章旨在为金融科技从业者提供实战指南,同时为研究人员指明未来研究的方向。
|
机器学习/深度学习 前端开发 安全
【Gradio】Could not create share link
【Gradio】Could not create share link
7955 7
|
存储 传感器 编解码
图像格式:常见图像格式RAW, RGB, YUV&&图像格式的解析、格式转换和看图软件
图像格式:常见图像格式RAW, RGB, YUV&&图像格式的解析、格式转换和看图软件
5286 1
|
SQL Oracle 关系型数据库
【操作宝典】Navicat+MySQL:极简教程,轻松玩转数据库!
【操作宝典】Navicat+MySQL:极简教程,轻松玩转数据库!
991 1

热门文章

最新文章