5.3.tensorRT基础(2)-从下载onnx-tensorrt到配置好并运行起来

news2024/11/27 4:02:50

目录

    • 前言
    • 1. ONNX解析器更新
    • 总结

前言

杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记。

本次课程学习 tensorRT 基础-从下载 onnx-tensorrt 到配置好并运行起来

课程大纲可看下面的思维导图

在这里插入图片描述

1. ONNX解析器更新

这节课我们来学习 onnx 解析器更新

这里我们以实际操作来更新下 onnx 解析器,从网上下载并使用,通过本节课程使得自己可以根据需求来更新它

onnx 解析器地址:https://github.com/onnx/onnx-tensorrt

tensorRT 是跟 onnx 解析器挂钩的,因此要版本匹配,先看下 tensorRT 是什么版本。我们可以进入到 tensorRT 的安装目录的 include 文件夹下有一个 NvInferVersion.h,将其打印出来,如下图所示:

在这里插入图片描述

图1-1 TRT版本查看

从上图可知博主的 tensorRT 版本为 8.4.1,所以我们选择 onnx-tensorrt-8.4-GA 版本,它有一个 third_party 第三方库,打开其实就是 onnx,就是一个套娃,我们知道 onnx-tensorrt 依赖自 onnx 就行了

我们往下翻可以看到其安装要求,如下所示,看自己对应的软件符不符合要求即可

在这里插入图片描述

图1-2 onnx-tensorrt-8.4GA安装依赖

因此我们把它下载下来后就去使用它,解压过后删除一些不必要的文件,执行 make run 后出现如下错误:

在这里插入图片描述

图1-3 onnx_pb.h报错

那是否我们必须去下载 onnx 第三方库呢?其实不然,我们可以去 官网 查看它具体内容,它其实就是在包含 onnx-ml.pb.h,那这个文件大家应该还有印象,它就是 onnx-ml.proto 所生成的东西

那 onnx-ml.proto 和 onnx-ml.proto3 两者我们是去选择前者,proto3 问题一般多,那我们把 onnx-ml.proto 它的代码整个复制下来,那注意这里有个坑,经验之举,在文件最后我们应该屏蔽 option optimize_for = LITE_RUNTIME; 否则开启后它不再依赖 protobuf 而是依赖 protobuf-lite.so

接下来就要利用 protoc 这个工具去编译 onnx-ml.proto,如下图所示:

在这里插入图片描述

图1-4 onnx-ml.proto编译

编译成功了,我们把编译好的文件移动到 src/onnx 文件夹下,然后新建一个 onnx_pb.h 其内容如下:

#ifndef ONNX_PB_H
#define ONNX_PB_H

#include "onnx-ml.pb.h"


#endif // ONNX_PB_H

由于 Makefile 里面编译的 cpp,它不认识 cc 代码,因此要将 onnx-ml.pb.cc 修改为 onnx-ml.pb.cpp,再执行下 make run

在这里插入图片描述

图1-5 stl_backports.h报错

我们来看下 common/stl_bakcports.h 官网 内容,它没有一些特别的依赖,那我们其实并不太需要它,因此我们把它屏蔽掉,再执行下 make run

在这里插入图片描述

图1-6 onnx-tensorrt报错

找不到 onnx 解析器,因为我们文件夹名字换了,不再是 onnx-tensorrt 而是 onnx-tensorrt-8.4-GA,修改下再执行 make run,出现如下错误:

在这里插入图片描述

图1-7 namespace报错

这个时候就来了一个非常经典的错误,叫作 ONNX_NAMESPACE,它想在 ONNX_NAMESPACE 下面使用 TensorProto_DataType,那我们在 onnx-ml.pb.h 中可以发现 TensorProto_DataType 它属于的命名空间是 onnx 而不是 ONNX_NAMESPACE,那我们就可以将其替换 onnx,那为什么会知道要替换呢,其实是 onnx-tensorrt 的 CMakeLists.txt 也会帮我们做这么一件事情,那这里我们其实是手动实现的

在这里插入图片描述

图1-8 命名空间替换

注意替换的时候选择的是 src 底下的文件,替换完成后再执行下 make run,正常来说就会成功,但是博主依旧遇到了问题如下:

在这里插入图片描述

图1-9 make_unique问题

博主将 ImporterContex.hpp 中 112 行报错的内容替换成如下内容:

public:
    ImporterContext(nvinfer1::INetworkDefinition* network, nvinfer1::ILogger* logger)
        : mNetwork(network)
        , mLogger(logger)
        // , mErrorWrapper(onnx::make_unique<ErrorRecorderWrapper>(mNetwork, logger))
        , mErrorWrapper(nullptr)

再次执行 make run 之后依旧存在问题如下:

在这里插入图片描述

图1-10 auto问题

根据错误提示博主将 Makefile 文件中的 cpp 标准修改为了 c++14,再执行 make run

在这里插入图片描述
在这里插入图片描述

图1-11 成功编译

终于成功了,不容易吖😂

那其实还有一个 onnx-operator-ml.proto 文件,它其实是一个扩展算子,看起来也没有必要,

总结

本节课程带我们从零开始,从下载 onnx-tensorrt 代码到配置运行起来,整个过程就是在不断的报错不断的解决。我感觉这种解决问题的方式更加值得去学习,同时从源码编译可以更加满足我们定制化的需求,毕竟你想怎么修改就怎么修改,你想写插件直接在源码中按照要求写好编译就行了,那下节课我们就会讲解关于插件的编写。

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

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

相关文章

js基础算法05--查找重复的字符

开始之前 了解什么是hash table &#xff08;哈希表&#xff09; for 循环中break 和 return的区别 哈希表的方式解 第一种方式&#xff0c;用哈希表。循环俩次&#xff0c;第一次储存当前字符出现的频率&#xff0c;没出现一次&#xff0c;对象key的评率value就加一。然后第…

vue3+Luckysheet实现表格的在线预览编辑(electron可用)

前言&#xff1a; 整理中 官方资料&#xff1a; 1、github 项目地址https://github.com/oy-paddy/luckysheet-vue-importAndExport/tree/master/https://github.com/oy-paddy/luckysheet-vue-importAndExport/tree/master/ 2、xlsx vue3 json数据导出excel_vue3导出excel_羊…

Zookeeper的基本概念以及安装

Zookeeper简介 Zookeeper是一个分布式的(多台机器同时干一件事情),开源的分布式应用程序协调服务,是Google公司Chubby产品,是Hadoop和Base重要的组件,.它是一个分布式应用程序提供一致性的服务的软件,提供的功能包括:配置服务,域名服务,分布式同步,组服务等 Zookeeper目…

Python生成中文词云图

词云&#xff08;word cloud&#xff09;&#xff0c;也称标签云&#xff0c;主要用于展示文本数据。把每个单词按照其重要性进行展示&#xff0c;主要通过字体和颜色进行区分。Python提供了wordcloud库&#xff0c;可以很容易实现词云图。“词云”看起来比较美观易理解&#x…

Python学习(十六)柱状图

zdaPython学习&#xff08;十四&#xff09;折线图开发_yikuaidabin的博客-CSDN博客 案例数据资源 ↑ """演示基础柱状图的开发 """ from pyecharts.charts import Bar from pyecharts.options import LabelOpts # 使用Bar构建基础柱状图 bar …

视频对比工具(基于python+ffmpeg+airtest实现视频抽帧比较工具)

VideoDiff&#xff1a;基于ffmpeg&#xff0c;实现视频抽帧比较工具 使用场景&#xff1a;在视频渲染模块发生迭代&#xff0c;快速回归测试其产出的视频是否存在问题&#xff0c;从而节省人工回归成本 源码地址&#xff1a;https://github.com/jiangliuer32/VideoDiff 原理图…

什么是分布式操作系统?我们为什么需要分布式操作系统?

分布式操作系统是一种特殊的操作系统&#xff0c;本质上属于多机操作系统&#xff0c;是传统单机操作系统的发展和延伸。它是将一个计算机系统划分为多个独立的计算单元(或者也可称为节点)&#xff0c;这些节点被部署到每台计算机上&#xff0c;然后被网络连接起来&#xff0c;…

【计算机网络 01】说在前面 信息服务 因特网 ISP RFC技术文档 边缘与核心 交换方式 定义与分类 网络性能指标 计算机网络体系结构 章节小结

第一章--概述 说在前面1.1 计算机网络 信息时代作用1.2 因特网概述1.3 三种交换方式1.4 计算机网络 定义与分类1.5 计算机网络的性能指标1.6 计算机网络体系结构1 常见的计算机网络体系结构2 计算机网络体系结构分层的必要性3 计算机网络体系结构分层思想举例4 计算机网络体系结…

红包雨架构的设计汇总

一 微服务总体架构 1.1 微服务总体架构 1.2 红包雨的流程 1.3 发红包的内容 1.3.1 概述流程 1.发红包-》抢红包。 1.所有人签到的金额之和等于红包总金额。2.每个人至少抢到一分钱&#xff1b;3.保证所有人抢到金额的几率相等。 1.3.2 拆分红包通用流程算法 其中拆红包最…

详解分类指标Precision,Recall,F1-Score

文章目录 1. Precision&#xff08;精度&#xff09;2. Recall&#xff08;召回率&#xff09;3. F1-Score4. Accuracy&#xff08;准确率&#xff09;5. P-R 曲线6. TPR、FPR6.1 TPR&#xff08;真正率&#xff09;6.2 FPR&#xff08;假正率&#xff09; 7. ROC曲线8. AUC曲线…

【SpringBoot项目】Tomcat started on port(s): 8080 (http) with context path ‘‘

运行程序后出现下面的错误&#xff0c;并且在postman中无法获取到数据 在idea中的错误显示的如下 本人的原因是忘记在Controller中忘记写&#xff01;&#xff01;&#xff01;&#xff01; RestController 如果你不是以下原因可以参考下面的文章&#xff1a; Initializing S…

SSTI无过滤

解题步骤 打开环境后就只有一段文字&#xff0c;说密码错误&#xff0c;来回看了源码&#xff0c;抓包都没有什么提示&#xff0c;并且也没有有任何的传参显示 最后想来想去&#xff0c;终于灵机一动&#xff0c;这段文字就是在提示我们&#xff0c;可传的参数为password 所以…

[JAVAee]多线程入门介绍及其创建与基础知识

目录 1.进程 2.线程 3.进程与线程的区别与联系 4.为什么会有线程? 5.创建第一个多线程程序 方法一:继承Theard类 方法二:实现Runnable接口 方法三:匿名内部类创建Thread子类对象 方法四:匿名内部类创建 Runnable 子类对象 方法五(推荐方法):lambda 表达式创建 Runna…

03、怎么理解TPS、QPS、RT、吞吐量?

通常我们都从两个层面定义性能场景的需求指标&#xff1a;业务指标和技术指标。这两个层面需要有映射关系&#xff0c;技术指标不能脱离业务指标。一旦脱离&#xff0c;你会发现你能回答”一个系统在多少响应时间之下能支持多少 TPS“这样的问题&#xff0c;但是回答不了”业务…

开放的安全影响:Elastic AI Assistant

作者&#xff1a;Dain Perkins 在过去的几年里&#xff0c;我们一直在讨论开放和透明的安全方法的好处&#xff0c;即向公众提供对我们的检测和预防功能、代码、文档等详细信息的访问&#xff0c;这将增强我们能够为客户提供的安全功能。 在本博客中&#xff0c;我们将探讨我们…

PHP8知识详解:PHP8的新特性

PHP 8是PHP编程语言的一个主要版本&#xff0c;在2020年11月26日发布。它引入了许多新特性和改进&#xff0c;包括以下一些主要特性&#xff1a; 1. JIT 编译器&#xff1a;PHP 8引入了名为Tracing JIT的即时&#xff08;Just-In-Time&#xff09;编译器。JIT可以将PHP脚本中频…

软件测试——白盒测试

目录 1.什么是白盒测试 1.1 白盒测试优缺点 2.白盒测试方法 2.1 静态 2.2 动态 2.2.1 语句覆盖 2.2.2 判断覆盖 2.2.3 条件覆盖 2.2.4 判定条件覆盖 2.2.5 条件组合覆盖 2.2.6 路径覆盖 2.2.7 基本路径测试法(最常使用) 1.什么是白盒测试 白盒测试也称结构测试&…

解决Vue报错unable to resolve dependency tree

目录 一、问题 1.1 问题描述 二、解决 2.1 解决 一、问题 1.1 问题描述 今天在新创建一个项目&#xff0c;也就是在空文件夹里执行Vue脚手架的创建代码&#xff0c;如下 vue create 项目名称 没想到创建报错了&#xff1a;ERESOLVE unable to resolve dependency tree&…

现实生活中机器学习的具体示例(Machine Learning 研习之二)

笔者站点&#xff1a;秋码记录 机器学习在现实中的示例 通过上一篇的讲解&#xff0c;我们多多少少对机器学习&#xff08;Machine Learning&#xff09;有了些许了解&#xff0c;同时也对机器学习&#xff08;Machine Learning&#xff09;一词不再那么抗拒了。 那么&#…

图像处理之傅里叶变换

1、傅里叶变换的定义 傅里叶变换是在以时间为自变量的“信号”与频率为自变量的“频谱”函数之间的某域研究中较复杂的问题在频域中变得简单起来&#xff0c;从而简化其分析过程&#xff1b;另一方面使信号与系统的物理本质在频域中能更好地被揭示出来。当自变量“时间”或“频…