专栏名称: AI大事件
InfoQ人工智能领域垂直号。专注AI新闻资讯,技术干货和人物访谈。
目录
相关文章推荐
哔哩哔哩  ·  大二学生,又在B站手搓火箭了? ·  2 天前  
哔哩哔哩  ·  Switch2发售,百位B站UP主首发直播! ·  2 天前  
51好读  ›  专栏  ›  AI大事件

Uber的机器学习平台:从打车到外卖,一个平台如何服务数十个团队?

AI大事件  · 公众号  ·  · 2017-09-07 18:00

正文

请到「今天看啥」查看全文


在下一章节中,我们将以 UberEATS ETD 模型为例,通过深入探讨米开朗基罗系统内的各层以勾勒出其详尽技术面貌。

机器学习工作流

在优步公司,无论具体负责解决哪些挑战——包括分类、回归以及时间序列预测——所有机器学习用例皆采用同样的一般性工作流程。由于这一工作流不受具体实现方式的影响,因此能够轻松进行扩展以支持新的算法类型与框架——例如新型深度学习框架。另外,其同时适用于不同的部署模式,例如在线与离线(特别是车载与手机内用例)预测用例。

在米开朗基罗平台的设计当中,我们希望能够借此提供可扩展、可靠、可重现、易使用且自动化工具选项,最终解决以下这套六步式工作流程:

  1. 数据管理

  2. 模型训练

  3. 模型评估

  4. 模型部署

  5. 预测制定

  6. 预测监控

接下来,我们将详细介绍米开朗基罗架构如何一步步实现上述工作流。

数据管理

发现正确特征往往是机器学习工作当中最具难度的部分。我们同时发现,数据管道的构建与管理则通常是机器学习解决方案之内成本最高的部分。

一套平台应该能够提供标准化工具以构建数据管道,并借此生成特征以及标签数据集,进而利用这些成果实现预测所必需的训练(与重新训练)及纯特征数据集。这些工具应当深入集成至企业的数据湖或者数据仓库当中,同时全面与企业的在线数据服务系统相对接。这类管道必须具备可扩展性与良好的成效表现,拥有数据流与数据质量综合监控能力,同时支持在线与离线两种训练与预测模式。在理想情况下,其应以跨团队共享的方式生成特征,同时减少重复工作量并提高数据质量。另外,这些工具还应提供强有力的保护性约束与控制措施,旨在鼓励并批准用户采用各项最佳实践(例如保证在训练周期与预测周期内使用相同的数据生成 / 筹备流程)。

米开朗基罗平台中的数据管理组件按照在线与离线两类管道进行划分。目前,离线管道主要用于批量模型训练与批量预测任务的馈送 ; 而在线管道则负责在线低延迟预测任务的馈送(不久之后,我们还将引入在线学习系统)。

另外,我们还向其中添加了一个数据管理层,其作为特征存储机制以帮助各团队对解决机器学习问题所必需的高准确度特征集进行共享、发现与使用。我们发现,优步目前面临的大多数建模难题都存在着共通性或者说相似性,因此确保各团队能够在不同部门间分享各自项目心得以及特征成果无疑具有重大的实际价值。

图二:数据筹备管道将数据推送至特征存储表与训练数据库当中。

离线

优步公司的交易与记录数据流被引入一套数据湖内,并可通过 Spark 以及 Hive SQL 计算任务轻松进行访问。我们提供各类容器与调度方案以定期运行特征计算任务,而这些特征将可根据项目实际进行内部保留或者被发布至特征库(Feature Store,详见下文)中进行跨团队共享。而批量处理任务则按计划或者配合触发机制运行,结果将被整合至数据质量监控工具处以快速根据本地或上游代码或数据问题对该管道中的问题进行回溯。

在线

以在线方式部署的模型无法访问存储在 HDFS 当中的数据,而且其通常也很难直接面向用于支持优步生产服务的在线数据库进行高成效特征计算(举例来说,我们无法直接查询 UberEATS 订单服务以计算某家餐厅在特定时段之内的平均食物筹备时长)。相反,我们允许对各在线模型所需要的特征进行预计算,并将结果存储在 Cassandra 当中——如此一来,这些结果即可在预测阶段以低延迟方式接受读取。

我们支持两种面向在线特征的计算选项,分别为批量预计算与近实时计算,具体说明如下:

  • 批量预计算。第一种计算选项为定期进行批量预计算并从 HDFS 中将历史特征加载至 Cassandra 内。这是一种简单且有效的方法,通常适用于处理历史特征。该系统保证始终利用同样的数据与批量管道进行训练与服务。UberEATS 在计算“餐厅在过去七天内的平均食物筹备时长”等指标时使用的就是这类系统。

  • 近实时计算。第二种选项是将相关指标发布至 Kafka 处,而后运行基于 Samza 的流计算任务。接下来,这些特征将被直接写入 Cassandra 并随后交付及记录至 HDFS 当中,以供后续训练任务使用。与批量系统类似,近实时计算能够确保在训练与服务过程中使用同样的数据集。为了避免冷启动,我们专门利用一款工具面向历史记录运行批量任务,从而实现数据“回填”并生成训练数据。UberEATS 在计算“餐厅过去一小时内的平均食物筹备时长”指标时,使用的就是近实时特征管道。

共享式特征库

我们发现建立一套集中式特征库非常重要,这意味着优步公司的各内部团队将能够创建并管理其实际使用的各类特征,并将其与其他团队进行共享。从宏观角度来看,这种作法能够带来以下两种助益:

  1. 其允许用户轻松向共享特征库内添加特征,且仅需要为各特征添加少量额外元数据(例如拥有者、描述以及 SLA 等)即可实现内部及特定项目使用需求。

  2. 一旦特征被添加至特征库当中,各团队将能够轻松以在线及离线方式对其进行消费——包括引用特征在模型配置当中的简单规范名称。配合这部分信息,该系统将能够协同正确的 HDFS 数据集以实现模型训练或批量预测,并在在线预测场景下从 Cassandra 处获取正确数值。

就目前来讲,我们的特征库中包含约 1000 项适用于机器学习项目加速的特征,而公司内的各个团队仍在不断向其中添加更多新特征。特征库中的各项特征会得到自动计算,且每天进行一次更新。







请到「今天看啥」查看全文