(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分

教程地址:TensorRT 教程 | 基于 8.2.3 版本 | 第一部分

1 TenorRT 简介

1.1 各种官方文档

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第1张图片

链接
(TensorRT 文档)
(C++ API 文档)
(python API文档)
(TensorRT下载)
(本教程配套代码,以及教程外的更多样例)

1.2 TensorRT 做的工作

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第2张图片
TensorRT的表现:
(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第3张图片

1.3 TensorRT 基本的流程

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第4张图片

1.4 TensorRT三种的WorkFlow

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第5张图片
推荐使用Parser。

2(上) 使用TensorRT API (构建期)

API 搭建的基本流程及示例

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第6张图片
(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第7张图片
(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第8张图片
黄色部分是API搭建的特殊步骤,其它的是三种方法都会用到的环节。

Builder :模型搭建的入口,网络的TensorRT表示和可执行程序引擎,都是由该对象的成员方法生成。
BuilderConfig :辅助设置模型的一些参数,比如是否开启fp16模式,int8模式等。
NetWork:网络的主体,在另外两种WorkFlow中,会直接使用Parser来加载。
SerializedNetwork:可以用来生成可执行的推理引擎,或者将其序列化保存为文件,方便使用。

Engine:推理引擎,模型计算的核心,可以理解为可执行程序的代码段。
Context:用于计算的CPU上下文,可以类比CPU上进程的概念,是执行推理引擎的主体。
Buffer:数据的内存和显存相关,需要把数据从CPU端搬到GPU端,执行推理计算之后再从GPU端搬回CUU端。这些步骤涉及内存的申请,拷贝和释放,需要借助CUDA库或者CUDA-Python库来完成。
Execute:调用计算核心执行计算的具体过程。

2.1 Logger日志记录器

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第9张图片

在一次会话中,多个Builder可以共享同一个Logger。

2.2 Builder 引擎构建器(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第10张图片

原本在Builer中设置属性的操作,统一转入BuilderConfig中。

2.3 BuilderConfig 网络属性选项

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第11张图片

2.4 NetWork 网络具体构造

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第12张图片

使用Parser导入onnx模型的时候,NetWork会自动填好。
可以在构建期,通过NetWork来设置和构建网络的信息。比如网络层数,每层的名称和属性,每层的输入输出张量的名称和属性。

补充

    1. 张量的 Batch维度 显 / 隐 式的包含在张量的形状中
      (官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第13张图片
  • 2 . 一些模式
    (官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第14张图片
    1. 向NetWork中添加Layer的方法(NetWork特有)
      (官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第15张图片
    1. NetWork中打印所有层和张量的信息
      (官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第16张图片
    1. NetWork的核心部分
      (官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第17张图片
    1. NetWork的Layer支持
      (官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第18张图片

2.5 TensorRT支持的两种低精度模式

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第19张图片
PTQ不需要对训练过程进行改动,QAT需要在训练的时候对模型进行加工。
(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第20张图片

2(下) 使用TensorRT API (运行期)

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第21张图片

2.6 生成Engine

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第22张图片

Engine相当于网络计算的可执行程序,该对象还提供了很多有用的成员和方法。

补充 :Binding

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第23张图片

2.7 Context推理进程

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第24张图片

问题:用于推理计算的输入输出设备怎么准备

  • 了解:CUDA异构计算
    (官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第25张图片

2.8 准备Buffer

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第26张图片

问题:如何构建一次引擎,反复使用

需要环境统一(硬件环境+CUDA+cuDNN+TensorRT)
(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第27张图片

3 使用Parser

  • ONNX 和 ONNX Runtime
    (官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第28张图片
    (官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第29张图片
    PyTorch 示例:
    (官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第30张图片
    TensorFlow 示例:
    (官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第31张图片

4 使用原训练框架内的TensorRT接口

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第32张图片

补充: TensorRT开发环境

(官方教程笔记)TensorRT 教程 | 基于 8.2.3 版本 | 第一部分_第33张图片

你可能感兴趣的:(模型的量化部署,TensorRT,人工智能)