cap1:TensorRT介绍及CUDA环境安装

《TensorRT全流程部署指南》专栏文章目录:

  • cap1:TensorRT介绍及CUDA环境安装
  • cap2:1000分类的ResNet的TensorRT部署指南(python版)
  • cap3:自定义数据集训练ResNet的TensorRT部署指南(python版)
  • cap4:YoloV5的TensorRT部署指南(python版)

文章目录

  • 1、什么是 TensorRT?
  • 2、TensorRT 的优势
  • 3、TensorRT 加速 PyTorch 模型的基本流程
    • 3.1 训练模型和保存模型
    • 3.2 导出模型
    • 3.3 转换为 TensorRT 引擎
    • 3.4 加载与推理
  • 4、基础环境配置
    • 4.1 安装nvidia驱动
    • 4.2 安装CUDA
    • 4.3 安装cuDNN

1、什么是 TensorRT?

在软件工程领域,部署是将开发完成的软件投入实际使用的过程,通常涉及环境配置和软件安装等步骤。类似地,深度学习模型的部署是指将训练好的模型置于特定环境中运行的过程。然而,模型部署面临更为复杂的挑战:

  1. 环境配置复杂:深度学习模型通常依赖于大型框架(如PyTorch、TensorFlow),这些框架在生产环境(如手机、开发板)中的安装和配置较为困难。

  2. 计算资源需求高:深度学习模型结构复杂,需要大量计算资源才能满足实时运行需求,因此必须对模型的运行效率进行优化。

鉴于这些挑战,模型部署不能仅依赖简单的环境配置和安装。经过多年的探索,工业界和学术界已经形成了一套流行的模型部署流程,通常包括模型压缩、优化、转换和集成等步骤,以确保模型能够在生产环境中高效运行。

PyTorch 作为深度学习领域的主流框架,相信大家已经能够熟练运用。它提供了从数据预处理、模型设计、训练监控到结果保存的完整解决方案,能够轻松应对图像分类、目标检测、图像分割等计算机视觉任务。

在模型推理阶段,常规做法是使用 torch.load() 加载模型并结合 NumPy 进行数据预处理。这种方式在实时性要求不高且硬件资源充足的场景下能够满足需求。然而,当面临硬件资源受限或高帧率要求的场景时,PyTorch 的性能瓶颈就会显现,难以满足实际需求。

TensorRT(NVIDIA TensorRT)是 NVIDIA 提供的一款高性能深度学习部署推理优化库,专门用于加速在 NVIDIA GPU 上运行的深度学习模型。它提供了一系列优化手段,如运算融合(Layer Fusion)、精度校准(Precision Calibration)、张量优化(Tensor Optimization)等,能够显著提升模型推理速度,并降低延迟。

2、TensorRT 的优势

计算加速:TensorRT 通过内核融合(Kernel Fusion)、权重量化(Weight Quantization)和图优化(Graph Optimization)等技术,大幅提升模型推理效率。

低延迟:TensorRT 采用高效的内存管理策略,减少了数据传输和计算的开销,降低了推理延迟。在算力比较强的设备上,影响推理速度的更有可能出现在数据传输上。比如cv2读取的图片需要复制到cuda显存中,再进行推理。比如可能推理只需要1ms,但是复制过程需要耗时需要2ms。所以如何控制好数据复制带来的时间开销对极值的速度优化也非常重要。

支持多种精度:TensorRT 支持 FP32、FP16 和 INT8 精度,可以根据应用场景灵活调整计算精度,权衡计算速度与模型精度。一般使用FP16会有巨大的提速,而精度几乎不变。

集成性强:TensorRT 可以与 PyTorch、TensorFlow 等主流深度学习框架结合使用,支持 ONNX 格式的模型,便于模型转换与优化。

3、TensorRT 加速 PyTorch 模型的基本流程

TensorRT 是 NVIDIA 推出的高性能深度学习推理库,能够显著加速深度学习模型的推理速度。对于 PyTorch 用户而言,利用 TensorRT 加速模型推理可以带来显著的性能提升。

TensorRT部署主要流程如下:

3.1 训练模型和保存模型

首先,使用 PyTorch 框架训练您的深度学习模型。确保模型训练完成后,保存模型的权重参数。

3.2 导出模型

为了将 PyTorch 模型转换为 TensorRT 引擎,需要先将模型导出为 TorchScript 或 ONNX 格式。这两种格式都是通用的模型表示形式,能够被 TensorRT 识别和处理:

  • TorchScript: PyTorch 自带的模型导出格式,可以将 PyTorch 模型转换为静态图表示。

  • ONNX: 开放的神经网络交换格式,支持多种深度学习框架之间的模型转换。

3.3 转换为 TensorRT 引擎

TensorRT 提供了 ONNX 解析器和 TorchScript 解析器,可以分别加载 ONNX 模型和 TorchScript 模型。

TensorRT 会根据目标硬件平台对模型结构进行优化,例如:

  • 层融合: 将多个层融合为一个层,减少计算量和内存访问次数。
  • 精度校准: 将模型中的浮点数转换为低精度数据类型,例如 FP16 或 INT8,以提升推理速度。
  • 内存优化: 优化模型的内存访问模式,减少内存带宽瓶颈。

在优化模型结构之后,TensorRT 会构建一个高效的推理引擎。该引擎包含了模型的计算图、优化后的参数以及针对目标硬件平台的指令集。

构建完成的 TensorRT 引擎可以序列化为文件,方便后续加载和使用。

3.4 加载与推理

使用 TensorRT API 加载序列化后的 TensorRT 引擎。

将推理数据转换为 TensorRT 引擎所需的格式。

调用 TensorRT 引擎的推理接口,执行模型推理。

从 TensorRT 引擎中获取推理结果,并进行后续处理。

无论是在哪种Nvidia设备和哪种编程语言,都遵循以上的主要步骤。其中需要关注的学习重点是:

  • 如何转换 TensorRT 引擎: 包括模型导出、解析器使用、优化配置、引擎构建和序列化等。
  • 如何使用 TensorRT 推理: 包括引擎加载、数据准备、推理执行和结果获取等。

当然其他步骤也有很大的学问,但是对于没有特殊需求的简单部署,重点还是上面两个环节。

4、基础环境配置

为了方便后续的学习,这里先学习一下环境的配置。TensorRT是nvidia针对nvidia显卡的模型部署框架。所以以下都是针对Nvidia显卡的配置。

其中安装nvidia驱动、CUDA和cuDNN在使用pytorch都有安装经验。这里主要介绍在Ubuntu20.04上为4070Ti配置环境的过程。

4.1 安装nvidia驱动

在ubuntu上安装nvidia驱动有一个坑,容易黑屏。根据我的经验发现是由于显示管理器冲突造成的。

ubuntu桌面实际上分为两部分:显示管理器(Display Manager)和桌面环境 (Desktops Environment)。
显示管理器主要提供用户登录服务,用户输入用户名和密码后进行验证,并启动后续桌面环境。而桌面环境就是一般理解的桌面程序。也就是用户验证和桌面环境实际上是分开的,两部分都有相应的常用方案:

常见的显示管理器:lightdm、gdm3、kdm、sddm
常见的桌面环境:GNOME、KDE、Xfce、LXDE
可以通过cat /etc/X11/default-display-manager查看当前显示管理器,可以通过echo $XDG_CURRENT_DESKTOP查看当前桌面环境。

网上有很多ubuntu安装nvidia驱动黑屏的经验,可以参考。我的解决办法是换一个显示管理器(为了以防万一可以先按照网上的试试,我的方式虽然成功了但是只测试过一次):

sudo apt install lightdm
sudo dpkg-reconfigure lightdm
# 弹出的选择框选择lightdm后重启

为了以防万一,也需要禁用nouveau驱动:

# 安装依赖
sudo apt-get install dkms build-essential linux-headers-generic# 打开conf文件
sudo vim /etc/modprobe.d/blacklist.conf#在末尾添加,然后保存退出编辑
blacklist nouveau
blacklist lbm-nouveau
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off# 禁用第三方驱动
echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf# 更新并重启
sudo update-initramfs -u
sudo reboot

在Nvidia驱动下载页面搜索自己设备的驱动程序,下载比较新的驱动。下载后依次执行:

# 修改权限
sudo chmod 775 NVIDIA-Linux-x86_64-470.82.00.run# 卸载之前的nvidia驱动
sudo apt-get remove nvidia* && sudo apt autoremove# 如果是基于run文件安装的程序,则需要找到run文件目录并执行命令完成卸载
# sudo bash XXX.run --uninstall# 执行安装程序,全部选择默认即可
sudo bash NVIDIA-Linux-x86_64-470.82.00.run

安装完毕并重启,可以正常启动不黑屏,并且nvidia-smi命令可用,代表完成安装

4.2 安装CUDA

CUDA版本可以参考nvidia-smi结果的右上角CUDA Version来确定,或者结合pytorch所需版本确定。

注意:在《cap2:1000分类的ResNet的TensorRT部署指南(python版):3、环境搭建》小节的图中可以看到TensorRT支持的CUDA版本有限,比如你想使用TensorRT8.6.1版本,那么11.0~11.8的CUDA版本是可用的。再结合Pytorch安装时(如Pytorch2.6.0支持CUDA11.8),我选择CUDA11.8版本既可以满足Pytorch的使用,又可以满足TensorRT部署的使用。

CUDA安装包从CUDA Toolkit Archive下载。根据自己的设备选择,但是最后选择runfile(local)。选择完毕后会给出下面的Installation Instructions,在终端执行,完成下载和安装。
在这里插入图片描述
安装时弹出,是否接受条约,输入accept接受。
在这里插入图片描述
这一步选择安装选项,如果安装上一步安装了nvidia驱动,则取消掉Driver选项。若选中会重新安装这个版本的驱动。然后选择最底下的Install开始安装。
在这里插入图片描述
安装成功后会显示:

===========
= Summary =
===========Driver:   Not Selected
Toolkit:  Installed in /usr/local/cuda-11.8/Please make sure that-   PATH includes /usr/local/cuda-11.8/bin-   LD_LIBRARY_PATH includes /usr/local/cuda-11.8/lib64, or, add /usr/local/cuda-11.8/lib64 to /etc/ld.so.conf and run ldconfig as rootTo uninstall the CUDA Toolkit, run cuda-uninstaller in /usr/local/cuda-11.8/bin
***WARNING: Incomplete installation! This installation did not install the CUDA Driver. A driver of version at least 520.00 is required for CUDA 11.8 functionality to work.
To install the driver using this installer, run the following command, replacing <CudaInstaller> with the name of this run file:sudo <CudaInstaller>.run --silent --driverLogfile is /var/log/cuda-installer.log

此时提醒我们将cuda加入环境变量,具体操作为:

# 打开.bashrc
vim ~/.bashrc# 在末端添加如下内容,注意cuda版本换成自己的
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH# 保存并退出编辑后,更新./bashrc
source ~/.bashrc

最后重启终端后,用命令查询版本nvcc -V
在这里插入图片描述
至此安装成功

4.3 安装cuDNN

首先去cuDNN Archive下载和cuda版本适配的Tar或者zip包,解压后:

# 假设你的cudnn文件夹名为cuDNNFolder# 1.解压下载的cuDNN的tar包.
tar -xvf cuDNNFolder.tar.xz# 2. 复制cuDNN文件(*代表符合该规则的所有文件)到cuda-11.8中去
sudo cp cuDNNFolder/include/cudnn*.h /usr/local/cuda-11.8/include 
sudo cp -P cuDNNFolder/lib/libcudnn* /usr/local/cuda-11.8/lib64 
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda-11.8/lib64/libcudnn*

在~/.bashrc文件中添加环境变量:

export LD_LIBRARY_PATH=/usr/local/cuda-11.8/targets/x86_64-linux/lib:$LD_LIBRARY_PATH

最后更新:source ~/.bashrc

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

保持角色一致性的绘本生成AI开源项目之Story-Adapter本地部署Windows篇

本文已首发&#xff1a;秋码记录 在人工智能领域&#xff0c;生成一致且连贯的故事绘本一直是一个具有挑战性的任务。Story-Adapter作为一个开源项目&#xff0c;旨在解决这一问题&#xff0c;为用户提供无需训练即可生成长篇故事视觉化的工具。本文将指导您如何在Windows系统…

[JVM篇]垃圾回收器

垃圾回收器 Serial Seral Old PartNew CMS(Concurrent Mark Sweep) Parallel Scavenge Parallel Old G1 ZGC

字符串(典型算法思想)—— OJ例题算法解析思路

目录 一、14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; 解法一&#xff1a;算法代码&#xff08;两两比较&#xff09; 1. 初始化公共前缀 2. 遍历字符串数组 3. 辅助函数 findCommon 4. 返回最终结果 总结 解法二&#xff1a;算法代码&#xff08;统一比较…

宝塔面板开始ssl后,使用域名访问不了后台管理

宝塔面板后台开启ssl访问后&#xff0c;用的证书是其他第三方颁发的证书 再使用 域名/xxx 的形式&#xff1a;https://域名:xxx/xxx 访问后台&#xff0c;结果出现如下&#xff0c;不管使用 http 还是 https 的路径访问都进不后台管理 这个时候可以使用 https://ip/xxx 的方式来…

java继承

1.继承的内存图 2.成员方法不能被继承 虚方法表满足&#xff1a;1.非static、2.非private、3.非final

通用知识库问答流程

总体流程&#xff0c;定义回调&#xff08;函数执行完把回答的内容填充到数据库&#xff09;&#xff0c;使用封装的fastchat获取调用的模型&#xff0c; 根据向量数据库名&#xff0c;获取向量数据库实例 这是ssl 长连接的一种标准写法&#xff0c;首先写一个 生成器函数&…

WPS/Office使用其他LLM大语言模型作为AI助手

前言 WPS也有内置的AI&#xff0c;叫灵犀&#xff0c;但只能说是属于“能用&#xff0c;有好过无”&#xff0c;所以我一直在找能否在WPS上用上其他的LLM大语言模型&#xff0c;比如目前最火的DeepSeek&#xff0c;结论是&#xff1a;安装OfficeAI助手&#xff0c;就能在WPS上用…

亲测有效!使用Ollama本地部署DeepSeekR1模型,指定目录安装并实现可视化聊天与接口调用

文章目录 一、引言二、准备工作&#xff08;Ollama 工具介绍与下载&#xff09;2.1 Ollama介绍2.2 Ollama安装 三、指定目录安装 DeepSeek R1四、Chatbox 可视化聊天搭建4.1 Chatbox下载安装4.2 关联 DeepSeek R1 与 Chatbox 的步骤 五、使用 Ollama 调用 DeepSeek 接口5.1 请求…

4.SpringSecurity在分布式环境下的使用

参考 来源于黑马程序员&#xff1a; 手把手教你精通新版SpringSecurity 分布式认证概念说明 分布式认证&#xff0c;即我们常说的单点登录&#xff0c;简称SSO&#xff0c;指的是在多应用系统的项目中&#xff0c;用户只需要登录一次&#xff0c;就可以访 问所有互相信任的应…

傅里叶公式推导(五)

文章目录 从离散到连续回顾第四章F(w) 从离散到连续 回顾第四章 在周期 T&#xff0c; 傅里叶变换公式 f ( t ) ( t T ) f ( t ) ∑ n − ∞ ∞ C n e i n Δ w t C n 1 T ∫ 0 T f ( t ) e − i n Δ w t d t 式1 f(t)(tT) \\ f(t) \sum_{n-\infty}^{\infty }C_ne^{i…

VS Code User和System版区别【推荐使用System版本】and VSCode+Keil协同开发之Keil Assistant

VS Code User和System版区别 Chapter1 VS Code User和System版区别1. 对于安装而言2. 结束语 Chapter2 VS Code 安装、配置教程及插件推荐插件&#xff1a; Chapter3 VSCodeKeil协同开发之Keil Assistant1. 效果展示2. Keil Assistant简介3. Keil Assistant功能特性4. 部署步骤…

Python----Python高级(网络编程:网络高级:多播和广播,C/S架构,TCP,UDP,网络编程)

一、多播和广播 1.1、多播 1.1.1、定义 多播&#xff08;Multicast&#xff09;也称为组播&#xff0c;是一种一对多的通信方式&#xff0c;将信息从单个源发送到 多个特定的接收者。这些接收者组成一个特定的多播组&#xff0c;只有加入该组的设备才会接 收和处理多播数据。…

网络工程师 (41)IP协议、IP地址表示方法

一、IP协议 IP协议&#xff0c;全称网际互连协议&#xff08;Internet Protocol&#xff09;&#xff0c;是TCP/IP体系中的网络层协议。 寻址&#xff1a;IP协议通过IP地址来唯一标识网络上的每一台设备&#xff0c;确保数据能够准确地发送到目标主机。路由选择&#xff1a;IP协…

Kubernetes控制平面组件:etcd高可用集群搭建

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…

Banana Pi OpenWRT One 官方路由器的第一印象

OpenWRT One是OpenWRT开源社区推出的首款官方开发板&#xff0c;与Banana Pi社区共同设计&#xff0c;由Banana Pi制造和发行。路由器采用蓝色铝合金外壳&#xff0c;质感极佳&#xff0c;视觉效果远超宣传图。整体设计简洁&#xff0c;呈长方形&#xff0c;虽然不是特别时尚&a…

【每日一题 | 2025】2.10 ~ 2.16

个人主页&#xff1a;Guiat 归属专栏&#xff1a;每日一题 文章目录 1. 【2.10】P8707 [蓝桥杯 2020 省 AB1] 走方格2. 【2.11】P8742 [蓝桥杯 2021 省 AB] 砝码称重3. 【2.12】P8786 [蓝桥杯 2022 省 B] 李白打酒加强版4. 【2.13】P8725 [蓝桥杯 2020 省 AB3] 画中漂流5. 【2.…

微信小程序配置3 配置sass

1. 在config。json文件里面的setting配置“sass” 2. 改你需要的页面后缀名为scss。 3.查看页面即可看到样式。

撕碎QT面具(1):Tab Widget转到某个Tab页

笔者未系统学过C语法&#xff0c;仅有Java基础&#xff0c;具体写法仿照于大模型以及其它博客。自我感觉&#xff0c;如果会一门对象语言&#xff0c;没必要先刻意学C&#xff0c;因为自己具有对象语言的基础&#xff0c;等需要用什么再学也不迟。毕竟不是专门学C去搞算法。 1…

恩智浦:将开发文档迁移到DITA/XML

摘要&#xff1a;本文是德国同行Parson公司写的一篇文章&#xff0c;描述芯片巨头恩智浦编写文档方法如何从MS Word和Adobe Frame Maker转向基于DITA的结构化写作和发布。英文原文地址&#xff1a;https://www.parson-europe.com/en/references/nxp - 1 - 项目目标 在开发产…

基于SpringBoot的医院药房管理系统【源码+答辩PPT++项目部署】高质量论文1-1.5W字

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…