TensorRT 基础笔记

简介: TensorRT 基础笔记

一,概述

TensorRT 是 NVIDIA 官方推出的基于 CUDAcudnn 的高性能深度学习推理加速引擎,能够使深度学习模型在 GPU 上进行低延迟、高吞吐量的部署。采用 C++ 开发,并提供了 C++Python 的 API 接口,支持 TensorFlow、Pytorch、Caffe、Mxnet 等深度学习框架,其中 MxnetPytorch 的支持需要先转换为中间模型 ONNX 格式。截止到 2021.4.21 日, TensorRT 最新版本为 v7.2.3.4

深度学习领域延迟和吞吐量的一般解释:

  • 延迟 (Latency): 人和机器做决策或采取行动时都需要反应时间。延迟是指提出请求与收到反应之间经过的时间。大部分人性化软件系统(不只是 AI 系统),延迟都是以毫秒来计量的。
  • 吞吐量 (Throughput): 在给定创建或部署的深度学习网络规模的情况下,可以传递多少推断结果。简单理解就是在一个时间单元(如:一秒)内网络能处理的最大输入样例数

二,TensorRT 工作流程

在描述 TensorRT 的优化原理之前,需要先了解 TensorRT 的工作流程。首先输入一个训练好的 FP32 模型文件,并通过 parser 等方式输入到 TensorRT 中做解析,解析完成后 engin 会进行计算图优化(优化原理在下一章)。得到优化好的 engine 可以序列化到内存(buffer)或文件(file),读的时候需要反序列化,将其变成 engine以供使用。然后在执行的时候创建 context,主要是分配预先的资源,enginecontext 就可以做推理(Inference)。

网络异常,图片无法展示
|

三,TensorRT 的优化原理

TensorRT 的优化主要有以下几点:

  1. 算子融合(网络层合并):我们知道 GPU 上跑的函数叫 KernelTensorRT 是存在 Kernel 调用的,频繁的 Kernel 调用会带来性能开销,主要体现在:数据流图的调度开销,GPU内核函数的启动开销,以及内核函数之间的数据传输开销。大多数网络中存在连续的卷积 conv 层、偏置 bias 层和 激活 relu 层,这三层需要调用三次 cuDNN 对应的 API,但实际上这三个算子是可以进行融合(合并)的,合并成一个 CBR 结构。同时目前的网络一方面越来越深,另一方面越来越宽,可能并行做若干个相同大小的卷积,这些卷积计算其实也是可以合并到一起来做的(横向融合)。比如 GoogLeNet 网络,把结构相同,但是权值不同的层合并成一个更宽的层。
  2. concat 层的消除。对于 channel 维度的 concat 层,TensorRT 通过非拷贝方式将层输出定向到正确的内存地址来消除 concat 层,从而减少内存访存次数。
  3. Kernel 可以根据不同 batch size 大小和问题的复杂度,去自动选择最合适的算法,TensorRT 预先写了很多 GPU 实现,有一个自动选择的过程(没找到资料理解)。其问题包括:怎么调用 CUDA 核心、怎么分配、每个 block 里面分配多少个线程、每个 grid 里面有多少个 block
  4. FP32->FP16、INT8、INT4:低精度量化,模型体积更小、内存占用和延迟更低等。
  5. 不同的硬件如 P4 卡还是 V100 卡甚至是嵌入式设备的卡,TensorRT 都会做对应的优化,得到优化后的 engine

四,参考资料

  1. 内核融合:GPU深度学习的“加速神器”
  2. 高性能深度学习支持引擎实战——TensorRT
  3. 《NVIDIA TensorRT 以及实战记录》PPT
  4. www.tiriasresearch.com/wp-content/…


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
4月前
|
PyTorch 算法框架/工具
Jetson学习笔记(四):pth(torch模型文件)转trt(tensorrt引擎文件)实操
关于如何使用torch2trt工具将PyTorch模型转换为TensorRT引擎文件的实操指南。
202 1
Jetson学习笔记(四):pth(torch模型文件)转trt(tensorrt引擎文件)实操
|
机器学习/深度学习 并行计算 自动驾驶
手把手教学!TensorRT部署实战:YOLOv5的ONNX模型部署
手把手教学!TensorRT部署实战:YOLOv5的ONNX模型部署
手把手教学!TensorRT部署实战:YOLOv5的ONNX模型部署
|
机器学习/深度学习 数据可视化 PyTorch
|
存储 PyTorch 算法框架/工具
PyTorch学习笔记(四):PyTorch基础实战
通过一个基础实战案例,结合前面所涉及的PyTorch入门知识。本次任务是对10个类别的“时装”图像进行分类,使用FashionMNIST数据集(fashion-mnist/data/fashion at master · zalandoresearch/fashion-mnist · GitHub
198 0
|
机器学习/深度学习
|
机器学习/深度学习 TensorFlow 算法框架/工具
简明 TensorFlow 教程 — 第二部分:混合学习
本文讲的是简明 TensorFlow 教程 — 第二部分:混合学习,在本文中,我们将演示一个宽 N 深度网络,它使用广泛的线性模型与前馈网络同时训练,以证明它比一些传统的机器学习技术能提供精度更高的预测结果。下面我们将使用混合学习方法预测泰坦尼克号乘客的生存概率。
1291 0
|
并行计算 TensorFlow 算法框架/工具
《TensorFlow技术解析与实战》——2.4 从源代码安装
本节书摘来自异步社区《TensorFlow技术解析与实战》一书中的第2章,第2.4节,作者李嘉璇,更多章节内容可以访问云栖社区“异步社区”公众号查看 第2章 TensorFlow环境的准备 2.4 从源代码安装 从源代码编译安装,需要使用Bazel编译工具。
2548 0
|
机器学习/深度学习 缓存 并行计算
TensorRT实战-基本框架
上篇博文4_TensorRT概况主要讲了Nvida TensorRT的编程API,本篇主要通过一个简单、完整的例子来讲解如何将一个Caffe模型(GoogleNet模型)通过TensorRT进行推理加速。
526 1

热门文章

最新文章