首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >加速深度学习在线部署,TensorRT安装及使用教程

加速深度学习在线部署,TensorRT安装及使用教程

作者头像
机器学习AI算法工程
发布于 2020-10-21 09:06:51
发布于 2020-10-21 09:06:51
3.2K0
举报

1 什么是TensorRT

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

而tensorRT 则是对训练好的模型进行优化。tensorRT就只是推理优化器。当你的网络训练完之后,可以将训练模型文件直接丢进tensorRT中,而不再需要依赖深度学习框架(Caffe,TensorFlow等),如下:

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

2 TensorRT安装

tensorrt的安装方式很简单,只需要注意一些环境的依赖关系就可以,我们以tensorrt5.0.4版本为例,参考官网安装教程https://docs.nvidia.com/deeplearning/sdk/tensorrt-install-guide/index.html,这里简单总结一下步骤

tensorrt支持的环境和python版本如表所示

2.1 环境确认

  • 确认CUDA版本是9.0或者10.0,可通过运行nvcc -V指令来查看CUDA,如果不是9.0以上,则需要先把CUDA版本更新一下nn
  • cudnn版本是7.3.1,如果不满足要求,按照《Linux之cudnn升级方法》进行升级
  • 需安装有tensorflow,uff模块需要

2.2 安装pycuda

如果要使用python接口的tensorrt,则需要安装pycuda

2.3 下载安装包

  1. 进入下载链接https://developer.nvidia.com/nvidia-tensorrt-download
  2. 点击Download Now(需要登录英伟达账号,没有的注册一个)
  3. 选择下载的版本(最新TensorRT5)
  4. 完成问卷调查
  5. 选择同意协议
  6. 根据自己的系统版本和CUDA版本,选择安装包,如图所示(如果是完整安装,建议选择Tar File Install Packages,这样可以自行选择安装位置)

2.4 安装指令

如果要使用python版本,则使用pip安装,执行下边的指令

为了避免安装时各种问题,我们也可以使用deb包的方式安装,即在2.3步骤中选择自己系统对应的版本,然后使用如下指令安装

2.5 环境测试

运行python测试,导入模块不报错就表明安装正确

注意:导入uff的时候需要安装tensorflow模块,tensorflow版本要与cuda版本对应,比如cuda9要对应tensorflow1.12及以下版本,以上版本需要cuda10,具体参考官网

如果导入tensorrt报错如下,则是因为python版本不对,应根据2.1节上边的那个表调整自己的python版本

3 使用流程

在/TensoRT-5.0.2.6/samples/python文件夹下有很多python的例子,我们以第一个end_to_end_tensorflow_mnist的例子为例,描述tensorrt的使用流程,在README.md文件里也说得很明白了

3.1 安装依赖

需要安装好numpy、Pillow、pycuda、tensorflow等环境,如果都有可以跳过

3.2 生成pb文件

运行model.py后,会下载数据mnist.npz,并开始训练,完成后在models文件夹下生成lenet5.pb文件,如果自己已经训练得到pb文件,上述过程可以跳过

3.3 格式转化

要将tensorflow的pb文件转化为uff格式的文件,首先找到convert_to_uff文件,看自己用的是哪个版本的python,如果是python3,则在/usr/lib/python3.5/dist-packages/uff/bin文件夹下,如果是python2,则在/usr/lib/python2.7/dist-packages/uff/bin文件夹下

我们在终端中进入end_to_end_tensorflow_mnist,运行以下指令

需要注意的是:该转化过程只支持在x86平台上实现,如果想在TX2等嵌入式平台上使用tensorrt,需要先在x86平台上将pb模型转化为uff文件,然后再拷贝到TX2上使用

3.4 运行文件

运行sample.py文件,得到如下输出,表明可完整的使用tensorrt

参考文章

通过pytorch搭建卷积神经网络完成手写识别任务,并将训练好的模型以多种方式部署到TensorRT中加速

https://github.com/GuanLianzheng/pytorch_to_TensorRT5

TensorRT之TX2部署TensorFlow目标检测模型

https://blog.csdn.net/zong596568821xp/article/details/86077553

TensorRT安装及使用教程

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习AI算法工程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
设计模式:中介者模式(Mediator)
在 VFP 中你是否遇到过这样的场景:明明已经释放了表单,但是表单仍旧顽固的显示在屏幕中?好吧,这其实是因为某些引用没有被释放。在该设计模式下,更准确的说,是在代码中存在双向引用。
firstxinjie
2025/05/08
1230
设计模式:中介者模式(Mediator)
设计模式:备忘录模式(Memento)
发起者是直接导致需要进行快照的对象状态变更的类。在 VFP 中,大致可以这样定义:
firstxinjie
2025/05/12
680
设计模式:备忘录模式(Memento)
设计模式:装饰器模式(Decorator)
相较于后者,装饰器模式结构更清晰,也更容易扩展。但是对于可视组件进行“装饰”,会增加布局的复杂性,以及考虑状态的同步。因此,对于简单的场景,可以直接继承,而对于复杂的场景则可以选择其他的设计模式。
firstxinjie
2025/05/18
1510
设计模式:装饰器模式(Decorator)
设计模式:组合模式(Composite)
大道至简,设计模式真的很奇妙。如果你还未领悟其中的精髓,请随我来(欢迎留言或私信报名参与下月开始的培训:VFP高效编程之设计模式)。
firstxinjie
2025/05/17
800
设计模式:组合模式(Composite)
设计模式:建造者设计模式(Builder)(2)
关于该设计模式在 VFP 中的应用示例,我考虑了很久。最终决定以主程序的伪代码来做。它至少有两个作用:
firstxinjie
2025/04/19
920
设计模式:建造者设计模式(Builder)(2)
设计模式:迭代器模式(Iterator)
从这句话里,基本可以理解“迭代”的含义:重复,以之前结果为起点的重复的动作。放置编程的语境中,迭代器可以认为是对一组特定算法的抽象。
firstxinjie
2025/05/06
1100
设计模式:迭代器模式(Iterator)
命令模式(Command)
命令模式是一种行为型模式,它可将请求转换为一个包含与请求相关的所有信息的独立对象。该转换让你能根据不同的请求将方法参数化、延迟请求执行或将其放入队列中,且能实现可撤销操作。 简单来说,命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。
兜兜转转
2023/03/08
5460
命令模式(Command)
设计模式:状态模式(State)
按照标准的描述,该模式“让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。”
firstxinjie
2025/05/12
800
设计模式:状态模式(State)
设计模式:工厂方法模式(Factory Method)(2)
当年做一个项目时,还不懂什么是设计模式,仅仅是按照经验完成了需求。回头看看,就是暗合桥接模式。但是,在整个需求实现过程中,甲方需要我在已经设计好的标准业务逻辑中添加非标的需求,因为,在他们眼里,从业务角度来看,是自然的拓展。
firstxinjie
2025/04/23
850
设计模式:工厂方法模式(Factory Method)(2)
设计模式:责任链模式(Chain of Responsibility)
责任链模式是行为模式中的一种。它允许将请求沿着潜在处理者链传递,直到其中一个处理者处理该请求。
firstxinjie
2025/04/29
1110
设计模式:责任链模式(Chain of Responsibility)
设计模式--命令模式
命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成对象,以便可以将不同的请求参数化,队列化或记录日志,以及支持可撤销操作。在命令模式中,包含一个命令接口和具体的命令实现类,以及一个调用者(invoker)类和一个接收者(receiver)类。调用者通过调用接口中的方法执行命令,发起请求,接收者则负责实际执行命令。这种设计模式将调用者和接收者解耦,使得系统更加灵活。
软件架构师Michael
2023/07/18
2890
设计模式:单例模式(Singleton)(1)
该模式的核心就是在一个应用程序生命周期中仅存在唯一的类实例。因此,在 VFP 中,最简单的实现方式就是在 VFP 主程序中存在类似下面的代码:
firstxinjie
2025/04/26
920
设计模式:单例模式(Singleton)(1)
设计模式 ( 十三 ) 命令模式Command(对象行为型)
宏命令又称为 组合命令 ,它是 命令模式和组合模式 联用的产物: 宏命令也是一个具体命令,不过它包含了对其他命令对象的引用, 在调用宏命令的 execute() 方法时,将递归调用它所包含的每个成员命令的 execute() 方法 ,一个宏命令的成员对象可以是简单命令,还可以继续是宏命令。执行一个宏命令将执行多个具体命令,从而实现对命令的批处理。 Ÿ
黄规速
2022/04/14
3560
设计模式 ( 十三 ) 命令模式Command(对象行为型)
重温设计模式 --- 命令模式
命令模式是一种行为型设计模式,它将请求封装成一个对象,从而允许你将不同的请求对客户端参数化,将请求排队或记录请求日志,以及支持可撤销的操作。
Niuery Diary
2023/10/22
1950
重温设计模式 --- 命令模式
命令模式(封装命令)
如果您是第一次阅读我的设计模式系列文章,建议先阅读设计模式开篇,希望能得到您宝贵的建议。
幺鹿
2018/08/21
1.6K0
命令模式(封装命令)
【地铁上的设计模式】--行为型模式:命令模式
命令模式(Command Pattern)是一种行为型设计模式,它将请求(命令)封装成一个对象,以便在不同的上下文中使用,并支持将操作可撤销和重做。该模式的核心思想是将命令的发出者(客户端)和接收者(执行命令的对象)解耦,从而实现请求的发送者和接收者之间的解耦。
喵叔
2023/05/09
4000
设计模式学习笔记-命令模式
1. 概述   将一个请求封装为一个对象(即我们创建的Command对象),从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。 2. 解决的问题   在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。 3. 模式中角色   3.1 抽象命令(Command):定义命令的接口,声明执行的方法。   3.2 具体命令(ConcreteCommand):具体命令
用户1198337
2018/01/19
5290
设计模式学习笔记-命令模式
VFP如何做一个超类,如此万物皆对象
所谓“超类”,也就是说,其他所有的类都是从它继承而来。.NET 中对 Object 类的描述如下:支持 .NET 类层次结构中的所有类,并为派生类提供低级别服务。 这是所有 .NET 类的最终基类;它是类型层次结构的根。换句话说,整个 .NET 平台上所有的类,都是从 Object 类继承而来。
加菲猫的VFP
2023/08/21
3080
VFP如何做一个超类,如此万物皆对象
设计模式9之命令模式
在开发中,方法的请求与方法的执行往往存在紧密耦合关系,不利于系统的维护。命令模式就是为了解决这个问题而出现的。
Lvshen
2022/05/05
1870
设计模式9之命令模式
『设计模式』再谈麦当劳的点单模式--命令模式(Command)
麦当劳,我三期设计模式拿你举例子了,私信联系我打钱!!! 概述 命令模式又称为行动(Action) 模式或交易(Transaction) 模式。 命令模式把一个请求或者操作封装到一个对象中。命令模式允
风骨散人Chiam
2020/10/28
3690
推荐阅读
相关推荐
设计模式:中介者模式(Mediator)
更多 >
交个朋友
加入架构与运维学习入门群
系统架构设计入门 运维体系构建指南
加入架构与运维趋势交流群
技术趋势前瞻 架构演进方向
加入[架构及运维] 腾讯云技术交流站
云架构设计 云运维最佳实践
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档