如何高效推进ML模型开发和部署?Uber机器学习平台Michelangelo实践
作者 | Jeremy Hermann & Mike Del Balso
译者 | 王天宇
整理 | Jane
出品 | AI科技大本营
【导读】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
——【完】——
精彩推荐
2018 中国大数据技术大会将于 12 月 6 - 8 日在新云南皇冠假日酒店举行。汇聚超百位国内外实力讲师从学界翘楚到行业一线大拿:
管晓宏:中国科学院院士;
张宏江:源码资本投资合伙人;
张晓东:美国俄亥俄州立大学 Robert M. Critchfield 讲席教授;
陈性元:北京信息科学技术研究院副院长;
周靖人:阿里巴巴集团副总裁;
李浩源:Alluxio 公司创始人&CEO
......
全方位立体解读大数据时代的技术进程,为众技术爱好者奉上一场优质干货盛宴。
推荐阅读
GitHub上25个最受欢迎的开源机器学习库
人工智能进行时:人类的未来与未来的人类
大咖指路:机器学习人才这些方向最紧缺!
罗永浩冲冠一怒
程序员买房指南——LZ的三次买房和一次卖房经历
肖仰华谈知识图谱:知识将比数据更重要,得知识者得天下
实战必读! 发现百万级用户公链漏洞,我们靠的是这套方法
相关文章:

Api 函数: GetCursorPos 与转换
//获取鼠标在窗体中的当前位置 procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer); varstr: string; beginstr : Format(%d,%d,[X,Y]);ShowMessage(str); end;//用 GetCursorPos 获取的是鼠标相对与屏幕的位置 varps:…

向下滚动页面导航悬浮
为什么80%的码农都做不了架构师?>>> 做两个导航,第二个隐藏 下拉到一定位置,显示第二个,position:fixed $(function(){$(window).scroll(function () {var top $(document).scrollTop();var m$(".nav")…

胜过iPhone XS?Google Pixel的“夜视功能”是怎样炼成的
作者 | Marc Levoy、Yael Pritch译者 | 刘旭坤整理 | Jane出品 | AI科技大本营【导读】随着智能手机的不断发展成熟,为了寻找差异化的厂商不断增加摄像头的数量。然而,摄像头的数量越多,就代表拍照的质量越好吗?Google Pixel 手机…

npm导入bootstrap_vue cli3.0如何通过npm引入jquery和bootstrap?
不建议通过npm的方式引入这两个东西,因为这两个东西本身就是打包好的,通过npm的方式过去,还得在webpack中排除掉,迂回。要用就直接在html中通过script和link标签引入。jQuery是时代的产物,如果要用到vue,那…

ABAP 一个隐藏 selection-screen block的实例
以下是一个演示如何通过 selection-screen 中的pushbutton来动态改变屏幕上的字段的显示状态的(即显示或者隐藏)。注意:显示 通过本示例可知selection-screen 中的 field 的显示状态都是 的,在程序中修改其属性 active 的值为 0 时…

python计算文件中字母出现次数_python – 计算文本文件中字母的频率
使用collections.Counter():from collections import Counterwith open(file) as f:c Counter()for x in f:c Counter(x.strip())正如mgilson指出的那样,如果文件不是那么大,你可以简单地做:c Counter(f.read().strip())例:>>> c…

公开课报名 | 详解CNN-pFSMN模型以及在语音识别中的应用
近年来,在深度学习技术的帮助下,语音识别取得了极大的进展,从实验室开始走向市场,走向实用化。基于语音识别技术的输入法、搜索和翻译等人机交互场景都有了广泛的应用。Librispeech是当前衡量语音识别技术的最权威主流的开源数据集…

Ruby开发环境配置
一、 RoR IDE http://deadlock.netbeans.org/hudson/job/ruby/ 你可以从这个地方下载Ruby IDE专用版本的netbeans,只有30MB大小,速度比RadRails还快!netbeans的RoR支持很强大,但也要注意两点: 1) 一定要用JDK6.0&am…

net localgroup 命令详解
http://www.jb51.net/article/24733.htm windows 核心安装中,关闭防火墙的命令 netsh advfirewall set allprofiles state off Hyper-v使用远程管理工具的相关设置: http://technet.microsoft.com/zh-cn/library/cc794756(vws.10).aspx 在SCVMM中添加Hyp…

ii 第七单元 访问网络共享文件系统
挂载网络文件系统 网络文件系统是由网络附加存储服务器通过网络向多个主机提供的一种文件系统 , 而不是由块设备 ( 例如硬盘驱动器 ) 提供的。客户端通过特殊的文件系统协议和格式访问远程存储 Linux 中有两种主要协议可用访问网络文件系统 : NFS 和CIFS 。 访问网络共享的三个…

最新机器学习开源项目Top10
作者 | Mybridge译者 | Linstancy整理 | Jane出品 | AI科技大本营【导读】过去一个月里,我们对近 1400 个机器学习项目进行了排名,并挑选出热度前 10 的项目。这份清单涵盖了包括 OpenAI 最新开发的 RND 算法、Uber 构建的第一个自然语言处理平台、由 Be…

linux批处理mysql数据库_使用批处理对MySQL进行数据批量操作
批处理是一种非交互式运行MySQL程序的方法,如同您在MySQL中使用的命令一样,你仍然将使用这些命令。为了实现批处理,您重定向一个文件到MySQL程序中,首先我们需要一个文本文件,这个文本文件包含有与我们在MySQL中输入的…

JDBC Driver常用连接方法列表
Microsoft SQL Server series (6.5, 7.x and 2000) and Sybase 10JDBC Name: jTDSURL: [url]http://jtds.sourceforge.net/[/url]Version: 0.5.1Download URL: [url]http://sourceforge.net/project/show...?group_id33291[/url]语法: Class.forName("net.sourceforge.jt…

C#强化系列文章四:匿名方法的使用
匿名方法相信很多人都听过,它是C#2.0的一个新特性,顾名思义,匿名方法就是没有名称的方法。那么在C#中的匿名方法有哪些好处,在C#中如何使用呢?匿名方法最明显的好处就是可以降低另写一个方法的工作量,另外一…

AI人才抢夺“生猛”: 应届博士年薪涨到80万元
作者 | 王玉凤来源 | 本文授权转自第一财经人工智能(AI)人才薪水之高、涨幅之大,颇有令人瞠目结舌之感。一年前,针对AI领域的应届毕业生,硕士生约莫能拿到30万元的年薪,博士生则高达50万元。今年࿰…

mysql的表空间是否自动扩展_Oracle修改指定表空间为自动扩展
1.数据文件自动扩展的好处1)不会出现因为没有剩余空间可以利用到数据无法写入2)尽量减少人为的维护3)可以用于重要级别不是很大的数据库中,如测试数据库等2.数据文件自动扩展的弊端1)如果任其扩大,在数据量不断变大的过程中会导致某个数据文件异常的大2)…

3.15好水指数N1能否让饮水健康不失控?
题记:3.15晚会曾曝光碱性水无益健康,过度饮用对人体有害。但现在市场上仍然有企业打着“碱性水有益健康”的招牌做营销,其居心何在呢?饮用水指数N1和中国优水地图在3.15这天正式发布,它们能对我们的饮水健康产生多大的影响? 凯文…

【iOS-cocos2d-X 游戏开发之十四】cocos2dx(c++)中访问object函数
Cocos2dx系列博文的上一篇详细介绍了如何在Xcode中利用jni调用Android的Java层代码,还没有看过的童鞋,请移步到如下博文: 【iOS-cocos2d-X 游戏开发之十三】详细讲解在Xcode中利用预编译并通过Jni调用Android的Java层代码(cocos2dx里访问调用…

mysql实验报告四_实验报告四
实 实 验 报 告 课程名称 数据库实验及课程设计 实验项目 数据查询 实验 仪器 ___________________________ 系 别______信息管理学院______ 专 业________ ____________ 班级/ / 学号_ _ 学生姓名 _____ _____________ 实验日期 成 绩 _______________________ 指导教师 施永香…

京东数科业务架构全披露,陈生强发布城市操作系统和京东钼媒
11 月 20 日,在 JDD-2018 京东数字全球探索者大会上,陈生强宣布,京东数字科技(JD Digits)正式成为京东金融的母品牌,这也意味着它的业务架构逐渐明晰,主要下设了京东金融、京东城市、京东农牧、…

自动化测试十大要点
当一款自动化测试工具引入到一个项目中,我们通常对它给予很高的期望;项目成员希望工具能够尽可能的缩小测试范围、节约成本并缩短项目进度,然而可悲的是,很多采用自动化测试的项目依然失败了。 以下几个方面严重影响着自动化测试的…

DataGridView取得或者修改当前单元格的内容
当前单元格指的是DataGridView 焦点所在的单元格,它可以通过DataGridView 对象的CurrentCell 属性取得。如果当前单元格不存在的时候,返回Nothing(C#是null) [VB.NET] 取得当前单元格内容Console.WriteLine(DataGridView1.CurrentCell.Value) 取得当前单…

名图怎么弄云服务器_云服务器购买了宽带的速度怎么测试?
西昆云详细说一下企业租用云服务器搭建网站,很多新手站长会把带宽当成宽带来测试,比如在自己的云服务器上下载东西测试速度,一旦下载的东西慢了就觉得有问题,其实这是不准确的,那么如何查看云服务器的带宽速度呢&#…

ERP实施注意方面
一 厂商方面 1.信息化产品本身的功能需要强大而且灵活,应当能够指导企业管理水平的提升并适应企业的不同管理需要 2.厂商实力雄厚,人员稳定,服务周到,EPR 是个长期合作的过程 二 企业自身方面 1.企业自身管理意识,对ER…

一文回顾2018英特尔人工智能大会
近几日,整个 AI 行业的目光都聚焦在了北京。因为,一场人工智能盛会来了——2018 英特尔人工智能大会。逾千名国内外人工智能领域有影响力的专家、开发者、研究人员以及英特尔的客户和合作伙伴相聚在这里,共同探讨和分享人工智能领域的前沿技术…

用python写希尔排序_python希尔排序介绍(实例)
希尔排序介绍希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本,该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依…

【No.5 类型转换导致的错误】
【注意】 程序语言只是我们与计算机交流并让计算机实现我们创造性思想的工具,可以并鼓励深入掌握一门语言,但千万别沉迷于钻某种语言的牛角尖,一定要把握好二者间的度本帖属不定时连载贴,以试卷的形式提出一个比较基础的问题供大家…

小学AI教材终于来了,下一步是AI胎教吗?
小学生终于也要学 AI 了!据澎湃新闻报道,全国首套涵盖了从小学到高中的人工智能教材近日在上海正式发布,这套“AI上未来智造者”丛书计划出版 10 册,目前已出版 6 册,分别为《AI上神奇动物》、《AI上智慧生活》《AI在变…

快过年了,博客园里的文章也变少了
快过年了,博客园里的文章也变少了,大家都开始休息了吗?转载于:https://www.cnblogs.com/RobotTech/archive/2008/02/03/1063461.html

字符串多模式精确匹配(脏字/敏感词汇/关键字过滤算法)——TTMP算法 之实战F模式...
前面那么多篇文章都太抽象,这次来一个稍微实际一点的。F模式是我实际上选用的模式,对该模式我做了不少实际的测试,因此代码也算是比较稳定的。不过由于实际上为了得到该算法的效率,算法本身做了一些优化,对于初学者&am…