tensorrt轻松部署高性能dnn推理_基于TensorRT车辆实时推理优化

基于TensorRT车辆实时推理优化

Optimizing NVIDIA TensorRT Conversion for Real-time Inference on Autonomous Vehicles

自动驾驶系统使用各种神经网络模型,这些模型要求在GPU上进行极其精确和高效的计算。Zoox是一家全新开发robotaxis的初创公司,充分利用了NVIDIA硬盘的高性能、节能计算功能。最近,Zoox在旧金山发布了一个一小时的全自动驾驶,详细展示了他们的AI堆栈。

7563e397d9e94d07f61d0acd59fa6564.png

与TensorFlow相比,NVIDIA TensorRT提供了显著的加速(fp32为2-6x,Zoox网络为9-19x),支持使用CUDA流的异步和并发推理能力。Zoox视觉/激光雷达/雷达/预测算法严重依赖于深部神经网络,这些神经网络在我们的车辆上都运行在NVIDIA gpu上,并且大多使用TensorRT部署。

TensorRT是一个用于高性能深度学习推理的SDK,它为深度学习推理应用程序提供低延迟和高吞吐量。

可以使用各种转换管道将模型转换为TensorRT引擎。例如,使用Caffe训练的模型可以使用Caffe解析器轻松地转换为TensorRT运行时。

但是,TensorFlow模型需要使用ONNX(开放式神经网络交换)转换为TensorRT引擎。本文中介绍的工具是针对TensorFlow的,但是这些原则也可以应用到其他的训练框架中。 在为所有这些深层神经网络部署和维护TensorRT引擎的过程中,我们发现了以下痛点: ONNX和TensorRT只支持有限的TensorFlow操作集。

内核大小和步幅的某些组合可能会对TensorRT造成副作用。

迁移到精度降低的推理或TensorRT升级可能导致性能回归。

在Zoox,我们开发了一组工具来促进TensorRT引擎的部署、验证和维护,如图2所示。在下面的部分中,我们将详细介绍这些模块。

TensorRT conversion checker

TensorRT转换检查器的目标是帮助您在训练网络之前识别可能的转换失败。checker是轻量级的,按设计是最小的(在本文后面的代码示例中突出显示)。在训练之前,它会在所构建的网络上触发一个TensorRT转换过程。我们只有在转换成功后才开始训练。

ba74ccb21cbfdf9deedee4b0c4ecb048.png

Figure 2. Zoox TensorRT conversion pipeline overview.

下面的代码示例显示了TensorRT转换检查器。要使用插件,用户只需要导入数据包,在网络构建期间注册输入/输出节点,然后在训练开始之前触发转换检查。

import trt_checker

class Lenet5():

def network(self, X):

input = tf.identity(X, name = "input")

# Registers the input in the conversion checker.

trt_checker.register_input(input)

# Network definition.

...

# Output node.

output = tf.identity(logits, name="output")

# Registers the output node in the conversion checker.

trt_checker.register_output(output)

return output

def main():

...

# Checks if the model can be converted to trt.

conversion_result = trt_checker.check_conversion()

# Only train when trt conversion is successful.

if conversion_result:

accuracy = lenet_network.train()

Output deviation inspection

此插件的目标是在运行整个特定于模型的计算之前,报告转换的TensorRT引擎的潜在精度回归。这个插件在转换后的TensorRT引擎和原始TensorFlow图上运行推理,输入完全相同(由用户随机生成或指定)。然后报告输出偏差的分布,给开发人员一个潜在精度回归的预警。此模块是逐层检查模块的构建块。

b1458967fbe2d766fb25347ab7d1d9bb.png

Figure 3. Output deviation inspection

Layer-by-layer inspection

下面的代码示例显示逐层检查:

def layer_by_layer_analysis(graph, input_layer):

median_error = []

for layer in graph.layers():

errors = convert(graph, input=input_layer, output=layer)

median_error.append(median(errors))

plot(median_error)

如果观察到精度回归,我们希望找出TensorRT引擎中的哪个层或操作对回归有显著贡献。这促使我们开发了逐层检测模块。调用时,模块为每个中间操作运行一个转换作业,并报告此特定操作生成的中值/最大错误(如图4所示)。当研究在不同版本的TensorRT中观察到的不同行为时,此模块非常有用。

2d7597c57755622d30d9cace4cc03bb2.png

Figure 4. Example regression observed in semantic segmentation when upgrading from TensorRT 5.1.5 to TensorRT 7.0.

图4显示了这种回归的一个例子,在这个例子中,我们观察到语义分割输出有轻微的回归。我们对TensorRT 5.1引擎和TensorRT 7.0引擎进行了逐层检查,然后绘制了每层的中间误差。 图5显示了每一层产生的中值误差。我们可以看到在这个特定网络的上采样层中可能存在一个bug。基于这些信息,我们能够在一个较小的网络上重现这种回归,并将此错误报告给NVIDIA。此错误现在已在TensorRT 7.1中修复。

966949ab4074e495d7f9a1941c3458cb.png

图5. 图4中使用的两台TensorRT发动机的逐层检查结果。橙色线显示了TensorRT 7.0推理输出与TensorFlow推理输出相比的中间误差。蓝线显示了TensorRT 5.0引擎生成的结果。上采样层的误差分布有显著差异。

Latency flame graph

为了可视化推理中的瓶颈并找出可能的优化操作,我们将TensorRT剖面仪生成的逐层计时信息绘制成火焰图。计时详细信息根据每个层的名称范围分组,如图6所示。这使我们能够看到网络的哪个部分花费的时间比预期的要长。

a1538db7a394c8ec0d8653a3cc1bd1d9.png

Figure 6. Latency flame graph on Inception Net. The 1767 samples shown in this graph indicates that a forward pass on this network takes 1.767 ms.

Automated conversion pipeline

在Zoox,我们维护一个自动转换管道,跟踪每个模型使用的转换选项。当触发时,自动转换管道将所有记录的模型转换为TensorRT引擎,并将它们上载到云中进行部署。它还为新转换的TensorRT引擎运行验证作业以验证准确性。这个管道帮助我们只用一个命令就可以将所有现有的模型升级到TensorRT的新版本。

Incompatible graph test suite

Zoox维护一个TensorFlow到TensorRT的转换测试套件。它测试了从TensorFlow图到tensort引擎的转换失败案例,以及报告的NVIDIA错误识别。

每个测试构建一个TensorFlow图,将其转换为TensorRT,并将输出偏差与TensorFlow图进行比较。使用此测试套件,我们不仅可以向Zoox工程师演示哪些图形结构或操作可能不适用于TensorRT,而且还可以检测升级到TensorRT的新版本时修复了哪些回归。

Summary

在这篇文章中,我们介绍了Zoox-TensorRT转换管道中的几个特性。TensorRT转换检查器参与神经网络训练的早期阶段,以确保在您浪费时间和资源进行全面训练之前发现不兼容的操作。可以在每一层调用推理精度验证来识别不利于降低精度计算的操作。详细的分析揭示了不必要的计算,这些计算不是在TensorRT内部优化的,但是可以通过在图构建期间简单的代码更改来优化。

自动转换管道帮助您验证每个TensorRT升级或模型重新转换。利用该流水线,我们成功地为神经网络在Zoox自主驾驶平台上执行各种流线型感知任务提供了TensorRT转换支持。

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

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

相关文章

手机上网流量统计_数据统计 | 上半年手机流量同比增110.2%,你贡献了多少?

来源:工信部网站、中新经纬版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知我们,我们会立即删除并表示歉意。谢谢!7月25日,工信部网…

mybatis insert插入成功返回0_mybatis添加客户

在MyBatis的映射文件中,添加操作是通过元素来实现的。例如,向数据库中的t_customer表中插入一条数据可以通过如下配置来实现。在上述配置代码中,传入的参数是一个Customer类型,该类型的参数对象被传递到语句中时,#{use…

Andoid TextView显示富文本html内容及问题处理

目录富文本内容与效果TextView HtmlImageGetter 处理图片(表情)TagHandler 处理html内容的节点Html的转换过程HtmlToSpannedConverterhandleStartTagstartCssStyle(mSpannableStringBuilder, attributes)字体无效果实现getForegroundColorPattern颜色不显示的坑处理办法颜色修…

Java错误:找不到或无法加载主类

目录前言javac xxx.java 编译需要相对物理路径java xxx 执行需要虚拟路径总结前言 一般情况下,我们都使用工具进行代码的编辑和调试,例如eclipse 、Manven、Android Studio、sublime、vim、notepad、记事本等。 当我们用eclipse android studio等创建的p…

步苹果iOS的后尘,谷歌Android12“翻车”,更新需谨慎?

苹果不论电脑还是移动设备,都是一如既往的“强硬”。说实话,忽视“兼容”,体验极低。 有小伙伴调侃:人家就是要你买新机器。也有小伙伴(包括我在内),直接关闭系统自动更新。 开发者&#xff1a…

Android Studio无线连接设备调试,比数据线更方便

前言 一般情况下,多数移动开发者使用的是数据线连接电脑,进行各种移动设备的调试,更有胜者,非常迷恋模拟器,模拟器它好不好,答案是好,因为直接运行在电脑上,直接操作,调试…

GenseeSDK 使用Kotlin要注意TODOAndroid Studio关闭TODO

目录一、Kotlin的TODO二、GenseeSDK与TODO 请注意三、Android studio关闭TODO一、Kotlin的TODO 在实现一些接口时候,工具自动将所有的接口函数"空"实现,并在函数体中增加一行代码: TODO或TODO(“not implemented”) 作为提醒催促…

OpenCV Mat基础认知感

OpenCV是一个开源的供开发的计算机视觉处理库,涵盖的内容包括图像处理,机器学习。由c到c ,再到各平台的跨平台框架。 Mat - 图像容器 Mat类用于表示一个多维的单通道或者多通道的稠密数组。能够用来保存实数或复数的向量、矩阵,…

C++期末实践程序设计与数组作为参数的注意事项

目录小表弟发来的求助信号要点代码文件头文件Student.h源文件Student.cppmain.c执行结果c数组特性以及数组做形参的特点数组试验数组特殊性质不允许拷贝和赋值数组是通常被转化成指针使用数组形参多种写法代理模式MVC模式小表弟发来的求助信号 并补充说要5种写法才算过关。 要…

windows 7远程桌面和被远程连接电脑启动远程桌面服务

目录远程桌面连接开启远程桌面服务(被连电脑)配置启动远程桌面服务远程桌面连接 这部分主要讲解如何通过一台windows 电脑的远程桌面程序连接"远程"电脑桌面。前提是被连的那台电脑已开启远程桌面服务。远程桌面服务开启之后,可以…

表单和字都居中_APP 分享 | 6 款黑科技工具,低调收藏,每一款都很强大!

iSlide 简单、高效地制作PPT使用环境: Windows使用要求: Office 2010 及以上版本授权状况: 无广告 有付费功能官网地址: www.islide.ccSlide是一款基于PowerPoint的插件工具,功能十分强大,高效做PPT必备利器一键优化:将PPT中不规则的字体,段落,色彩,参考线…

Android studio gradle task list 不显示问题

问题描述 新电脑安装android studio后,导入工程,各种配置都弄好变更好,出现了如下情况: 之前习惯的gradle task 不在列表中,好不习惯。 正常期望如下: 处理方法 快捷键Ctrl Alt S或者 file -> se…

Android Studio Gradle输出信息乱码

在更换android studio 版本之后,一般windows 版本在项目构建过程中,gradle 相关的信息输出,会出现乱码,基本上明知是字符编码的问题,但看着就是不爽,例如下面这的情形: ע: ijЩ�&am…

Edge 修改字符编码(详细图文)

Microsoft Edge 版本 97.0.1072.62 (官方内部版本) (64 位) 前言 如下图,在访问页面时出现乱码,而且一直返回的内容编码是UTF-8,但Edge没找快捷的编码方式选择 方法一 Internet Explorer 模式加载 打开Edge浏览器 点击Edge右上角三点 点…

【Android】Unresolved reference: databinding

检查配置 对应module的build.gradle是否添加了databinding配置 buildFeatures {viewBinding true } // 或者 dataBinding {enabled true }检查包名(特别注意) 报错的包名是否和app包名一致。 例如app包名是 com.xxx.app 而报错的代码中binding的包名路径不在app包名下&…

【Android】ConstraintLayout中RecyclerView 的底部数据显示不全以及覆盖其他View

文章目录xml布局内容预览画面(看着没毛病)&#xff1a;实际画面&#xff1a;解决办法说明xml布局内容 <?xml version"1.0" encoding"utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android"http://schemas.android.com/a…

Charles抓取HTTPS Windows Android iOS 图文详细

文章目录背景操作原理windows 安装CharlesCharles配置第一步&#xff1a;配置HTTP代理&#xff0c;这步与抓取HTTP请求是一样第二步&#xff1a;配置SSL代理第三步 &#xff1a;为手机配置代理iPhone 代理配置Android 代理配置第四步&#xff1a;安装根证书iPhone 安装charles证…

Android代码安装apk程序

文章目录一、高低版本兼容代码及配置1.java代码2.AndroidManifest.xml 配置ContentProvider3.paths xml 配置二、老版本代码三、可能出的问题及处理一、高低版本兼容代码及配置 高版本提高了sdcard、 app文件空间的访问权限&#xff0c;高低版本的系统api有一定区别&#xff0…

Android adb 安装apk程序

文章目录ADB简单介绍安装命令安装失败情况adb 安装测试包adb 安装卸载的所有命令摘要前言多数情况下&#xff0c;用户都是从应用商店或某网页下载apk后从手机上直接安装apk文件&#xff0c;在调试或下载到电脑上时候&#xff0c;我们就可以直接通过adb安装到手机。在测试小伙伴…

XML十六进制无效的字符(0x0b 0x0c 0x02)

文章目录解决方法ASCII“字符”1、ASCII 打印字符2、ASCII 非打印控制字符3、扩展 ASCII 打印字符4、ASCII 之外ASCII 字符输入方法与常用地方1、在文档中插入 ASCII 字符2、输入方法前言xml 中包含了非打印字符的情况下&#xff0c;即使是放在cdata 中&#xff0c;在不同平台上…