本文经机器之心(微信公众号:almosthuman2014)授权转载,禁止二次转载。
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 对模型部署管理提供端到端的支持,模型可通过以下三种方式部署:
图 8:模型仓库中的模型可部署在在线和离线容器中以提供服务。
在所有情况中,要求的模型文件(元数据文件、模型参数文件和编译的 DSL 表达式)需要打包到 ZIP 存档中,并且还需要在 Uber 数据中心使用标准的代码部署基础设施复制相关的 hosts 文件。预测容器从磁盘自动加载新的模型,并且开始处理预测请求。
一旦服务容器部署并加载了模型,那么这些模型就能基于从数据流程或直接从客户端加载的特征数据进行预测。原始的特征会通过编译的 DSL 表达式传递,它可以修正原始特征并且从 Feature Store 获取额外的特征。构建的最终特征向量会传递到模型以进行评分。在在线模型的情况下,预测会通过网络返回到客户端中。在离线模型的情况中,预测将会被写回 Hive,并且能被下游批处理或者用户能直接通过基于 SQL 的询问工具存取,描述如下:
图 9:使用一组特征向量通过在线和离线预测服务生成预测。
接下来的几个月,我们计划继续扩展并强化现有的系统以支持我们的客户团队与 Uber 整体业务的增长。随着平台层的成熟,我们计划投资更高级的工具和服务以推动机器学习民主化,并更好地支持我们的业务需求:
原文来自:机器之心
声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com
支持全球约2.4万个城市地区天气查询,如:天气实况、逐日天气预报、24小时历史天气等
支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景
涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。
根据给定的手机号、姓名、身份证、人像图片核验是否一致
通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。