TensorRT入门介绍

jetson tx2 上部署TensorRT模型推理 1## 标题 jetson tx2 是什么? jetson tx2简而言之就是 阅读详情

 

什么是TensorRT

TensorRT是由Nvidia推出的C++语言开发的高性能神经网络推理库,是一个用于生产部署的优化器和运行时引擎。其高性能计算能力依赖于Nvidia的图形处理单元。它专注于推理任务,与常用的神经网络学习框架形成互补,包括TensorFlow、Caffe、PyTorch、MXNet等。可以直接载入这些框架的已训练模型文件,也提供了API接口通过编程自行构建模型。

 

 

TensorRT依赖于Nvidia的深度学习硬件环境,可以是GPU也可以是DLA,如果没有的话则无法使用。

TensorRT支持目前大部分的神经网络Layer的定义,同时提供了API让开发者自己实现特殊Layer的操作,相关函数为 INetworkDefinition::addPluginV2()。

 

关键接口类型

TensorRT核心库中,最关键的几种接口类型有:

  • IExecutionContext    推理引擎运行上下文
  • ICudaEngine            推理引擎
  • IRuntime                  CudaEngine反序列化
  • INetWorkDefinition   网络定义
  • IParser                     网络模型解析
  • IOptimizationProfile 优化配置
  • IBuilderConfig          CudaEngine的构造参数
  • IBuilder                     构造器,主要用于构造CudaEngine
  • ILogger                    日志接口,需要开发者实现

IExecutionContext

推理引擎运行上下文(Context),使用CudaEngine进行推理操作,是推理操作的最终执行接口。

允许一个CudaEngine具有多个运行Context,每个Context可以使用不同的Batch大小,如果网络模型的输入尺寸支持动态调整,那么每个上下文还可以使用各自不同的尺寸输入。

主要功能为执行推理操作,具体函数 IExecutionContext::executeV2(bindings)

通过CudaEngine创建,ICudaEngine::createExecutionContext()

 

ICudaEngine

可称为推理引擎,允许应用程序调用这个接口来执行推理,支持同步执行和异步执行,通过Cuda中的Stream和Event来实现异步。一个推理引擎可以有多个运行Context,并且支持批量输入执行。

CudaEngine的主要作用就是通过创建Context执行推理任务,创建Context的方式为 ICudaEngine::createExecutionContext()。

CudaEngine可以序列化到内存中,然后缓存到磁盘上,下次使用的时候可以直接从磁盘文件载入到内存再序列为CudaEngine即可,可以省去很多时间和参数配置等一下操作。

CudaEngine的创建方式依赖于 INetwrorkDefinition(网络定义接口),NetWorkDefinition 一般通过解析ONNX模型文件或TensorFlow的已训练模型文件获得。ONNX模型文件的解析需要用到 nvonnxparser::IParser 接口。

注意:从 NeworkDefinition 生成 CudaEngine 是一个很耗时的过程,可以将生成的 CudaEngine 缓存到磁盘文件,后续使用的时候直接载入即可使用。

另外,CudaEngine 是不可以跨平台的,不同的 GPU 型号和不同的 TensorRT 版本生成的 CudaEngine 可能都会不兼容,在使用缓存的 CudaEngine 文件的时候要注意区分,可将这些影响因素作为该文件名的一部分进行区分,例如 Win64_RTX2080TI_70011.engine 这类的文件名。

相关接口:

  • IExecutionContext,生成 Context 并通过Context进行推理,相关函数:ICudaEngine::createExecutionContext()
  • IRuntime,反序列化缓存文件,得到CudaEngine,相关函数:IRuntime::deserializeCudaEngine()
  • IBuilder,根据 NetworkDefinision 和 BuilderConfig 构造 CudaEngine,相关函数:IBuilder::buildEngineWithConfig(INetworkDefinision,IBuilderConfig)

 

IRuntime

这个接口的名字起得容易让人误解,看名字好像很底层的一个接口,但它的实际作用,主要只有一个,就是将 CudaEngine 的序列化缓存文件反序列化回来,重新得到 CudaEngine 对象。

获取方式:nvinfer1::createInferRuntime(void)

相关接口:

  • ICudaEngine,根据 NetworkDefinision 和 BuilderConfig 构造 CudaEngine,相关函数:IBuilder::buildEngineWithConfig()

INetWorkDefinition

网络定义接口,这个接口提供了一些列的函数让开发者可以从头构造一个神经网络,包括输入输出张量的维度大小,每个Layer的类型和激活函数等等,还提供了接口让开发者添加自定义的Layer,是一个很强大的接口。但是,在一般的实际使用过程中基本上不会用到它的任何一个函数。因为网络的定义是根据已训练网络模型文件例如ONNX文件自动生成的。

该接口的一般使用步骤:

  1. 通过 IBuilder::createNetwork() 生成一个 INetWorkDefinition。
  2. 使用接口 NvOnnxParser::createParser(&INetWorkDefinition,...) 创建一个与该 INetWorkDefinition 绑定的 IPaser 对象。
  3. 调用 IPaser::parseFromFile("path.onnx"),将根据模型文件构造 INetWorkDefinition 对象。

IParser

ONNX Parser,解析已训练模型文件,根据模型文件构造绑定的 INetWorkDefinition 对象。

获取方式:NvOnnxParser::createParser(&INetWorkDefinition,...)

主要函数:IPaser::parseFromFile("path.onnx")

IOptimizationProfile

为动态模型指定每一个输入输出张量的维度,函数为 IOptimizationProfile::setDimensions() 。

在构造 CudaEngine 的时候至少要有一个 IOptimizationProfile,因为每个 ExecutionContext 在使用之前都要先指定一个 IOptimizationProfile 才可以执行推理操作。

获取方式 IBuilder::createOptimizationProfile(void)

相关接口:

  • IBuilderConfig,每个 IBuilderConfig 至少要有一个 IOptimizationProfile,IOptimizationProfile 将随着 IBuilderConfig 被构造到 CudaEngine 中,被 ExecutionContext 指定使用。相关函数为 IBuilderConfig::addOptimizationProfile(IOptimizationProfile)
  • IExecutionContext,每个 Context 被创建之后需要先指定一个 IOptimizationProfile,IExecutionContext::setOptimizationProfile(index),这个 index 是 IOptimizationProfile 在 IBuilderConfig 中的序号,顺序是按照 addOptimizationProfile 的调用次序来的。

IBuilderConfig

构造 CudaEngine 的配置参数,可添加 IOptimizationProfile 配置,设置最大工作内存空间、最大Batch大小、最小可接受精度级别、半浮点精度运算等。

获取方式 IBuilder::createBuilderConfig(void)

相关接口:

  • IBuilder,根据 NetworkDefinision 和 BuilderConfig 构造 CudaEngine,函数:IBuilder::buildEngineWithConfig(INetworkDefinision,IBuilderConfig)

IBuilder

IBuilder 接口主要用来构建 CudaEngine,也用来生成 INetWorkDefinition 接口对象、IOptimizationProfile 和 IBuilderConfig 接口对象。

ILogger

日志接口,用来输出 TensorRT 内部的一些消息、警告、错误等信息。

在创建 IBuilder 和 IRuntime 的时候都会需要传入 ILogger 对象,我们需要实现这个接口并创建一个对象传给它们。最简单的一个接口实现如下:

class Logger : public ILogger           
 {
     void log(Severity severity, const char* msg) override
     {
         // suppress info-level messages
         if (severity != Severity::kINFO)
             std::cout << msg << std::endl;
     }
 } gLogger;

流程图

总结

本文介绍了使用 TensorRT 的必备接口,掌握了这些接口之间的调用关系,也就明白了 TensorRT 的工作流程,后续将结合实际工程,详细介绍每一步骤的具体细节。

参考

https://docs.nvidia.com/deeplearning/tensorrt/developer-guide/index.html

 

TensorRT基础知识及应用【C++深度学习部署(十)】 接口被用来定义模型。// bit shift,移位:y左移N位,相当于 y * 2^N// kEXPLICIT_BATCH(显性Batch)为0,1U 阅读详情

相关推荐

tensorRT---helloworld

// tensorRT include #include <NvInfer.h> #include <NvInferRuntime.h> // cuda include #include <cuda_runtime.h> // system include #include <stdio.h> class TRTLogger : public nvinfer1::ILogger{ public: virtual void lo.

进击的菜鸟 307

TensorRT介绍

TensorRT 文章目录TensorRT训练和推理的区别TensorRTTensorRT 优化和性能TensorRT 工作原理Python APIImporting TensorRT Into PythonCreating A Network Definition In PythonBuilding An Engine In PythonSerializing A Model In PythonPerforming Inference In PythonexamplesWorking With Mixed

陶将的博客 4万+

TSP、MTSP问题遗传算法详细解读及python实现

写在前面 遗传算法是一种求解NPC问题的启发式算法,属于仿生进化算法族的一员。仿生进化算法是受生物行为启发而发明的智能优化算法,往往是人们发现某种生物的个体虽然行为较为简单,但生物集群通过某种原理却能表现出智能行为。于是不同的人研究不同的生物行为原理,受到启发而发明出新的仿生进化算法。比如免疫优化算法,蚁群算法,模拟退火算法等,这些算法以后也会简单介绍。 本文的主题是遗传算法,该算法也是受到生物行为启发。物竞天择,适者生存,优胜劣汰,是该优化算法的核心思想。笔者在业务中需要用到遗传算法求解TSP问题,但是网

weixin_47675950的博客 9306

TensorRT是什么,有什么作用,如何使用

TensorRT 是由 NVIDIA 提供的一个高性能深度学习推理(inference)引擎。它专为生产环境中的部署而设计,用于提高在 NVIDIA GPU 上运行的深度学习模型的推理速度和效率。以下是关于 TensorRT 的详细介绍:TensorRT 是 NVIDIA 推出的用于深度学习推理加速的高性能推理引擎。它可以将深度学习模型优化并部署到 NVIDIA GPU 上,实现低延迟、高吞吐量的推理过程。TensorRT 主要用于加速实时推理任务,如物体检测、图像分类、自然语言处理等。

githubcurry,985cs博士在读 3万+

【具身算法】VLA算法-Diffusion Policy

《扩散策略:多模态机器人控制的新方法》摘要 本文提出了一种基于扩散模型的机器人控制策略(DiffusionPolicy),用于解决视觉运动控制中的多模态行为、高维动作空间和训练稳定性问题。该方法利用去噪扩散概率模型(DDPM)生成动作序列,通过迭代优化处理复杂动作分布,显著提升了性能。实验表明,在15项机器人操作任务中,扩散策略平均性能提升46.9%,有效解决了传统显式/隐式策略的局限性。其核心优势在于:1)优雅建模多模态动作分布;2)适应高维动作空间;3)训练过程稳定。未来工作将探索与强化学习的结合及计算

puzhinan7781的博客 1391

5G中的RedCap

5G中的redcap

大家好,我是码农老gou,一名专注于编程技术的程序员。在这个博客中,我将与大家分享我在工作和学习中的经验、见解以及一些实用的技术干货。 2527

TensorRT详解与部署案例

TensorRT推理部署

qq_47898999的博客 8038

LoRa物联网实战:用新大陆模块打造智能LED呼吸灯(附完整代码解析)

本文详细介绍了如何利用新大陆LoRa模块实现工业级智能LED呼吸灯的设计与开发。通过256级PWM调制的呼吸灯效果,结合LoRa无线控制技术,实现设备状态的可视化反馈和多设备同步控制。文章包含完整的硬件选型、电路设计、算法优化和代码实现,特别适合物联网开发者和硬件工程师参考。

github5actions的博客 86

用tensorRT入门介绍

1. 基本的 TensorRT 工作流程 2. 转换和部署选项 2.1 转换 使用TF-TRT,为了转换 TensorFlow 模型,TensorFlow 集成 (TF-TRT) 提供了模型转换和高级运行时 API,并具有回退到TensorRT 不支持特定运算符的 TensorFlow 实现。 自动模型转换和部署的一个更高效的选项是转换 从 .onnx 文件自动转换 ONNX。使用 ONNX。 ONNX 是一个与框架无关的选项,可以用于将TensorFlow ,PyTorch 等格式的模型转化为ONNX

zhuguiqin1的专栏 2851

【深度学习】手把手教你在远程服务器上跑 YOLOv3 相关代码(含环境配置)

这篇文章主要记录了如何配置项目环境以及如何在远程服务器上跑 YOLOv3 模型。

作者正在煮茶中... 2384

保姆级教程:用Adams/Car和Simulink搞定你的第一个整车联合仿真(附模型文件)

本文提供了一份详尽的Adams/Car与Simulink联合仿真教程,涵盖从环境配置到模型导出的全流程。通过实战案例解析,帮助工程师快速掌握多体动力学仿真与控制算法开发的集成技术,特别适合汽车工程领域的初学者。文章还包含常见问题解决方案和性能优化建议,助您高效完成整车联合仿真项目。

weixin_29663861的博客 337

TensorRT入门实战,TensorRT Plugin介绍以及TensorRT INT8加速

首先,根据上图可知,TensorRT是一个适配NVIDIA GPU的深度学习的推理框架,其能实现高性能深度学习推理,优化器和加速库,能够实现低延迟和高吞吐量,可以部署到超大规模的数据中心,嵌入式(Jetson)或者汽车产品。低精度优化: 比如INT8加速和FP16精度Kernel自动调优: 比如在cublas中对于矩阵乘法有多种实现,如何采取合适的矩阵乘法方式就是kernel自动调优。算子融合:比如原算子如下:融合后的算子如下:4. 多流运行5 显存优化。

qq_43398345的博客 2211

dify进阶:使用 FastAPI 的 StreamingResponse 实现高效的数据流传输

在 FastAPI 框架中,是一个非常有用的工具,它允许你以流的方式发送数据给客户端,而不是一次性加载所有内容到内存中再发送。这对于处理大型文件下载、视频流或者任何需要长时间处理的任务特别有用。

xiezhipu的博客 1433

TensorRt(2)快速入门介绍

TensorRt的安装,不同环境下的安装不做介绍,注意不同版本对系统和软件版本的要求。先介绍tensorrt的常规开发周期流程:这个部分不属于TensorRt的内容范畴。通常训练网络模型使用高性能的服务器,使用的框架常见的有Tensorflow、pytorch、caffe、mxnet等。之后被TendorRt加载或转成换能够加载的模型格式。加载第三方模型(目前仅支持onnx、caffe、uff)进行模型编译并从多个方面优化,生成序列化的engine模型,以plan形式保存。

热爱生活,忠于自己 2806

Nexys4DDR+OV7670实现图像灰度显示系统嵌入式

通过对硬件平台的准备、Vivado工程配置、OV7670驱动程序的编写、图像灰度处理算法的设计以及系统集成与测试,我们成功实现了一个基于嵌入式系统的图像处理应用。当系统运行时,OV7670摄像头模块将采集到的图像传输到FPGA芯片中,然后通过图像灰度处理算法将彩色图像转换为黑白图像,并在显示设备上进行显示。OV7670摄像头模块的驱动程序是实现图像采集的核心。以上代码中,我们使用了Xilinx提供的XGpio和Xil_In32函数来进行OV7670摄像头数据的读取和GPIO的初始化。OV7670驱动程序。

WangWEel的博客 338

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

TensorRT8 meets Python(二) TensorRT快速入门介绍

本系列教程是重点关注如何在Python环境中转换、使用TensorRT做深度模型的推理。在上篇中,我们介绍了TensorRT在python和ubuntu环境中的部署。重点就是解决好显卡驱动、cuda、cudnn和tensorRT之间的版本对应关系。在本篇中,我们快速介绍TensorRT的入门知识,为后续的TensorRT模型部署打下基础。笔者建议还是过一遍Nvidia TensorRT官方教程,如果实在懒或者英语困难的同学,也可以看下我为大家划好的原文重点和解释。

人唯优的博客 954

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

TensorRT基础入门(一)

TensorRT基础入门

Darchan的博客 1302

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TensorRT 入门(5) TensorRT官方文档浏览

文章目录0. 前言1. Quick Start Guide 详解1.1. TensorRT 生态1.2. ONNX 样例1.3. TensorRT Runtime API2. Developer Guide 详解2.1. TensorRT 简介2.2. C++/Python API3. Best Practices For TensorRT Performance 详解3.1. 如何评估性能3.2. 如何提高TensorRT性能3.3. 如何提高 Layer/Plugin/Python 的性能 0. 前言

清欢 3807

tensorrt docker镜像下载

我整理的一些关于【Docker】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://d.51cto.com/f2PFnNTensorRT Docker镜像下载入门指南 在深度学习和推理优化方面,NVIDIA的TensorRT是一个不可或缺的工具。为了方便使用,我们可以通过Docker来便捷地运行Tens...

weixin_40466725的博客 526

NVIDIA TensorRT简介

NVIDIA tensorRT

jiao_mrswang的博客 1548

NVIDIA TensorRT安装包下载分享—— 云盘分享 【TensorRT安装】

NVIDIA TensorRT 各个版本安装包下载分享; TensorRT解压安装, 环境变量配置

专注于AI领域前沿技术学习与分享:目标检测、图像修复、超分重建、AI工程化 1万+

TensorRT-LLM快速入门指南

大模型推理成本高企,TensorRT-LLM应运而生。本文介绍其核心特性、支持的模型与硬件、关键优化技术如量化与并行策略,并展示在主流GPU上的性能表现,为高效部署大语言模型提供实用参考。

weixin_42607969的博客 1144

TensorRT基础入门(二)

TensorRT 基础入门(二)

Darchan的博客 1137

TensorRT setMaxWorkspaceSize的含义

NVIDIA的官方入门博客有一段说的比较详细 TensorRT allows you to increase GPU memory footprint during the engine building phase with the setMaxWorkspaceSize function. Increasing the limit may affect the number of applications that could share the GPU at the same time. Setti

qq_29007291的博客 4258

tensorrt centos linux 安装

TensorRT 安装TensorRT: https://developer.nvidia.cn/nvidia-tensorrt-download tensorrt下载网址 下载并解压tar.gz [root@localhost data]# tar -zvxf TensorRT-8.4.0.6.Linux.x86_64-gnu.cuda-11.6.cudnn8.3.tar.gz 在/etc/profile加入环境变量 [root@localhost python]# vim /etc/pr

kui9702的博客 2691

Technology Document Guide of TensorRT

Technology Document Guide of TensorRT Abstract 本示例支持指南概述了GitHub和产品包中包含的所有受支持的TensorRT 7.2.1示例。TensorRT示例在推荐程序、机器翻译、字符识别、图像分类和对象检测等领域有特殊帮助。 有关TensorRT开发文档,请参阅TensorRT归档文件。 Introduction 下面的示例展示了如何在许多用例中使用TensorRT,同时突出显示接口的不同功能。 1.1. Getti

吴建明wujianming_110117 413
上一篇: 图像去噪-算法分类
下一篇: nvJPEG压缩图像
Ango_Cango
博客等级 码龄15年 93粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ango_Cango

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值