Uber如何在公司范围内部署机器学习

【导读】2017年9月,Uber 在技术社区发表了一篇文章向大家介绍了 Uber 的机器学习平台 —— Michelangelo。随着平台的日渐成熟,Uber 的业务数量与能力也随之增长和提升,机器学习在整个公司的应用范围越来越广。在本篇文章中,  我们将为大家总结 Michelangelo 在过去一年的时间里取得的成果,回顾Michelangelo 的发展历程,并深入探讨 Uber 机器学习平台当前的发展方向和未来目标。

 

三年时间,从零到一百

 

2015年,机器学习在 Uber 的应用并不广。但随着公司的规模扩大,业务需要也越来越复杂,需要用到机器学习的地方越来越多。如何在公司范围内部署机器学习迅速成为 Uber 的战略重点。

 

Michelangelo 最初的重点是实现大规模批量训练,并进行批量预测。随着时间的推移,Uber 加入了集中式特征存储、模型性能报告、低延迟实时预测服务、深度学习工作流以及许多其他的组件与集成环境。在短短三年内,Uber 已经拥有技术先进的机器学习工具和基础平台,以及上百个机器学习案例。

 

Uber 的机器学习用例

 

Uber 将机器学习用在了各种各样的业务中。在这一部分,我们将为大家介绍在过去三年的时间里几个 Michelangelo 的典型用例,它们体现了机器学习在 Uber 业务中的多样性和影响力:

 

▌ Uber Eats

 

Uber Eats 使用基于 Michelangelo 的多个模型来做预测,以便食客每次打开 APP 都可以有更好的体验。基于机器学习的排名模型会根据历史数据和用户当前的进程信息,来推荐合适的餐馆和菜品。基于 Michelangelo,优食也会根据预测到达时间、历史数据以及餐馆的实时信息,来估算餐食的送达时间。

 

 

▌ 市场预测

 

Uber 的市场团队利用了各种时空预测模型,这些模型能够预测未来各个地点和时间乘坐者的需求,以及司机是否有空。根据所预测的供需不平衡情况,Uber 系统可以提醒司机提前去往最有机会接客的地点。

 

 

▌ 客户支持

 

在 Uber 平台,每天约有 1500 万次出行记录。人们经常把钱包或手机遗忘在车内,或通过Uber 的帮助系统提交各种问题。这些问题单将被提交至客服代表。基于 Michelangelo 的机器学习模型被应用于此,使问题的解决过程更加自动化,并大大提升了速度。

 

 

▌ 乘车检查

 

自 2010 年的第一条 Uber 乘坐记录以来, 每次出行时地图都会使用 GPS 数据。 所以我们知道自己何时处于何地,以及是谁在驾驶。但Uber 希望可以做得更多。利用 GPS 的力量和司机的智能手机中的其他传感器,Uber 的技术可以检测到可能发生的车祸。例如,如果在一次旅程中出现长时间的意外停车,乘客和司机都会收到一条提醒,可提供交通事件援助。

 

 

▌ 预计到达时间(ETAs)

 

对公司来说,最重要的指标之一就是各种预估时间。精确的预估时间对好的用户体验至关重要,这些指标被输入无数其他的内部系统中,来协助判定价格和路线。

 

Uber 的地图服务团队开发了一个复杂的分段路线系统,用来计算基本的预估时间值。这些基本的预估时间具有相同类型的错误。地图服务团队发现他们可以使用机器学习模型来预测这些错误,并用预测的错误来进行修正。由于这个模型正逐个应用在各个城市,Uber 团队发现预估到达时间的准确性大幅提升,在某些情况下,平均预估到达时间的误差减小了 50% 以上。

 

 

▌ 一键聊天

 

一键聊天的功能基于自然语言处理模型,模型可以预测并展示最有可能的回复,使乘客与司机之间的交流更加高效。司机只需按一下按钮,即可回复乘客的消息,从而避免分心。

 

▌ 自动驾驶车辆

 

Uber 的自动驾驶汽车系统使用深度学习模型来实现各种功能,包括物体检测和路线规划。建模人员用 Michelangelo 的 Horovod 在大量 GPU 机器上进行高效的分布式训练。

 

 

Uber 如何一步步拓展机器学习的应用场景

 

作为一支平台团队,Uber 团队的使命是充分利用机器学习的价值,并加速其在公司各个方面的应用。 对于数据科学家 ,Uber 的工具简化了机器学习系统构建与部署过程中的生产和运行。 对于工程师 ,Uber 的机器学习工具简化了这些系统背后的数据科学(如特征工程、建模、评估等),使他们无需数据科学家的帮助,就可以轻松训练出质量足够高的模型。 最后,对于在建立机器学习系统方面经验丰富的工程团队 ,Uber 还提供 Michelangelo 的机器学习基础组件,以实现自定义的配置和工作流。

 

能够在 Uber 这样的公司成功扩展机器学习,需要的不仅仅是技术实力,还有组织与设计流程方面的因素。接下来我们就为大家分析一下 Uber 成功的三个关键因素:组织、流程和技术。

 

 

Michelangelo 机器学习平台的核心战略支柱

 

▌ 组织

 

对于构建高质量的解决方案并将其成功部署来说,让对的人解决对的问题显得尤为重要。例如,如果一个新项目需要计算机视觉方面的知识,那幺 什幺样的组织结构有利于 Uber 高效地分配专家资源,从而保证合适的优先级呢?

 

经过几次迭代,Uber 目前具备以下几种主要角色和职责:

 

 

Uber 机器学习系统中的组织关联

 

1.产品团队

 

团队发现,如果产品工程团队具有自己在生产中构建和部署的模型,效果是最好的。例如,Uber 的地图服务团队就拥有预测 Uber 预计到达时间(ETA)的模型。产品团队经常配备使用 Uber 机器学习平台来构建与部署模型的全套技能。当他们需要额外的技术时,可以从研究或专家团那队得到帮助。

 

2.专家团队

 

当产品工程团队遇到超出能力范围的机器学习问题时,他们可以向内部专家团队求助。Uber 有各个领域的专家,如自然语言处理、计算机视觉、推荐系统、预测,来与产品团队协同构建量身定制的解决方案。例如在COTA 项目中专家团队携手产品团队,为 Uber 业务和用户创造了巨大的影响力。

 

3.研究团队

 

专家和产品工程团队经常与 Uber 的 AI 研究小组(AI Labs)合作,协同解决问题,并为未来的研究指明方向。一般来说,研究团队不用写用于生产的代码,但他们在实际问题上与其他团队的合作非常紧密。当研究员们开发了新的技术和工具时,平台工程团队就会将其集成到公司的平台上,以便新技术可以为全公司所使用。

 

4.机器学习平台团队

 

Michelangelo 平台团队创建并执行了通用的机器学习工作流和工具箱,产品工程团队可以直接用来构建、部署以及运用机器学习解决方案。

 

Uber 的系统越来越高端,需要解决的问题也越来越复杂,随着日渐增长的灵活性、可扩展性,以及特定领域的机器学习开发经验,需求也增长了起来。Uber 也正在开发一些其他的更面向特定领域的平台,来实现一些不适用于 Michelangelo 工作流的特定用例。

 

▌ 流程

 

Uber 的机器学习服务日渐成熟,许多流程对团队的生产力和效率都起到了作用。分享最佳的机器学习实践经验和建立更加结构化的流程,对指明团队方向和避免重复错误都是至关重要的。

 

▌ 技术

 

任何机器学习系统在技术方面都存在无数细节。在 Uber的系统中有以下几个尤为重要的高级领域:

 

端到端的工作流:机器学习不仅仅是训练模型,你需要支持整个机器学习工作流:管理数据、评估模型、部署模型、作出预测、以及监控预测。

 

把机器学习当作软件工程:团队把机器学习的开发与软件开发做类比,然后将软件开发的模式和方法用到机器学习中。

 

模型开发速度:机器学习模型的开发是一个迭代的过程,具有创新性且高质量的模型来自大量的重复试验。因此,模型的开发与迭代速度至关重要。

 

模块化与层次化的架构:在处理大多数普通的机器学习用例时,提供端到端的工作流非常重要,但在处理不太常见且更专业的用例时,有可以进行自定义组装的原始组件就变得尤为关键。

 

1.端到端的工作流程

 

早期 Uber 就认识到,要在公司内成功开展机器学习需要的不仅仅是训练好模型,更需要对整个工作流提供稳定且可扩展的支持。另外团队还发现,同样的工作流可以应用到多个场景中,包括传统机器学习和深度学习,有监督、无监督以及半监督学习,批量、在线和移动部署,时间序列预测。让一个工具做多种工作并不是重点,但拥有一套可以解决工作流中所有步骤的集成工具是非常重要的。

 

2.把机器学习看作软件工程

 

Michelangelo 团队的一个重要原则是,把机器学习看作软件工程。实际的开发和运行机器学习应该和软件工程一样,是一个迭代、严格、经过测试的、且有方法支持的过程。例如,一旦团队认识到一个模型就像编译的软件库,便会在一个严格且可控制版本的系统中,跟踪模型的训练配置,就像控制库源代码的版本一样。跟踪配置这一操作非常重要,因为之后可以将其重复利用,创建新的模型。

 

3.模型开发速度

 

创建可靠的机器学习系统是一门学问,需要进行多次迭代才能达到好的效果。迭代速度影响着机器学习在整个组织的扩展,以及一个团队面对问题的解决效率。Michelangelo 团队的首要任务是让数据科学团队提高速度。团队的速度越快,试验的次数越多,也就能测试更多的猜想,从而得到更好的结果。

 

下图展示了Uber 所考虑的标准机器学习开发流程的思路,以及不同的反馈循环。团队始终在考虑这一流程,并收缩这些循环,使数据科学中的迭代变得更加容易快捷。

 

 

机器学习项目的工作流程

 

4.模块化且层次化的产品

 

团队在开发 Michelangelo 时遇到的问题之一是:在为常见的机器学习工作流提供端到端支持的同时,还要使那些不常见的工作流保持灵活性。

 

最初,这个平台和基础组件组成了一个单独的系统。当系统变得更加复杂时, 需要解决的问题也变得更加多样且复杂。一些团队希望将 Michelangelo 的部分组件与他们自己的组件相结合,构成新的工作流。其他团队需要专门的开发工具来处理他们的用例,但从头开始构建这些工具很显然是不合理的。因此,团队对 Michelangelo 的架构进行了一些重大修改,尽可能地利用现有系统。

 

现在,团队正在将 Michelangelo 的架构分解成明确的基础架构层,让团队可以利用它们来构建更复杂的平台,例如自然语言处理或视觉应用。一旦完成这些工作,就将拥有两个用户群:使用 Michelangelo 平台构建和部署模型的模型构建者,和使用 Michelangelo 基础组件构建定制解决方案或复杂平台的机器学习系统构建者。

 

主要经验教训

 

在过去的三年里,通过构建 Michelangelo 并将机器学习在整个 Uber 进行拓展,整个团队从成功与失败中获得了许多经验教训。在一些案例中,有时候第一次就把事情做对了,但更多的时候团队需要经过反复多次的尝试,才能找到最适合的方法。可以和企业、技术团队负责人,每一个开发人员分享的经验有以下几点:

 

让开发人员使用他们偏好的工具。

 

数据是机器学习中最难的部分,同时也是最重要的部分。

 

要使开源和商业组件实现大规模运行,需要付出很多努力。

 

考虑长期的愿景,根据用户的反馈进行多次开发。

 

实时的机器学习服务很难做到完美。

 

旅程才刚刚开始,仍有许多工作在等着Uber 。这也是一个不断发展的领域,会有更多的东西需要大家学习。

 

原文链接:

 

https://eng.uber.com/scaling-michelangelo/?utm_source=wanqu.co&utm_campaign=Wanqu+Daily&utm_medium=website

作者 | Jeremy Hermann & Mike Del Balso

译者 | 王天宇

发表评论

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