tensorRT推理相关及遇到的坑

news2024/10/6 22:21:29
  1. tebsorRT是什么

tensorRT是NVIDIA出的一个高性能深度学习推理(inference)优化器,可以为深度学习应用提供低延迟、高吞吐率的部署推理。TensorRT可用于对超大规模数据中心、嵌入式平台或自动驾驶平台进行推理加速。TensorRT现已能支持TensorFlow、Caffe、Mxnet、Pytorch等几乎所有的深度学习框架,将TensorRT和NVIDIA的GPU结合起来,能在几乎所有的框架中进行快速和高效的部署推理。

  1. 为什么能加速模型运行速度

TensorRT是英伟达针对自家平台做的加速包,TensorRT主要做了这么两件事情,来提升模型的运行速度。一个是支持INT8和FP16的计算。深度学习网络在训练时,通常使用 32 位或 16 位数据。TensorRT则在网络的推理时选用不这么高的精度,达到加速推断的目的。
第二个是TensorRT对于网络结构进行了重构,把一些能够合并的运算合并在了一起,针对GPU的特性做了优化。现在大多数深度学习框架是没有针对GPU做过性能优化的,而英伟达,GPU的生产者和搬运工,比如一些层在水平方向与深度方向都会做一定的合并,从而加速。

TensorRT具体加速效果决定于显卡和模型,例如在3080ti上resnet50从pytorch转TensorRT可以加速10倍,但是yolov5只能加速一倍多。
另外,TensorRT能做int8和fp16推理要看gpu是否支持,例如新3080ti支持int8和fp16推理,老tesla t4卡就只能做int8推理,更老的卡都不支持了。
TensorRT对网络推理的优化其实远不止CBR(conv、BN、Relu)合并这么简单,还会做Gemm、Winograd、cudnn kernel选择等一系列优化操作,然后遍历选取运行时间最短的cudnn api(打开日志verbose就能看到)。

  1. 实践中遇到的坑
    根据onnx模型生成trt的过程,如果遇到不支持的算子,有的时候报错反卷积和卷积操作不支持,就比较离谱了,这个时候通常是环境问题,以及onnx导出时的torch版本,我用8.4.2.4的tensorRT版本,torch1.9,op12导出onnx模型,可以将模型序列化为trt,但在反序列化推理的时候会报错Error Code 3: API 使用错误:
    在这里插入图片描述
    解决方法:
    用低版本1.5的torch及op为9的版本,导出onnx模型,推理报错问题解决。
    另外,tensorRT是不支持ATen操作的,模型网络结构只是一些矩阵的切片索引乘法,用低版本导出时就会包含ATen这个操作,奇怪,不知道为啥会有这个操作,见如下结构:
    在这里插入图片描述
    onnx包含ATen算子,tensorRT就会报错如下,然后运行卡住,异常退出:
    在这里插入图片描述
    最后将产生ATen这个操作的放在后处理,onnx去掉这部分,导出后,即可成功运行。
    注意:代码中声明的变量buffers, buffers的个数是输入加输出的总数,我的模型为1个输入,4个输出,所以声明如下:
void* buffers[5];

另外,模型推理时,如果没做预处理,送进推理的数据类型是U8C3时,推理也会异常退出,不会告诉你是哪里的问题,需要自己一步一步debug, 看各个步骤结果是否符合预期。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库隔离级别

1. 数据库隔离级别 1.1 事务 事务只是一个改变,是一些操作的集合;用专业的术语讲,他就是一个程序的执行单元;事务本身其实并不包含这4个特性,只是我们需要通过某些手段,尽可能的让这个执行单元满足这四个特…

Java学习路线(20)——多线程

一、线程(Thread) 1、概念: 是一个程序内部的一条执行路径 2、分类 单线程: 程序中只有一条执行路径多线程: 程序中有多条执行路径 二、多线程的创建 1、Thread的概念: Java通过java.lang.Thread类代表…

HTTP 教程2

HTTP 消息结构 HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。 一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端)&#xff…

什么是C/S架构?与B/S架构有什么区别?

1、 1.1、C/S架构的全称是Client/Server,即客户端/服务器体系结构,主要应用于局域网内。 1.2、B/S架构的全称为Browser/Server,即浏览器/服务器结构。百度安全验证https://baijiahao.baidu.com/s?id1742761249590653499&wfrspider&f…

微信小程序——CSS限制文字宽度和行数(溢出显示省略号)

手把手教你学会判断用户在做向上滑动还是向下滑动 知识回调(不懂就看这儿!)场景复现核心干货单行文本溢出显示省略号多行文本溢出显示省略号 知识回调(不懂就看这儿!) 知识专栏专栏链接微信小程序专栏http…

基于HTML+CSS+JavaScript的在线图书阅读网页设计

目 录 1.项目总体设计 2 1.1需求分析 2 1.2网站结构分析 3 1.2.1导航栏 3 1.2.2主体部分 3 1.3网络风格分析 3 1.4网站结构图 3 2.项目详细设计 4 2.1登录页面设计 4 2.2主页页面设计 5 2.3在线读书页面设计 6 3.项目总结 7 4.参考文献 7 此网页能够满足喜欢看书的书友&#x…

深度学习 - 53.Bert 简介与 Keras-Bert 常用示例

目录 一.引言 二.Bert 简介 1.Embedding Layer 2.Encoder layer 3.Pre-training 与 Fine-Tuning 三.Keras-Bert 常用 Demo 1.获取预训练模型 2.加载预训练模型 3.Fill Text 4.IsCorrelation 5.Get Embedding 6.完整代码 四. Fine-Tuning 五.Bert VS OpenAI GPT …

chatgpt赋能python:Python中等待一秒的语句:让你的程序暂停与等待

Python中等待一秒的语句:让你的程序暂停与等待 当编写Python程序时,经常需要添加暂停或延迟功能,以使程序能够在执行某些操作之前或之后等待一段时间。Python拥有一个内置的语句可以实现这种延迟:time.sleep()。 什么是 time.sl…

四信大气环保远程监测平台,实现大气网格化、精准化监测

近年来,随着国民经济快速发展,我国工业化、城镇化进程加快,随之造成的大气污染问题日益严峻,严重影响人们日常生活幸福指数与身体健康。为此,中共中央、国务院先后发布一系列文件,要求加强大气环境监测&…

价格限制与经济福利

价格控制 实行价格控制通常是政府相信市场价格对买方或卖方不公平两种价格控制:价格上限和价格下限 价格上限: 法定最高价格,任何人不得收取或付出高于此的价格。 价格下限: 法定最低价格,任何人不得收取或付出低于…

为什么亚马逊股价会在今年上涨?亚马逊股价2023年还会继续上涨吗?

来源:猛兽财经 作者:猛兽财经 为什么亚马逊的股价会上涨? 今年以来,亚马逊(AMZN)的股价已经上涨了20%以上,涨幅达到了23.3%。而同期标普500指数今年以来仅上涨了8.2%。 猛兽财经认为&#xff0c…

数据链路层:媒体接入控制

1.数据链路层:媒体接入控制 笔记来源: 湖科大教书匠:媒体接入控制的基本概念 湖科大教书匠:随机接入–CSMA/CD协议 湖科大教书匠:随机接入–CSMA/CA协议 声明:该学习笔记来自湖科大教书匠,笔记…

微信小程序——监听页面滑动(二)判断用户在做向上滑动还是向下滑动(onScrollPage scroll-view)

手把手教你学会判断用户在做向上滑动还是向下滑动 知识回调(不懂就看这儿!)场景复现核心干货onPageScroll结合scrollTop实现了解touch方法 知识回调(不懂就看这儿!) 知识专栏专栏链接微信小程序专栏https:…

1.WebGL与Shader介绍

webgl介绍 WebGL是一种用于在网页浏览器中创建交互式3D图形的技术。它基于OpenGL ES 2.0,这是一个广泛使用的嵌入式系统3D图形API。以下是webgl的发展史: WebGL允许开发人员使用JavaScript编写代码来控制GPU(图形处理单元)&…

字符集、字符编码格式检测和转码

目录 1 locale与字符集 1.1 locale 1.2 字符集 2 常见字符集 2.1 Native ANSI 字符集 2.1.1 ASCII 2.1.2 ISO-8859-1 2.1.3 GB2312,GBK,GB18030 2.2 Unicode 字符集 2.2.1 UCS 2.2.2 UTF - Unicode Transformation Format 2.2.3 UTF-8 2.2.4 B…

Spring Boot如何实现分布式消息队列

Spring Boot如何实现分布式消息队列 在分布式系统中,消息队列是非常重要的一部分,可以帮助开发人员实现异步处理、解耦系统、提高系统可靠性等。本文将介绍如何使用 Spring Boot 实现分布式消息队列。 1. 消息队列的设计 消息队列是一种存储消息的容器…

一键禁掉WIN10自动更新

工作了很久,没备份睡觉去了,一觉起来我东西呢? 正玩着游戏,激战正嗨的时候,蓝屏转圈圈开始更新。 无数次搜索怎么去除WIN10自动更新,每次按照网上的教程操作,结果都是无功而返。 下载了很多工…

Java开发 - 让你少走弯路的Redis主从实现单节点哨兵模式

前言 前一篇中,我们讲解了Redis主从的搭建方式,其实很简单呐有木有,都是配置,连句代码都没有,是不是感觉高估了Redis主从的搭建方式?哈哈,没关系,跟着博主,包你全会。今…

Postgre 提示could not determine data type of parameter $4

目录 场景: 现象: 版本: 分析: 解决方式: 场景: 今天遇到现场环境连接Postgre数据库,日志提示could not determine data type of parameter $4,通过日志复制出完整sql&#xff…

软件测试练手项目,可以写进简历里面的(银行:金融:商城:外卖等等)

目录 一、引言 二、测试任务 三、测试进度 四、测试资源 五、测试策略 六、测试完成标准 七、风险和约束 八、问题严重程度描述和响应时间规范 九、测试的主要角色和职责 ​有需要实战项目的评论区留言吧! 软件测试是使用人工或者自动的手段来运行或者测定…