4.1.tensorRT基础(1)-概述

前言

杜老师推出的 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 一层层搭建模型

在这里插入图片描述

图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 模型,这种方法易于修改调整排查错误,也方便移植,因此本次课程采用第二种方式,

猜你喜欢

转载自blog.csdn.net/qq_40672115/article/details/131751396