Ubuntu TensorRT安装

什么是TensorRT

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

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

TensorRT 概述

TensorRT 是由 Nvidia 发布的一个机器学习框架,用于在其硬件上运行机器学习推理。其能针对 Nvidia 系列硬件进行优化加速,实现最大程度的利用 GPU 资源,提升推理性能。在训练了神经网络之后,TensorRT 可以对网络进行压缩、优化以及运行时部署,并且没有框架的开销。

TensorRT 部署流程主要有以下五步:

训练模型
导出模型为 ONNX 格式
选择精度
转化成 TensorRT 模型
部署模型
主要难度在第二步、第四步和第五步。其中 ONNX 格式的导出和运行设备无关,可以在自己的电脑上导出,其他设备上使用。而第四步转化得到的 TensorRT 模型文件是和设备绑定的,在哪个设备上生成就只能在该设备使用。

一般来说,模型训练和导出 ONNX 都在服务器上进行,得到 ONNX 模型。TensorRT 模型转化和部署都是在实际设备上进行。这样的话实际设备不需要 PyTroch 环境,只需要配置好 TensorRT 环境即可。

一、 版本选择

TensorRT需要和CUDA、cuDNN 的版本对应

1.1、查看CUDA和cuDNN版本

可以通过如下命令查看自己的CUDA和cuDNN版本

# 查看CUDA版本
nvcc -V

# 查看cuDNN版本
whereis cudnn_version.h   # 找到 cudnn_version.h 文件路径
cat Path/cudnn_version.h  | grep CUDNN_MAJOR -A 2

下图 cudnn的版本就是:8.9.6

1.2、选择合适的 TensorRT版本

去官网: Documentation Archives :: NVIDIA Deep Learning TensorRT Documentation 查询自己的环境能使用的版本

如下图, 首先选择相应的 TensorRT 版本---> 进入后选择 Support Matrix 查看版本对应情况,最后选择自己合适的版本安装

二、下载TensorRT

去官网: Log in | NVIDIA Developer  下载所需要的版本,如图所示,有 TAR、DEB、RPM三种不同的下载包。本文主要介绍 TAR 包的安装方式,其他两种没有测试过,可以看官网的安装教程。

TAR 包安装可以自行选择安装位置

三、安装TensorRT

在1.2节中类似,选择相应的 TensorRT 版本---> 选择:Installation Guide  , 找到相应的安装流程,因为下载的是TAR, 所以找到TAR 包得安装方法:

安装流程整理如下:

3.1、下载后解压

解压后得到TensorRT-8.6.1.6文件夹TensorRT-8.6.1.6

tar -xzvf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-11.8.tar.gz

3.2、添加环境变量

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your_path/TensorRT-8.6.1.6/lib


# 重新加载环境变量
source ~/.bashrc

3.3、安装python版:

到 TensorRT-8.6.1.6/python 目录下,安装TensorRT, 根据自己的python版本选择

python3 -m pip install tensorrt-*-cp3x-none-linux_x86_64.whl

3.4、安装UFF,支持tensorflow模型转化

cd uff
python3 -m pip install uff-0.6.9-py2.py3-none-any.whl

3.5、安装graphsurgeon,支持自定义结构

cd graphsurgeon
pip install graphsurgeon-0.4.6-py2.py3-none-any.whl

3.6、防止转换时候找不到相应的库

为了避免其它软件找不到 TensorRT 的库,建议把 TensorRT 的库和头文件添加到系统路径下

复制到系统目录, 进入TensorRT路径下

sudo cp -r ./lib/* /usr/lib
sudo cp -r ./include/* /usr/include

3.7、测试一下. 进入Python

import tensorrt as trt
print(trt.__version__)

历程测试

cd samples/sampleOnnxMNIST/
make -j8
cd ../../bin
./sample_onnx_mnist

如下图

四、ONNX转换成TensorRT engine

使用命令行工具trtexec转换成TensorRT engine 或者 trt,只是后缀不同

进入到TensorRT-8.6.1.6/bin  目录下

./trtexec --onnx=path/model.onnx --saveEngine=path/resnet_engine_intro.trt  --explicitBatch
# 参数解释
--maxBatch:设置一个最大batchsize上限,用于输入的batchsize不确定情况下
--explicitBatch:根据onnx模型后结构自动推导出明确的batchsize
--fp16:是否使用fp16

注意保存engine的时候不要保存在bin下面 可能会报错的 保存引擎错误

有的时候转engine的时候回报错

onnx2trt_utils.cpp:220: Your ONNX model has been generated with INT64
weights, while TensorRT does not natively support INT64. Attempting to
cast down to INT32.

是因为你的onnx是INT64权重生成的,而tensorrt是支持INT32 的所有要将onnx转为更简单的模型。需要用到 onnx-simplifier 使用 pip install onnx-simplifier 就能直接安装了
安装完毕后就可以转了 python -m onnxsim .\flame.onnx .\flame_sim.onnx

推理库:

GitHub - shouxieai/tensorRT_Pro: C++ library based on tensorrt integration

该仓库也包含了 TensorRT Python 模型推理的源码。 对于 YOLO C++ 部署只需要下载文件夹 tensorRT_Pro/example-simple_yolo/即可

该开源项目有以下优点

依赖少:仅依赖官方的 TensorRT 和 OpenCV
文件少:只有 simple_yolo.hpp 和 simple_yolo.cu 两个文件
使用方便:包含了ONNX 模型转 TRT 引擎,图像输入的预处理和后处理,集成了 NMS 非极大抑制算法,且封装简单,易于使用。
该仓库非常简单易用,根据其 ReadMe 文件操作即可。

实际使用,只需要修改下src/main文件主函数的参数

具体参考这篇文章后半部分,后续再来补充

TensorRT安装及使用教程(ubuntu系统部署yolov7)_ubuntu tensorrt-CSDN博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Keil用ST-LINK下载STM32程序后不自动运行

之后程序可以运行了,但是串口还没有输出,在debug模式下都是ok的。

Richtek立锜科技车规级器件选型

芯片按照应用场景,通常可以分为消费级、工业级、车规级和军工级四个等级,其要求依次为军工>车规>工业>消费。 所谓“车规级元器件”--即通过AEC-Q认证 汽车不同于消费级产品,会运行在户外、高温、高寒、潮湿等苛刻的环境&#xff0c…

重磅!首本大模型中文新书发布,复旦最新《大规模语言模型·从理论到实践》,理论+代码

复旦大学自然语言处理实验室张奇教授、桂韬研究员、郑锐博士生以及黄萱菁教授结合之前在自然语言处理领域研究经验,以及分布式系统和并行计算的教学经验,通过在大语言模型实践和理论研究的过程中,历时 8 个月完成本书《大规模语言模型从理论到…

【数学建模】 数据处理与拟合模型

文章目录 数据处理与拟合模型1. 数据与大数据1.1 什么是数?什么是数据?1.2 数据与大数据1.3 数据科学的研究对象 2. 数据的预处理2.1 为什么需要数据预处理2.2 使用pandas处理数据的基础2.3 pandas常用方法总结2.4 数据的规约1) 维度规约2) 数值规约3) 数…

Excel中按列的首行字母顺序,重新排列(VBA脚本)

排序前 要求对4列数据按照第一行abcd的顺序排列 VB脚本如下: 要使用这个脚本,请按照以下步骤操作: 打开Excel,然后按下 Alt F11 打开VBA编辑器。在VBA编辑器中,选择“插入” > “模块”,在打开的模块…

LineageOs-21.0系统编译问题

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

35 智能指针

目录 为什么需要智能指针?内存泄露智能指针的使用及原理c11和boost中智能指针的关系RAII扩展学习 1. 为什么需要智能指针? 下面我们先分析一下下面这段程序有没有什么内存方面的问题? int div() {int a, b;cin >> a >> b;if (…

android deep links即scheme uri跳转以及googlePlay跳转配置

对于googlePlay的Custom URL就是googlePlay上APP网址: https://play.google.com/store/apps/details?idcom.yourapp如果是国内一些应用,则考虑market://包名等方式,自行百度。 对于Android URI Scheme: 首先需要在Manifest xm…

idea集成uglifycss压缩混淆css

Uglifycss介绍 https://www.npmjs.com/package/uglifycss 命令行 $ uglifycss [options] [filename] [...] > output 选项: --max-line-len n每个字符添加一个换行符(大约); 表示无换行符,并且是默认值n0 --expand-vars扩…

ESP32CAM物联网教学04

ESP32CAM物联网教学04 给小车配个显示屏 小智决定给小车增加一块显示屏,让小车看起来更好看一些。 点灯物联控制小车的行驶方向 淘宝上面可以使用的液晶显示屏种类非常多,(输入OLED搜索)经过挑选,选中了这一块&#…

JAVA 发送短信信息工具类(腾讯云)

发送短信信息工具类 import cn.hutool.core.collection.CollUtil; import com.tencentcloudapi.common.Credential; import com.tencentcloudapi.common.exception.TencentCloudSDKException; import com.tencentcloudapi.sms.v20210111.SmsClient; import com.tencentcloudapi…

如何使用VScode创建和上传Arduino项目

Visual Studio Code (VS Code) 是一种非常流行的通用集成开发环境 (IDE)。IDE 是一种将文本编辑器、编程界面、调试视图和项目管理集成在一个地方的软件。这个开源项目由微软领导,可以在所有操作系统上运行。使 VS Cod…

【pyhont报错已解决】ERROR: Could not find a version that satisfies the requirement

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查软件包版本和依赖2.2 方…

从混乱到有序:企业级在线文档助力中小企业数字化转型的蜕变

在当今数字化浪潮下,企业的数字化转型已成为行业发展的必然趋势。他们数字化转型的痛点在哪里?资金有限、技术人才短缺和管理的复杂性等。很多时候,它们的文件管理比较混乱,大量的知识和数据分散在不同的系统,形成了数…

【配置网络和使用ssh服务】

文章目录 一、配置文件二、配置网络1.使用系统菜单配置网络2.通过网卡配置文件配置网络3.使用图形界面配置网络4.使用nmcli命令配置网络 三、配置远程控制服务1.配置sshd服务2.安全密钥验证3.远程传输命令 一、配置文件 跟网络有关的主要配置文件如下: /etc/host.c…

AIGC文生图lora微调训练案例;SD-Train界面训练stable Diffusion lora模型

lora仓库(1000多个lora微调模型分享): https://lorastudio.co/models 1、命令代码方式:文生图lora微调训练案例 主要用huggingface相关包:peft、accelerate、diffusers 参考: https://huggingface.co/blo…

解决:使用MySQL Command Line Client时光标不显示

问题描述: 使用MySQL Command Line Client时,命令行输入字符光标不显示, 如下图: 解决办法: 1.按Shift键将输入法切换至中文,打出中文: 2.再按一次Shift键,光标就会显示:

多载波调制与OFDM原理讲解以及MATLAB实现GUI设计

前言 基于MATLAB设计并实现了一个OFDM调制的图形用户界面(GUI)系统。该系统旨在简化OFDM调制过程的仿真,提供友好的用户交互界面。设计目标是通过GUI实现参数化的OFDM仿真,包括子载波数、符号数、IFFT长度、循环前缀长度、循环后…

15kg级弹簧刀高速巡飞无人机技术详解

弹簧刀高速巡飞无人机,作为一种先进的战术导弹系统,融合了无人机与导弹的双重特性,成为了现代战争中不可或缺的侦察与打击利器。该无人机以其小巧的外形设计、优异的性能表现和广泛的适用领域,受到了全球军事领域的广泛关注。弹簧…

TYPE-C转DC转接头方案,ECP5701支持5V、9V、12V、15V、20V电压输出

如今随着这几年的USB-C PD适配器的普及,消费者手上的PD适配器越来越普遍,如何让以前的电源适配器也可以用上PD适配器呢?如此一来以前的电源适配器坏了,就不需要费心费力的寻找相同的适配器进行更换,甚至于只能将整个设…
最新文章