pytorch,onnx和tensorrt 的速度对比
onnx
Open Neural Network Exchange (ONNX)
是微软和Facebook携手开发的开放式神经网络交换工具。为人工智能模型(包括深度学习和传统ML)提供了一种开源格式。它定义了一个可扩展的计算图模型,以及内置运算符和标准数据类型。目前主要关注推断所需的功能。
ONNX之于机器学习模型就像JPEG之于图像或MPEG之于视频。你可以使用pytorch,tensorflow或者其他深度学习的框架来训练你的模型,最后都可以转成onnx模型. ONNX就想是不同模型之间的桥梁
ONNX Runtime
ONNX Runtime
是将 ONNX 模型部署到生产环境的跨平台高性能运行引擎,主要对模型图应用了大量的图优化,然后基于可用的特定于硬件的加速器将其划分为子图(并行处理)。
通过其可扩展的Execution Providers (EP) 框架与不同的硬件加速库协同工作,以在硬件平台上以最佳方式执行 ONNX 模型。
该接口使 AP 应用程序开发人员能够灵活地在云和边缘的不同环境中部署他们的 ONNX 模型,并通过利用平台的计算能力来优化执行。
ONNX Runtime 使用GetCapability()接口分配特定节点或子图,以供支持硬件中的EP库执行。预装在执行环境中的EP库在硬件上执行ONNX子图。这种架构抽象出硬件特定库的细节,这些细节对于优化跨硬件平台(如 CPU、GPU、FPGA 或专用 NPU)的深度神经网络的执行至关重要。
tensorrt
tensorrt
是Nvidia开发的一个神经网络前向推理加速的C++库,用户无需像剪枝那样在训练时对模型进行定制化处理,只需把模型提供给TensorRT即可实现加速。优化方法包括:
速度对比
本文使用的是transformers中的electra模型,用于句子的表征。对于tensorrt未作量化处理。
输入为长度约为20个单词的句子As a result, they change their eating habits eating more nutritious food such as milk and meat.
转为为onxx之后的模型结构:
gpu测试:
- onnxruntime与tensortrt的gpu利用率要比pytorch高很多
- tensorrt在未作量化的情况下,显存占用更小
- 随着batch的增大,速度提升越来越不明显
cpu测试:
使用cpu | pytorch | onnxruntime | tensorrt |
---|---|---|---|
单条时间 | 1853ms | 18.8ms | 必须要用gpu |
更多推荐
所有评论(0)