Netflix的目标是能预测顾客之所想观看的电影,也即推荐预测。为了做到这一点,每天会运行大量机器学习工作流,而为了支撑创建这么多机器学习工作流和有效利用资源,Netflix的工程师开发了Meson。

Meson是一个通用的工作流和调度框架,它可以跨异质性系统进行ML管道管理、执行工作流。Meson维护构建、训练和验证个性化算法(视频推荐等)的ML管道的生命周期。

Meson的主要目标之一是提高算法实验的速度、稳定性和可重复性,同时允许工程师使用他们自己选择的技术。

机器学习管道的强大面孔

Netflix当前几种生成机器学习管道的关键角色是Spark, MLlib, Python, R和Docker。

下面来了解下一个典型的视频推荐的机器学习管道,以及它们在Meson中是如何表示和处理的。

  工作流涉及到如下几点:

选择用户集:通过Hive查询来选择用户集来做人群行为分析;
清晰/预处理数据:使用Python脚本创建两个用户集来确保并行路径;并行路径:一个路径使用Spark构建和分析全局模型,并保存到HDFS作为临时存储。另外一个使用R来构建区域模型。区域的数量是基于人群选择分析而动态变化。在流程图中,Build Regional Model和Validate Regional Model 对于每个区域是重复的,运行时扩展,并且以不同的参数集来执行,见下图;验证:Scala代码用来测试两个并行路径收敛时的模型稳定性。在这步中,如果模型不稳定,我们也需要再返回、重复整个流程;发布新模型:建立一个Docker容器来发布新模型,以便被其它生产系统使用。

上图展示了一个运行的工作流(前面描述的):

用户集选择和数据预处理已完成,图中绿色部分;流程中的并行路径:Spark分支完成模型生成和验证;for-each分支分出四个不同的区域模型,它们都在运行中,图中黄色部分。模型选择的Scala部分已激活,如图中蓝色部分所示。这表明一个或者多个输入分支已完成,但是它仍然没有被调度执行。其原因是输入分支还有未启动或者正在进行的。运行时环境和参数会根据业务策略传递到工作流当中。

深度解密

接下来让我们揭开Meson神秘的面纱,去理解Meson是如何跨系统运行和生态系统不同组件间是怎样交互的。工作流在运行的过程中有各种资源要求和期望,Meson是利用Apache Mesos来实现的。Mesos提供CPU、内存、存储和其它计算资源的任务级别的隔离和抽象。Meson利用这点特性来实现对任务的高扩展性和容错性。

  Meson调度器

Meson调度器被注册为一个Mesos框架,进行管理各种工作流的启动、流控制和运行时。Meson把实际的资源调度发到Mesos,包括各种内存和CPU要求。Meson依赖Mesos进行资源调度,但是Meson的调度器设计成可插入的,所以也可以选择其它框架来做资源调度。

每步一旦被调度,Meson调度器从Mesos申请到实际的资源,并把任务注册到Mesos master。

Meson Executor

Meson Executor是一个定制化的Mesos Executor。写入一个executor允许我们保持Meson间通讯通道,这对长连接任务(框架消息发送到Meson调度器)非常有用。Meson Executor也使得使用者可以传入定制化的丰富数据,而不仅仅传入一些退出代码或者状态信息。

一旦Mesos调度一个Meson任务,它会在slave端下载所有任务依赖后启动一个Meson executor。当核心任务被执行,executor会发送心跳、完成百分比、状态信息等。

DSL

Meson提供一个基于Scala的DSL,使得开发人员更容易的使用和创建定制化的工作流。下面展示前述工作流是如何使用DSL来定义:

val getUsers = Step("Get Users", ...)val wrangleData = Step("Wrangle Data", ...)...val regionSplit = Step("For Each Region", ...)val regionJoin = Step("End For Each", ...)val regions = Seq("US", "Canada", "UK_Ireland", "LatAm", ...)val wf = start -> getUsers -> wrangleData ==> ( trainGlobalModel -> validateGlobalModel, regionSplit **(reg = regions) --< (trainRegModel, validateRegModel) >-- regionJoin) >== selectModel -> validateModel -> end// If verbs are preferred over operatorsval wf = sequence(start, getUsers, wrangleData) parallel { sequence(trainGlobalModel, validateGlobalModel) sequence(regionSplit, forEach(reg = regions) sequence(trainRegModel, validateRegModel) forEach, regionJoin)} parallel sequence(selectModel, validateModel, end)

Meson架构扩展

Meson很容易扩展,增加定制化的步骤和扩展功能,比如,Spark Submit Step, Hive Query Step、Netflix的微服务或者其它像Cassandra的系统。

Artifacts

在Meson里,工作流的每步输出都作为“一等公民”对待,并存储为Artifacts。工作流会根据artifact id的存在与否来决定每步的重试是否可跳过。我们也可以通过Meson UI来对Artifacts进行定制的可视化。比如,存储特征重要性作为一个artifact,然后插入一个定制的可视化来比较过去N天特征的重要性。

  Mesos Master / Slave

Meson的定制化Mesos executor是跨slave机器发布的。下载所有jar包和定制化的artifact,并发送消息/上下文/心跳到Meson调度器。从Meson提交的Spark作业共享相同的Mesos slave来运行Spark作业启动的任务。

原生Spark支持

支持原生Spark是Meson的一个重要要求。 在Meson里提交Spark作业后可以监控Spark作业过程,并能提供Spark步骤的重试或者杀死Spark作业。Meson也支持指定Spark版本。

Meson支持具有挑战性的Spark多租户环境。Meson能够高效的利用有限的资源,通过匹配潜在满足资源需求和服务等级协议(SLA)需要的Mesos slave。也可以对Mesos slave标签化分组。

ML结构

随着Meson的使用增加,大规模的并行问题(比如,参数扫描、复杂的bootstrap算法和交叉验证)也出现了。

Meson提供一个简单的‘for-loop’ 结构,它允许数据科学家和科研人员在成千上万的docker镜像中表达参数扫描算法。这个结构的使用者可以实时的监控成千的任务过程,通过UI找到失败的任务,打印日志到一个位置来简单的管理并行任务。

结论

Mesos在去年已经完成多ML管道的成百上千的并发作业。它能提高算法团队对推荐算法的效率。

Netflix后期计划在几个月后开源Meson。

====================================分割线================================

本文转自d1net(转载)

Meson:支持Netflix的机器学习工作流相关推荐

  1. bilibili基于 Flink 的机器学习工作流平台在 b 站的应用

    简介:介绍 b 站的机器学习工作流平台 ultron 在 b 站多个机器学习场景上的应用. 分享嘉宾:张杨,B 站资深开发工程师 导读:整个机器学习的过程,从数据上报.到特征计算.到模型训练.再到线上 ...

  2. Scikit-learn 核心开发人员专访:建立机器学习工作流最容易犯这2点错误

    导语:Scikit learn的开发者分享了3种实用的ML技术 本文是一篇对 Scikit-learn 开发者的专访,原载于 towardsdatascience,AI 开发者编译整理,采访内容如下文 ...

  3. 解锁云原生 AI 技能 - 开发你的机器学习工作流

    按照上篇文章<解锁云原生 AI 技能 | 在 Kubernetes 上构建机器学习系统>搭建了一套 Kubeflow Pipelines 之后,我们一起小试牛刀,用一个真实的案例,学习如何 ...

  4. MLflow机器学习工作流框架更新(2019.3)

    2019独角兽企业重金招聘Python工程师标准>>> MLflow机器学习工作流框架最新进展(2019.3) MLflow(,https://mlflow.org)是Databri ...

  5. AI产品开发指南:5大核心环节搞定机器学习工作流

    王小新 编译自 Quora 量子位 出品 | 公众号 QbitAI Python写得像英语一样6,神经网络.决策树烂熟于心,但如果不能动手将这些算法部署到实际系统中,这一切还有什么意义? 于是,国外的 ...

  6. 基于Kubernetes 的机器学习工作流

    https://www.toutiao.com/a6642101619120931335/ 2019-01-03 18:00:00 介绍 Pipeline是Kubeflow社区最近开源的一个端到端工作 ...

  7. Apache Spark机器学习.1.7 机器学习工作流示例

    1.7 机器学习工作流示例 为了进一步了解学习机器学习的工作流,在这里让我们学习一些例子. 本书后续章节会研究风险建模.欺诈检测.客户视图.流失预测和产品推荐.对于诸如此类的项目,目标往往是确定某些问 ...

  8. 原生android看netflix,现在有四款Android手机支持Netflix HD

    如果有针对全球大流行量身定制的应用程序,那就是Netflix.有了瑞安·墨菲(Ryan Murphy)的好莱坞(Hollywood),黑色喜剧片<死给我>(Dead to Me)和富勒之家 ...

  9. MLFlow︱机器学习工作流框架:介绍(一)

    文章目录 1 DataOps.MLOps 和 AIOps,你要的是哪个Ops? 2 MLFlow 2.1 MLFlow优势 2.2 MLFlow劣势 2.3 MLFlow 和 AirFlow的差异 2 ...

最新文章

  1. java I/O总结(收藏)
  2. 那些jdk中坑你没商量的方法
  3. python数组写入txt文档_Python打开文件,将list、numpy数组内容写入txt文件中的方法...
  4. sdut 数据结构实验之栈四:括号匹配
  5. hao123电脑版主页_腾讯软件管家独立版
  6. OpenCV基本图形绘制之绘制直线
  7. android内存泄漏原因分析,Android 内存泄漏案例分析总结(Handler)
  8. 数据库连接失败could not find driver 解决方法
  9. 分享几个有趣的Python小项目
  10. python爬虫简历项目怎么写_爬虫项目咋写,爬取什么样的数据可以作为项目写在简历上?...
  11. 照相机成像原理 数码相机的成像原理
  12. JavaScript 闭包理解
  13. 怎样用计算机做周计划表,电脑如何制作学生学习计划表
  14. 前端请求路径为何不能写成http://localhost:8080/**/** ?
  15. Android程序配置热点IP,Android 10版本获取已连接本机热点的ip
  16. 报错:Exception opening socket
  17. 一、微信小程序拼团项目简介
  18. mysql日期时间类型
  19. 【转】编程思维轻松培养一个有条理,思路清晰的孩子
  20. DSP28335的SPWM波生成方法

热门文章

  1. 祝贺黑龙江馆正式入驻波特城暨龙商龙企龙品走向全球化启动仪式圆满成功
  2. MySql常用命令集Mysql常用命令showdatabases;显示数据库createdatab
  3. JavaScript,JS如何控制input输入字符限制
  4. ASP.NET MVC 的 WebGrid 的 6 个重要技巧 【已翻译100%】
  5. 【方法整理】Oracle 获取trace跟踪文件名的几种常用方式
  6. 一天一点linux(9):ubuntu下如何搭建LAMP开发环境?
  7. 为师不以学为大,不如以死谢天下
  8. 【CUDA学习】GPU硬件结构
  9. Android无法访问本地服务器(localhost)的解决方案
  10. 用tar来备份Ubuntu操作系统