一,概述

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. https://www.tiriasresearch.com/wp-content/uploads/2018/05/TIRIAS-Research-NVIDIA-PLASTER-Deep-Learning-Framework.pdf

TensorRT基础笔记的更多相关文章

  1. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 |  被围观 25,969 views+ 1.Anno ...

  2. php代码审计基础笔记

    出处: 九零SEC连接:http://forum.90sec.org/forum.php?mod=viewthread&tid=8059 --------------------------- ...

  3. MYSQL基础笔记(六)- 数据类型一

    数据类型(列类型) 所谓数据烈性,就是对数据进行统一的分类.从系统角度出发时为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中讲数据类型分成三大类:1.数值类型,2.字符串类型和时间日期 ...

  4. MYSQL基础笔记(五)- 练习作业:站点统计练习

    作业:站点统计 1.将用户的访问信息记录到文件中,独占一行,记录IP地址 <?php //站点统计 header('Content-type:text/html;charset=utf-8'); ...

  5. MYSQL基础笔记(四)-数据基本操作

    数据操作 新增数据:两种方案. 1.方案一,给全表字段插入数据,不需要指定字段列表,要求数据的值出现的顺序必须与表中设计的字段出现的顺序一致.凡是非数值数据,到需要使用引号(建议使用单引号)包裹. i ...

  6. MYSQL基础笔记(三)-表操作基础

    数据表的操作 表与字段是密不可分的. 新增数据表 Create table [if not exists] 表名( 字段名 数据类型, 字段名 数据类型, 字段n 数据类型 --最后一行不需要加逗号 ...

  7. MYSQL基础笔记(二)-SQL基本操作

    SQL基本操作 基本操作:CRUD,增删改查 将SQL的基本操作根据操作对象进行分类: 1.库操作 2.表操作 3.数据操作 库操作: 对数据库的增删改查 新增数据库: 基本语法: Create da ...

  8. MYSQL基础笔记(一)

    关系型数据库概念: 1.什么是关系型数据库? 关系型数据库:是一种建立在关系模型(数学模型)上的数据库 关系模型:一种所谓建立在关系上的模型. 关系模型包含三个方面: 1.数据结构:数据存储的问题,二 ...

  9. JavaScript基础笔记二

    一.函数返回值1.什么是函数返回值    函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...

  10. JavaScript基础笔记一

    一.真假判断 真的:true.非零数字.非空字符串.非空对象 假的:false.数字零.空字符串.空对象.undefined 例: if(0){ alert(1) }else{ alert(2) } ...

随机推荐

  1. 0基础90分钟会用PS——GenJi笔记

    数码图像的相关基础概念 1.位图和矢量图 位图 也叫点阵图像,位图使用也称像素的一格一格的小点来描述图像,图放大后我们可以看到像素点 矢量图 根据几何特性来绘制图形,用线段和曲线描述图像,可以是一个一 ...

  2. springboot整合mybatisplus遇到的错误

    完全跟着mybatis_plus官网的案例一步一步来的,但是到junit的时候突然报错 Internal Error occurred. org.junit.platform.commons.JUni ...

  3. 2022HNCTF--WEB

    @ 目录 [Week1]Interesting_http 分析 payload [Week1]2048 分析 payload [Week1]easy_html 分析 paylaod [Week1]In ...

  4. CSS选择器大全48式

    00.CSS选择器 CSS的选择器分类如下图,其中最最常用的就是基础选择器中的三种:元素选择器.类选择器.id选择器.伪类选择器就是元素的不同行为.状态,或逻辑.然后不同的选择器组合,基于不同的组合关 ...

  5. C# 多线程访问之 SemaphoreSlim(信号量)【C# 进阶】

    SemaphoreSlim 是对可同时访问某一共享资源或资源池的线程数加以限制的 Semaphore 的轻量替代,也可在等待时间预计很短的情况下用于在单个进程内等待. 由于 SemaphoreSlim ...

  6. Vue3笔记(二)了解组合式API的应用与方法

    一.组合式API(Composition API)的介绍 官方文档: https://v3.cn.vuejs.org/guide/composition-api-introduction.html 组 ...

  7. K8s 生产最佳实践-限制 NameSpace 资源用量

    前言 想象一下这个场景:多个系统运行在同一套 K8s 集群上,有重要系统,也有不太重要的系统.但是某一天,某个不重要的系统突然占用了该 K8s 集群的所有资源,导致该集群上的其他系统的正常运行受到影响 ...

  8. 【iOS逆向】某营业厅算法分析

    阅读此文档的过程中遇到任何问题,请关注公众号[移动端Android和iOS开发技术分享]或加QQ群[812546729] 1.目标 使用frida stalker分析某营业厅的签名算法. 2.操作环境 ...

  9. 深度学习之step by step搭建神经网络

    声明 本文参考Deep-Learning-Specialization-Coursera/Convolution_model_Step_by_Step_v1.ipynb at main · abdur ...

  10. 基于python的数学建模---差分方程

    一.递推关系--酵母菌生长模型 代码: import matplotlib.pyplot as plt time = [i for i in range(0,19)] number = [9.6,18 ...