【TensorRT】TensorRT C# API 项目更新 (2):优化安装方式和代码

news2024/11/17 14:41:14

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安装完成后,会在系统中增加相应的环境变量,如下图所示:

image-20240621125434413

  因此为了方便后续的项目配置,我们在安装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版本选择对应的包进行下载,如下图所示:

image-20240621141234437

3.2 配置TensorRT库

  下载完成后解压到本地,如下图所示:

image-20240621144338464

  接下来将下载好的TensorRT部分内容复制到CUNDN目录下,主要是复制TensorRT目录下的includelib两个文件夹到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.2目录下,具体目录根据自己的CUDA安装位置有关,如下图所示:

image-20240621144618124

  最后将lib目录下中的TensorRT的dll文件,全部复制到上级目录下的bin文件夹下,如下图所示:

image-20240621145023055

  到此为止,我们已经完全配置好了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++项目生成的动态链接库文件,如下图所示:

image-20240621154308100

  接下来就可以运行C#项目,生成类库文件,如下图所示:

image-20240621154227766

  此处我们同时生成了.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. 程序运行稳定性测试

  之前在使用中有用户反馈模型推理在长时间运行时,推理时间波动较大,且再推理视频时,推理一段时间后,推理速度会有明显下降,对此,我们修改了底层源码,修复了这个问题,并进行了测试,如下图所示:

0d79b2203253ca815db43e8ab4b7e0ca

  此处测试了视频推理,以YOLOv8s为例,记录了视频前1500帧,可以看出。在修复后,模型推理时间趋于稳定,在7~10ms范围内波动,波动范围只有3ms,没有出现速度下降等问题。

5. 总结

  在本次更新中,我们针对开发者在使用过程中发出现的相关问题进行了更新,并优化了项目安装方式,方便开发者快速上手使用。最后如果各位开发者在使用中有任何问题,欢迎大家与我联系。

个人账号 - 2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1858777.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】数据库——事务

一.事务概念 事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体一起向系统提交或撤销操作请求,即这一组数据库命令要么都执行,要么都不执行事务是一个不可分割的工作逻辑单元,在数…

小白学python(第一天)

在有了C语言的基础后,我们学python会变得相当容易,毕竟c生万物,废话不多说,直接进入我们的正题 课前准备 Python环境的搭建以及Pycharm的安装 python环境安装 Download Python | Python.org 因为我的电脑是windows,…

Idea启动服务报 Command line is too long

一、背景 合不同分支代码后,启动服务报 Error running Application, Command line is too long, Shorten the command line via JAR manifest or via a classpath file and rerun. 没有在意,然后点击了manifest 来进行 二、问题 然后自己在重新启动&…

终于有人说清楚CIF术语了‼️

什么是CIF? CIF,全称Cost, Insurance, and Freight (成本、保险费加运费),是一种国际贸易术语,用于海运和内河运输。按照CIF条款,卖方的交货义务在装运港当货物越过船舷时完成,但卖方需承担将货物运至指定…

Hive基础知识(十八):Hive 函数的使用

1. 系统内置函数 1)查看系统自带的函数 hive (hive3)> show functions; Time taken: 0.085 seconds, Fetched: 289 row(s) 2)显示自带的函数的用法 hive (hive3)> desc function upper; OK tab_name upper(str)- Returns str with all characters…

this.$prompt 提示框增加文本域并修改文本域高度

2024.06.24今天我学习了如何对提示框增加文本域的方法&#xff0c;效果如下&#xff1a; 代码如下&#xff1a; <script>methods:{reject_event(){this.$prompt(驳回内容, 提示, {confirmButtonText: 确定,cancelButtonText: 取消,inputType: textarea,inputPlaceholder…

手工微调embedding模型,让RAG应用检索能力更强

BAAI/bge-small-en 目前HuggingFace的MTEB(海量文本Embedding基准)排行榜上排名第一的Embedding模型是big-large-en&#xff0c;它由北京人工智能研究院(BAAI&#xff0c;智源)开发。它是一种预训练的transformer模型&#xff0c;可用于各种自然语言处理任务&#xff0c;如文本…

Elasticsearch 索引与文档操作实践指南

上节我们部署了elasticsearch8.4.1和kibana8.4.1以及ik分词器&#xff0c;本节我们来学习下elasticsearch的相关索引&#xff0c;文档操作。 首先我们kinana的主界面找到开发者工具在里面我们来编写相关操作。 标题查看集群情况 GET /_cluster/health详细解释&#xff1a; …

一切前端概念,都是纸老虎

4、listener可以通过 store.getState() 得到当前状态。如果使用的是 React&#xff0c;这时可以触发重新渲染 View。 function listerner() { let newState store.getState(); component.setState(newState); } 对比 Flux 和 Flux 比较一下&#xff1a;Flux 中 Store 是…

机器人控制系列教程之串联机器人工作空间

简介 在机器人学领域&#xff0c;对机器人工作空间的精确分析是实现高效、安全操作的关键。工作空间是指机器人末端执行器在不与环境或其他物体发生碰撞的情况下能够到达的所有位置的集合。为了求解这一空间&#xff0c;研究者们发展了多种方法&#xff0c;包括作图法、蒙特卡…

【因果推断python】53_效应异质性和非线性带来的挑战1

目录 Treatment Effects on Binary Outcomes 合成一些数据 由于缺乏基本事实&#xff0c;在单位层面预测治疗效果极为困难。因为我们只能观察到一个潜在结果 T(t) &#xff0c;我们无法直接估计它。相反&#xff0c;我们必须依靠目标变换&#xff08;也可以看作是设计巧妙的损…

基于Pytorch框架构建ResNet模型

Pytorch 一、训练模型1.导入资源包2.定义数据预处理3.读取数据 二、定义卷积神经网络1.导入必要的库2.定义名为convolutional_block的卷积块类3.定义了一个名为identity_block的恒等块类4.定义了一个名为Resnet的深度卷积神经网络类 三、创建模型1. 检查GPU设备2. 训练过程 四、…

编译原理大题自解(活前缀DFA、LR(0)分析表)

目录 4. (简答题) &#xff08;1&#xff09;给出识别活前缀的DFA &#xff08;2&#xff09;设计此文法的 LR(0)分析表 第一种解法 第二种解放 首先声明这是作者的写法&#xff08;不保证正确&#xff01;&#xff09;仅供参考。本题因为可能存在冲突的原因&#xff0c;所…

【C语言小例程26/100】

题目&#xff1a;有一分数序列&#xff1a;2/1&#xff0c;3/2&#xff0c;5/3&#xff0c;8/5&#xff0c;13/8&#xff0c;21/13...求出这个数列的前20项之和。 程序分析&#xff1a;请抓住分子与分母的变化规律。 程序源代码&#xff1a; #include <stdio.h>int ma…

windows上运行arm32架构的安卓模拟器

说明 主要功能&#xff1a;在win10上研究和学习32位arm汇编指令的执行 环境如下 主机环境: windows10 目标模拟器环境:armeabi-v7a调试环境搭建 1、下载android studio 下载地址&#xff1a;https://developer.android.com/studio?hlzh-cn 2、安装android studio 直接下…

互联网应用主流框架整合之Spring Boot开发

Spring Boot数据库开发 通常SpringBoot数据库开发&#xff0c;会引入spring-boot-starter-jdbc&#xff0c;而如果引入了spring-boot-starter-jdbc&#xff0c;但没有可用的数据源或者没有配置&#xff0c;那么在运行Spring Boot时会出现异常&#xff0c;因为spring-boot-star…

思考-生涯思考-GPT-5对人们的影响

GPT-5 一年半后发布&#xff1f;对此你有何期待&#xff1f; IT之家6月22日消息&#xff0c;在美国达特茅斯工程学院周四公布的采访中&#xff0c;OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布&#xff0c;给出了肯定答案并表示将在一年半后发布。此外&#xff0c;…

Java知识点整理 11— 后端 Spring Boot 万用初始化模板使用

一. 模块简介 annotation&#xff1a;自定义注解aop&#xff1a;请求日志和权限校验common&#xff1a;通用类config&#xff1a;配置类constant&#xff1a;常量 controller&#xff1a;控制层esdao&#xff1a;方便操作ESexception&#xff1a;异常类job&#xff1a;定时任务…

企业邮箱老板如何看员工邮件往来记录

员工离职&#xff0c;删除邮箱内重要邮件&#xff1f;已删除的邮件能否恢复&#xff1f;企业邮箱老板如何查看员工邮件的往来记录呢&#xff1f;本篇文章将为您详细介绍企业邮件自动备份的原理以及邮箱内的设置方法。 一、为何查看员工邮件往来记录&#xff1f; 企业邮箱关乎…

了解SD-WAN与传统WAN的区别

近年来&#xff0c;许多企业选择了SD-WAN作为他们的网络解决方案。云基础架构的SD-WAN不仅具备成本效益&#xff0c;而且提供更安全、更可靠的WAN连接&#xff0c;有助于实现持续盈利。客户能够更好地控制他们的网络&#xff0c;个性化定制且无需额外成本。 那么&#xff0c;为…