用于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