用于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
用于ONNX的TensorRT后端的更多相关文章
- 使用TensorRT对caffe和pytorch onnx版本的mnist模型进行fp32和fp16 推理 | tensorrt fp32 fp16 tutorial with caffe pytorch minist model
本文首发于个人博客https://kezunlin.me/post/bcdfb73c/,欢迎阅读最新内容! tensorrt fp32 fp16 tutorial with caffe pytorch ...
- 微软推出了Cloud Native Application Bundles和开源ONNX Runtime
微软的Microsoft Connect(); 2018年的开发者大会 对Azure和IoT Edge服务进行了大量更新; Windows Presentation Foundation,Window ...
- 从PyTorch到ONNX的端到端AlexNet
从PyTorch到ONNX的端到端AlexNet 这是一个简单的脚本,可将Torchvision中定义的经过预训练的AlexNet导出到ONNX中.运行一轮推理Inference,然后将生成的跟踪模型 ...
- 基于TensorRT车辆实时推理优化
基于TensorRT车辆实时推理优化 Optimizing NVIDIA TensorRT Conversion for Real-time Inference on Autonomous Vehic ...
- 48-Identity MVC:Model前后端验证
1-创建RegisterViewModel类 namespace MvcCookieAuthSample.ViewModel { public class RegisterViewModel { [R ...
- .netcore+vue+elementUI 前后端分离---支持前端、后台业务代码扩展的快速开发框架
框架采用.NetCore + Vue前后端分离,并且支持前端.后台代码业务动态扩展,框架内置了一套有着20多种属性配置的代码生成器,可灵活配置生成的代码,代码生成器界面配置完成即可生成单表(主表)的增 ...
- 关于flask(前后端分离)的后端开发的小白笔记整理(含postman,jwt,json,SQLAlchemy等)
首先是提醒自己的一些唠嗑: 学会劳逸结合,文档看累了可以看视频,动手操作很关键,遇到问题先动脑子冷静地想,不要跟着步骤都不带脑子,想不出来了再查一查!有时候打出来的代码很虚,但是实践不花钱,实践出真知 ...
- Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS)
内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...
- MLPerf Inference 0.7应用
MLPerf Inference 0.7应用 三个趋势继续推动着人工智能推理市场的训练和推理:不断增长的数据集,日益复杂和多样化的网络,以及实时人工智能服务. MLPerf 推断 0 . 7 是行业标 ...
随机推荐
- RF-获取body
一个很简单的场景:GET方法获取某URL的body信息,直接读取即可,不做处理 *** Test Cases *** GetToken Create HTTP Context host=192.168 ...
- PHP 导出 CSV 0开头数据丢失问题处理
PHP导出csv格式时,0开头会被office软件省略,如何处理?比如:033736 导出csv时会被excel转换成 33736 展示,不符合业务需求.处理方案: 微信支付的导出是这么处理的,加个反 ...
- Thinkphp5助手函数和Thinkphp3的单字母函数对应参照表
- hdu1054 简单最小顶点覆盖
题意: 给你一些点,和一些边,如果把一个点安装保护装置,那么与他直接相连的点就可以被保护,题目问的是最少安装多少个点能让所有的点都被保护. 思路: 这是最基础的二分图最少定点覆 ...
- 从苏宁电器到卡巴斯基第31篇:难忘的三年硕士时光 IX
在校的最后一个月 毕业答辩的评审老师宣布我没能通过,让我瞬间不知道该怎么好了.已经到了中午,老师们也都是准备吃盒饭去了,我和其他已经通过了的同学随便收拾了一下教室,然后无助的我赶紧去找旁听的教学秘书, ...
- 利用 Windows 线程池定制的 4 种方式完成任务(Windows 核心编程)
Windows 线程池 说起底层的线程操作一般都不会陌生,Windows 提供了 CreateThread 函数来创建线程,为了同步线程的操作,Windows 提供了事件内核对象.互斥量内核对象.关键 ...
- sql常识-RIGHT JOIN
SQL RIGHT JOIN 关键字 RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行. RIGHT JOIN ...
- 一、unittest介绍与基础使用
一.unittest为单元测试框架,系统标准库 import unittest
- Windows server 2003域控迁移到2012
1: windows server 2003 额外域控升级为 windows server 2003主域控 (因为原域控制器某些服务损坏,于是采用将备用域控升级为主域控的方法) https://we ...
- Junit单元测试&反射&注解
内容索引 1. Junit单元测试 2. 反射 3. 注解 Junit单元测试: * 测试分类: 1. 黑盒测试:不需要写代码,给输入值,看程序是否能够输出期望的值. 2. 白盒测试:需要写代码的.关 ...