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

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年货】、【算法】等关键词,可查看美团技术团队历年技术文章合集。

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据