tensorrt安装使用教程

news2024/11/18 2:56:38

         一般的深度学习项目,训练时为了加快速度,会使用多GPU分布式训练。但在部署推理时,为了降低成本,往往使用单个GPU机器甚至嵌入式平台(比如 NVIDIA Jetson)进行部署,部署端也要有与训练时相同的深度学习环境,如caffe,TensorFlow等。由于训练的网络模型可能会很大(比如inception,resnet等),参数很多,而且部署端的机器性能存在差异,就会导致推理速度慢,延迟高。这对于那些高实时性的应用场合是致命的,比如自动驾驶要求实时目标检测,目标追踪等。所以为了提高部署推理的速度,出现了很多轻量级神经网络,比如squeezenet,mobilenet,shufflenet等。基本做法都是基于现有的经典模型提出一种新的模型结构,然后用这些改造过的模型重新训练,再重新部署。而tensorRT 则是对训练好的模型进行优化。 tensorRT就只是推理优化器。当你的网络训练完之后,可以将训练模型文件直接丢进tensorRT中,而不再需要依赖深度学习框架(Caffe,TensorFlow等),如下:

                                            
 

       

可以认为tensorRT是一个只有前向传播的深度学习框架,这个框架可以将 Caffe,TensorFlow的网络模型解析,然后与tensorRT中对应的层进行一一映射,把其他框架的模型统一全部 转换到tensorRT中,然后在tensorRT中可以针对NVIDIA自家GPU实施优化策略,并进行部署加速。如果想了解更多关于tensorrt的介绍,可参考官网介绍。

一、安装

Installation Guide :: NVIDIA Deep Learning TensorRT Documentation

【精选】TensorRT安装及使用教程-CSDN博客

首先查看电脑是否正常安装cuda以及对应的版本,至于cuda的安装可以查看《ubuntn16.04+cuda9.0+cudnn7.5小白安装教程》,接下来去nvidia官网下载对应的tensorrt安装

包。常见的有两种安装方式:

(1)deb格式文件下载

sudo dpkg -i nv-tensorrt-local-repo-{tag}_1.0-1_amd64.deb
sudo cp /var/nv-tensorrt-local-repo-{tag}/*-keyring.gpg /usr/share/keyrings/
sudo apt-get update
sudo apt-get install tensorrt

上面的tag号替换成自己下载的版本信息,等install安装结束,输入命令:dpkg -l | grep TensorRT如果显示如下图有关tensorrt的信息,说明tensorrt的c++版本安装成功:

(2)tar下载完成后,进行如下步骤安装

##安装依赖库
pip install pucuda -i https://pypi.douban.com/simple

#在home下新建文件夹,命名为tensorrt_tar,然后将下载的压缩文件拷贝进来解压
tar -xzvf TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz
 
#解压得到TensorRT-5.0.2.6的文件夹,将里边的lib绝对路径添加到环境变量中
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/lthpc/tensorrt_tar/TensorRT-7.0.0.11/lib
 
#安装TensorRT
cd TensorRT-7.0.0.11/python
pip install tensorrt-7.0.0.11-cp37-none-linux_x86_64.whl
 
#安装UFF
cd TensorRT-5.0.2.6/uff
pip install uff-0.6.5-py2.py3-none-any.whl
 
#安装graphsurgeon
cd TensorRT-5.0.2.6/graphsurgeon
pip install graphsurgeon-0.4.1-py2.py3-none-any.whl

当一切正常安装结束,在终端下输入python -c  "import tensorrt as trt"不报错即表示安装成功。

需要注意的一点就是,TensorRT与Opset版本之间的匹配关系取决于TensorRT的发行版本。TensorRT的每个版本通常支持一组特定的Opset版本,这些Opset版本与不同的深度学习框架和模型格式相关联。

以下是TensorRT的一些主要版本以及它们通常支持的Opset版本:

  1. TensorRT 7.0:

    • 支持Opset 9和Opset 10。
  2. TensorRT 8.0:

    • 支持Opset 11。

请注意,这只是一些示例,实际支持的Opset版本可能因TensorRT的更新和不同发行版本而有所变化。您应该查阅TensorRT的官方文档或相应的发行说明,以获取特定版本的详细信息,包括支持的Opset版本。此外,确保您的模型与您使用的TensorRT版本兼容,以获得最佳性能和准确性。如果您使用的是深度学习框架(如TensorFlow、PyTorch等),还需要确保导出模型时使用了TensorRT支持的Opset版本。

二、tensorrt使用分析

TensorRT使用笔记-CSDN博客

TensorRT整个过程可以分三个步骤,即模型的解析(Parser),Engine优化和执行(Execution)

》模型的解析(Parser)

目前TensorRT支持两种输入方式:

  1. 一种是Parser的方式。Parser是模型解析器,输入一个caffe的模型,或者onnx模型,或者TensorFlow转换成的uff模型,可以解析出其中的网络层及网络层之间的连接关系,然后将其输入到TensorRT中。
  2. API接口可以添加一个convolution或pooling。将Parser解析出来的模型文件,使用API添加到TensorRT中构建网络。

Parser目前有三个:

  • 一个是caffe Parser,这个是最古老的也是支持最完善的;
  • 另一个是uff,这个是NV定义的网络模型的一种文件结构,现在TensorFlow可以直接转成uff;
  • 另外版本3.5或4.0支持的onnx。

目前API支持两种接口实现方式:

  • C++
  • Python

补:如果有一个网络层不支持?
这个有可能,TensorRT只支持主流的操作,比如说一个神经网络专家开发了一个新的网络层,TensorRT是不知道是做什么的。这个时候涉及到customer layer的功能,即用户自定义层,构建用户自定义层需要告诉TensorRT该层的连接关系和实现方式,这样TensorRT才能去做。


》engine优化

模型解析后,engine会进行优化,得到优化好的engine可以序列化到内存(buffer)或文件(file),读的时候需要反序列化,将其变成engine以供使用。然后在执行的时候创建context,主要是分配预先的资源,engine加context就可以做推断(Inference)。
TensorRT所做的优化?
第一,也是最重要的,它把一些网络层进行了合并。
第二,取消不需要的层,比如concat这一层。
第三,Kernel可以自动选择最合适的算法。
第四,不同的batch size会做tuning。
第五,对硬件做优化。


总结TensorRT的优点

  1. TensorRT是一个高性能的深度学习推断(Inference)的优化器和运行的引擎;
  2. TensorRT支持Plugin,对于不支持的层,用户可以通过Plugin来支持自定义创建;
  3. TensorRT使用低精度的技术获得相对于FP32二到三倍的加速,用户只需要通过相应的代码来实现。

同时附上几个常用的接口,

Network Definition (高阶用法)
网络定义接口提供方法来指定网络的定义。我们可以指定输入输出的Tensor Name以及增加layer。我们可以通过自定义来扩展TensorRT不支持的层和功能。关于网络定义的API,请查看Network Definition API.

Builder
Builder接口让我们可以从一个网络定义中创建一个优化后的引擎。在这个步骤我们可以选择最大batch,workspace size,精度级别等参数,如果你想了解更多,请查看Builder API.

Engine
引擎接口就允许应用来执行推理了。它支持对引擎输入和输出的绑定进行同步和异步执行、分析、枚举和查询。

It supports synchronous and asynchronous execution, profiling, and
enumeration and querying of the bindings for the engine inputs and
outputs.

此外,引擎接口还允许单个引擎拥有多个执行上下文(execution contexts). 这可以让一个引擎同时对多组数据进行执行推理操作。如想了解更多,请查Execution API.

此外,TensorRT还提供了解析训练模型并创建TensorRT内部支持的模型定义的parser:

  • Caffe Parser

This parser can be used to parse a Caffe network created in BVLC Caffe
or NVCaffe 0.16. It also provides the ability to register a plugin
factory for custom layers. For more details on the C++ Caffe Parser,
see NvCaffeParser or the Python Caffe Parser.

  • UFF Parser

This parser can be used to parse a network in UFF format. It also
provides the ability to register a plugin factory and pass field
attributes for custom layers. For more details on the C++ UFF Parser,
see NvUffParser or the Python UFF Parser.

  • ONNX Parser

This parser can be used to parse an ONNX model. For more details on
the C++ ONNX Parser, see NvONNXParser or the Python ONNX Parser.
Restriction: Since the ONNX format is quickly developing, you may
encounter a version mismatch between the model version and the parser
version. The ONNX Parser shipped with TensorRT 5.1.x supports ONNX IR
(Intermediate Representation) version 0.0.3, opset version 9.


三、tensorrt测试

python:TensorRT学习笔记3 - 运行sampleMNIST-CSDN博客

c++:tensorRT学习笔记 C++version

使用TensorRT进行模型推理加速的工作流(Workflow)可以分为以下几个步骤:

  • ① 训练神经网络,得到模型。(以Tensorflow为例,我们得到xx.pb格式的模型文件)
  • ② 将模型用TensorRT提供的工具进行parsing(解析)。
  • ③ 将parsing后的结构通过TensorRT内部的优化选项(optimization options)对计算图结构进行优化。(包括不限于:1. 算子融合 Layer Funsion: 通过将Conv + BN等层的融合降低数据的吞吐量。 2. 精度校准 Precision Calibration : 当用户为了节省计算资源使用INT8进行推理的时候,需要作精度校准,这个操作TensorRT提供了官方的支持。 3. kernel auto-tuning : 根据计算逻辑,自动选择TensorRT实现的更高效的矩阵乘法,卷积运算等逻辑。)
  • ④ 通过上述步骤,得到了一个优化后的推理引擎。我们就可以拿这个引擎进行推理了~

》针对tensorflow模型,先将pb模型转化为uff格式,进入到uff包的安装路径,转化命令如下

python convert_to_uff.py xxx.pb

参考链接:

1、https://arleyzhang.github.io/articles/7f4b25ce/

2、使用NVIDIA 免费工具TENSORRT 加速推理实践--YOLOV3目标检测_使用tensorrt 加速yolov3-CSDN博客

3、https://www.cnblogs.com/shouhuxianjian/p/10550262.html

4、TensorRT/YoloV3 - eLinux.org

5、yolov3 with tensorRT on NVIDIA Jetson Nano

6、使用NVIDIA 免费工具TENSORRT 加速推理实践--YOLOV3目标检测_使用tensorrt 加速yolov3-CSDN博客

7、https://blog.csdn.net/weixin_43842032/article/details/85336940(tensorrt 安装和对tensorflow模型做推理,附python3.6解决方案)

8、https://blog.csdn.net/qq_36124767/article/details/68484092(tensorRT学习笔记)

9、https://docs.nvidia.com/deeplearning/tensorrt/api/python_api/parsers/Uff/pyUff.html(TensorRT 5.1.5.0 Python文档)

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

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

相关文章

WEB网络渗透的基础知识

网络渗透 1.什么是网络渗透 网络渗透是攻击者常用的一种攻击手段,也是一种综合的高级攻击技术,同时网络渗透也是安全工作者所研究的一个课题,在他们口中通常被称为”渗透测试(Penetration Test)”。 网络渗透的目的…

光模块对网络延迟的影响如何?

网络的延迟是网络运作过程中经常碰到的问题,光纤传输环节的光模块是影响网络延迟的关键因素之一。作为光通信的核心组件,光模块的性能直接影响到数据传输的速率、稳定性和可靠性,从而影响网络的延迟情况。 首先,传输速率越高的光…

php对接飞书机器人

有同事接到对接飞书机器人任务,开发中遇到响应错误: {"code": 19021,"msg": "sign match fail or timestamp is not within one hour from current time" } 意思应该就是签名错误或者时间戳不在有效范围内等&#xff0c…

一键更新图像或表格号

一键更新图像或表格号 首先,在图像或者表格处插入题注 第二步:在对图像描述处,插入交叉编译 第三步:如果图标编号改变了,右击更新域

受邀参加第 60 届中国高博会 星辰天合以 SDS 助力高校数字化转型

近日,第 60 届中国高等教育博览会(以下简称:高博会)在山东青岛开幕。中国高等教育学会会长杜玉波,山东省人民政府副省长王桂英出席开幕式并致辞。 本届高博会由中国高等教育学会主办,以“职普融通•产教融…

Python数据挖掘:自动售货机销售数据分析与应用

📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于恒川的日常汇报系列,大家有兴趣的可以看一看 📘相关专栏C语言初阶、C…

数据库复习——闭包

【例】关系模式R<U&#xff0c;F>&#xff0c;其中U{A&#xff0c;B&#xff0c;C&#xff0c;D&#xff0c;E}&#xff0c;F{AB→C&#xff0c;B→D&#xff0c;C→E&#xff0c;EC→B&#xff0c;AC→B}&#xff0c;求&#xff08;AB) 第一步&#xff0c;令X(0)AB。 …

Nexus的管理

仓库的配置 1登录以后点击设置图标&#xff0c;点击Repository 进行仓库管理 2 点击Create repository&#xff0c;选择 填写相关内容&#xff0c;阿里云仓库地址http://maven.aliyun.com/nexus/content/groups/public 点击 maven-public group进行配置&#xff0c; 角色配置…

如何实现前端音频和视频播放?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

rancher安装

官网 由于镜像比较大 所以先拉去下来 docker pull rancher/rancher:v2.5.15创建文件 mkdir -p /opt/data/rancher_data启动容器 # privileged容器操作主机权限 如果启动活不过15秒那么是失败的 docker run -d --privileged -p 80:80 -p 443:443 -v /opt/data/rancher_data:/va…

在mysql8查询中使用ORDER BY结合LIMIT时,分页查询时出现后一页的数据重复前一页的部分数据。

这里写目录标题 问题描述&#xff1a;问题模拟&#xff1a;原因分析问题解释问题解决验证官方文档支持 问题描述&#xff1a; 在mysql8查询中使用ORDER BY结合LIMIT时&#xff0c;分页查询时出现后一页的数据重复前一页的部分数据。 问题模拟&#xff1a; 表table_lock_test&…

Ubuntu18中的连接网络图标恢复

上图的图标不存在&#xff0c;也连不上网。 输入命令停止网络管理 service NetworkManager stop删除网络管理缓存文件 sudo rm /var/lib/NetworkManager/NetworkManager.state重启网络管理 service NetworkManager start修改网络管理文件 将‘managedfalse’修改为‘man…

通讯协议学习之路:CAN协议理论

通讯协议之路主要分为两部分&#xff0c;第一部分从理论上面讲解各类协议的通讯原理以及通讯格式&#xff0c;第二部分从具体运用上讲解各类通讯协议的具体应用方法。 后续文章会同时发表在个人博客(jason1016.club)、CSDN&#xff1b;视频会发布在bilibili(UID:399951374) 序、…

[MoeCTF 2023]——Web方向详细Write up、Re、Misc、Crypto部分Writeup

签到 hello CTFer 将url地址复制然后打开即可 得到flag Web http 听说这个http里还有个什么东西叫饼干&#xff0c;也不知道是不是吃的 踩坑了&#xff0c;这里用连接器。。。 开启题目环境 GET方式请求&#xff0c;然后把各种请求头往里加 GET ?UwUuHeader&#xff1a; …

JS初步了解环境对象this

什么是环境对象&#xff1f; 环境对象&#xff1a;指的是函数内部特殊的变量this&#xff0c;它代表着当前函数运行时所处的环境 作用&#xff1a;弄清楚this的指向&#xff0c;可以让我们代码更简洁 在普通函数中&#xff1a; // 每个函数里面都有this 普通函数的this指向wind…

如何使用前端Web组件?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

利用Python计算彭于晏的BMI

1 问题 彭于晏是众多男生女生心中的男神&#xff0c;那么他的BMI为多少&#xff0c;身体状况如何呢&#xff1f; 2 方法 运用python中数据类型转换&#xff0c;while 循环语句&#xff0c;if/elif/else 条件语句等方法计算彭于晏的BMI&#xff0c;判断他的身体状况。 计算公式…

Word标题编号转换为纯文本

一、创建宏 这个要用到宏命令 打开Word文档&#xff0c;按下快捷键AltF8&#xff0c;在“宏名”栏中输入“编号转换为文本”&#xff0c;这是给它起的名字&#xff0c;然后点击“创建”在新打开的窗口上&#xff0c;你会看到光标在闪烁&#xff0c;把下面函数中的4行内容复制粘…

MSF入门

漏洞数据库、利用工具集MSF MSF: The Metasploit Framework 简称美少妇 MSF安装 安装平台 Kali Linux: 自带Linux: 阿里云CentOS7安装msfWindows.msi 使用方式 msfconsole 交互终端 msfcli . msfconsole -x"command:..."图形界面: artimate、viper 下面我会用…

快如闪电的扩容:秒级启动,弹性伸缩让您无忧

文章目录 快速扩容&#xff1a;秒级启动&#xff0c;弹性伸缩服务器秒级启动服务秒级启动升级JDK的版本通过将应用程序打包成WAR文件并部署到已经启动的Tomcat服务器上来实现秒级启动使用Spring Cloud Function和云原生技术来构建无服务器应用程序&#xff0c;可以实现秒级启动…