TensorRT 7.2.1 开发概要(上)

Abstract

这个TysRR7.2.1开发者指南演示了如何使用C++和Python API来实现最常用的深层学习层。它展示了如何使用深度学习框架构建现有模型,并使用该模型使用提供的解析器构建一个TensorRT引擎。开发指南还提供了常见用户任务的分步指令,例如创建TensorRT网络定义、调用TensorRT builder、序列化和反序列化,以及如何用数据给引擎提供数据并执行推理;同时使用C++或Python API。

有关先前发布的TensorRT开发人员文档,请参阅TensorRT归档文件。

1. What Is TensorRT?

NVIDIATensorRT的核心 是一个C++库,它有助于NVIDIA图形处理单元(GPU)的高性能推理。它旨在与TensorFlow、Caffe、Pythorch、MXNet等训练框架互补工作。它特别关注在GPU上快速高效地运行已经训练过的网络,以生成结果(一个在不同地方被称为评分、检测、回归的过程,或推断)。

一些训练框架,如TensorFlow,已经集成了TensorRT,因此它可以用来加速框架内的推理。或者,TensorRT可以用作用户应用程序中的库。它包括用于从CAFE、ONNX或TensorFlow导入现有模型的分析器,以及以编程方式构建模型的C++和Python API。

Figure 1. TensorRT is a high-performance neural network inference optimizer and runtime engine for production deployment.

TensorRT通过结合层和优化内核选择来优化网络,以提高延迟、吞吐量、能效和内存消耗。如果应用程序指定,它将额外优化网络,以较低的精度运行,进一步提高性能并减少内存需求。

下图显示了定义为部分高性能推理优化器和部分运行时引擎的TensorRT。它可以接收在这些流行框架上训练的神经网络,优化神经网络计算,生成一个轻量级的运行时引擎(这是您唯一需要部署到生产环境中的东西),然后它将最大限度地提高这些GPU平台上的吞吐量、延迟和性能。

Figure 2. TensorRT is a programmable inference accelerator.

TensorRT API包括最常见的深度学习层的实现。有关层的详细信息,请参见TensorRT层。您还可以使用C++插件API或Python插件API来提供不经常使用或更创新的层的实现,这些层是TensorRT不支持的。

1.1. Benefits Of TensorRT

在训练神经网络之后,TensorRT可以将网络压缩、优化和部署为一个运行时,而不需要框架的开销。

TensorRT结合层,优化内核选择,并根据指定的精度(FP32、FP16或INT8)执行标准化和转换到优化的矩阵数学,以提高延迟、吞吐量和效率。

对于深度学习推理,有5个关键因素用于衡量软件:

吞吐量

一定时期内的产量。每台服务器的吞吐量通常以推断/秒或采样数/秒来衡量,这对于数据中心的经济高效扩展至关重要。

效率

每单位功率传输的吞吐量,通常用性能/瓦表示。效率是经济高效的数据中心扩展的另一个关键因素,因为服务器、服务器机架和整个数据中心必须在固定的电源预算内运行。

延迟

执行推理的时间,通常以毫秒为单位。低延迟对于提供快速增长的、基于实时推理的服务至关重要。

准确度

经过训练的神经网络传递正确答案的能力。对于基于图像分类的用法,关键指标表示为前5个或前1个百分比。

内存使用

在网络上进行推理所需保留的主机和设备内存取决于所使用的算法。这限制了在给定的推理平台上可以运行哪些网络和哪些网络组合。这对于需要多个网络且内存资源有限的系统尤其重要,例如用于智能视频分析的级联多类检测网络和多摄像头、多网络自动驾驶系统。

Alternatives to using TensorRT include:

  • Using the training framework itself to perform inference.
  • Writing a custom application that is designed specifically to execute the network using low-level libraries and math operations.

使用训练框架来执行推理是很容易的,但是在给定的GPU上往往会导致比使用像TensorRT这样的优化解决方案可能要低得多的性能。训练框架倾向于实现更通用的代码,强调通用性,当它们被优化时,优化往往集中在有效的训练上。

只需编写一个自定义应用程序来执行一个神经网络可以获得更高的效率,但是,它可能是相当劳动密集的,并且需要相当多的专业知识才能在现代GPU上达到高水平的性能。此外,在一个GPU上工作的优化可能无法完全转化为同一系列中的其他GPU,并且每一代GPU都可能引入新功能,这些功能只能通过编写新代码来利用。

TensorRT通过将抽象出特定硬件细节的高级API和优化推理以实现高吞吐量、低延迟和低设备内存占用的实现来解决这些问题。

1.1.1. Who Can Benefit From TensorRT

TensorRT供工程师使用,这些工程师负责根据新的或现有的深度学习模型构建特性和应用程序,或者将模型部署到生产环境中。这些部署可以部署到数据中心或云中的服务器、嵌入式设备、机器人或车辆中,或运行在工作站上的应用软件中。

TensorRT已成功应用于多种情况,包括:

机器人

公司销售的机器人使用TensorRT运行各种计算机视觉模型,在动态环境中自动引导无人驾驶系统飞行。

自动驾驶汽车

TensorRT用于NVIDIA驱动器产品中的计算机视觉。

科学技术计算

一个流行的技术计算包嵌入了TensorRT,以实现神经网络模型的高吞吐量执行。

深度学习训练和部署框架

TensorRT学习框架包括TensorRT和一些流行的MXNet流框架。有关TensorFlow和MXNet容器发行说明,请参阅TensorFlow发行说明和MXNet发行说明。

视频分析

TensorRT被用于NVIDIA的DeepStream产品中,为复杂的视频分析解决方案提供强大的支持,无论是在1-16个摄像头的边缘,还是在数据中心,数百甚至数千个视频源可能会聚集在一起。

自动语音识别

TensorRT用于小型桌面/桌面设备上的语音识别。在云端提供了更大词汇量的语音识别系统,该设备支持有限的词汇量。

TensorRT 7.2.1 开发概要(上)的更多相关文章

  1. TensorRT 7.2.1 开发概要(下)

    TensorRT 7.2.1 开发概要(下) 1.2. Where Does TensorRT Fit? 一般来说,开发和部署深度学习模型的工作流要经过三个阶段. Phase 1 is trainin ...

  2. TensorRT 7.2.1开发初步

    TensorRT 7.2.1开发初步 TensorRT 7.2.1开发人员指南演示了如何使用C ++和Python API来实现最常见的深度学习层.它显示了如何采用深度学习框架构建现有模型,并使用该模 ...

  3. TensorRT 基于Yolov3的开发

    TensorRT 基于Yolov3的开发 Models Desc tensorRT for Yolov3 https://github.com/lewes6369/TensorRT-Yolov3 Te ...

  4. easycwmp在开发板上的配置

    原创作品,转载请注明出处 copyright:weishusheng   2015.3.18 email:642613208@qq.com 平台: Linux version 2.6.32-279.e ...

  5. FS210开发板上Qt4.7.0移植过程

    作者:冯老师,华清远见嵌入式学院讲师. 1. 搭建Qt开发环境平台 1.开发环境:ubuntu 12.04 2.交叉编译链:arm-cortex_a8-linux-gnueabi 3.开发板:FS21 ...

  6. 开发板上使用core文件调试

    转载:http://www.nginx.cn/1521.html 如果开发板的操作系统也是linux,core调试方法依然适用.如果开发板上不支持gdb,可将开发板的环境(依赖库).可执行文件和cor ...

  7. [转载]在iTOP-4412开发板上调试helloworld应用

    本文转自迅为论坛:http://www.topeetboard.com 1.安装ADB驱动 在开发板上调试 Android 应用,首先要安装 ADB 驱动. 通过“SDK Manager.exe”来安 ...

  8. iOS 自定义控件开发(上)

    工作需要,最近在进行iOS方面的图表工作.找了很多第三方库都无法实现效果,所以决定自己写一个控件. <iOS 自定义控件开发(上)> <iOS 自定义控件开发(中)> #0 目 ...

  9. DE1-SOC开发板上搭建NIOS II处理器运行UCOS II

    DE1-SOC开发板上搭建NIOS II处理器运行UCOS II   今天在DE1-SOC的开发板上搭建NIOS II软核运行了UCOS II,整个开发过程比较繁琐,稍微有一步做的不对,就会导致整个过 ...

随机推荐

  1. 从苏宁电器到卡巴斯基第25篇:难忘的三年硕士时光 III

    阴差阳错,走上了讲师的道路 时间已经来到了2015年的1月,我的找工作之路也是屡败屡战,屡战屡败.金山.百度以及腾讯不约而同地不要我,使得我对于自己的未来充满了迷茫.尽管才研二而已,可是对于我这种没有 ...

  2. Android内核模块编译执行

    Author: GeneBlue 0X01 前言 内核驱动是漏洞的高发区,了解Android驱动代码的编写是分析.利用驱动漏洞的基础.本文以一个"hello"驱动为例,简单介绍内核 ...

  3. Linux中的防火墙(Netfilter、Iptables、Firewalld)

    目录 Netfilter Iptables iptables做本地端口转发 Firewalld Netfilter Netfilter是Linux 2.4内核引入的全新的包过滤引擎,位于Linux内核 ...

  4. Windows核心编程 第十九章 DLL基础

    第1 9章 D L L基础 这章是介绍基本dll,我就记录一些简单应用,dll的坑点以及扩展后面两章会说,到时候在总结. 自从M i c r o s o f t公司推出第一个版本的Wi n d o w ...

  5. Java中读取文件的几种路径配置

    获取配置文件的两种方式区别 ClassLoader.getSystemClassLoader().getResourceAsStream() //ClassLoader.getSystemClassL ...

  6. IO系列测试源码

    //IO系列测试源码(需要自取) using System; using System.CodeDom; using System.Collections.Generic; using System. ...

  7. 将mysql数据同步到ES6.4(全量+增量)

    下载安装包时注意下载到指定文件夹 这里我放在OPT文件夹下一:安装logstash进入到opt文件夹打开终端 执行以下命令wget -c https://artifacts.elastic.co/do ...

  8. Rabbit MQ一些参数解释

    //ConnectionFactory(连接工厂): 生产Connection的的工厂 //Connection(连接):是RabbitMQ的socket的长链接,它封装了socket协议相关部分逻辑 ...

  9. appium等待元素

    1.sleep()方法 Thread.sleep(60000)强制等待60s 2.隐式等待implicitlyWait() driver.manage().timeouts().implicitlyW ...

  10. ES6中的展开运算符和解构对象

    let obj = { a:1 b:2 } let obj2 = { ...obj c:3 d:4 } console.log(obj2)//1,2,3,4,对象展开 //常考题目 let a = 1 ...