Uber推出机器学习平台Michelangelo:全面处理工作流程推动AI民主化

近日 Uber 提出了他们的机器学习平台 Michelangelo,该平台构建在 Uber 数据和计算基础设施之上,并且由一系列开源系统和内置组件组成。Michelangelo 可提供易于使用且自动化的工具处理数据管理、模型训练、模型评估、模型部署、执行预测和检测预测等工作流程。Uber 希望 Michelangelo 可以在推动 AI 民主化方面贡献出应有的力量。


Uber Engineering 致力于开发新技术,为客户创建无缝衔接、影响深远的体验。我们不断增加对人工智能和机器学习的投入,来完成这个设想。我们对此作出的贡献就是 Michelangelo,一个内部的机器学习即服务平台,该平台促使机器学习民主化,使扩展后的 AI 能够满足业务需求,像叫车一样简单。


Michelangelo 使内部团队能够无缝构建、部署和运作适合 Uber 量级的机器学习解决方案。Michelangelo 可以覆盖端到端的机器学习工作流:管理数据、训练、评估和部署模型,预测,以及监控预测。该系统还支持传统的机器学习模型、时间序列预测和深度学习。


Uber 已经在生产中使用 Michelangelo 长达一年左右,该系统已经成为 Uber 工程师和数据科学家实际使用的机器学习系统,几十个团队使用它构建和部署模型。实际上,该系统在多个 Uber 数据中心上部署,影响专门硬件,以及对 Uber 最高加载量的在线服务提供预测。


本文,我们将介绍 Michelangelo,讨论生产使用案例,以及介绍这个新机器学习系统的工作流程。


系统架构


Michelangelo 由一系列开源系统及内置组件构成。主要的开源组件有 HDFS、Spark、Samza、Cassandra、MLLib、XGBoost 和 TensorFlow。我们通常倾向于使用成熟可用的开源组件,并在需要时复制、自定义以及回馈。不过当开源方案不适合我们的应用案例时,我们有时会亲自打造系统。

Michelangelo 构建在 Uber 数据和计算基础设施之上,有一个存储 Uber 所有业务与记录数据的数据湖,Kafka 经纪人汇总来自 Uber 所有服务的记录信息,Samza 流计算引擎管理 Cassandra 集群和 Uber 的上门服务配置和部署工具。


下文中,我们将逐层介绍 Michelangelo 的技术细节。


机器学习工作流程


Uber 几乎所有机器学习用例中都存在相同的一般工作流程,无论手头的挑战是分类、回归,还是时间序列预测等。工作流程通常与实现无关,因此很容易扩展以支持新的算法类型与框架,比如更新的深度学习框架。它还应用于不同的部署模式,比如线上、线下(以及车载和手机)预测应用案例。


我们专门设计了 Michelangelo,从而提供可扩展、可信赖、可再现、易于使用且自动化的工具处理以下的工作流程。


  • 数据管理
  • 模型训练
  • 模型评估
  • 模型部署
  • 执行预测
  • 监控预测


下面,我们将会详细介绍 Michelangelo 的架构如何促进了工作流程的每一阶段。


数据管理(略)


模型训练


当下,我们支持决策树、线性与 logistic 模型、无监督模型(k-均值)、时序模型和深度神经网络的大规模线下分布式训练。我们通常添加新算法来回应用户需求,新算法由 Uber 人工智能实验室和其他内部研究者共同开发。此外,通过提供自定义训练、评估以及服务代码,我们也让用户团队添加自己的模型类型。这一分布式模型训练系统扩展以处理数十亿的样本和小数据集,从而实现快速迭代。


模型配置有特定的模型类型、超参数、数据资源引用、特征 DSL 表达式以及计算资源需求(机器的数量、多少内存、是否使用 GPU 等)。它被用来配置在 YARN 或 Mesos 集群上运行的训练工作。模型训练之后,性能指标(比如 ROC 和 PR 曲线)被计算并整合到模型评估报告之中。训练结束,原始配置、已学习的参数以及评估报告被保存回模型库以供分析和部署。


除了训练单一模型,Michelangelo 还支持所有模型类型和分区模型的超参数搜索。通过分区模型,我们基于来自用户的配置自动分区训练数据,接着在每区上训练一个模型,并在需要时返回到父模型。

训练工作通过一个网页 UI 或者 API(常常是 Jupyter notebook)被配置和管理。很多团队使用 API 和工作流程工具安排模型常规的再训练。



3:模型训练工作使用 Feature Store 和训练数据库数据集训练模型,接着将其推送到模型库。


模型评估


模型通常作为探索流程中的一部分进行训练,以确定一系列适用于问题的最佳模型及其特征、算法和超参数。对给定使用案例提供完美模型之前,训练数百个无效的模型并不少见。尽管这些模型最终没有用于生产过程,但其性能指引工程师找到具备最佳性能的模型配置。跟踪这些训练模型(如训练者、训练时间、使用的数据集和超参数等)、评估和对比模型,在处理这么多模型的时候是一个很大的挑战,这也更有机会扩展平台。对于每一个在 Michelangelo 中训练的模型来说,我们在 Cassandra 的模型库中储存了带版本的模型。该库包含:


  • 模型训练者
  • 训练的开始时间和结束时间
  • 完整模型配置(使用的特征、超参数值等)
  • 训练和测试数据集的引用
  • 每个特征的分布和相对重要性
  • 模型准确率指标
  • 每个模型类型的标准图表和图
  • 模型学得的所有参数
  • 模型可视化的概要统计


模型准确度报告

回归模型的模型准确率报告显示标准准确率度量和图表。分类模型可以展示一个不同的度量和图表,如图 4、图 5 所示:


图 4:回归模型报告展示回归相关的性能度量。



图 5:二元分类性能报告展示分类相关的性能度量。


决策树可视化


对于重要的模型类型,Uber 提供复杂的可视化工具,帮助建模人员理解模型的行为原理,同时在必要的时候帮助调试。在决策树模型中,我们让用户浏览每棵子树,了解它们对整个模型的重要性、切分点、每个特征对特定树的重要性,以及每个切分点上的数据分布等等。用户可以指定特征值,可视化将描述触发的到达决策树的路径、每棵树的预测、模型的总体模型,如图 6 所示:



图 6:使用树型可视化可以探索的树模型。


特征报告


Michelangelo 提供特征报告,报告展示了特征对模型的重要性顺序,部分依赖图和分布矩形图。选择两个特征使用户理解特征的相互作用是一个双向的部分依赖图,如下图所示:



图 7:特征及其模型的影响,以及特征之间的相互作用均可以通过特征报告得知。


模型部署


Michelangelo 可通过 UI 或 API 对模型部署管理提供端到端的支持,模型可通过以下三种方式部署:


  • 离线部署(Offline deployment):模型可部署在离线容器(container)中,并且在 Spark 项目上运行,以按照即期或计划表的方式生成批量预测。
  • 在线部署(Online deployment):模型可部署在在线预测服务集群中,即一般部署在负载平衡器(load balancer)后的数百台机器中,其中客户端可发送独立或批量的预测请求作为 RPC 调用。
  • 软件库部署:我们正在推出一个部署到服务容器的模型,该模型可在另一个服务容器中嵌入为一个软件库,并可以通过 Java API 进行调用。在下图中并没有显示这一过程,不过其和在线部署的方式十分相似。


图 8:模型仓库中的模型可部署在在线和离线容器中以提供服务。


在所有情况中,要求的模型文件(元数据文件、模型参数文件和编译的 DSL 表达式)需要打包到 ZIP 存档中,并且还需要在 Uber 数据中心使用标准的代码部署基础设施复制相关的 hosts 文件。预测容器从磁盘自动加载新的模型,并且开始处理预测请求。


进行预测


一旦服务容器部署并加载了模型,那么这些模型就能基于从数据流程或直接从客户端加载的特征数据进行预测。原始的特征会通过编译的 DSL 表达式传递,它可以修正原始特征并且从 Feature Store 获取额外的特征。构建的最终特征向量会传递到模型以进行评分。在在线模型的情况下,预测会通过网络返回到客户端中。在离线模型的情况中,预测将会被写回 Hive,并且能被下游批处理或者用户能直接通过基于 SQL 的询问工具存取,描述如下:



图 9:使用一组特征向量通过在线和离线预测服务生成预测。


基于 Michelangelo 的建构


接下来的几个月,我们计划继续扩展并强化现有的系统以支持我们的客户团队与 Uber 整体业务的增长。随着平台层的成熟,我们计划投资更高级的工具和服务以推动机器学习民主化,并更好地支持我们的业务需求:

  • AutoML。该系统可以对给定的问题建模,自动搜索并发现最佳模型的模型配置(算法、特征集、超参数值等)。该系统还可以自动构建生产数据 pipeline,以生成推动模型所需的特征和标签。我们的 Feature Store、统一的离线和在线 pipeline、超参数搜索特征已经解决了很大问题。我们计划通过 AutoML 加速早期的数据科学工作。该系统允许数据科学家指定标签集和目标函数,然后用最安全、注重隐私的方式使用 Uber 数据,以找到该问题的最佳模型。其目标在于用智能工具简化数据科学家的工作,从而提高他们的生产力。
  • 模型可视化。理解与调试模型越来越重要,尤其是对于深度学习而言。尽管通过可视化工具我们在基于树的模型方面迈出了最初的重要几步,更多的需求被满足,进而帮助数据科学家理解、调试其模型,用户也会信任结果。
  • 在线学习:大多数 Uber 机器学习模型直接实时影响了 Uber 产品。为了保护我们的模型在不同环境的准确性,模型需要随着环境的改变而变化。如今,我们的团队会定期在 Michelangelo 上重训练他们的模型。这种案例的全平台解决方案涉及到易于更新的模型、可快速训练、评估架构和 pipelines、自动模型验证和部署、复杂的监控和预警系统。虽然这是一个大项目,早期结果表明适当的在线学习可以产生很好的收益。
  • 分布式深度学习。不断增加的 Uber 机器学习系统正在实现深度学习技术。在深度学习模型上定义和迭代用户工作流程与标准的工作流程非常不同,因此其需要独特的平台支持。深度学习项目通常需要处理更大数量的数据,并且不同的硬件需求(即 GPU)加大了对分布式学习的投入,更紧密地整合灵活性资源管理堆栈。


原文链接:https://eng.uber.com/michelangelo/



本文由机器之心编译出品,原文作者JEREMY HERMANN、MIKE DEL BALSO,转载请查看要求,机器之心对于违规侵权者保有法律追诉权。

入门
登录后评论
暂无评论
暂无评论~
返回顶部