三. TensorRT基础入门-TensorRT简介

news2024/12/25 18:23:34

目录

    • 前言
    • 0. 简述
    • 1. 什么是TensorRT
    • 2. TensorRT的工作流介绍
    • 3. TensorRT的一些限制
    • 总结
    • 参考

前言

自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》,链接。记录下个人学习笔记,仅供自己参考

本次课程我们来学习课程第三章—TensorRT 基础入门,一起来了解 TensorRT

课程大纲可以看下面的思维导图

在这里插入图片描述

0. 简述

本小节目标:理解 TensorRT 的工作流程,TensorRT 的优化极限,以及其他 DNN 编译器

这节开始我们进入第三章节-TensorRT 基础入门的学习,第三章节内容主要分为以下五个部分:

  • TensorRT 简介
  • TensorRT 的应用场景
  • TensorRT 的模块
  • 导出 ONNX 以及修改 ONNX 的方法
  • 初步使用 TensorRT

这次课程我们来学习 TensorRT 简介,这次课程结束之后希望大家理解 TensorRT 的工作流程,TensorRT 的一些局限以及与其它 DNN 编译器相比优势和劣势分别是什么

1. 什么是TensorRT

首先什么是 TensorRT,官方定义如下:

NVIDIA® TensorRT™, an SDK for high-performance deep learning inference, includes a deep learning inference optimizer and runtime that delivers low latency and high throughput for inference applications.

在这里插入图片描述

我们可以把 TensorRT 理解为一种针对 NVIDIA GPU 的一种优化编译器,它具备以下几个功能:

  • 自动优化模型
    • 寻找模型中可以并行处理的地方
    • 针对当前部署的 GPU 框架,寻找最优的调度和并行策略
  • 支持多框架输入
    • ONNX
  • Python/C++ API 接口
    • 可以方便在自己的程序中调用 TensorRT API 来实现推理

在这里插入图片描述

现在的大多数 DL framework 都可以通过 TensorRT 生成推理引擎部署在硬件上

  • 比较常见的组合:Pytorch->ONNX->TensorRT
  • 目前自动驾驶的部署硬件大多都会采用 NVIDIA
    • DRVIE series
    • Jetson series

很多厂商除了 NVIDIA 也会有很多其它选择,比较典型的是高通的 Heterogeneous Architecture 如下图所示:

在这里插入图片描述

Qualcomm

另外一个比较小众的是 Hailo 如下图所示,它是中东那边开发的一个比较典型的小型 Edge Device for DNN,它的功耗低且效率高,有很多量化和调度的技巧,此外它针对自己的硬件而设计的 Dataflow Compiler 也很精妙

在这里插入图片描述
在这里插入图片描述

Hailo

Note:Dataflow 数据流是一个很传统的概念,最近针对 DNN 的硬件设计有偏向 Dataflow 的趋势。大家感兴趣的同学可以自学一下,建议参考 Hailo, Google TPU, MIT Eyeriss 的 paper

Google 的 TPU 是属于 dataflow architecture 的一个例子,TPU 内部有一个 on-chip memory 叫做 HBM(high-bindwidth memory),当读取数据的时候,HBM 里的数据会以 queue 的形式放到 MXU(Matrix Multiplication Unit)进行数据的流动以及计算

为了理解 TPU 的工作原理,我们不妨了解一下其他加速器如何应对训练机器学习模型的计算挑战,以下内容 copy 自:https://cloud.google.com/tpu/docs/intro-to-tpu?hl=zh-cn

CPU 的工作方式

CPU 是一种基于冯·诺依曼结构的通用处理器。这意味着 CPU 与软件和内存协同工作,如下所示:

在这里插入图片描述

CPU 最大的优点是它们的灵活性。您可以在 CPU 上为许多不同类型的应用加载任何类型的软件。例如,您可以使用 CPU 在 PC 上处理文字、控制火箭引擎、执行银行事务,或使用神经网络对图片进行分类。

对于每次计算,CPU 从内存加载值,对值执行计算,然后将结果存储回内存中。与计算速度相比,内存访问速度较慢,并可能会限制 CPU 的总吞吐量。这通常称为冯·诺依曼瓶颈。

对于每次计算,CPU 从内存加载值,对值执行计算,然后将结果存储回内存中。与计算速度相比,内存访问速度较慢,并可能会限制 CPU 的总吞吐量。

GPU 的工作方式

为了提高吞吐量,GPU 在单个处理器中包含数千个算术逻辑单元 (ALU)。现代 GPU 通常包含 2500 - 5000 个 ALU。大量处理器意味着您可以同时执行数千次乘法和加法运算。

在这里插入图片描述

这种 GPU 架构非常适合并行处理大量运算(例如神经网络中的矩阵运算)的应用。实际上,在用于深度学习的典型训练工作负载上,GPU 的吞吐量可比 CPU 高出一个数量级。

不过,GPU 仍然是一种通用处理器,必须支持许多不同应用和软件。因此,GPU 与 CPU 存在相同的问题。对于数千个 ALU 中的每一次计算,GPU 都必须访问寄存器或共享内存,以读取运算对象以及存储中间计算结果。

TPU 的工作方式

Google 设计了 Cloud TPU,它们是专门用于神经网络工作负载的矩阵处理器。TPU 不能运行文字处理程序、控制火箭引擎或执行银行交易,但它们可以很快地处理神经网络中使用的大量矩阵运算。

TPU 的主要任务是矩阵处理,这是乘法和累加运算的组合。TPU 包含数千个乘法累加器,这些累加器彼此直接连接以形成大型物理矩阵。这称为脉动阵列架构。在单个处理器上,Cloud TPU v3 包含两个 128 x 128 ALU 的收缩阵列。

TPU 主机将数据流式传输到馈入队列中。TPU 从馈入队列加载数据,并将其存储在 HBM 内存中。计算完成后,TPU 会将结果加载到馈出队列中。然后,TPU 主机从馈出队列读取结果并将其存储在主机的内存中。

为了执行矩阵操作,TPU 将参数从 HBM 内存加载到矩阵乘法单元 (MXU) 中。

在这里插入图片描述

然后,TPU 从内存加载数据。每次执行乘法运算时,所得结果都会传递给下一个乘法累加器。输出是数据和参数之间所有乘法结果的总和。在矩阵乘法过程中,不需要访问内存。

在这里插入图片描述

以下是三者的对比:

  • CPU
    • 需要最高灵活性的快速原型设计
    • 训练时间不长的简单模型
    • 有效批量大小较小的小型模型
    • 包含许多使用 C++ 编写的自定义 TensorFlow 操作的模型
    • 受主机系统可用 I/O 或网络带宽限制的模型
  • GPU
    • 具有大量自定义且必须至少部分在 CPU 上运行的 TensorFlow/PyTorch/JAX 操作的模型
    • 具有不能在 Cloud TPU 上使用的 TensorFlow 操作的模型
    • 有效批量大小较大的中到大型模型
  • TPU
    • 由矩阵计算主导的模型
    • 在主训练循环内没有自定义 TensorFlow/PyTorch/JAX 操作的模型
    • 需要训练数周或数月的模型
    • 有效批量大小较大的大型模型

在这里插入图片描述

OK,我们回归正题,市场上有很多部署硬件但为什么 NVIDIA 和 TensorRT 一直都很火呢?主要有以下几个原因:

  • 整体硬件设计和编译技术很成熟
    • BUG 算比较少的那种
    • 对量化的支持比较全面以及完善
    • SDK 很充足(polygraphonnxsurgeon
  • 可以参考的文档比较多
    • 官方给的资源还是相当丰富的
    • 给的 sample 也很适合学习
  • Community 很大
    • 出现问题的时候可以讨论

但是:

  • 价格偏贵,当面向量产的时候价格是很需要重视的
  • 过大的 TOPS 是否真的就很好?
  • TOPS(Tera Operations per second)是衡量一个硬件的计算力的常用指标,之后我们会详细讲,现阶段有个认识就好

2. TensorRT的工作流介绍

TensorRT 的工作流如下图所示:

在这里插入图片描述

主要可以分为以下几部分:

  • 1. 将训练好的模型转为 TensorRT 可识别的模型
  • 2. TensorRT 逐个 Layer 进行分析并尝试各种优化策略(量化、层融合、调度、多流执行、内存复用等等)
  • 3. 生成推理引擎,可以从 C++/Python 程序中调用

3. TensorRT的一些限制

但是 TensorRT 也存在一些限制,主要有以下几点:

1. 针对不支持的算子

  • 看看不同 TensorRT 版本中是否有做了支持
    • Pytorch:Facebook
    • ONNX:Microsoft
    • TensorRT:NVIDIA
    • 部署时一般是 Pytorch->ONNX->TensorRT,我们可以看到中间跨越了三个不同的厂家,所以不同厂家由于算子版本不同带来的兼容性问题会很头痛
    • 比如 LayerNormalization 算子在 TensorRT-8.6-GA 中就有支持,而在之前的版本没有
  • 修改 PyTorch 的算子选择,让它使用一些 TensorRT 支持的算子
  • 自己写插件,内部实现自定义算子以及自定义 CUDA 加速核函数
  • 不使用 ONNX 自己创建 parser 直接调用 TensorRT API 逐层创建网络
    • 比如 tensorrtx 这个 repo

2. 不同 TensorRT 版本的优化策略是不一样的

  • 比如对 Transformer 的优化 TensorRT-7.x 和 TensorRT-8.x 跑出来的性能是不一样
  • 如果我们希望好的优化策略那我们就可以考虑比较新的 TensorRT 版本去做模型部署

3. 有时你预期 TensorRT 的优化和实际的优化是不一样的

  • 比如说你期望 TensorRT 使用 Tensor core 但 kernel autotuning 之后 TensorRT 觉得使用 Tensor core 反而会效率降低,结果给你分配 CUDA core 使用。因为内部需要做一些额外的处理
  • 比如说 INT8 量化的结果比 FP16 还要慢,这是 TensorRT 内部的一些优化调度所导致的

4. 天生并行性差的 layer,TensorRT 也没有办法

  • 1x1 conv 这种 layer 再怎么优化也没有 7x7 conv 并行效果好

重点注意:TensorRT 虽然很方便但不要过分的依赖 TensorRT 给你的结果,你需要结合部署的硬件特性做一些 Benchmark 和 Profiling,学习使用一些 Profile tools 去分析模型的计算瓶颈在哪里,以及去分析你的预测优化策略和实际优化策略产生分歧的原因在哪里。

总结

本次课程我们学习了解了 TensorRT,TensorRT 是 NVIDIA 针对 DNN 推出的一个优化编译器,它可以优化经过训练的深度学习模型以实现高性能推理,它的整个工作流程分为三部分,首先转换为 TensorRT 可识别的模型比如 ONNX,接着 TensorRT 尝试各种策略(算子/层融合、量化等)进行优化,最后生成对应的 engine 利用 API 调用。

当然我们也需要认识到 TensorRT 本身是存在一些限制的,我们不要过分的依赖 TensorRT 的结果,而需要学会结合硬件特性利用一些工具来分析模型的计算瓶颈

OK,以上就是第 1 小节有关 TensorRT 简介的全部内容了,下节我们来学习 TensorRT 的应用场景,敬请期待😄

参考

  • Qualcomm Software Architecture
  • Detail of Hailo AI Edge Accelerator Emerge
  • Hailo-15 quad-core AI Vision processor delivers up to 20 TOPS for Smart Cameras
  • Introduction to Cloud TPU
  • NVIDIA Deep Learning TensorRT Documentation
  • NVIDIA TensorRT

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1613827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年3月电风扇家电线上电商(京东天猫淘宝)销售数据排行榜

鲸参谋监测的线上电商(京东天猫淘宝)平台3月份的电风扇家电销售数据已出炉! 根据鲸参谋数据显示,今年3月份,电风扇市场呈现出稳步增长态势。在线上电商平台上电风扇总销量累计约226万件,环比上个月上涨了2…

前程贷v6.5系统测试报告

1.引言部分 1.1 项目背景 本测试报告的具体编写目的,指出预期的读者范围。(3-4句) 项目描述 (项目内容,用户需求) 本测试报告为**(系统名称)**系统测试报告;本报告目的在于总结测试…

可平滑替代FTP的传输方案,需要具备哪些特质?

随着技术的发展和网络安全需求的提升,传统的FTP受安全性和效率方面的局限性,已经逐渐不能满足现代企业的需求。因此,许多企业和组织开始寻找替代FTP的方案,以提高文件传输的安全性、效率和便捷性。FTP传输存在的弊端及不足主要包括…

洛谷 A+B 问题 python

题目描述 输入两个整数 a,b,输出它们的和 输入格式 两个以空格分开的整数(不是输入两个input()解决)。 输出格式 一个整数。 输入输出样例 输入 20 30 输出 50 这个问题的难点就是在于python当中进行两个输入数字…

JavaScript-3.DOM

通过HTML DOM,可以访问JavaScript HTML文档中的所有元素 DOM(Document Object Model) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。将网页内的元素封装成一个对象,并建立元素的层级关系,形似一棵树,称为DOM树。 通过可编程的对象模型,…

【简单介绍下Faiss原理和使用】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

【软考---系统架构设计师】软件架构

目录 1 一、软件架构的概念 二、软件架构风格 (1)数据流风格​​​​​​​ (2)调用/返回风格 (3)独立构件风格 (4)虚拟机风格 (5)仓库风格 三、架构…

知识图谱的起源与发展

文章目录 知识图谱的发展历史知识图谱的重要性知识图谱与Ontology、语义网络之间的区别知识图谱的定义 知识图谱的发展历史 知识图谱始于20世纪50年代,至今大致分为三个发展阶段:第一阶段 (1955年—1977年)是知识图谱的起源阶段&a…

C++学习————第八天(C/C++内存管理)

目录 1、1.C/C内存分布 2、 C语言中动态内存管理方式:malloc/calloc/realloc/free 3、C内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 4.operator new与operator delete函数 5. new和delete的实现原理 5.1 内置类型 5.2 自定…

C++ 初识模板

目录 0.前言 1.泛型编程 2.函数模板 2.1概念 2.2格式 2.3原理 2.4函数模板的实例化 2.4.1隐式实例化 2.4.2显式实例化 2.5模板参数的匹配原则 3.类模板 3.1类模板的定义格式 3.2类模板的实例化 4.结语 (图像由AI生成) 0.前言 在 C 中&a…

密码学 | 承诺:常见的承诺方案

🥑原文:密码学原语如何应用?解析密码学承诺的妙用 - 知乎 1 简介 密码学承诺 涉及 承诺方、验证方 两个参与方,以及以下两个阶段: 承诺阶段:承诺方选择一个敏感数据 v v v,为它计算出相应…

docker打包部署自己的应用

docker部署应用 当谈及使用 Docker 进行容器化部署应用时,可以想象它是一个能够将整个应用程序及其所有依赖项打包成一个独立、可移植的容器的工具。这个容器不仅包含了应用代码,还包括了操作系统、运行时环境以及所有依赖的库和组件。这样一来&#xf…

Python 全栈安全(二)

原文:annas-archive.org/md5/712ab41a4ed6036d0e8214d788514d6b 译者:飞龙 协议:CC BY-NC-SA 4.0 第二部分:认证与授权 本书的第二部分是最具商业价值的部分。我这样说是因为它充满了大多数系统需要具备的实用工作流示例&#xf…

nginxtomcat笔记

nginx是一个轻量级高性能的http和反向代理web服务器,优点:占用内存少,并发能力强 实验主机:192.168.200.141 192.168.200.142 1.虚拟主机 1.1基于域名:一台服务器,一个端口,部署多个网站 在ng…

Transformer - Teacher Forcing

Transformer - Teacher Forcing flyfish 在训练过程中,将目标序列输入给解码器的方法称为(Teacher Forcing)。这个术语又代表什么意思呢? 这里的目标序列就是Ground Truth,也就是我们已知的正确答案 一句话就是我们…

火灾风险把控:数据采集卡搭配传感器实现电路异常全面监控!

引言 在现代社会中,火灾安全和用电安全是人们生活和工作中不可忽视的重要问题。为了有效应对火灾风险和电路异常情况,阿尔泰科技引入了一项创新解决方案:利用PXIe5681多功能数据采集卡对小信号的高精度测量优势,搭配电压传感器监…

使用代理绕过网站的反爬机制

最近在尝试收集一些网络指标的数据, 所以, 我又开始做爬虫了。 :) 我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么的美好,然而一杯茶的功夫可能就会出现错误…

文本嵌入新方案:合合信息acge模型荣登C-MTEB榜首

目录 0 写在前面1 文本嵌入:LLM落地的根基2 C-MTEB:acge荣夺榜一2.1 max tokens2.2 文本分类2.3 文本聚类 3 acge demo演示与体验总结 0 写在前面 随着信息技术的发展和应用场景的不断扩大,人们需要处理和利用大量的文档信息。而传统的手动处…

深度学习transformer架构详细详解

一、transformer的贡献 transformer架构的贡献:该架构只使用自注意力机制,没有使用RNN或卷积网络。且可以实现并行计算,加快模型训练速度。 (将所有的循环层全部换成:multi-headed self-attention) 二、t…

39. UE5 RPG角色释放技能时转向目标方向

在上一篇,我们实现了火球术可以向目标方向发射,并且还可以按住Shift选择方向进行攻击。技能的问题解决,现在人物释放技能时,无法朝向目标方向,接下来我们解决人物的问题。 实现思路: 我们将使用一个官方的…