TensorRT 概述、原理、Linux下安装
聊聊TensorRT
随着传统的高性能计算和新兴的深度学习在百度、京东等大型的互联网企业的普及发展,作为训练和推理载体的GPU也被越来越多的使用。
NVDIA本着让大家能更好地利用GPU,使其在做深度学习训练的时候达到更好的效果的目标
推出了支持高性能深度学习支持引擎——TensorRT。
TensorRT是一个有助于在NVIDIA图形处理单元(GPU)上高性能推理c++库。
它旨在与TesnsorFlow、Caffe、Pytorch以及MXNet等训练框架以互补的方式进行工作,专门致力于在GPU上快速有效地进行网络推理。
如今现有的一些训练框架(例如TensorFlow)已经集成了TensorRT,因此可以将其用于加速框架中的推理。
另外,TensorRT可以作为用户应用程序中的库
它包括用于从Caffe,ONNX或TensorFlow导入现有模型的解析器,以及用于以编程方式(C++或Python API)构建模型。
在训练了神经网络之后,TensorRT可以对网络进行压缩、优化以及运行时部署,并且没有框架的开销。
TensorRT通过combines layers,kernel优化选择,以及根据指定的精度执行归一化和转换成最优的matrix math方法
改善网络的延迟、吞吐量以及效率。
TensorRT通过结合抽象出特定硬件细节的高级API和优化推理的实现来解决这些问题
以实现高吞吐量、低延迟和低设备内存占用。
TensorRT是如何工作的
为了优化模型的inference,TensorRT会根据网络的定义执行优化【包括特定平台的优化】并生成inference engine
此过程被称为构建阶段,尤其是在嵌入式平台上会消耗大量的时间
因此,一个典型的应用程序只会被构建一次engine,然后将其序列化为plane file以供后续使用。
注意:生成的plane file 不能跨平台或TensorRT 版本移植。
另外,因为plane file是明确指定GPU 的model,所以我们要想使用不同的GPU来运行plane file必须得重新指定GPU
构建阶段在layer graph上执行以下优化
- 消除没有使用的outputs layer
- 消除等同于没有操作的operation
- convolution,bias and ReLU的融合
- 把具有足够相似的parameters和相同的source tensor的operation进行aggregation【例如1x1的convolution】
- 通过将输出层定向到正确的最终目的来合并concatenate layer
TensorRT提供了哪些功能
TensorRT使开发人员能够导入、校准、生成以及部署优化的网络
网络可以直接从Caffe导入,也可以通过UFF或ONNX格式从其他框架导入
也可以通过实例化各个图层并直接设置参数和weight以编程的方式创建
用户可以通过TensorRT使用Plugin interface运行自定义图层。
TensorRT中的GraphSurgeon功能提供了Tensorflow中自定义layer的节点映射,因此可以支持许多TensorFlow模型的inference。
TensorRT在所有支持平台上提供了C++实现,并在x86,aarch64和ppc64le上提供Python实现。
TensorRT核心库中的关键接口是:
- Network Definition:网络定义接口为应用程序提供了指定网络定义方法。
- Optimization Profile:优化配置文件指定对动态维度的约束。
- Builder Configuration:构建器配置接口指定用于创建engine的详细信息
- Builder:构建器接口允许根据网络定义和builder configuration创建一个优化的engine
- Engine:engine接口允许应用程序执行inference
- Caffe Parser:该解析器可用于解析在BVLCCaffe或NVCaffe0.16中创建的Caffe网络。
- UFF Parser:该解析器可用于解析UFF格式的网络。
- ONNX Parser:该解析器可用于解析ONNX模型。
为什么TensorRT能让模型跑的快
TensorRT主要做了下面几件事,来提升模型的运行速度
- TensorRT支持FP16和INT8的计算
深度学习在训练的时候一般是应用32位或者16位数据
TensorRT在推理的时候可以降低模型参数的位宽来进行低精度推理,以达到加速推断的目的。
- TensorRT对于网络结构进行重构,把一些能够合并的运算合并在了一起,针对GPU的特性做了优化
GPU上跑的函数叫Kernel,TensorRT是存在Kernel的调用的
在绝大部分框架中,比如一个卷积层、一个偏置层和一个reload层,这三层是需要调用三次cuDNN对应的API
但实际上这三层的实现完全是可以合并到一起的,TensorRT会对一些可以合并网络进行合并
目前的网络一方面越来越深,另一方面越来越宽,可能并行做若干个相同大小的卷积,这些卷积计算其实也是可以合并到一起来做的
- Kernel Auto-Tuning:网络模型在推理计算时,是调用GPU的CUDA核进行计算的
TensorRT可以针对不同的算法,不同的网络模型,不同的GPU平台,进行 CUDA核的调整
以保证当前模型在特定平台上以最优性能计算。
- Dynamic Tensor Memory 在每个tensor的使用期间,TensorRT会为其指定显存
Dynamic Tensor Memory 在每个tensor的使用期间,TensorRT会为其指定显存,避免显存重复申请,减少内存占用和提高重复使用效率。
TensorRT的自动安装
主要是网络比较好,可以采用这个方式安装
pip install tensorrt
pip install nvidia-pyindex
pip install nvidia-tensorrt
TensorRT的手动安装
- 下载安装包
查询本机Linux版本:cat /etc/issue
查询本机CUDA版本:cat /usr/local/cuda/version.txt
打开官网下载TensorRT:https://developer.nvidia.com/nvidia-tensorrt-download
这里使用基于deb文件的安装
但是建议还是下载一个tar文件,这样在安装完成后,如果报错发现一些依赖包缺失,便于安装依赖包,在之后就会看到这样的操作。
同时需要注意的,英伟达自己的几个GPU平台,是有不一样的安装指南的。
- 使用deb包安装
dpkg -i xxx.deb
apt-key add xxx.pub
apt-get update
apt-get install tensorrt
- 安装依赖包
TensorRT的一个依赖包是libnvinfer。
如果使用Python 2.7: apt-get install python-libnvinfer-dev
如果使用Python 3.x:apt-get install python3-libnvinfer-dev
- 检查TensorRT是否安装成功
dpkg -l | grep TensorRT
- 运行实例程序
安装后会在 /usr/src 目录下生成一个 tensorrt 文件夹,里面包含 bin , data , python , samples 四个文件夹
samples 文件夹中是官方例程的源码
data , python 文件中存放官方例程用到的资源文件,比如caffemodel文件,TensorFlow模型文件,一些图片等
bin 文件夹用于存放编译后的二进制文件
可以把 tensorrt 文件夹拷贝到用户目录下,方便自己修改测试例程中的代码
进入 samples 文件夹直接 make,会在 bin 目录中生成可执行文件,可以一一进行测试学习
一般情况下,实例程序运行成功,TensorRT也就安装成功了
参考文献
- https://docs.nvidia.com/deeplearning/tensorrt/
- https://zhuanlan.zhihu.com/p/356072366
- https://cloud.tencent.com/developer/article/1594985
- https://arleyzhang.github.io/articles/7f4b25ce/
TensorRT 概述、原理、Linux下安装相关推荐
- linux下安装nginx启动,Linux下安装启动nginx的过程
1.首先将nginx的安装包传到虚拟机里的/home目录下 2.为了方便nginx运行而不影响linux安全需创建组合用户 groupadd -r nginx useradd -r -g nginx ...
- Nginx入门篇-基础知识与linux下安装操作
我们要深刻理解学习NG的原理与安装方法,要切合实际结合业务需求,应用场景进行灵活使用. 一.Nginx知识简述 Nginx是一个高性能的HTTP服务器和反向代理服务器,也是一个 IMAP/POP3/S ...
- Linux下安装JDK,Tomcat,Mysql详细教程
1. 概述 今天教大家在linux下安装jdk,mysql以及tomcat.在javaweb开发中,最后完成的项目代码,一般都是布在linux服务器下的.因为linux服务器可以说是安全性稳定性都比w ...
- Linux下安装配置virtualenv与virtualenvwrapper
一.Linux下安装.配置virtualenv 配置源 #指定清华源下载pip的包 [root@localhost opt]# pip3 install -i https://pypi.tuna.ts ...
- linux 下安装部署mq,RocketMQ在linux下安装部署
本博客以当前RocketMQ最新版介绍:v4.4.0 环境要求 64位JDK 1.8+; Maven 3.2.x; // 源码编译时需要用到 二进制文件安装 > unzip rocketmq-a ...
- linux系统下安装pip3,linux下安装python3和对应的pip环境教程详解
linux下安装python3和对应的pip环境教程详解 1.下载python3.6的安装包: 2.解压后,进入到解压目录下,执行如下命令,将python3.6进行编译,如下是将python的环境编译 ...
- linux 添加宋体字符集,Linux下安装中文宋体
1,#cd /usr/share/fonts/default 2,mkdir -p ./truetype/simsun 3,取得simsun.ttc文件:如果网上下载不到则在windows (c:/w ...
- 如何在 Linux 下安装及使用 CD-ROM
1. 概述 这是 Linux CD-ROM HOWTO. 编撰它的目的是包含一切在 Linux 安装及建置 CDROM 时所 需的知识, 以供大家快速参考. 它将回答常见的问题, 还有指引其它关於唯读 ...
- linux安装多个jre,linux 下安装 jre
本文链接:https://blog.csdn.net/qq_34368587/article/details/79559102 Linux下安装Java运行环境 现需要项目部署到Linux中,需要配置 ...
- 第四篇 kali Linux 下安装fluxion
第四篇 kali Linux 下安装fluxion 第一篇kali linux 安装 https://blog.csdn.net/qq_43632394/article/details/1091212 ...
最新文章
- 报表-对于多数据进行 分sheet以及 分workbook处理
- Nginx简介及使用Nginx实现负载均衡的原理【通俗易懂,言简意赅】
- 【编译原理】构建一个简单的解释器(Let’s Build A Simple Interpreter. Part 9.)(笔记)语法分析(未完,先搁置了!)
- unity2D技术学习与整理
- 利用SVD-推荐未尝过的菜肴2
- Linux下启动程序常见问题,linux系统启动流程及常见故障解决方式
- STM32那点事(6)_定时器(上)
- 数据库_初学语句 in的用法
- win7下安装 LINUX虚拟机
- mysql 缺省配置 崩溃_MySQL5.6初始配置调优_MySQL
- C/C++中printf和C++中cout的输出格式
- 1056. 组合数的和(15)-PAT乙级真题
- 从零开始--系统深入学习android(实践-让我们开始写代码-Android框架学习-3. 菜单)...
- 开始学习 limodou 的 Django step by step 了
- Java集合:HashMap详解(JDK 1.8)
- 对话机器人技术简介:问答系统、对话系统与聊天机器人
- CMMI4过程域之“需求管理”
- mc用什么版本的java_我的世界网易 Java 版哪个版本比较好?
- 微服务.链路追踪.OpenTracing
- npx create-nuxt-app myapp2 安装报错
热门文章
- 基于emWin的WAV,MP3软解软件播放器,带类似千千静听频谱,含uCOS-III和FreeRTOS两个版本...
- GDI+_绘制QQ头像
- 推荐系统遇上深度学习(九十二)-[腾讯]RecSys2020最佳长论文-多任务学习模型PLE
- UI设计教程:关于版式设计
- 优秀项目管理者的必修课程1(项目启动)-吴永达原创文
- python post请求参数错误_python爬虫 post请求 参数错误
- 学习笔记——自动化测试框架的构成
- 人工智能核心技术,主要可以分为哪几类?
- 金橙子软件不锈钢打黑_什么是锈? 安全,快速,简便的软件开发
- php 团购 时间,php 团购折扣计算公式