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测试:

在这里插入图片描述

  1. onnxruntime与tensortrt的gpu利用率要比pytorch高很多
  2. tensorrt在未作量化的情况下,显存占用更小
  3. 随着batch的增大,速度提升越来越不明显

cpu测试:

使用cpupytorchonnxruntimetensorrt
单条时间1853ms18.8ms必须要用gpu
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐