Uber大型数据集机器学习平台Michelangelo的介绍

141 阅读28分钟
原文链接: zhuanlan.zhihu.com

2017年9月,我们发布了一篇文章,向更广泛的技术社区介绍了优步的机器学习平台Michelangelo。在那时,我们拥有超过一年的生产经验,并拥有第一个版本的平台,并与我们的许多团队合作,以构建,部署和操作他们的机器学习(ML)系统。

随着我们平台的成熟和优步的服务不断发展,我们看到整个公司的ML部署激增。在任何给定时间,代表数千个模型的数百个用例被部署在平台上的生产中。每秒都有数以百万计的预测,数百名数据科学家,工程师,产品经理和研究人员在整个公司内部研究ML解决方案。

在本文中,我们从过去三年的平台角度反思了Uber在Uber的演变。我们通过观察在优步开发米开朗基罗和扩展ML的路径来回顾这一历程,深入探讨优步当前的方法和未来开发ML平台的目标,并提供一些经验教训。除了平台的技术方面,我们还会考虑重要的组织和流程设计考虑因素,这些因素对我们在优步的ML成功至关重要。

三年零到100

2015年,ML未在Uber广泛使用,但随着我们公司规模扩大,服务变得更加复杂,很明显ML有机会产生转型影响,并且在整个公司内普遍部署ML的想法迅速成为战略重点。

虽然米开朗基罗从一开始的目标是在Uber上实现ML的民主化,但我们从小规模开始,然后逐步建立起系统。米开朗基罗最初的重点是实现大规模批量培训和生产批量预测工作。随着时间的推移,我们添加了集中式功能存储,模型性能报告,低延迟实时预测服务,深度学习工作流程,笔记本集成,分区模型以及许多其他组件和集成。

在短短三年内,优步从没有集中的ML工作和一些定制的ML系统,到拥有先进的ML工具和基础设施,以及数百个生产ML用例。

优步的ML用例

优步将ML用于各种各样的应用程序。Uber不是将ML应用于几个关键领域(例如广告优化或内容相关性),而是具有更加均匀的ML解决方案。在本节中,我们将讨论过去三年中出现的几个米开朗基罗用例,突出了Uber在Uber的多样性和影响:







我们如何在优步扩大ML

作为一个平台团队,我们的使命是释放ML的价值并加速其在公司各个角落的采用。我们通过使工具民主化并支持我们的技术团队需要来实现这一目标,即优化开发人员速度,端到端所有权,软件工程严谨性和系统灵活性。

对于数据科学家来说,我们的工具简化了构建和部署ML系统的生产和运营方面,使他们能够端到端地拥有自己的工作。对于工程师来说,优步的ML工具简化了这些系统背后的数据科学(特征工程,建模,评估等),使他们可以轻松地培训足够高质量的模型而无需数据科学家。最后,对于建立专业ML系统的经验丰富的工程团队,我们提供米开朗基罗的ML基础架构组件,以实现可定制的配置和工作流程。

在Uber这样的公司成功扩展ML需要的不仅仅是技术权利 - 组织和流程设计也有重要的考虑因素。在本节中,我们将分析三个支柱的关键成功因素:组织,流程和技术。

组织

对ML问题的广泛变化和有限的专家资源使得组织设计对于机器学习尤其重要且具有挑战性。虽然优步的一些ML项目由拥有多名ML工程师和数据科学家的团队所有,但其他项目则由几乎没有技术专长的团队所有。类似地,一些问题可以通过具有通常可用的开箱即用算法的新手来解决,而其他问题需要使用先进技术进行专家调查(并且通常没有已知的解决方案)。

让合适的人员处理正确的问题对于构建高质量的解决方案并在生产中一致且成功地部署它们至关重要。挑战在于分配稀缺的专家资源并扩大其对许多不同ML问题的影响。例如,如果一个新项目需要计算机视觉知识,那么哪种组织结构将允许优步以符合公司优先级的方式有效地分配专家资源?

经过几次迭代,优步目前的主要职责是:



让我们来看看一些关键团队以及他们如何协同工作来设计,构建和部署新的ML系统。

产品团队

我们发现,如果产品工程团队拥有他们在生产中构建和部署的模型,那么它最有效。例如,我们的地图服务团队拥有预测优步ETA的模型。产品团队通常拥有使用优步ML平台构建和部署模型所需的全套技能。当他们需要额外的专业知识时,他们会得到研究和/或专家团队的帮助。

产品组织有时也会有专门的团队帮助解决平台提供的内容与特定产品工程团队所需的差距。这些团队根据用例调整集中式平台工具,并通过量身定制的工具和工作流填补功能差距。例如,优步市场组织中的许多团队在每个城市和产品的培训,评估和部署模型方面都有类似的工作流程。Marketplace团队创建了位于米开朗基罗之上的专业工具,使管理这些Marketplace ML项目变得更加容易。

专家团队

当产品工程团队遇到扩展其能力或资源的ML问题时,他们可以求助于内部专家团队寻求帮助。优步的专家在不同领域拥有深厚的专业知识,如NLP,计算机视觉,推荐系统,预测,并与产品工程团队合作,共同构建量身定制的解决方案。例如,我们的COTA项目旨在将专家团队与产品团队配对,为我们的业务和客户创造巨大的影响力。

通常,这些项目持续几周到几个季度。由于项目风险较小且接近生产投入,产品团队通常会增加相关的专职专家来填补专业知识空白,确保他们能够独立维护系统,并释放专业资源。

研究团队

专家和产品工程团队经常与优步的AI研究小组 AI Labs合作,就问题进行合作,并指导未来研究的方向。研究团队通常不拥有生产代码,但他们经常与不同团队密切合作解决应用问题。当研究人员开发相关的新技术和工具时,平台工程团队将它们集成到公司范围的平台中,从而允许在整个公司内轻松利用新技术。

ML平台团队

Michelangelo平台团队构建并运行通用ML工作流程和工具集,产品工程团队直接使用它来构建,部署和操作机器学习解决方案。

随着我们的系统变得更加复杂并且我们解决的问题变得更加复杂,需求也会随着灵活性,可扩展性和特定领域的ML开发体验而增长。我们正在开发其他一些更具特定领域的平台,以解决米开朗基罗工作流工具无法提供的专业用例。这些新平台团队重用了许多现有的Michelangelo平台,并为产品团队提供专业的ML开发工作流程。例如,正在构建NLP和计算机视觉特定平台,其中包含特殊的可视化工具,预先训练的模型,元数据跟踪以及其他不适合通用平台的组件。

处理

随着优步的ML运营的成熟,许多流程已证明对我们团队的生产力和效率有用。共享ML最佳实践(例如,数据组织方法,实验和部署管理)并建立更加结构化的流程(例如,启动审核)是指导团队并避免重复其他人错误的有价值方法。以内部为重点的社区建设工作和透明的规划流程使ML团队参与并协调共同的目标。

启动模型

设计可靠的流程以避免常见的开发陷阱并验证预期的模型行为对于在组织中安全地扩展ML至关重要。ML系统特别容易受到意外行为,棘手的边缘情况以及复杂的法律/道德/隐私问题的影响。然而,在实践中,风险概况在不同用例之间存在显着差异,需要定制的批准和启动流程。例如,启动使用匿名数据的ETA预测模型的自动更新比启动新的定价模型需要更少的隐私审查。

出于这些原因,产品组织(例如,Uber Eats或Marketplace团队)拥有围绕其ML模型的启动过程。这些团队通过集中的发布手册来调整流程到他们的产品领域,该手册通过围绕实验和启动ML模型的一般产品,隐私,法律和道德主题。产品团队自己最好地了解不同模型行为的产品含义,最适合与相关专家协商以评估和消除风险。

ML团队的协调计划

当需求超过平台团队的路线图时,产品工程团队可以感受到分支的愿望,并根据他们的需求构建自己的系统。需要注意确保团队有能力解决他们自己的问题,同时还需要公司进行良好的工程权衡以避免分散和技术债务。在Uber,我们组建了一个由高级领导组成的内部团队,负责监督整个公司ML工具的发展,以确保我们进行智能权衡,并保持长期的架构一致性。这对于解决这些棘手且有时敏感的情况非常宝贵。

社区

在整个公司范围内扩展高质量的ML需要一个连接和协作的组织。

为了建立一个内部社区,我们举办了一个名为UberML的年度内部ML会议。我们最近接待了大约500名员工,50多个团体就他们的工作提出了讲座或海报。这样的事件使从业者能够交换想法,庆祝成就,并为未来的合作建立重要的联系。优步的团队还组织社区建设活动,包括ML阅读小组,谈话系列,以及优步的ML爱好者的常规棕色包午餐,以了解我们构建它们的个人的一些内部ML项目。

我们对社区的关注超出了我们自己的范围。我们的团队还通过会议,发表论文,为开源项目做贡献以及与其他公司和学术界合作开展ML项目和研究,与外部ML社区密切合作。多年来,这个社区已经发展成为一项全球性的努力,分享最佳实践,在尖端项目上进行合作,并普遍改善该领域的状况。

教育

ML团队始终在学习是很重要的。他们需要掌握ML理论的发展,跟踪和学习内部ML项目,并掌握ML工具的使用。有效共享信息和教育ML相关主题的适当渠道至关重要。

优步ML教育在员工的第一周开始,在此期间我们为所有技术人员举办ML和米开朗基罗训练营的特别会议。当米开朗基罗发布主要新功能时,我们会与经常使用它们的员工一起举办特殊培训课程。关键工具和用户工作流程的文档也有助于鼓励知识共享和扩展我们平台工具的采用。

办公时间也由公司内不同的ML小组负责,以便在出现问题时提供支持。在Uber工作ML项目的人往往是天生的好奇和饥饿的学习者。上面提到的许多社区主导的举措是团队成员跟上内部和外部发展的好方法。

技术

任何ML系统的技术方面都有无数的细节。在优步,我们发现以下高级别领域尤为重要:

  • 端到端工作流程:ML不仅仅是培训模型; 您需要支持整个ML工作流程:管理数据,培训模型,评估模型,部署模型和进行预测,以及监控预测。
  • 作为软件工程的ML :我们发现在ML开发和软件开发之间进行类比,然后将软件开发工具和方法的模式应用到我们的ML方法中是有价值的。
  • 模型开发人员速度:机器学习模型开发是一个非常迭代的过程 - 创新和高质量的模型来自大量的实验。因此,模型开发人员的速度至关重要。
  • 模块化和分层架构:提供端到端工作流对于处理最常见的ML用例非常重要,但是为了解决不太常见且更专业的案例,拥有可以有针对性地组装的原始组件非常重要。

端到端的工作流程

早期,我们认识到像Uber这样的大公司成功的ML需要的不仅仅是培训好的模型 - 您需要对整个工作流程提供强大,可扩展的支持。我们发现相同的工作流程适用于各种场景,包括传统的ML和深度学习; 监督,无监督和半监督学习; 在线学习; 批量,在线和移动部署; 和时间序列预测。一个工具提供所有东西并不重要(尽管这就是我们的工作方式),但拥有一套可以解决工作流程所有步骤的集成工具非常重要。

管理数据

这通常是ML流程中最复杂的部分,包括模型培训期间发生的数据访问,功能发现,选择和转换,以及部署模型时这些功能的管道生产。在优步,我们建立了一个功能商店,允许团队共享高质量的功能,并在模型经过培训和部署后轻松管理这些功能的离线和在线管道,确保在线和离线版本之间的一致性。

火车模型

在Michelangelo,用户可以使用我们的Data Science Workbench(DSW)从我们的Web UI或Python中训练模型。在DSW中,我们支持GPU集群上的深度学习模型的大规模分布式训练,CPU集群上的树和线性模型,以及使用无数可用的Python工具包对各种模型进行低规模培训。除了训练简单模型之外,用户还可以组成更复杂的转换管道,集合和堆叠模型。米开朗基罗还提供可扩展的网格和随机超参数搜索,以及更高效的贝叶斯黑盒超参数搜索。

管理和评估模型

找到数据,算法和超参数的正确组合是一个实验和迭代过程。快速有效地完成此过程需要所有实验和结果的自动化。它还受益于良好的可视化工具,用于理解每个模型的性能,以及能够将多个模型相互比较,以查看改善模型性能的配置模式和特征数据。在米开朗基罗管理的模型经过严格管理,版本控制,完全可重复,并具有丰富的模型准确性和可解释性可视化。

部署模型并进行预测

一旦培训了有效模型,模型开发人员就能够将模型部署到临时或生产环境中非常重要。在米开朗基罗,用户可以通过我们的Web UI部署模型,以方便或通过我们的API与外部自动化工具集成。在部署时,模型和相关资源被打包,然后被推送到离线作业以进行计划批量预测或推送到在线容器,以通过Thrift进行实时请求 - 响应预测。对于在线和离线模型,系统会自动为要素存储中的数据设置管道。

监控数据和预测

模型经过培训,最初根据历史数据进行评估。这意味着用户可以知道模型过去运行良好。但是,一旦部署模型并使用它来对新数据进行预测,通常很难确保它仍能正常工作。模型会随着时间的推移而降级,因为世界总是在变化。此外,生产模型的数据源或数据管道中可能存在破损或错误。在这两种情况下,监控(和警告)模型在生产中所做的预测是至关重要的。我们有两种方法来监控生产中的模型。最准确的方法是记录生产中的预测,然后将这些预测结合到我们的数据管道收集的结果中; 通过将预测与实际情况进行比较,我们可以计算精确的准确度指标。如果结果不易收集或我们无法轻易将预测结果与结果相结合,则第二种选择是监控特征和预测的分布并随时间进行比较。这是一种不太精确的方法,但仍然可以经常检测到有问题的特征变化和相应的预测。

ML作为软件工程

米开朗基罗团队的方法的一个重要原则是将机器学习视为软件工程。在生产中开发和运行ML应该像软件工程一样迭代,严格,测试和方法。我们发现在ML和软件开发之间进行类比,并将相应和成熟的软件开发工具和方法的见解应用于ML,这非常有价值。

例如,一旦我们认识到模型就像编译软件库,我们就会清楚地知道,我们希望在严格的版本控制系统中跟踪模型的训练配置,就像您控制库源代码一样。跟踪用于创建模型的资产和配置非常重要,以便以后可以再现(和/或改进)。在深度学习模型中的转移学习的情况下,我们跟踪整个谱系,以便在需要时可以重新训练每个模型。如果没有良好的控制和工具,我们已经看到了构建和部署模型但由于数据和/或培训配置丢失而无法重现的情况。

此外,为确保软件正常运行,在部署软件之前运行全面测试非常重要; 同样地,我们总是在部署之前针对保持集评估模型。同样,对软件系统进行良好监控以确保它们在生产中正常工作非常重要; 这同样适用于您希望监控生产中的模型的机器学习,因为它们的行为可能与在离线评估中的行为不同。

模型开发者速度

构建有影响力的ML系统是一门科学,需要多次迭代才能做到正确。迭代速度会影响ML在整个组织中的扩展方式以及团队在任何给定问题上的效率。米开朗基罗团队的首要任务是使数据科学团队更快地完成任务。我们走得越快,我们可以运行的实验越多,我们可以测试的假设就越多,我们就能得到更好的结果。

下图显示了我们如何考虑标准ML开发过程以及其中的不同反馈循环。我们一直在思考这个过程并收紧这些循环,因此迭代和敏捷的数据科学变得更容易,更快捷。



米开朗基罗的“零对一速度” 或“ 时间价值速度” 对于ML如何在优步传播至关重要。对于新的用例,我们专注于通过微调不同能力的人的入门工作流程来降低进入门槛,并通过简化的流程来获得基本模型并运行良好的默认值。

对于现有项目,我们研究迭代速度,它可以控制数据科学家在离线测试或在线实验中迭代和获取新模型或功能的反馈速度。

事实证明,一些原则在使团队快速发展方面非常有用:

1.解决数据问题,以便数据科学家不必这样做。

处理数据访问,集成,功能管理和管道通常会浪费大量数据科学家的时间。米开朗基罗的特色商店和功能管道对于解决许多数据科学家头痛问题至关重要。


2.自动化或提供强大的工具来加速常见流程。


3.使部署过程快速而神奇。

米开朗基罗隐藏了在UI中单击一下后在生产中部署和监控模型和数据管道的细节。


4.让用户使用他们最爱的工具 - “去顾客”。

Michelangelo允许在Python,笔记本,CLI中进行交互式开发,并包含用于管理生产系统和记录的UI。


5.实现协作和重用。

同样,米开朗基罗的功能存储对于使团队能够重用其他团队已经识别和构建的重要预测功能至关重要。


6.引导用户完成结构化工作流程。


走近客户:笔记本和Python

当米开朗基罗启动时,最紧迫和影响最大的用例是一些非常高规模的问题,这使我们围绕Apache Spark(用于大规模数据处理和模型培训)和Java(用于低延迟,高吞吐量在线服务)构建。这种结构适用于许多模型的生产培训和部署,但在开销,灵活性和易用性方面仍然有很多不足之处,特别是在早期原型设计和实验期间。

为了提供更大的灵活性,易用性和迭代速度,我们正在将主要模型构建工作流程转移到优步的DSW。DSW可以在自然的笔记本界面中灵活轻松地访问优步的数据基础架构和计算资源。它与我们的云和本地GPU集群的集成允许在笔记本环境中快速原型化Michelangelo-ready ML模型,并在Michelangelo中轻松保存这些模型以进行部署和扩展服务。我们正在转向使用DSW作为米开朗基罗的主要模型探索和原型设计界面。

为了支持我们一直通过UI提供的笔记本环境中的相同可扩展建模,我们已经发布了(内部现在,但我们希望很快开源)一组扩展Spark以提供一组自定义Estimator的库TransformerPipeline组件,用于公开批量,流式传输和基于请求/响应的评分的接口(后者在Spark的标准版本中不可用)。这些组件可以使用PySpark进行组装,然后上传到Michelangelo,以便使用我们的纯Java服务系统进行部署和服务。这将Python的大部分易用性与Spark和Java的规模结合在一起。

简单的Python建模有利于简化和访问更丰富的ML和数据工具包生态系统。为了解决这个问题,我们最近扩展了米开朗基罗,以便从任何来源提供任何类型的Python模型,以获得更灵活的建模支持。用户在DSW笔记本(或其他首选的Python环境)中构建他们的模型,然后使用Michelangelo PyML SDK将模型和依赖关系打包并上传到Michelangelo进行存储,部署和服务(批量和在线)。

快速学习的速度

深度学习模型的开发工作流程通常与其他ML开发工作流程有不同的要求。开发人员通常会编写更详细的培训代码,并需要专门的计算资源(GPU)。在过去的一年里,我们一直专注于使这一过程顺利而快速地进行。

米开朗基罗现在拥有很好的工具,可以在优步自己的数据中心和各种公共云中的不同GPU机器上配置和运行培训工作。生产TensorFlow模型由我们现有的高规模Michelangelo模型服务基础设施(现在与TensorFlow服务集成)或我们的PyML系统提供。我们有专门的工具来帮助建模者跟踪他们的实验和开发,但是一旦模型被保存在米开朗基罗中,它就像处理系统中的任何其他模型一样对待。

使用AutoTune加速模型开发

AutoTune是优步的一种新型通用优化即服务工具。它已经集成到米开朗基罗中,允许建模人员轻松使用最先进的黑盒贝叶斯优化算法,以更有效地搜索最佳的超参数集。它是迄今为止我们在米开朗基罗提供的不太复杂的搜索算法的新推荐替代品。这意味着在相同的训练时间或更少的训练时间内获得更高精度的模型以获得高质量的模型。

模块化和分层产品

我们在开发米开朗基罗时遇到的紧张局势之一是为最常见的ML工作流程提供端到端支持,同时还提供支持不太常见的ML工作流程的灵活性。

最初,我们的平台和基础架构组件组合成一个系统。随着我们的系统变得越来越复杂,我们解决的问题变得越来越多样化和复杂化,需求增加了额外的灵活性,可扩展性和特定于域的开发体验,超出了单一平台所能提供的范围。

如上所述,我们能够通过桥梁团队解决其中一些问题。但是一些团队希望将米开朗基罗的部分与他们自己的组件混合搭配到新的工作流程中。其他团队需要专门的开发工具来处理他们的用例,但从头开始构建这些工具是没有意义的。我们对Michelangelo架构进行了一些重大更改,以尽可能地利用我们现有的系统,同时随着ML在整个公司成熟的需求不断发展:

我们还发现,对于某些问题域,专业的开发经验是有用的。这可以像应用和评估预测模型的预构建工作流一样简单,也可以更加个性化,例如为特定计算机视觉应用程序构建的交互式学习和标记工具。我们希望通过允许平台开发人员利用米开朗基罗的底层基础架构来支持所有这些用例。

为了解决这些问题,我们正在将米开朗基罗的基础设施分解为明确的基础架构层,并使团队可以利用该基础架构来构建更专业的平台,例如NLP或Vision。完成后,我们将拥有两个客户群:使用Michelangelo平台构建和部署模型的模型构建者,以及使用Michelangelo基础架构组件构建定制解决方案或更专业平台的ML系统构建者。

主要经验教训

在过去的三年里,我们通过建立米开朗基罗并帮助扩大优步的机器学习,我们从成功和失败中学到了很多东西。在某些情况下,我们第一次就把事情做对了,但更频繁地,我们需要花费一些时间来发现什么对我们最有效。

  • 让开发人员使用他们想要的工具。这是一个多年来我们需要多次迭代才能找到正确方法的领域。当我们启动米开朗基罗时,我们首先关注最高规模的用例,因为这是我们可以产生最大影响的地方。虽然早期对Scala,配置和基于UI的工作流的关注使我们能够支持大规模的用例,但它使我们远离成熟的,记录良好的编程接口,模型开发人员已经熟悉它们。由于建模工作是非常迭代的,因此最重要的是关注开发人员的速度(因此快速的迭代周期)以及高可扩展性。我们已经开始采用混合解决方案,我们提供了一个更难以使用的高规模选项和一个非常易于使用的低规模系统。
  • 数据是ML中最难的部分,也是最重要的部分。建模人员花费大部分时间在培训时选择和转换功能,然后构建管道以将这些功能提供给生产模型。数据损坏是生产ML系统中最常见的问题。在Uber,我们的功能存储通过允许建模人员轻松共享高质量功能,自动部署这些功能的生产流水线并随着时间的推移进行监控,解决了许多这些问题。一旦定义了功能,我们还可以利用优步的数据质量监控工具来确保功能数据随时间推移是正确的。
  • 要使开源和商业组件大规模运行,需要付出很大的努力。Apache Spark和Cassandra都是流行和成熟的开源项目; 然而,在每种情况下花了一年多的时间才能使它们在优步的规模上可靠地工作。我们在早期尝试并最终放弃的商业工具包中遇到了类似的挑战。
  • 根据用户反馈进行迭代开发,并考虑长期愿景。在我们建立米开朗基罗时,我们几乎总是与客户团队密切合作,共同开发新功能。我们首先要为一个团队很好地解决问题,一旦它在生产中成功运行,我们就会对公司的其余部分进行推广。这个过程确保我们实际使用的解决方案。它还有助于保持团队的参与和领导支持,因为他们看到了稳定的影响。同时,为用户可能无法看到的长期投注预留一些时间非常重要。例如,在真正的需求出现之前,我们就开始研究深度学习工具; 如果我们等了,我们就来得太晚了。
  • 实时ML很难做到正确。大多数现有数据工具都是为离线ETL或在线流媒体构建的。目前还没有很好的工具可以解决实时ML系统所需的混合在线/离线功能(批量,流媒体和RPC)。作为我们的功能商店的一部分,这仍然是优步的重点关注点。


旅程刚刚开始,还有很多工作要做。这是一个不断发展的空间,还有许多课程需要学习。如果您有兴趣解决突破规模限制的机器学习挑战,请考虑申请我们团队的角色!


http://weixin.qq.com/r/V3XUzBbEm0vkrVKv9yBF (二维码自动识别)


数据分析宝典【手机淘宝口令】:


【数据分析侠 《人人都会数据分析》20万字电子书】https://m.tb.cn/h.3i7mJyz 点击链接,再选择浏览器咑閞;或復·制这段描述¥8iohbTKiaBs¥后到👉淘♂寳♀👈[来自超级会员的分享]


【七月算法 机器学习 深度学习 python数据分析 邹博】https://m.tb.cn/h.3iWDgFB 点击链接,再选择浏览器咑閞;或復·制这段描述¥S8iIbTKiQoX¥后到👉淘♂寳♀👈[来自超级会员的分享]


【机器学习实战Python全套代码包括训练数据集图片数据演示案例】https://m.tb.cn/h.3ik7Hmf 点击链接,再选择浏览器咑閞;或復·制这段描述¥dRgIbTKiBvJ¥后到👉淘♂寳♀👈[来自超级会员的分享]