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 相关信息,并对扩展接口进行改进,优化哦了模型推理数据加载方式,很大程度上压缩了数据处理时间;同时分型了最新版本的详细使用流程,以及提供了配套的使用案例,方便开发者们进行使用。
-
技术博客二:《TensorRT C# API 项目更新 (1):支持动态Bath输入模型推理》
支持了动态模型输入,此处主要是指的是动态Bath,更新了对动态输入模型的支持,
该项目在推出后,得到了大家而广泛支持,但也有不少开发者在使用中碰到了许多相关问题,因此针对这些问题,我们对内容进行了更新,主要更新了一下内容:
- 项目配置方式:简化了项目配置流程,安装好相关依赖后,用户只需要下载代码文件便可以运行,无需再进行项目配置;
- 优化了推理方式:优化了底层推理接口,使模型推理更加稳定。
3.项目配置方式
项目中主要是需要开发者安装CUDA、CUDNN以及TensorRT,其中CUDA、CUDNN是我们开发者常用的库,相信大家也都已经安装过,如果没有安装过CUDA、CUDNN,可以自行百度教程进行安装,CUDA、CUDNN安装完成后,会在系统中增加相应的环境变量,如下图所示:
因此为了方便后续的项目配置,我们在安装TensorRT时,也需要将TensorRT相应的文件放在该目录下。
3.1 TensorRT下载
下面我们下载对应版本的TensorRT,首先查看本电脑的CUDA版本,如上图中,CUDA_PATH_V12_2
说明我们安装的CUDA版本版本是12.2,接下来访问下面链接进行下载
https://developer.nvidia.com/tensorrt/download
进入到下载页面后,选择8.x系列,目前只支持8.x系列及以下系列,暂时不支持10.x系列。然后根据自己的CUDN版本选择对应的包进行下载,如下图所示:
3.2 配置TensorRT库
下载完成后解压到本地,如下图所示:
接下来将下载好的TensorRT部分内容复制到CUNDN目录下,主要是复制TensorRT目录下的include
、lib
两个文件夹到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.2
目录下,具体目录根据自己的CUDA安装位置有关,如下图所示:
最后将lib目录下中的TensorRT的dll文件,全部复制到上级目录下的bin文件夹下,如下图所示:
到此为止,我们已经完全配置好了TensorRT,下面演示如何使用最新的项目生成本机运行的项目。
3.3 编译C++项目
首先第一步下载项目源码,使用Git命令将源码下载到本地,如下图所示
git clone https://github.com/guojin-yan/TensorRT-CSharp-API.git
然后使用Visual Studio 2022
打开解决方案文件,如下图所示:
该解决方案中包含两个项目,一个是C++项目,该项目是封装的TensorRT接口,将接口封装到动态链接库中;另一个是C#项目,该项目是读取动态链接库中的C++接口,然后重新封装该接口。
最新的项目中我们将动态链接库、包含目录内知道项目中,开发者无需再进行重新配置,只要保证上文中CUDA、CUDNN以及TensorRT正确安装即可。所以下载完代码后,直接生成C++项目,此处选择生成
,不要选择运行,如下图所示:
最终可以看出生成的动态链接库文件名称以及文件路径。
下面有一点后面我们需要注意,在后面使用时,我们需要将此处生成的dll文件复制到程序运行目录下。
3.4 编译C#项目
接下来编译C#项目,C#项目此处也无须再修改,我们此处添加的是dll文件的绝对路径,因此在使用时,需要将上文生成的dll文件复制到运行目录下。如鼓励开发者觉得比较麻烦,依旧可以跟之前一样,只需要修改一下位置即可,修改NativeMethods.cs
文件中的dll文件路径,该路径及上一步中C++项目生成的动态链接库文件,如下图所示:
接下来就可以运行C#项目,生成类库文件,如下图所示:
此处我们同时生成了.NET FrameWork 4.6、.NET FrameWork 4…72、.NET FrameWork 4.8、.NET 8.0、.NET 6.0、.NET 5.0、.NET 3.1,用户在后续使用时,根据生成版本进行选择即可。
编译好该项目后,开发者后续便可以进行使用,使用方式与之前版本一致,此处不再进行赘述。
4. 程序运行稳定性测试
之前在使用中有用户反馈模型推理在长时间运行时,推理时间波动较大,且再推理视频时,推理一段时间后,推理速度会有明显下降,对此,我们修改了底层源码,修复了这个问题,并进行了测试,如下图所示:
此处测试了视频推理,以YOLOv8s为例,记录了视频前1500帧,可以看出。在修复后,模型推理时间趋于稳定,在7~10ms范围内波动,波动范围只有3ms,没有出现速度下降等问题。
5. 总结
在本次更新中,我们针对开发者在使用过程中发出现的相关问题进行了更新,并优化了项目安装方式,方便开发者快速上手使用。最后如果各位开发者在使用中有任何问题,欢迎大家与我联系。