用于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-字符串拼接
贪婪截取(abcABC123edf123,左边截取abc,右边截取123,得到ABC123edf) 截取字符串 [Arguments] ${string} ${left} ${right} ${str ...
- Windows核心编程笔记之进程
改变进程基址,获取进程基址 #include <Windows.h> #include <iostream> #include <strsafe.h> #inclu ...
- C#-获取磁盘,cpu,内存信息
获取磁盘信息 zongdaxiao = GetHardDiskSpace("C") * 1.0 / 1024; user = GetHardDiskFreeSpace(" ...
- JSON和JSONP的区别及使用方法
JSON(JavaScript Object Notation)和JSONP(JSON with Padding)虽然只有一个字母的差别,但其实他们根本不是一回事儿:JSON是一种数据交换格式,而JS ...
- 【JavaScript】Leetcode每日一题-在D天内送包裹的能力
[JavaScript]Leetcode每日一题-在D天内送包裹的能力 [题目描述] 传送带上的包裹必须在 D 天内从一个港口运送到另一个港口. 传送带上的第 i 个包裹的重量为 weights[i] ...
- 【JavaScript】Leetcode每日一题-移除元素
[JavaScript]Leetcode每日一题-移除元素 [题目描述] 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用 ...
- 一个或多个筛选器或者Listeners启动失败
问题描述 运行ssm项目,tomcat启动后报下面的错误. org.apache.catalina.core.StandardContext.startInternal 一个或多个listeners启 ...
- SSM项目使用Spring提供的测试
在测试类上添加注解@RunWith(SpringJUnit4ClassRunner.class)和@ContextConfiguration(locations = {"classpath: ...
- 取消本地SVN文件夹与服务器的关联
方法一. 1.新建文本文档,添加内容如下: Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Fold ...
- HashMap 的数据结构
目录 content append content HashMap 的数据结构: 数组 + 链表(Java7 之前包括 Java7) 数组 + 链表 + 红黑树(从 Java8 开始) PS:这里的& ...