教程地址:TensorRT 教程 | 基于 8.2.3 版本 | 第一部分
1 TenorRT 简介
1.1 各种官方文档
链接
(TensorRT 文档)
(C++ API 文档)
(python API文档)
(TensorRT下载)
(本教程配套代码,以及教程外的更多样例)
1.2 TensorRT 做的工作
TensorRT的表现:
1.3 TensorRT 基本的流程
1.4 TensorRT三种的WorkFlow
推荐使用Parser。
2(上) 使用TensorRT API (构建期)
API 搭建的基本流程及示例
黄色部分是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日志记录器
在一次会话中,多个Builder可以共享同一个Logger。
2.2 Builder 引擎构建器
原本在Builer中设置属性的操作,统一转入BuilderConfig中。
2.3 BuilderConfig 网络属性选项
2.4 NetWork 网络具体构造
使用Parser导入onnx模型的时候,NetWork会自动填好。
可以在构建期,通过NetWork来设置和构建网络的信息。比如网络层数,每层的名称和属性,每层的输入输出张量的名称和属性。
补充
-
- 张量的 Batch维度 显 / 隐 式的包含在张量的形状中
- 张量的 Batch维度 显 / 隐 式的包含在张量的形状中
- 2 . 一些模式
-
- 向NetWork中添加Layer的方法(NetWork特有)
- 向NetWork中添加Layer的方法(NetWork特有)
-
- NetWork中打印所有层和张量的信息
- NetWork中打印所有层和张量的信息
-
- NetWork的核心部分
- NetWork的核心部分
-
- NetWork的Layer支持
- NetWork的Layer支持
2.5 TensorRT支持的两种低精度模式
PTQ不需要对训练过程进行改动,QAT需要在训练的时候对模型进行加工。
2(下) 使用TensorRT API (运行期)
2.6 生成Engine
Engine相当于网络计算的可执行程序,该对象还提供了很多有用的成员和方法。
补充 :Binding
2.7 Context推理进程
问题:用于推理计算的输入输出设备怎么准备
- 了解:CUDA异构计算
2.8 准备Buffer
问题:如何构建一次引擎,反复使用
需要环境统一(硬件环境+CUDA+cuDNN+TensorRT)
3 使用Parser
- ONNX 和 ONNX Runtime
PyTorch 示例:
TensorFlow 示例: