基于自动驾驶车辆的NVIDIA-TensorRT推理实时优化

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

自动驾驶系统使用各种神经网络模型,这些模型需要在gpu上进行非常精确和高效的计算。Zoox是一家全新开发robotaxis的初创公司,利用NVIDIA DRIVE的高性能、节能计算。最近,Zoox在旧金山发布了一个小时的完全自主的游戏,详细展示了他们的人工智能堆栈。

与TensorFlow相比,NVIDIA TensorRT提供了显著的加速(fp32为2-6倍,Zoox网络为int8中为9-19倍),支持使用CUDA流的异步和并发推理能力Zooxvision/lidar/radar/prediction 算法严重依赖于深度神经网络,这些神经网络都运行在我们的车辆上的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转换过程。我们只有在转换成功后才开始训练。

下面的代码示例显示了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图上运行推理,输入完全相同(由用户随机生成或指定)。然后报告输出偏差的分布,给开发人员一个潜在精度回归的预警。该模块是逐层检测模块的构建模块。

Figure 3. Output deviation inspection

Layer-by-layer inspection

The following code example shows the
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中观察到的不同行为时非常有用。

Latency flame graph

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引擎进行了逐层检查,然后绘制了每层的中值误差。

图6显示了为每个层生成的中值误差。我们可以看到,在这个特定网络的上采样层中有一个潜在的缺陷。基于这些信息,我们能够在一个较小的网络上复制这个回归,并将这个错误报告给NVIDIA。这个错误现在已在TensorRT 7.1中修复。

Figure 5. Layer-by-layer inspection results on the two
TensorRT engines used in Figure 4. The orange line shows the median error of the TensorRT 7.0 inference outputs compared to the TensorFlow inference outputs. The blue line shows the results generated by the TensorRT 5.0 engine. There is a significant difference in the error distributions on the upsampling layers.

Latency flame graph

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

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图形到TensorRT引擎的转换失败案例,以及报告的NVIDIA错误识别。

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

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

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

基于自动驾驶车辆的NVIDIA-TensorRT推理实时优化相关推荐

  1. 基于自动驾驶车辆的激光雷达与摄像头之间的在线标定算法

    原文首发于微信公众号「3D视觉工坊」--基于自动驾驶车辆的激光雷达与摄像头之间的在线标定算法 本文英文名为<Automatic Online Calibration of Cameras and ...

  2. 自动驾驶车辆在结构化场景中基于HD-Map由粗到精语义定位

    点云PCL免费知识星球,点云论文速读. 文章:Coarse-to-fine Semantic Localization with HD Map for Autonomous Driving in St ...

  3. 用发型、妆容和面部形态解释人脸识别准确性的性别差异;在CARLA实施的基于交叉口情况覆盖的自动驾驶车辆验证和确认框架;迈向医学同行影响的Shapley价值图框架;确定运动想象脑机接口中各种用户状态和特

    中文标题:用发型.妆容和面部形态解释人脸识别准确性的性别差异 英文标题:Gendered Differences in Face Recognition Accuracy Explained by H ...

  4. 城市场景中自动驾驶车辆基于高精度地图的视觉语义定位

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源丨自动驾驶专栏 论文链接:https://ieeexplore.ieee.org/document ...

  5. 基于激光雷达的自动驾驶车辆障碍物检测研究的选题意义和目的

    回答:基于激光雷达的自动驾驶车辆障碍物检测研究的选题意义在于提升驾驶安全,降低交通事故的发生率,实现智能驾驶.目的则是探索激光雷达技术在自动驾驶车辆障碍物检测中的应用,开发出高效.准确的检测算法,为智 ...

  6. 综述:城市道路自动驾驶车辆规划与控制技术

    作者 | 深蓝学院  编辑 | 深蓝AI 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[规划控制]技术交流群 后台回复[规划控制综述 ...

  7. 城市道路自动驾驶车辆运动规划和控制技术综述(1)

    城市道路自动驾驶车辆运动规划和控制技术综述 本文为翻译<A survey of motion planning and control techniques for self-driving U ...

  8. 小米人形机器人“铁大”学会敲架子鼓;​大疆 Mini 3 将上市;4990万美元,巴菲特旗下公司将开发军用自动驾驶车辆……...

    本周,有哪些AI新鲜事? 产业界 小米机器人铁大学会敲架子鼓,未来软硬件还需加强 今年8月,小米的人形机器人CyberOne正式亮相,小名叫铁大.它是一个比较轻量级的机器人,1.77米的身高,只有54 ...

  9. 自动驾驶车辆控制测评标准

    自动驾驶中,车辆控制是基础,以什么指标来测评就显的很关键,以下是Apollo 车辆控制评测分析指标,可以在此基础上做裁剪,来满足自己自动驾驶车辆控制的需求. 序号 参数 名称 说明 平均控制性能相关参 ...

最新文章

  1. php文章编辑页面,zblogphp在文章页面中增加直达后台编辑该文章内容功能
  2. 微软2013暑期实习笔试题目第5题分析
  3. 流式细胞凋亡检测实验常见问题解析
  4. 一个IT时代的终结:109岁的IBM将分拆为两家公司
  5. java 前台播放视频_「纯js项目」海康视频项目,java后台+前台web显示的,望提供思路!...
  6. iPhone 12 Pro Max机模曝光:有乔布斯内味儿了
  7. Ubuntu10.10 Server+Nginx+Django+Postgresql安装步骤
  8. 国家缩写大全 mysql_所有国家英文缩写
  9. rup软件测试案例,胖子说RUP - 软件测试网 _领测软件测试网站-中国软件测试技术第一门户...
  10. 软件工程师面试7大技巧
  11. 计算机毕业设计ssm网上花店系统0716c系统+程序+源码+lw+远程部署
  12. ubuntu unity 3D桌面效果
  13. 汇率计算器 by React
  14. openfoam一些报错的原因(持续更新)
  15. bls java_Java PairingFactory.getPairing方法代碼示例
  16. AM5728-Uboot SPL 代码走读
  17. [Pandas技巧] 多列值合并成一列
  18. 手撸的一个快递查询系统,竟然阅读量过1.8w
  19. iOS】AVPlayer 播放音视频
  20. NOTA-WL12,68Ga-NOTA-WL12一种基于肽的正电子发射断层扫描 (PET) 显像剂

热门文章

  1. 从言行合一到知行合一
  2. 浅谈MySQL存储引擎-InnoDBMyISAM
  3. 2022-2028年中国体育赛事产业深度调研及投资前景预测报告
  4. Bert系列(三)——源码解读之Pre-train
  5. 梯度下降优化算法综述与PyTorch实现源码剖析
  6. SQL函数Group_concat用法
  7. Android Animation (安卓动画)概念简介
  8. 汇编语言中将数据、代码、栈放入不同的段
  9. LeetCode简单题之比较含退格的字符串
  10. 第三个Python程序:Python函数