注意:翻译需要符合中文语序、流程、通顺
TensorRT 后端用于 ONNX
解析 ONNX 模型以通过 TensorRT 执行。
另请参阅 TensorRT 文档。
有关最新更改的列表,请参阅 变更日志。
有关常见问题和问题的列表,请参阅 常见问题解答。
有关业务咨询,请联系 researchinquiries@nvidia.com。
有关新闻和其他咨询,请联系 Hector Marinez,邮箱 hmarinez@nvidia.com。
支持的 TensorRT 版本
此分支的开发适用于最新版本的 TensorRT 10.2,支持全尺寸和动态形状。
对于早期版本的 TensorRT,请参阅其各自的分支。
支持的运算符
当前支持的 ONNX 运算符见 运算符支持矩阵。
安装
依赖项
构建
在 Docker 中进行构建时,我们建议按照主 TensorRT 仓库 中的说明设置 Docker 容器来构建 onnx-tensorrt 库。
克隆仓库后,可以通过运行以下命令构建解析器库和可执行文件:
cd onnx-tensorrt
mkdir build && cd build
cmake .. -DTENSORRT_ROOT=<path_to_trt> && make -j
# 确保更新 LD_LIBRARY_PATH 以获取新构建库的位置:
export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH
请注意,该项目依赖 CUDA。默认情况下,构建将查找 /usr/local/cuda
下的 CUDA 工具包安装。如果您的 CUDA 路径不同,请在 CMake 命令中提供 -DCUDA_TOOLKIT_ROOT_DIR=<path_to_cuda_install>
以覆盖默认路径。
要构建带有 protobuf-lite
支持的版本,请在 cmake
命令末尾添加 -DUSE_ONNX_LITE_PROTO=1
。
InstanceNormalization 性能
有两种 InstanceNormalization 实现,可能会因各种参数而表现不同。默认情况下,解析器将使用 TensorRT 的原生 InstanceNorm 实现。希望通过插件实现 InstanceNorm 进行基准测试的用户,可以在解析模型之前取消设置解析器标志 kNATIVE_INSTANCENORM
。请注意,插件实现不能用于构建版本兼容或硬件兼容的引擎,尝试这样做将导致错误。
C++ 示例:
// 取消设置 kNATIVE_INSTANCENORM 标志以使用插件实现。
parser->unsetFlag(nvonnxparser::OnnxParserFlag::kNATIVE_INSTANCENORM);
Python 示例:
// 取消设置 NATIVE_INSTANCENORM 标志以使用插件实现。
parser.clear_flag(trt.OnnxParserFlag.NATIVE_INSTANCENORM)
可执行文件用法
目前有两个官方支持的工具,供用户快速检查 ONNX 模型是否可以从 ONNX 文件解析并构建到 TensorRT 引擎中。
对于 C++ 用户,可以使用 trtexec 二进制文件,通常位于 <tensorrt_root_dir>/bin
目录中。运行 ONNX 模型的基本命令是:
trtexec --onnx=model.onnx
有关更多 CLI 选项信息,请参阅链接或运行 trtexec -h
。
对于 Python 用户,可以使用 polygraphy 工具。运行 ONNX 模型的基本命令是:
polygraphy run model.onnx --trt
有关更多 CLI 选项信息,请参阅链接或运行 polygraphy run -h
。
Python 模块
ONNX-TensorRT 解析器的 Python 绑定打包在已发布的 .whl
文件中。
TensorRT 10.1 支持 ONNX 1.16.0 版本。安装命令为:
python3 -m pip install onnx==1.16.0
ONNX-TensorRT 后端可以通过运行以下命令安装:
python3 setup.py install
ONNX-TensorRT Python 后端用法
ONNX 的 TensorRT 后端可以在 Python 中如下使用:
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++ 库用法
模型解析库 libnvonnxparser.so 的 C++ API 声明在此头文件中:
NvOnnxParser.h
测试
安装后(或在 Docker 容器中),可以通过以下方式运行 ONNX 后端测试:
仅真实模型测试:
python onnx_backend_test.py OnnxBackendRealModelTest
所有测试:
python onnx_backend_test.py
可以使用 -v
标志使输出更详细。
预训练模型
ONNX 格式的预训练模型可在 ONNX Model Zoo 中找到。