用于ONNX的TensorRT后端

用于ONNX的TensorRT后端

解析ONNX模型以使用TensorRT执行。

另请参阅TensorRT文档

有关最近更改的列表,请参见changelog

支持的TensorRT版本

Master分支上的开发适用于具有完整维度和动态架构shape支持的TensorRT 7.2.1的最新版本。

对于TensorRT的早期版本,请参考其各自的分支。

完整尺寸+动态架构

在具有动态架构支持的全维度模式下,构建INetwork对象,需要调用以下API:

C ++

const auto explicitBatch = 1U << static_cast<uint32_t>(nvinfer1::NetworkDefinitionCreationFlag::kEXPLICIT_BATCH);

builder->createNetworkV2(explicitBatch)

Python

import tensorrt

explicit_batch = 1 << (int)(tensorrt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)

builder.create_network(explicit_batch)

有关这些API用法的示例,请参见:

支持的算子

当前支持的ONNX算子,可在算子支持列表中找到。

安装

依存关系

Dependencies

编译

对于在docker中进行构建,建议按照main(TensorRT存储库)[https://github.com/NVIDIA/TensorRT#setting-up-the-build-environment]中的说明使用和设置Docker容器,来构建onnx -tensorrt库。

clone存储库后,可以通过运行以下命令,来构建解析器库和可执行文件:

cd onnx-tensorrt

mkdir build && cd build

cmake .. -DTENSORRT_ROOT=<path_to_trt> && make -j

// Ensure that you update your LD_LIBRARY_PATH to pick up the location of the newly built library:

export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH

可执行用法

可以使用onnx2trt可执行文件,将ONNX模型转换为序列化的TensorRT引擎:

onnx2trt my_model.onnx -o my_engine.trt

ONNX模型也可以转换为人们可读的文本:

onnx2trt my_model.onnx -t my_model.onnx.txt

ONNX模型也可以通过ONNX的优化库(由dsandler添加)进行优化。要优化ONNX模型并输出新的模型,可使用它-m来指定输出模型名称,用-O指定以分号分隔的优化过程列表,进行应用:

onnx2trt my_model.onnx -O "pass_1;pass_2;pass_3" -m my_model_optimized.onnx

通过运行以下命令,查看更多所有可用的优化遍历:

onnx2trt -p

通过运行以下命令,查看更多用法信息:

onnx2trt -h

Python模块

ONNX-TensorRT解析器的Python,绑定打包在随附的.whl文件中。用来安装

python3 -m pip install <tensorrt_install_dir>/python/tensorrt-7.x.x.x-cp<python_ver>-none-linux_x86_64.whl

TensorRT 7.2.1支持ONNX版本1.6.0。通过以下方式安装:

python3 -m pip install onnx==1.6.0

可以通过运行以下命令,来安装ONNX-TensorRT后端:

python3 setup.py install

ONNX-TensorRT Python后端使用

可以在Python中如下使用ONNX的TensorRT后端:

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

https://github.com/onnx/onnx-tensorrt

 

posted @ 2020-12-21 06:23  吴建明wujianming  阅读(1387)  评论(0编辑  收藏  举报