cap1:TensorRT是什么?

文章目录

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

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

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

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

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

1、什么是 TensorRT?

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所需版本确定。

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 root

To 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 --driver

Logfile 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

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

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

相关文章

JVM——堆的回收:引用计数发和可达性分析法、五种对象引用

目录 引用计数法和可达性分析法 引用计数法&#xff1a; 可达性分析算法&#xff1a; 五种对象引用 软引用&#xff1a; 弱引用&#xff1a; 引用计数法和可达性分析法 引用计数法&#xff1a; 引用计数法会为每个对象维护一个引用计数器&#xff0c;当对象被引用时加1&…

云计算实训室解决方案(2025年最新版)

一、中高职及本科院校在云计算专业建设中面临的挑战 随着大数据、信息安全、人工智能等新兴信息技术产业的快速发展&#xff0c;相关领域人才需求激增&#xff0c;许多本科及职业院校纷纷开设云计算及相关专业方向。 然而&#xff0c;大多数院校在专业建设过程中面临以下困难&…

C语言第18节:自定义类型——联合和枚举

1. 联合体 C语言中的联合体&#xff08;Union&#xff09;是一种数据结构&#xff0c;它允许在同一内存位置存储不同类型的数据。不同于结构体&#xff08;struct&#xff09;&#xff0c;结构体的成员各自占有独立的内存空间&#xff0c;而联合体的所有成员共享同一块内存区域…

深度学习框架探秘|PyTorch:AI 开发的灵动画笔

前一篇文章我们学习了深度学习框架——TensorFlow&#xff08;深度学习框架探秘&#xff5c;TensorFlow&#xff1a;AI 世界的万能钥匙&#xff09;。在人工智能领域&#xff0c;还有一个深度学习框架——PyTorch&#xff0c;以其独特的魅力吸引着众多开发者和研究者。它就像一…

springcloud集成gateway

本篇文章只介绍gateway模块的搭建步骤&#xff0c;并无gateway详细介绍 gateway详解请查看&#xff1a;SpringCloudGateway官方文档详解 前置处理 父模块中已指定版本 不知道如何选择版本看这篇&#xff1a; 手把手教你梳理springcloud与springboot与springcloudalibaba的版本…

计算机网络(1)基础篇

目录 1.TCP/IP 网络模型 2.键入网址--->网页显示 2.1 生成HTTP数据包 2.2 DNS服务器进行域名与IP转换 2.3 建立TCP连接 2.4 生成IP头部和MAC头部 2.5 网卡、交换机、路由器 3 Linux系统收发网络包 1.TCP/IP 网络模型 首先&#xff0c;为什么要有 TCP/IP 网络模型&a…

PyInstaller在Linux环境下的打包艺术

PyInstaller是一款强大的工具&#xff0c;能够将Python应用程序及其所有依赖项打包成独立的可执行文件&#xff0c;支持Windows、macOS和Linux等多个平台。在Linux环境下&#xff0c;PyInstaller打包的可执行文件具有独特的特点和优势。本文将详细介绍PyInstaller在Linux环境下…

寒假2.12

题解 web&#xff1a;XYCTF2024-牢牢记住&#xff0c;逝者为大 打开环境&#xff0c;是源代码 看到了熟悉的preg_match函数 代码解析&#xff1a; 输入的cmd长度不能超过13&#xff0c;可以使用GET[‘cmd’]躲避长度限制 使用正则表达式过滤的一系列关键字 遍历get数组&…

如何构建有效的人工智能代理

目录 什么是 AI 代理? 何时应使用 AI 代理? 人工智能代理的构建模块 构建 AI 代理的常用方法 1. 提示链接(分步说明) 2.路由(将任务发送到正确的地方) 3.并行处理(同时做多件事) 4. 协调者和工作者 AI(团队合作) 5. 评估器和优化器(修复错误) 如何让人工…

华为云+硅基流动使用Chatbox接入DeepSeek-R1满血版671B

华为云硅基流动使用Chatbox接入DeepSeek-R1满血版671B 硅基流动 1.1 注册登录 1.2 实名认证 1.3 创建API密钥 1.4 客户端工具 OllamaChatboxCherry StudioAnythingLLM 资源包下载&#xff1a; AI聊天本地客户端 接入Chatbox客户端 点击设置 选择SiliconFloW API 粘贴1.3创…

mysql读写分离与proxysql的结合

上一篇文章介绍了mysql如何设置成主从复制模式&#xff0c;而主从复制的目的&#xff0c;是为了读写分离。 读写分离&#xff0c;拿spring boot项目来说&#xff0c;可以有2种方式&#xff1a; 1&#xff09;设置2个数据源&#xff0c;读和写分开使用 2&#xff09;使用中间件…

吊舱响应波段详解!

一、响应波段技术 可见光波段&#xff1a;通过高分辨率相机捕捉地面或空中目标的清晰图像&#xff0c;适用于白天或光照条件良好的环境下进行观测。 红外波段&#xff1a;利用红外辐射探测目标的温度分布&#xff0c;实现夜间或恶劣天气条件下的隐蔽目标发现。红外波段通常分…

AI驱动的直播带货电商APP开发:个性化推荐、智能剪辑与互动玩法

时下&#xff0c;个性化推荐、智能剪辑、互动玩法等AI技术的应用&#xff0c;使得直播电商平台能够精准触达用户、提升观看体验、提高转化率。对于希望在直播电商领域占据一席之地的企业来说&#xff0c;开发一款AI驱动的直播带货APP&#xff0c;已经成为提升竞争力的关键。 一…

ComfyUI流程图生图原理详解

一、引言 ComfyUI 是一款功能强大的工具&#xff0c;在图像生成等领域有着广泛应用。本文补充一点ComfyUI 的安装与配置过程遇到的问题&#xff0c;并深入剖析图生图过程及相关参数&#xff0c;帮助读者快速入门并深入理解其原理。 二、ComfyUI 的安装与配置中遇到的问题 &a…

本地部署DeepSeek集成VSCode创建自己的AI助手

文章目录 安装Ollama和CodeGPT安装Ollama安装CodeGPT 下载并配置DeepSeek模型下载聊天模型&#xff08;deepseek-r1:1.5b&#xff09;下载自动补全模型&#xff08;deepseek-coder:1.3b&#xff09; 使用DeepSeek进行编程辅助配置CodeGPT使用DeepSeek模型开始使用AI助手 ✍️相…

硬件学习笔记--40 电磁兼容试验-4 快速瞬变脉冲群试验介绍

目录 电磁兼容试验-快速瞬变脉冲群试验介绍 1.试验目的 2.试验方法 3.判定依据及意义 电磁兼容试验-快速瞬变脉冲群试验介绍 驻留时间是在规定频率下影响量施加的持续时间。被试设备&#xff08;EUT&#xff09;在经受扫频频带的电磁影响量或电磁干扰的情况下&#xff0c;在…

c++ 多线程知识汇总

一、std::thread std::thread 是 C11 引入的标准库中的线程类&#xff0c;用于创建和管理线程 1. 带参数的构造函数 template <class F, class... Args> std::thread::thread(F&& f, Args&&... args);F&& f&#xff1a;线程要执行的函数&…

XSS 常用标签及绕过姿势总结

XSS 常用标签及绕过姿势总结 一、xss 常见标签语句 0x01. 标签 <a href"javascript:alert(1)">test</a> <a href"x" onfocus"alert(xss);" autofocus"">xss</a> <a href"x" onclickeval(&quo…

基于SSM的农产品供销小程序+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、农户功能模块&#xff1a;用户管理、农户管理、产品分类管理、农产品管理、咨询管理、订单管理、收藏管理、购物车、充值、下单等技术选型&#xff1a;SSM&#xff0c;Vue&#xff08;后端管理web&#xff09;&#xff0c;uniapp等测试…

未授权访问成因与防御

1、未授权访问根因 2、检查步骤 3、修复建议 1、更新组件至安全版本 2、加强访问策略限制&#xff0c;限制用户访问 3、定期进行漏扫和渗透测试发现威胁及时修复 4、漏洞概览 Elasticsearch未授权访问漏洞 Hadoop未授权访问漏洞 Jenkins未授权访问 MongoDB未授权访问 Zoo…