TensorRT 是 NVIDIA 推出的一款深度学习推理引擎,它可以将深度学习模型转换为高效的推理格式,从而在 NVIDIA GPU 上实现快速、高效的推理。以下是将 TensorRT 用于 C++ 的一些基本步骤:### 1. 环境准备确保你的系统已经

摘要:开发了TensorRT C# API 2.0版本,该版本在开发时充分考虑了上一版本应用时出现的问题,并进行了改进。为了更加方便开发者使用,在本次更新中增加了对动态输入模型的支持,将在本技术文中详细介绍本次更新内容以及应用案例。
1. 项目介绍   NVIDIA® TensorRT™ 是一款用于高性能深度学习推理的 SDK,包括深度学习推理优化器和运行时,可为推理应用程序提供低延迟和高吞吐量。基于 NVIDIA TensorRT 的应用程序在推理过程中的执行速度比纯 CPU 平台快 36 倍,使您能够优化在所有主要框架上训练的神经网络模型,以高精度校准低精度,并部署到超大规模数据中心、嵌入式平台或汽车产品平台。   TensorRT 基于 NVIDIA CUDA® 并行编程模型构建,使您能够在 NVIDIA GPU 上使用量化、层和张量融合、内核调整等技术来优化推理。TensorRT 提供 INT8 使用量化感知训练和训练后量化和浮点 16 (FP16) 优化,用于部署深度学习推理应用程序,例如视频流、推荐、欺诈检测和自然语言处理。低精度推理可显著降低延迟,这是许多实时服务以及自主和嵌入式应用所必需的。TensorRT 与 PyTorch 和 TensorFlow 集成,因此只需一行代码即可实现 6 倍的推理速度。TensorRT 提供了一个 ONNX 解析器,因此您可以轻松地将 ONNX 模型从常用框架导入 TensorRT。它还与 ONNX 运行时集成,提供了一种以 ONNX 格式实现高性能推理的简单方法。   基于这些优势,TensorRT目前在深度模型部署应用越来越广泛。但是TensorRT目前只提供了C++与Python接口,对于跨语言使用十分不便。目前C#语言已经成为当前编程语言排行榜上前五的语言,也被广泛应用工业软件开发中。为了能够实现在C#中调用TensorRT部署深度学习模型,我们在之前的开发中开发了TensorRT C# API。虽然实现了该接口,但由于数据传输存在问题,当时开发的版本在应用时存在较大的问题。   基于此,我们开发了TensorRT C# API 2.0版本,该版本在开发时充分考虑了上一版本应用时出现的问题,并进行了改进。为了更加方便开发者使用,在本次更新中增加了对动态输入模型的支持,将在本技术文中详细介绍本次更新内容以及应用案例。 TensorRT C# API 项目源码: https://github.com/guojin-yan/TensorRT-CSharp-API.git TensorRT C# API 项目应用源码: https://github.com/guojin-yan/TensorRT-CSharp-API-Samples.git 2. 更新回顾   由于该项目目前还没有完全开发完成,为了更好的方便大家使用,因此会在最新更新后提供给大家最新的资讯。如果大家在使用时有任何疑问,可以阅读之前发布的技术博客: 技术博客一:《最新发布!TensorRT C# API :基于C#与TensorRT部署深度学习模型》 分享了更新版的TensorRT C# API 相关信息,并对扩展接口进行改进,优化哦了模型推理数据加载方式,很大程度上压缩了数据处理时间;同时分型了最新版本的详细使用流程,以及提供了配套的使用案例,方便开发者们进行使用。 3. 动态输入模型支持   在上一版本中,支持了多Bath推理,单其实现方式是导出的推理模型是多Bath的,因此模型推理的Bath是不可更改的。但是目前TensorRT已经支持了动态模型输入,所以更新了对动态输入模型的支持。下面将对更新的API接口以及推理流程进行简单的介绍: 3.1 新增API public static void OnnxToEngine(string modelPath, int memorySize, string nodeName, Dims minShapes, Dims optShapes, Dims maxShapes) 模型转换接口:可以调用封装的TensorRT中的ONNX 解释器,对ONNX模型进行转换,并根据本机设备信息,编译本地模型,将模型转换为TensorRT 支持的engine格式,该接口支持动态输入模型。 string modelPath: 本地ONNX模型地址,只支持ONNX格式,且ONNX模型必须为确定的输入输出,暂不支持动态输入。 int memorySize: 模型转换时分配的内存大小。 string nodeName: 模型输入节点名称,该节点维度确定但是形状是动态的,一般为: [-1, 3 640, 640],某一维度或其中几个维度大小为“-1”。
阅读全文