4.1.tensorRT基础(1)-概述

news2024/11/26 12:28:13

目录

    • 前言
    • 1. tensorRT基础概述
    • 2. tensorRT补充知识
      • 2.1 什么是tensorRT?
      • 2.2 tensorRT特性
      • 2.3 tensorRT工作流程
      • 2.4 常见方案
      • 2.5 tensorRT库文件
    • 总结

前言

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

本次课程学习 tensorRT 基础-概述

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

在这里插入图片描述

1. tensorRT基础概述

关于 tensorRT 你需要知道:

  1. TensorRT 的核心在于对模型算子的优化(合并算子、利用 GPU 特性选择特定核函数等策略),通过 tensorRT 能够在 NVIDIA 系列 GPU 上获得最好的性能
  2. 因此 tensorRT 的模型,需要在目标 GPU 上实际运行的方式选择最优算法和配置
  3. 也因此 tensorRT 生成的模型只能在特定条件下运行(编译的 trt 版本、cuda 版本、编译时的 GPU 型号)
  4. 主要知识点,是模型结构定义方式、编译过程配置、推理过程实现、插件实现、onnx 理解

参考文章:https://www.cnblogs.com/qccz123456/p/11767858.html

参考视频:https://www.bilibili.com/video/BV1Xw411f7FW/

2. tensorRT补充知识

2.1 什么是tensorRT?

tensorRT 是一个 SDK(Software Development Kit) 即软件开发工具包,用于优化经过训练的深度学习模型以实现高性能推理

2.2 tensorRT特性

tensorRT 为什么能加速推理过程,它是如何优化的?主要体现在以下几个方面:

  • 算子融合 Conv+Bias+ReLU -> CBR
  • 量化
    • INT8 或 FP16 以及 TF32
    • 存储优势、计算优势、通信优势
  • 内核自动调整
    • 根据不同显卡架构、SM数量、内核频率等选择不同的优化策略以及计算方式,寻找最适合当前架构的计算方式
    • Kernel可以更加不同大小的batch和问题的复杂度去选择最合适的算法,TensorRT预先写了很多GPU实现,有一个自动选择的过程
  • 动态张量线程WorkSpace
  • 多流执行

下图展示了 tensorRT 的内部优化,它主要通过算子合并,降低数据扭转来加速推理过程

在这里插入图片描述

图2-1 tensorRT内部优化

2.3 tensorRT工作流程

tensorRT 是如何构建模型呢?主要通过两种方式

1. 通过 TRT API 一层层搭建模型

  • tensorRT 提供基于 C++ 接口构建模型的方式,见下图,参考自TensorRT/samples/sampleMNISTAPI/sampleMNISTAPI.cpp

  • tensorRT 也提供基于 Python 接口构建模型的方式,见下图,参考自TensorRT/samples/python/engine_refit_mnist/sample.py

在这里插入图片描述

图2-2 tensorRT的C++接口

在这里插入图片描述

图2-3 tensorRT的Python接口

2. NVIDIA 官方也提供另外三种途径实现更加方便的封装,如下图所示

  • 直接调用接口非常繁琐。出现问题难以调试,权重描述也比较麻烦,因此 也提供了更高级的方式

  • UFF 格式的文件,通过 libnvparsers.so 可以调用 TRT API 去解析 UFF 文件从而构建模型(tensorflow采用的方案)

  • ONNX 格式的文件,通过 libnvonnxparser.so 可以调用 TRT API 去解析 ONNX 文件从而构建模型(pytorch采用的方案)

  • Caffe 格式的文件,通过 libnvcaffe_parser.so 可以调用 TRT API 去解析 Caffe 文件从而构建模型(使用较少)

在这里插入图片描述

图2-4 tensorRT的高级工作流程

2.4 常见方案

基于 tensorRT 的发布,又有人在这之上做了工作,https://github.com/wang-xinyu/tensorrtx,该 repo 为每个模型写硬代码,并已写好了大量的常见模型代码

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

图2-5 常用方案的工作流程

常用方案的模型构建的方式采用的硬代码,灵活度差。新模型需要自己一个 layer 一个 layer 的写 C++ 代码构建,不具有通用性,移植性差;而且硬代码方式过于灵活,需要控制的细节太多,部署时也无法查看网络结构进行分析和排查

本课程主要学习以 onnx 路线的模型编译、推理和部署,原因主要有

若使用 onnx 则导出或者修改好的 onnx 模型,可以轻易的移植到其它引擎上,例如 ncnn、rknn,这一点硬代码无法做到。并且用于排查错误,修改调整时也非常方便

本课程的工作流程如下图所示:

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

图2-6 本课程采用的工作流程

2.5 tensorRT库文件

最后我们再来了解下 tensorRT 的库文件

在这里插入图片描述

图2-7 tensorRT库文件

总结

本次课程为 tensorRT 基础的概述,主要讲解了 tensorRT 的特性,它是 NVIDIA 推出的一个软件工具包,用来优化经过训练的深度学习模型以实现高性能推理,值得注意的是,由于 tensorRT 的模型,需要在目标 GPU 上以实际运行的方式选择最优算法和配置,也因此 tensorRT 生成的模型是与其设备强绑定的,与其编译时的 trt 版本、cuda 版本、GPU 型号相关联。

同时我们还了解了 tensorRT 的工作流程,主要分为两种,一种是通过 C++ 或者 Python 接口来写硬代码,这种方法过于灵活,不方便移植,同时部署错误很难排查。另外一种是通过更高级的封装,通过一些库文件来解析 caffe、uff 或者 onnx 模型,这种方法易于修改调整排查错误,也方便移植,因此本次课程采用第二种方式,

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

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

相关文章

springboot+ElasticSearch+Logstash+Kibana实现日志采集ELK

ElasticSearchLogstashKibana日志管理 一、什么是ELK? ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。一般情况下我们可以把日志保存在日志文件当中,也可以把日志存入数据库当中。但随着业务量的增加&#xf…

2.多线程-初阶(上)

文章目录 1. 认识线程(Thread)1.1 概念1.2 第一个多线程程序1.3 创建线程1.3.1方法1 继承 Thread 类1.3.2方法2 实现 Runnable 接口 1.4 多线程的优势-增加运行速度1.5 PCB、PID、进程和线程之间的关系 2. Thread(/θred/) 类及常见方法2.1 Thread 的常见…

《Maven实战》读后感

目录 一、一些思考1、为什么平时编写的Java项目也叫做Maven项目?2、平常的Java项目目录为什么长这样,可以改变目录结构吗?3、对于Maven项目来说,Maven能帮我们做什么?4、为什么一定需要Maven私服,不要行不行…

easyrecovery数据恢复软件2023免费版下载

easyrecovery数据恢复软件2023免费版下载是一款操作简单、功能强大数据恢复软件,通过easyrecovery可以从硬盘、光盘、U盘、数码相机、手机等各种设备中恢复被删除或丢失的文件、图片、音频、视频等数据文件。 EasyRecovery数据恢复软件是一款功能强大的数据恢复软件&#xff0c…

卡尔曼滤波的理解

看了B站up主DR_CAN讲的卡尔曼滤波(链接)。up讲的非常好,强烈推荐,看完终于明白了卡尔曼滤波的奥秘。下面是我对其中内容的注解,或者说自己的理解。大部分推导省略了,但保留了算法的思想脉络。 引入 首先看…

Verilog基础之十七、锁相环PLL

目录 一、前言 1.1 背景 1.2 PLL结构 二、工程设计 2.1 PLL IP核配置 2.2 设计代码 2.3 测试代码 2.4 仿真结果 2.5 常见问题 一、前言 1.1 背景 若将一个FPGA工程看做一个人体,时钟的重要性丝毫不亚于心脏对于人体的重要性,时钟的每一个周期对…

支付、购物车、搜索、文件上传、登录、还款、订单测试怎么做?

支付功能怎么测试:1、从功能方面考虑: 1)、正常完成支付的流程; 2)、支付中断后继续支付的流程; 3)、支付中断后结束支付的流程; 4)、单订单支付的流程; 5&am…

【无标题】(前沿)

Java编程语言 目前为止最流行的 是Java编程语言 但是编程与语言有很多中php。phyone。 c c. c# java html. css javascript vue() 说到计算机有很多同学会说,就有很多人会说35的节点,我问一下同学们现在哪一个行业,是没有35岁的节点&#x…

7.5 SpringBoot 拦截器Interceptor实战 统一角色权限校验

文章目录 前言一、定义注解annotation二、拦截角色注解1. 在拦截器哪里拦截?2. 如何拦截角色注解?3. 角色如何读取?4. 最后做角色校验 三、应用:给管理员操作接口加注解四、PostMan测试最后 前言 在【7.1】管理员图书录入和修改API&#xf…

c语言指针进阶(二)

目录 引言 函数指针数组 指向函数指针数组的指针 回调函数 引言 大家好,我是c语言boom成家宝,今天博主带来的依然是指针的进阶讲解。上一篇博客博主有介绍指针,数组指针,指针数组,以及函数指针的概念以及应用&…

【Azure】Azure成本管理:规划、监控、计算和优化成本 [文末送书]

开篇先来一个不是总结的总结:平衡成本与性能始终是一个重大挑战。(此处省略各种场景的解释) 文章目录 前言一、Azure 成本管理工具1.1 什么是成本管理1.2 成本管理的主要功能 二、Azure 中可能影响成本的因素2.1 影响成本的因素2.1.1 资源类型…

leetcode|math|9.172.69.50.

9. Palindrome Number to_string 就行 172. Factorial Trailing Zeroes 不能直接乘起来,会overflow!! 166! 就是要找166乘到1一共有几个5。5,10,15,25...都算。166/5就是算一共有几个5。但是25其实贡献了…

【周末闲谈】感受AI时代魅力,创意无界限

i 个人主页:【😊个人主页】 系列专栏:【❤️周末闲谈】 文章目录 前言人工智能的应用领域问题求解逻辑推理与定理证明自然语言处理智能信息检索技术专家系统 人工智能的三大短板展望未来从专用智能向通用智能发展从人工智能向人机混合智能发展…

Jdk 版本升级

Jdk 版本升级(多版本配置) 一、配置多版本 首先如果系统第一次安装JDK 1.登录oracle官网Java Downloads | Oracle下载,此教程以Jdk1.8为例,一键下一步即可安装成功。 2.配置环境变量 然后在系统path路径中添加: %JAVA_HOME%…

单片机第一季:零基础10——串口通信和RS485

目录 1,串口通讯基础 1.1,同步和异步 1.2,并行和串行 1.3,单工、半双工与全双工通信 1.4,通信速率 2,单片机串口通讯 2.1,接口标准 2.2,通讯协议 2.3,串口…

834. 树中距离之和

给定一个无向、连通的树。树中有 n 个标记为 0…n-1 的节点以及 n-1 条边 。 给定整数 n 和数组 edges , edges[i] [ai, bi]表示树中的节点 ai 和 bi 之间有一条边。 返回长度为 n 的数组 answer ,其中 answer[i] 是树中第 i 个节点与所有其他节点之间…

opencv环境搭建

1. 上网(你懂的,没有网装不了) 2. 参考视频:https://www.bilibili.com/video/BV1R44y157hW/?spm_id_from333.880.my_history.page.click&vd_source377867a48dd3d812b9d6521c8fc76de2 3. 这里我选择的是4.8的版本。 4. cmak…

charles中下载web证书

1.点击help,选中ssl Proxying ,点击Install Charles Root Certificate 2:点击”安装证书”按钮 3:点击”下一步”按钮 4:选中”将所有的证书都放入下列存储”,点击”游览”按钮 5:选中”受新任的根证书颁发机构”&…

day37-框架

0目录 框架 1.框架介绍 2. SSM三大框架简介 3.Mybatis 4.拓展 1.框架介绍 1.1 为什么使用框架? (1)框架效率高,成本低 (2)框架是别人写好的构建,我们只需学会如何使用它(可维护性…

C++(12):动态内存

除了自动和static对象外,C还支持动态分配对象。动态分配的对象的生存期与它们在哪里创建是无关的,只有当显式地被释放时,这些对象才会销毁。 静态内存 用来保存局部static对象、类static数据成员以及定义在任何函数之外的变量。 栈内存 用来…