用于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后端的更多相关文章

  1. 使用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 ...

  2. 微软推出了Cloud Native Application Bundles和开源ONNX Runtime

    微软的Microsoft Connect(); 2018年的开发者大会 对Azure和IoT Edge服务进行了大量更新; Windows Presentation Foundation,Window ...

  3. 从PyTorch到ONNX的端到端AlexNet

    从PyTorch到ONNX的端到端AlexNet 这是一个简单的脚本,可将Torchvision中定义的经过预训练的AlexNet导出到ONNX中.运行一轮推理Inference,然后将生成的跟踪模型 ...

  4. 基于TensorRT车辆实时推理优化

    基于TensorRT车辆实时推理优化 Optimizing NVIDIA TensorRT Conversion for Real-time Inference on Autonomous Vehic ...

  5. 48-Identity MVC:Model前后端验证

    1-创建RegisterViewModel类 namespace MvcCookieAuthSample.ViewModel { public class RegisterViewModel { [R ...

  6. .netcore+vue+elementUI 前后端分离---支持前端、后台业务代码扩展的快速开发框架

    框架采用.NetCore + Vue前后端分离,并且支持前端.后台代码业务动态扩展,框架内置了一套有着20多种属性配置的代码生成器,可灵活配置生成的代码,代码生成器界面配置完成即可生成单表(主表)的增 ...

  7. 关于flask(前后端分离)的后端开发的小白笔记整理(含postman,jwt,json,SQLAlchemy等)

    首先是提醒自己的一些唠嗑: 学会劳逸结合,文档看累了可以看视频,动手操作很关键,遇到问题先动脑子冷静地想,不要跟着步骤都不带脑子,想不出来了再查一查!有时候打出来的代码很虚,但是实践不花钱,实践出真知 ...

  8. Sentry 开发者贡献指南 - 后端服务(Python/Go/Rust/NodeJS)

    内容整理自官方开发文档 系列 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentry-CLI - 30 秒上手 Source Map ...

  9. MLPerf Inference 0.7应用

    MLPerf Inference 0.7应用 三个趋势继续推动着人工智能推理市场的训练和推理:不断增长的数据集,日益复杂和多样化的网络,以及实时人工智能服务. MLPerf 推断 0 . 7 是行业标 ...

随机推荐

  1. hdu1043 经典的八数码问题 逆向bfs打表 + 逆序数

    题意: 题意就是八数码,给了一个3 * 3 的矩阵,上面有八个数字,有一个位置是空的,每次空的位置可以和他相邻的数字换位置,给你一些起始状态 ,给了一个最终状态,让你输出怎么变换才能达到目的. 思路: ...

  2. 【手打】coredns单台使用

    目录: coredns介绍 coredns安装 corendns配置 coredns介绍 CoreDNS 其实就是一个 DNS 服务,而 DNS 作为一种常见的服务发现手段,所以很多开源项目以及工程师 ...

  3. 【原创】Centos8安装ansible

    1.安装步骤 # 安装epel扩展源 dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rp ...

  4. hdu2846 字典树(带id的)

    题意:      给你一些模式串,然后给你一些提问,每个提问是给你一个串,问你这个串在上 面的模式串中出现的次数. 思路:       一开始想到hash,但是因为用的是map,所以超时了,map的操 ...

  5. 推荐算法-聚类-DBSCAN

    DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法,类似于均值转移聚类算法,但 ...

  6. 【python】Leetcode每日一题-搜索排序数组2

    [python]Leetcode每日一题-搜索排序数组2 [题目描述] 已知存在一个按非降序排列的整数数组 nums ,数组中的值不必互不相同. 在传递给函数之前,nums 在预先未知的某个下标 k( ...

  7. 制作一个简单的toast弹框

    toast弹框的作用 toast弹框顾名思义,就是为了弹出一个提示框,效果如图: 使用toast弹框可以可用户带来更好的交互体验 toast弹框的使用 Toast组件 制做出toast的样式以及出现的 ...

  8. Redis6.x学习笔记(二)持久化之RDB

    前言 最近学习Redis6.x,特做笔记以备忘,与大家共学.课程是从私塾在线下载的,他们把架构师课程都放出来了,大家可以去下载学习,不要钱的,地址是http://t.hk.uy/eK7,课程很不错,值 ...

  9. JVM虚拟机 类加载过程与类加载器

    目录 前言 类的生命周期 类加载过程 加载 连接 验证 准备 解析 初始化 类加载器 三大类加载器 双亲委派模型 概念 为什么要使用双亲委派模型 源码分析 反双亲委派模型 参考 前言 类装载器子系统是 ...

  10. micro 从cli的tag中获取配置

    官方文档: https://micro.mu/docs/go-config.html https://github.com/micro/go-micro/tree/master/config/sour ...