TensorRT--学习笔记

news/2024/5/20 2:32:09/文章来源:https://blog.csdn.net/weixin_45647721/article/details/128060475
  1. 官方文档是最权威的
  2. TensorRT是可以在NVIDIA各种GPU硬件平台下运行的一个C++推理框架。利用Pytorch、TF或者其他框架训练好的模型,可以转化为TensorRT的格式,然后利用TensorRT推理引擎去运行我们这个模型,从而提升这个模型在英伟达GPU上运行的速度。速度提升的比例是比较可观的。
  3. 支持计算能力在5.0及以上的显卡(当然,这里的显卡可以是桌面级显卡也可以是嵌入版式显卡),常见的RTX30系列计算能力是8.6、RTX20系列是7.5、RTX10系列是6.1,如果想要使用TensorRT,首先要确认下显卡是否支持。
  4. TensorRT是由C++、CUDA、python三种语言编写成的一个库,其中核心代码为C++和CUDA,Python端作为前端与用户交互。当然,TensorRT也是支持C++前端的,如果我们追求高性能,C++前端调用TensorRT是必不可少的。
  5. TensorRT的加速效果取决于模型的类型和大小,也取决于所使用的显卡类型。
  6. 对于GPU来说,因为底层的硬件设计,更适合并行计算也更喜欢密集型计算。TensorRT所做的优化也是基于GPU进行优化,当然也是更喜欢那种一大块一大块的矩阵运算,尽量直通到底。因此对于通道数比较多的卷积层和反卷积层,优化力度是比较大的;如果是比较繁多复杂的各种细小op操作(例如reshape、gather、split等),那么TensorRT的优化力度就没有那么夸张了。
  7. 为了更充分利用GPU的优势,在设计模型的时候,可以更加偏向于模型的并行性,因为同样的计算量,“大而整”的GPU运算效率远超“小而碎”的运算。
  8. Tensor RT为提升在英伟达GPU上运行速度做出的提速有增益的优化:
    1. 算子融合(层与张量融合):简单来说就是通过融合一些计算op或者去掉一些多余op来减少数据流通次数以及显存的频繁使用来提速
    2. 量化:量化即IN8量化或者FP16以及TF32等不同于常规FP32精度的使用,这些精度可以显著提升模型执行速度并且不会保持原先模型的精度
    3. 内核自动调整:根据不同的显卡构架、SM数量、内核频率等(例如1080TI和2080TI),选择不同的优化策略以及计算方式,寻找最合适当前构架的计算方式
    4. 动态张量显存:显存的开辟和释放是比较耗时的,通过调整一些策略可以减少模型中这些操作的次数,从而可以减少模型运行的时间
    5. 多流执行:使用CUDA中的stream技术,最大化实现并行操作
  9. TensorRT官方支持Caffe、Tensorflow、Pytorch、ONNX等模型的转换(不过Caffe和Tensorflow的转换器Caffe-Parser和UFF-Parser已经有些落后了),也提供了转换模型的方式:
    1. 使用TF-TRT,将TensorRT集成在TensorFlow中
    2. 使用ONNX2TensorRT,即ONNX转换trt的工具
  10. 目前TensorRT对ONNX的支持最好,TensorRT-8最新版ONNX转换器又支持了更多的op操作。而深度学习框架中,TensorRT对Pytorch的支持更为友好
  11. TensorRT是硬件相关的:因为不同显卡(不同GPU),其核心数量、频率、架构、设计(还有价格..)都是不一样的,TensorRT需要对特定的硬件进行优化,不同硬件之间的优化是不能共享的。
  12. TensorRT支持的权重精度:支持FP32、FP16、INT8、TF32等,这几种类型都比较常用。
    1. FP32:单精度浮点型,深度学习中最常见的数据格式,训练推理都会用到;
    2. FP16:半精度浮点型,相比FP32占用内存减少一半,有相应的指令值,速度比FP32要快很多;
    3. TF32:第三代Tensor Core支持的一种数据类型,是一种截短的 Float32 数据格式,将FP32中23个尾数位截短为10bits,而指数位仍为8bits,总长度为19(=1+8 +10)。保持了与FP16同样的精度(尾数位都是 10 位),同时还保持了FP32的动态范围指数位都是8位);
    4. INT8:整型,相比FP16占用内存减小一半,有相应的指令集,模型量化后可以利用INT8进行加速。
    5. 以上精度展示:
  13. TensorRT的缺点
    1. 经过infer优化后的模型与特定GPU绑定,例如在1080TI上生成的模型在2080TI上无法使用;
    2. 高版本的TensorRT依赖于高版本的CUDA版本,而高版本的CUDA版本依赖于高版本的驱动,如果想要使用新版本的TensorRT,更换环境是不可避免的;
    3. TensorRT尽管好用,但推理优化infer还是闭源的,像深度学习炼丹一样,也像个黑盒子,使用起来会有些畏手畏脚,不能够完全掌控。所幸TensorRT提供了较为多的工具帮助调试。

 

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

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

相关文章

这可能是最权威、最全面的Go语言编码风格规范了!

每种编程语言除了固定的语法之外,都会有属于自己的地道的(idiomatic)写法。其实,自然语言也不例外,你想,你用心想想是不是这样。语言的设计者们希望开发人员都能编写统一风格的地道的代码,这样不仅代码可读性好&#x…

Packet Tracer 实验 - 排除多区域 OSPFv3 故障

地址分配表 设备 接口 IPv6 全局单播地址 IPv6 本地链路地址 默认网关 ISP GigabitEthernet0/0 2001:DB8:C1:1::1/64 FE80::C1 不适用 ASBR GigabitEthernet0/0 2001:DB8:C1:1::2/64 FE80::7 不适用 Serial0/0/0 2001:DB8:A8EA:F0A::1 FE80::7 不适用 S…

JSP学习日记

JSP简述 Java Sever Pages----->Java服务器界面 用于前后端结合 jsp为什么淘汰? 由于JSP的前后端耦合性极高,编写代码非常臃肿。前后端的代码放在一起,所以JSP可以看成是已经被淘汰的技术。 为什么还要学jsp? 由于一些公司…

基于遗传算法的自主式水下潜器路径规划问题附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

MFC编辑框控件属性和用法

目录 一、编辑框的属性 1.want return 2.Multiline 3.滚动条 4.添加完效果 二、初始化编辑框内容 三、复制与退出 四、edit control的值类型 五、思维拓展 一、编辑框的属性 默认情况下编辑框edit control 是可以横向无限输入的 1.want return 支持换行,…

自动化项目倍加福测距仪QSM WCS RS485 与西门子S7 200通信

1、程序流程图 2、WCS位置数据处理流程 第一步:设置S7-200的RS485的通讯波特率19.2kbps,通讯格式(8,1,E); 第二步:PLC向WCS发送请求码: A0A1为0,表示读码器地…

《人月神话》(The Mythical Man-Month)1 看清问题的本质:如果我们想解决问题,就必须试图先去理解它...

第一章 焦油坑(The Tar Pit)史前史中,没有比巨兽在焦油坑中垂死挣扎的场面更令人震撼的了。上帝见证着恐龙、猛犸象、剑齿虎在焦油中挣扎。它们挣扎得越是猛烈,焦油纠缠得越紧,没有任何猛兽足够强壮或具有足够的技巧&a…

【C++数据结构】程序性能分析

程序性能分析 2.1 什么是程序性能 程序性能:所谓程序性能(performance of a program)是指运行这个程序所需要的内存和时间的多少。 性能分析:在性能分析(performance analysis)时,采用分析方…

基于粒子群算法的配电网重构研究matlab程序

基于粒子群算法的配电网重构研究matlab程序 参考文献:基于改进灰狼算法的含分布式电源配电网重构研究 (本文未考虑分布式电源) 摘要:使用基本环矩阵编码的智能优化算法在处理配电网重构问题中,通常使用无序的解空间&a…

玩链子游戏

一 游戏描述 有一条链子,上面有 n 颗钻石,钻石编号为 1~n 。可以对该链子执行两种操作: ① CUT a b c (区间切割操作) 切下从第 a 颗钻石到第 b 颗钻石的链子,把它插在剩余链子的第 c 颗钻石…

Pytorch中CrossEntropyLoss()详解

一、损失函数 nn.CrossEntropyLoss() 交叉熵损失函数 nn.CrossEntropyLoss() ,结合了 nn.LogSoftmax() 和 nn.NLLLoss() 两个函数。 它在做分类(具体几类)训练的时候是非常有用的。 二. 什么是交叉熵 交叉熵主要是用来判定实际的输出与期望…

水泥行业工业互联网平台(CCPS)解决方案

水泥行业经过过去十年的发展和调整,基本实现了集团化。集团管控当前面临的主要问题是数字的分散化和碎片化,建设工业互联网是新时期加强集团管控的必经之路。 CCPS平台优势 1.融合SOA理念的架构平台和系统框架。具有跨平台、易维护、可集成、可扩展、分…

【图像处理】基于图像聚类的无监督图像排序问题(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

遥感技术及高分遥感影像在地震中的应用及高分二号获取

长期以来,地震预报监测、灾害调查、灾情信息获取主要依靠实地勘测手段,其获取的数据精度和置信度虽然较高,但存在工作量大、效率低、费用高和信息不直观等缺点。遥感技术手段可在一定程度上克服传统实地勘测手段的缺点,并具有其他…

BUUCTF Misc ningen1 小明的保险箱1 爱因斯坦1 easycap1

ningen1 下载文件 使用kali中的binwalk查看 binwalk xxx.jpg 分离文件 打开 压缩包加密了,爆破 爆破成功,密码:8368 得到flag flag{b025fc9ca797a67d2103bfbc407a6d5f} 小明的保险箱1 下载文件 用010 editor打开 可以看到图…

Springboot——Controller层开发、请求与响应、RESTful开发规范

目录 一、入门案例(小了解,没啥用) 1.1 创建Springboot工程 1.2 导入maven坐标 1.3 controller层代码 1.4 postman测试 二、 REST常用注解 2.1 Controller 2.2 RequestMapping(请求映射路径) 2.3 Response…

UE5笔记【十】第一个蓝图项目:bluePrint。

我们将上升的斜坡或者楼梯隐藏,往下移动,使其隐藏在地面以下。然后将方块也向下移动,漏出一点来。我们要模拟的场景是:当人移动到蓝色方块上时,踩在方块上,上升的楼梯升起来。然后人可以上楼。 将蓝色方块…

有限元的学习笔记

杂七杂八 有限元刚度矩阵推导 例题 ppt matlab 特征值特征向量计算 西工大题 轴对称问题有限元法 高斯-赛德尔(Gauss-Seidel)迭代法求解线性方程组 A(a1,a2) B(b1,b2) AB (a1,a2)(b1,b2) a1b2-a2b1 A(a1,a2,a3) B(b1,b2,b3) AB (a1,a2,a3)(b1,b2,b3…

PyQt5学习笔记--多线程处理、数据交互

目录 1--引入多线程的原因 2--PyQt多线程的基本知识 3--多线程登录程序的实例 4--参考 1--引入多线程的原因 ① 如果Qt只采用单线程任务的方式,当遇到数据处理慢的情形时,会出现GUI卡死的情况。 ② 使用下述例子展示单线程任务的缺陷: …

JMETER也会遇到加密难题,中文乱码也能一并处理

文章目录加密的接口测试导出jar包,放入jmeter的lib/ext扩展目录JMeter输出中文乱码总结加密的接口测试 不管是接口测试还是性能测试,在遇到接口有加密入参的时候,该怎么办? 毫无疑问,放弃自己实现的想法,除…