关于美团:美团无人车引擎在仿真中的实践

50次阅读

共计 5282 个字符,预计需要花费 14 分钟才能阅读完成。

1. 引言

过来几年,主动驾驶技术有了飞速发展。国内也呈现了许多主动驾驶守业企业,这些公司以百度开源我的项目 Apollo 为终点,大都能够间接进行公开路线测试,公开路线测试也成为促成技术提高的次要办法。根底问题得以解决之后,行业面临的更多是长尾问题,依附路测驱动主动驾驶能力建设的形式变得不再高效,离线仿真的位置日益凸显。行业头部企业在仿真的投入非常微小,Waymo 公司 2019 年颁布的仿真里程是 100 亿英里,是路测里程的 1000 倍。

相应地,美团无人车团队在仿真上的投入也在逐步增大。在仿真平台的建设中,团队发现公开路线测试和仿真测试看似类似,实际上差别微小:在车载环境下,为了确保零碎的稳固运行,通常要保障肯定资源处于闲暇状态;仿真环境则不同,如何高效利用资源,如何实现压迫资源的同时确保仿真后果与路测后果统一成为了要害指标。在应答这些挑战的过程中,美团提出了无人车引擎的概念,将车载与离线环境的差别隔离起来:功能模块无需任何更改便能够满足两种场景的须要。

本文首先会介绍无人车引擎的概念,并以仿真环境面临的挑战为线索介绍美团无人车引擎的外围设计。

02 无人车引擎

概念

无人车引擎是主动驾驶的基础设施,在机制、工具和计算模型上对功能模块提供反对,隔离主动驾驶所处环境,使各功能模块专一于本身性能。

在机制层,他为各功能模块提供通信、调度、数据、配置、异样监控等反对。

在应用层,引擎为各功能模块提供调试、可视化、性能调优、成果评估等工具反对。

在模块层,引擎为各功能模块提供对立的计算模型和运行环境,确保他们在车上环境、分布式环境、调试环境下的行为统一。

美团无人车引擎的架构图如下:

如图 1 所示,作为引擎撑持的次要局部,Perception、Localization、Planning 等是主动驾驶零碎中重要的功能模块,它们实现了无人车零碎的外围性能。引擎则在机制和工具,高低两个方向上撑持他们:各功能模块依照引擎的标准开发,间接或者间接地应用引擎机制层提供的性能并自然而然地取得工具的反对。比方,功能模块只有应用引擎的通信工具,就能间接取得数据落盘、性能报表调试信息可视化的反对,同时基于这些路测数据,在仿真环境下,功能模块会主动取得单步调试、成果评估等性能反对。

主动驾驶引擎面临的挑战

图 1 中所列举的性能是引擎的根底组成部分,引擎所提供的远不止于此,对于多种环境的反对才是美团无人车团队引入引擎概念的真正起因。后面提到,无人车首先运行在车载零碎中,随着技术和环境的变动,更多地运行于仿真环境下,二者截然不同。车载环境下,无人车零碎的运行环境较好,为了保障各功能模块可能失常运行,CPU、GPU、内存等资源要提供肯定水平的冗余。而仿真环境的要求齐全不同:从用户的角度看,仿真的用户是工程师,他们冀望仿真工作可能在确定工夫内实现尽量多的工作;从集群的角度看,他们心愿仿真可能尽量晋升资源利用率。接下来的局部将介绍无人车零碎在这两类环境下会面临哪些挑战,以及美团无人车团队如何通过引擎应答这些挑战。

行为一致性的挑战

晚期,美团无人车团队依赖于 ROS 搭建无人车零碎,在车载环境下,ROS 的体现合格。然而在开始仿真建设后,团队遇到很多问题,其中最突出的是“行为一致性问题”,这个问题具体是指:无人车零碎在运行过程中,当呈现系统资源的变动,行为也随之发生变化。比方,当仿真工作在一台机器上运行时,零碎产生的后果和这台机器的状态无关,这台机器被独占地应用或是和其它工作同时运行,后果会有差别。而且,即便不思考资源利用率,让仿真工作独占机器资源,同一个工作运行两次,后果也会有强劲的扰动。

更重大状况产生在离线环境,此情境谋求资源利用率的最大化,意味着计算资源的非常缓和,扰动将变得不再轻微,后果将变得更不牢靠,仿真的后果也就失去了价值。

因而,如何在车上和离线两套截然不同的环境下确保后果的一致性,是仿真引擎必须解决的问题。此问题由以下两个起因造成:一是功能模块时序的不统一;二是功能模块外部执行的不统一。

时序一致性

为了介绍什么是时序一致性,首先要介绍一下无人车零碎中时序的概念。

无人车零碎由多个功能模块组成,功能模块之间有数据依赖关系,比方 Perception 依赖于 Lidar、Camera 的数据,Prediction 依赖于 Prediction 的输入。不同模块的触发条件不同,比方 Planning 是根据时钟触发的而 Prediction 是依赖于 Perception 的数据触发的。由数据关系和触发条件造成的功能模块的执行程序就是主动驾驶零碎的时序。在现实状况下,每个模块都能在满足触发条件时立即执行并在预期的工夫内实现工作,也就是说,只有保留各模块的输入就能够齐全复现线上的问题,离线仿真呈现的问题在路测时也必然呈现。

然而现实情况远比这简单,举例来说,当无人车通过拥挤路段时,Perception 须要解决的数据会显著增多,Planning 也可能因为交通参与者过多导致耗时增长,时序必然与现实状况不合乎。如下图 3 所示,在车载环境下这种行为形式是没问题的,然而在仿真环境时却会导致严重后果:每一次计算环境的些许变动都有可能导致时序的变动,进而导致系统行为的差别。

这就是时序一致性问题。为了解决这种问题,美团无人车引入了调度器,时序的一致性由调度器保障。此外,引擎依照不同的利用场景,进一步细化了调度器的品种。其中最简略的调度器是“在线调度器”,它的指标只有一个:在功能模块处于 Ready 状态时执行它,车载零碎中就是应用的这种调度器,它的行为形式也与 ROS 相似,不过他会记录下调度时序以备应用。除此之外,引擎还提供一组离线调度器,以应答不同的应用场景。这里在线和离线的差别依据数据起源判断,如果数据来自传感器那么就是在线调度器;如果数据来自路测记录那就是离线调度器,具体分类如下图 4 所示:

以下是美团无人车引擎提供的调度器品种及他们的应用场景:

  • 在线调度器 :在满足触发条件时立刻触发功能模块,通常在车载环境下会应用;
  • 复现调度器 :依照调度器保留的调度信息复现调度时序,在调试时或复现路测场景时应用;
  • 现实调度器 :依照现实时序调度资源,通常在仿真时应用;
  • 条件驱动调度器 :在条件满足时调度功能模块运行。在这种调度形式下,功能模块的调度密度介于现实调度器和复现调度器之间,他的实现也绝对简略,是利用最宽泛的调度器。

在他们的帮忙下,功能模块执行的时序就能失去保障:只有调度器和输出数据不变,那么无论计算环境如何变动,各功能模块的执行时序总能保持一致。

功能模块的计算模型

时序一致性除了须要调度保障之外,功能模块的外部计算必须是受到调度器调度的。功能模块必须在调度器容许时能力开始执行,在完结时调度器能失去告诉。如果存在脱离调度器之外的计算线程,那么零碎的一致性必然无奈保障。为此,引擎引入了规范计算模型,任何一个功能模块都有应该恪守这个计算模型,从而取得引擎包含一致性保障、单步调试反对、信息可视化等性能的反对。

规范计算模型如下:每一个功能模块都有且仅有一个计算过程并以迭代为单位,每一次调度实现一帧的计算。当然引擎并不管制帧计算外部的细节,帧计算外部的优化由功能模块负责。

规范模型的定义并不一定合乎每一个功能模块的理论状况:比方 Localization,它订阅多类频率不同的传感器数据并以不同的频率输入。在实践中,引擎通过对 Localization 性能的从新拆分实现了标准化。此外,对于像 Perception 这类计算量很大、同时兼具异构计算的功能模块来说,多线程,异步 I / O 的机制必须引入,引擎同时提供了相应的反对确保符合标准模型。

在实际过程中,美团无人车团队破费了相当工夫来实现这些革新。革新实现后仿真后果的权威性失去了增强,更重要的是:零碎的行为不再受内部资源(GPU、CPU、内存等)的影响,这也为离线环境晋升资源利用率扫清了阻碍。接下来介绍无人车引擎如何在功能模块齐全无感的状况下晋升资源利用率。

04 资源利用率问题

后面提到过,车载零碎和仿真零碎环境差别很大:车载零碎为了谋求零碎的安稳运行会保障要害资源有肯定水平的富裕;对于仿真零碎,保留 idle 就是对资源的节约。在零碎的一致性失去保障之后,资源利用率能力成为引擎的优化指标。优化资源利用率蕴含了很多方面,比方数据调度等,因为篇幅所限,这里只介绍与引擎相干的优化工作。接下来的局部,将依据无人车零碎在仿真环境运行时的特点进行优化,他们别离是资源需要不均、功能模块的反复计算、GPU/CPU 计算不均衡。

数据需要不平均

从数据的输出规模上讲,各功能模块是极不平衡的:Perception 和 Localization 依赖于 Lidar 和 Camera 数据,数据使用量占到零碎的 85% 以上(依照数据存储的规模计算,疏忽两头数据,具体比例与开启的 Camera 相干,此处给出概数)。从资源耗费上讲,Perception 和 Prediction 耗费较多的 GPU 计算资源。为了晋升云计算资源的效率,无人车引擎必须反对分布式部署:即一套主动驾驶零碎别离部署与多台机器甚至是跨机房的机器之上的。

为了实现分布式部署,引擎参考了计算图模型的概念,采纳了相似于 Tensorflow 的设计:将功能模块分成了 Node 和 Module 两个局部。其中 Node 负责定义依赖关系,而 Module 负责实现计算。对于近程部署的 Module 来说,引擎提供了 ADVContext 和 Node Stub 的概念用于帮助 Module 实现运算,对于 Module 而言,它对于本身处于环境(近程或者本地)无所不知。

基于图 7 的设计,主动驾驶零碎有了分布式部署的能力:一套主动驾驶零碎能够运行于一组机器之上。晋升离线效率的致力不再局限于单台机器,无人车零碎的离线优化取得了更多的伎俩和更广的空间。

反复计算

仿真工作分成多种类型,即有运行单个模块的工作,也有同时执行 Perception、Prediction、Planning 的工作。对于同时运行多个 Module 的工作,放在集群的角度看,很多计算都是反复的。试想一个场景:Planning 引入新办法,工程师心愿可能在最新 Perception 版本上的取得新办法的成果评估后果。对于仿真而言,这是一个经典场景,罕用的办法是离线执行 Perception、Prediction 和 Planning 三个模块并执行 Evaluation 产生报表、评估后果。

一般而言,Perception 的后果受到数据和自身算法迭代的影响,当 Planning 的迭代时,Perception 的后果不会受到影响,它的输入齐全能够复用。得益于 Node 和 Module 概念的拆散,Perception Node 所绑定的 Module 齐全能够是一个非计算单元,而是一个数据服务 Module。

在美团无人车数据平台和无人车引擎共同努力下,通过 Data Service Module, 这个常见的仿真工作的流程在工程师感知不到的状况下变成了图 9 这样。不同版本的 Perception 的输入后果被保留下来,Prediction 和 Planning 只有应用之前的后果,防止了 Perception 的反复计算。

GPU 计算分流

无人车零碎是一个同时具备重度 CPU 计算和重度 GPU 计算零碎,两局部的计算是不均衡的。引擎为了晋升 GPU 资源的利用效率,在外部集成了模型治理的性能同时提供了本地和近程两种 Prediction 的机制。再联合分布式部署形式,零碎能够齐全部署于 CPU 集群之上,模型相干的计算能够通过 RPC 申请在 Model Serving 上实现。通过 GPU 和 CPU 计算的隔离,引擎帮忙晋升了 GPU 和 CPU 计算资源的利用率。

05 论断

在继续的实际中,美团无人配送团队抽离出一套主动驾驶引擎,为功能模块提供机制和工具的同时,它还提供了对车载(低时延)和仿真(高吞吐)两套环境的适配。此外,配合美团的大数据基础设施以及在此基础之上专为无人车建设的数据平台,美团无人车逐渐建设了欠缺的主动驾驶基础设施。将来,心愿在引擎的帮忙下可能隔离功能模块、计算平台、运行环境,使得主动驾驶能力迭代与主动驾驶落地利用两个方向上的工作可能独立发展,齐头并进,放慢美团无人车的落地步调。

对于美团无人配送

美团无人车配送核心成立于 2016 年,由美团首席科学家夏华夏博士领导。美团无人车配送围绕美团外卖、美团跑腿等外围业务,通过与现有简单配送流程的联合,造成了无人配送整体解决方案,满足在楼宇、园区、公开路线等不同场景下最初三公里的外卖即时配送需要,晋升配送效率和用户体验,最终实现“用无人配送让服务触达世界每个角落”的愿景。

招聘信息

美团无人车配送核心大量岗位继续招聘中,诚招算法 / 零碎 / 硬件开发工程师及专家。欢送感兴趣的同学发送简历至:ai.hr@meituan.com(邮件题目注明:美团无人车团队)。

想浏览更多技术文章,请关注美团技术团队(meituantech)官网微信公众号。在公众号菜单栏回复【2019 年货】、【2018 年货】、【2017 年货】、【算法】等关键词,可查看美团技术团队历年技术文章合集。

正文完
 0