TensorRT基础知识

github:https://github.com/NVIDIA/TensorRT

官网快速入门链接:Quick Start Guide :: NVIDIA Deep Learning TensorRT Documentation

引言:

TensorRT 是 NVIDIA 推出的一个高性能深度学习推理库,专门用于优化和加速已经训练好的深度学习模型,特别是在 NVIDIA GPU 上。它能够极大地提高深度学习推理的速度,同时降低内存和计算资源的消耗。TensorRT 主要的功能包括:

1. 模型优化

TensorRT 提供多种优化技术,能够提升模型推理的效率,主要包括:

  • 层融合(Layer Fusion):将多个操作融合为一个操作,从而减少内存带宽需求和提高计算效率。例如,卷积层和激活函数可以合并为一个单一操作。
  • 精度降低(Precision Calibration):TensorRT 支持降低模型的数值精度(例如,从 FP32 精度降到 FP16 或 INT8),可以大幅提高推理速度并减少内存占用,同时对精度的影响通常很小。
  • 张量重排(Tensor Reordering):通过重新安排计算图中的张量数据顺序,减少内存访问的延迟。
  • 内存管理(Memory Management):优化内存分配和数据传输,使得内存利用更加高效。

2. 支持多种精度

TensorRT 支持多种精度的计算,适应不同的硬件需求。常见的精度模式包括:

  • FP32:单精度浮点,通常在较为通用的硬件上使用,提供最高的精度。
  • FP16:半精度浮点,在支持 FP16 的硬件(如 NVIDIA V100 和 A100 GPU)上,可以提高推理速度并减少内存占用。
  • INT8:整数8位精度,适用于需要更高推理速度并且对精度要求较低的场景。INT8 计算通常需要额外的量化步骤,但在许多深度学习任务中,精度损失可以忽略不计。

3. 推理加速

TensorRT 能够显著加速推理过程,特别是在 NVIDIA 的 A100、V100、T4 等 GPUs 上。通过硬件加速的优化,TensorRT 可以提供比传统框架(如 TensorFlow、PyTorch)直接运行模型更高的推理吞吐量和更低的延迟。

4. 多平台支持

TensorRT 支持多种 NVIDIA GPU,包括数据中心的服务器级 GPU(如 A100、V100、T4)以及边缘设备(如 Jetson 系列),使得它在不同硬件环境下都能高效运行。

5. TensorRT Builder API

TensorRT 提供了强大的 API,使开发者可以灵活地定制推理管道。例如:

  • 动态批处理:TensorRT 允许开发者根据输入数据的实际需求调整批次大小,从而在保持性能的同时提高吞吐量。
  • 模型优化器:可以将各种深度学习框架(如 TensorFlow、PyTorch、ONNX 等)训练的模型转换为 TensorRT 支持的格式,并应用优化。

6. 跨框架支持

TensorRT 支持从多种深度学习框架(例如 TensorFlow、Keras、PyTorch、Caffe 等)导入模型,主要通过 ONNX(Open Neural Network Exchange)格式进行模型转换。TensorRT 提供了以下几种方式来加载和优化模型:

  • ONNX 支持:TensorRT 能够直接导入 ONNX 格式的模型,进行加速和优化。
  • TensorFlow/Keras 支持:通过 TensorFlow 或 Keras 导出的模型,可以轻松地使用 TensorRT 进行加速。
  • 自定义操作支持:对于不支持的操作,TensorRT 也允许用户实现自己的自定义层,并进行优化。

7. 实时推理支持

TensorRT 提供了非常低的推理延迟,适合实时应用场景。例如,它被广泛应用于自动驾驶、机器人、视频流分析等需要快速响应的领域

8. 深度学习推理服务器(TensorRT Inference Server)

TensorRT 还提供了推理服务器解决方案,允许用户将模型部署为服务。这个服务器支持多种框架和模型格式,可以通过 HTTP、gRPC 等协议提供推理服务,具有高吞吐量和低延迟的特性,适用于生产环境中的在线推理任务。

9. 优化网络层

TensorRT 还提供了一些高级优化,包括对常见网络层(如卷积、全连接层、批归一化层等)的特殊加速方法。这些优化能显著提高推理的计算效率,尤其是在大规模模型中。

10. 集成与易用性

TensorRT 支持与现有的 AI 框架和工具链集成,提供了 Python 和 C++ API,且支持在不同的操作系统平台(包括 Linux 和 Windows)上运行。通过集成 TensorRT,开发者能够方便地在已有的深度学习框架基础上提升性能。

11. 部署到嵌入式设备

TensorRT 还可以被用于嵌入式系统,例如 Jetson 系列和 NVIDIA Drive 平台,适合需要低功耗、低延迟且高吞吐量的边缘计算应用。

总结:

TensorRT 作为一个高效的深度学习推理优化工具,能够帮助开发者显著提高模型在 NVIDIA GPU 上的推理性能。其主要功能包括模型优化、精度调整、多平台支持和高效的推理加速,适用于从云端数据中心到边缘设备等各种应用场景。

 正文

一、准备知识

NVIDIA ® TensorRT™ 是一款 SDK,用于优化经过训练的深度学习模型以实现高性能推理。 TensorRT 包含深度学习推理优化器和执行运行时。

在您选择的框架中训练深度学习模型后,TensorRT 使您能够以更高的吞吐量和更低的延迟运行它。

NVIDIA  TensorRT是一个用于高性能深度学习的推理框架。它可以与TensorFlow、PyTorch和MXNet等训练框架相辅相成地工作。

使用TensorRT来部署深度学习模型以实现对模型的加速,从而提高深度学习模型运行的效率。

TensorRT是英伟达官方针对自己的硬件设备面向AI工作者推出的一种部署方案。TensorRT可以对网络进行压缩、优化以及运行时部署,并且没有框架的开销。当然这个加速程度很大程度上取决于你的显卡算力还有模型结构复杂程度,也有可能因为没有优化的地方,从而没有多大的提升。

TensorRT使用流程


TensorRT使用流程如下图所示,分为两个阶段:预处理阶段和推理阶段。其部署大致流程如下:1.导出网络定义以及相关权重;2.解析网络定义以及相关权重;3.根据显卡算子构造出最优执行计划;4.将执行计划序列化存储;5.反序列化执行计划;6.进行推理

可以从步骤3可以得知,tensorrt实际上是和你的硬件绑定的,所以在部署过程中,如果你的硬件(显卡)和软件(驱动、cudatoolkit、cudnn)发生了改变,那么这一步开始就要重新走一遍了。

二、导出onnx模型


2.1 简述


这一步主要是为了将深度学习模型的结构和参数导出来。考虑到实际部署环境的精简性,我这里还是建议大家在使用中先将深度学习模型导出ONNX文件,然后拿着ONNX文件去部署就可以了。

原因很简单,因为ONNX不像Pytorch和TensorFlow那样,还需要安装这些框架运行的依赖包(比如 conda install pytorch,不然你没办法用pytorch的代码),TensorRT可以直接从ONNX文件中读取出网络定义和权重信息。

除此以外,ONNX更像是“通用语言”,ONNX的出现本身就是为了描述网络结构和相关权重,除此以外,还有专门的工具可以对ONNX文件进行解析,查看相关结构,例如网站:https://lutzroeder.github.io/netron/

为pytorch模型为例:(导出时需要输入数据、model和输出名这三个主要参数)
 # 构造模型实例model = HRNet()# 反序列化权重参数model.load_state_dict(torch.load(self.weight_path),strict=False)model.eval()# 定义输入名称,list结构,可能有多个输入input_names = ['input']# 定义输出名称,list结构,可能有多个输出output_names = ['output']# 构造输入用以验证onnx模型的正确性input = torch.rand(1, 3, self.resolution[0], self.resolution[1])# 导出torch.onnx.export(model, input, output_path,export_params=True,opset_version=11,do_constant_folding=True,input_names=input_names,output_names=output_names)

参数介绍:

model为pytorch模型实例
input为测试输入数据(形状必须要和模型输入一致,但是数值可以是随机的)
output_path为导出路径,xxx.onnx
export_params为是否导出参数权重,必然是True
opset_version=11 发行版本,11就可以了
do_constant_folding是否对常量进行折叠,True就可以了
input_names是模型输入的名称,list类型,因为模型可能有多个输入
output_names同上,只不过这是针对输出的

简单点的pytoch代码
  1. 从以下位置导入 ResNet-50 模型 torchvision 。这将加载带有预训练权重的 ResNet-50 副本。
    import torchvision.models as modelsresnet50 = models.resnet50(pretrained=True, progress=False).eval())
  2. 从 PyTorch 保存 ONNX 文件。
    注意:我们需要一批数据来从 PyTorch 保存 ONNX 文件。我们将使用虚拟批次。
    import torchBATCH_SIZE = 32
    dummy_input=torch.randn(BATCH_SIZE, 3, 224, 224)
  3.  保存 ONNX 文件。
    import torch.onnx
    torch.onnx.export(resnet50, dummy_input, "resnet50_pytorch.onnx", verbose=False))

                        
原文链接:https://blog.csdn.net/JianguoChow/article/details/122684310

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

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

相关文章

jenkins提交gitee后自动部署

jenkins中安装gitee插件 Gitee Plugin​​​​​​ 配置gitee WebHook 生成giteeHook密码 去gitee中配置webHook 输入jenkins中的url和生成的密码 当我们再提交后就可以自动部署 gitee官方配置

软件测试面试八股文(超详细整理)

请你说一说测试用例的边界 参考回答: 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界。 常见的边界值 1)对16-bit 的整数而言 32…

【金融风控】特征评估与筛选详解

内容介绍 掌握单特征分析的衡量指标 知道 IV,PSI等指标含义 知道多特征筛选的常用方法 掌握Boruta,VIF,RFE,L1等特征筛选的使用方法 【理解】单特征分析 什么是好特征 从几个角度衡量:覆盖度,区分度,相关性,稳定…

链游系统定制化开发:引领游戏产业的新时代

在数字革命的浪潮中,链游(区块链游戏)作为一种新兴游戏形式,正重新定义游戏产业的发展方向。链游将区块链技术与传统游戏结合,使游戏体验更加公平透明,并赋予玩家真正的资产所有权。这一领域不仅为玩家带来…

2024 年 8 个最佳 API 设计工具图文介绍

8 个最佳 API 设计工具推荐,包括 Apifox、Postman、Swagger、Insomnia、Stoplight、Hoppscotch、RapidAPI和Paw。 详细介绍:2024 年 8 个最佳 API 设计工具推荐

知识库管理系统:企业数字化转型的加速器

在数字化转型的大潮中,知识库管理系统(KBMS)已成为企业提升效率和创新能力的关键工具。本文将探讨知识库管理系统的定义、企业建立知识库的必要性,以及如何快速搭建企业知识库。 知识库管理系统是什么? 知识库管理系统…

24/11/12 算法笔记<强化学习> Policy Gradient策略梯度

gradient的核心就是每次更新前要重新收集,每个阶段的actor是不一样的. 策略梯度算法的核心思想: 策略表示:首先,策略梯度方法需要一个策略,该策略能够根据当前的状态选择一个动作。这个策略通常由一个参数化的函数表示…

物理设备命名规则(Linux网络服务器 15)

Linux系统中的一切都是文件,硬件设备也不例外。既然都是文件,就必须有文件名称。系统内核中udev设备管理器会自动把硬件名称规范化起来,目的是让用户通过设备文件的名字可以大致了解设备属性以及分区信息。这对于陌生的设备来说特别方便。另外…

SciPy:Python 科学计算工具包的全面教程

SciPy:Python 科学计算工具包的全面教程 引言 在数据科学和科学计算的领域,Python 已经成为一种流行的编程语言。作为 Python 的核心库之一,SciPy 提供了高效的数值计算功能,是科学计算、工程和数学应用中不可或缺的工具。本文将…

SAP_MM_SD_PP_FICO_视频课程几乎免费送

朋友们,都已经是2024年了,SAP中国区都已经被合并到樱花国的亚太区了,SAP上海研发中心也陆续撤离中*,竟然还有朋友花上万RMB学习SAP,钱花了可以在挣,主要是那个视频课程一个模块下来就得上百个小时&#xff…

如何在Puppeteer中实现表单自动填写与提交:问卷调查

一、介绍 在现代市场研究中,问卷调查是一种重要的工具。企业通过在线问卷调查了解消费者对产品或服务的需求、偏好和满意度,从而为产品开发、市场营销和服务优化提供指导。然而,对于爬虫技术专家来说,批量自动化地填写和提交问卷…

深度学习——权重初始化、评估指标、梯度消失和梯度爆炸

文章目录 🌺深度学习面试八股汇总🌺权重初始化零初始化 (Zero Initialization)随机初始化 (Random Initialization)Xavier 初始化(Glorot 初始化)He 初始化正交初始化(Orthogonal Initialization)预训练模型…

实验一:自建Docker注册中心

基于容器安装运行Registry Docker Registry主要负责镜像仓库的管理 创建并启动一个运行Docker Registry: docker run -d -p 5000:5000 --restartalways --name myregistry -v /opt/data/registry:/var/lib/registry registry -v:将主机的本地/opt/data/registry目…

同三维T610UDP-4K60 4K60 DP或HDMI或手机信号采集卡

1路DP/HDMI/TYPE-C(手机/平板等)视频信号输入1路MIC1路LINE OUT,带1路HDMI环出,USB免驱,分辨率4K60,可采集3路信号中其中1路,按钮切换,可采集带TYPE-C接口的各品牌手机/平板/笔记本电脑等 同三维…

ReactPress技术揭秘

ReactPress Github项目地址:https://github.com/fecommunity/reactpress 欢迎Star。 一、引言 ReactPress是一个基于React构建的开源发布平台,它不仅可以帮助用户在支持React和MySQL数据库的服务器上快速搭建自己的博客或网站,还能作为一个…

Java 网络编程(一)—— UDP数据报套接字编程

概念 在网络编程中主要的对象有两个:客户端和服务器。客户端是提供请求的,归用户使用,发送的请求会被服务器接收,服务器根据请求做出响应,然后再将响应的数据包返回给客户端。 作为程序员,我们主要关心应…

【MySQL】数据库表连接简明解释

未经许可,不得转载。 文章目录 表连接表连接的类型内连接与外连接结合 WHERE 条件交叉连接(cross join)表连接 在关系型数据库中,建模是数据组织的核心难点。数据库建模需要将数据关系理清,构建出适合存储和查询的结构。 所谓“模型”包括实体(entity) 和关系(relati…

SpringBoot(八)使用AES库对字符串进行加密解密

博客的文章详情页面传递参数是使用AES加密过得,如下图所示: 这个AES加密是通用的加密方式,使用同一套算法,前端和后端都可以对加密之后的字符串进行加密解密操作。 目前线上正在使用的是前端javascript进行加密操作,将…

拦截器实现http请求访问本地图片

本文来记录下拦截器实现http请求访问本地图片 文章目录 概述代码实现本文小结 概述 如下图,本机(服务器)存储的图片想要在浏览器上通过Url地址访问: 浏览器直接访问 代码实现 烂机器实现文件真实地址和物理地址之间的映射 Slf4j Configuration public cl…

gpu-V100显卡相关知识

一、定义 RuntimeError: FlashAttention only supports Ampere GPUs or newer.torch attention注意力接口学习V100 架构是什么? 二、实现 RuntimeError: FlashAttention only supports Ampere GPUs or newer. 报错原因分析: GPU机器配置低,…