onnx-tensorrt 项目介绍
项目概述
onnx-tensorrt 项目是一个用于解析 ONNX 模型,并利用 TensorRT 加速其执行的工具。它旨在帮助开发者高效地在 NVIDIA 的硬件平台上运行深度学习模型。TensorRT 是 NVIDIA 开发的一种针对深度学习推理进行优化的高性能库,能够提供更高的执行效率和更低的延迟。
支持的 TensorRT 版本
此项目的开发基于最新版本的 TensorRT,即 10.6 版本。支持 TensorRT 的全维度和动态形状特性。如果需要使用更早的 TensorRT 版本,用户应该参考相应的分支。
支持的操作符
当前支持的 ONNX 操作符可以在支持矩阵中找到。开发者可以通过阅读相关文档来了解更多关于这些操作符的信息。
安装需求
要成功安装 onnx-tensorrt,用户需要预先安装以下依赖项:
- Protobuf ≥ 3.0.x
- TensorRT 10.6
- TensorRT 10.6 开源库
构建步骤
推荐在 Docker 中构建 onnx-tensorrt。用户首先需要克隆项目仓库,然后进入项目根目录并按照以下步骤构建解析器库:
cd onnx-tensorrt
mkdir build && cd build
cmake .. -DTENSORRT_ROOT=<path_to_trt> && make -j
export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH
请注意,项目依赖于 CUDA,默认情况下将在 /usr/local/cuda
寻找 CUDA 工具包。如果 CUDA 安装路径不同,需要在 CMake 命令中指定正确的路径。
InstanceNormalization 性能
onnx-tensorrt 提供了两种 InstanceNormalization 的实现方式,分别是原生实现和插件实现。用户可以通过设置标志来切换实现方式,但应注意插件实现不支持与版本或硬件兼容的引擎构建。
可执行文件使用
项目提供了两个工具来帮助用户检查 ONNX 模型能否被解析和构建为 TensorRT 引擎:
- 对于 C++ 用户,提供了
trtexec
工具,很容易在 TensorRT 根目录的bin
文件夹中找到。 - 对于 Python 用户,提供了
polygraphy
工具,可以用于相同的检查。
Python 模块
onnx-tensorrt 提供了 Python 绑定,可通过下述命令进行安装:
python3 -m pip install onnx==1.17.0
python3 setup.py install
Python 后端使用示例
在 Python 中使用 TensorRT 后端处理 ONNX 模型的示例如下:
import onnx
import onnx_tensorrt.backend as backend
import numpy as np
model = onnx.load("/path/to/model.onnx")
engine = backend.prepare(model, device='CUDA:1')
input_data = np.random.random(size=(32, 3, 224, 224)).astype(np.float32)
output_data = engine.run(input_data)[0]
print(output_data)
print(output_data.shape)
C++ 库使用
对于 C++ 用户,可以通过头文件 NvOnnxParser.h
使用 libnvonnxparser.so
库的 API。
测试
安装完成后,可以通过以下命令运行 ONNX 后端测试:
python onnx_backend_test.py OnnxBackendRealModelTest
或者运行所有测试:
python onnx_backend_test.py
预训练模型
用户还可以从 ONNX Model Zoo 获取预训练的 ONNX 格式模型,以加速项目的应用开发。