前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Meson:Netflix即将开源的机器学习工作流编排工具

Meson:Netflix即将开源的机器学习工作流编排工具

作者头像
用户1737318
发布2018-06-06 13:13:46
1.7K0
发布2018-06-06 13:13:46
举报
文章被收录于专栏:人工智能头条人工智能头条

原文标题:Meson: Workflow Orchestration for Netflix Recommendations 译者:刘翔宇 审校:刘帝伟 责编:周建丁 未经许可,谢绝转载。机器学习投稿、采访请联系zhoujd@csdn.net

在Netflix,我们的目标是在你观看之前预测你想观看的。为做到这一点,我们每天运行了大量的机器学习(ML)工作流。为了支持建立这些工作流并且有效利用资源,我们开发了Meson。

Meson是一个通用的工作流编排和调度框架,用于管理跨异构系统执行工作负载的ML管道。它管理着一些ML管道的生命周期,这些ML管道用来构建、训练并验证驱动视频推荐的个性化算法。

Meson的主要目标之一是提高算法实验的速度,可靠性和可重复性,同时允许工程师使用他们选择的技术来处理每个步骤。

增强机器学习管道

在Netflix内部,Spark、MLlib、Python、R以及Docker在当前一代的机器学习管道中起到了重要作用。

我们来看看驱动视频推荐的典型机器学习管道,以及在Meson中它是如何表示和处理的。

(注:本文所有图片均可在极客头条原文中点击放大)

工作流包括:

  • 选择一组用户——使用Hive查询来选择用于分析的队列
  • 清洗/准备数据——一个Python脚本来创建两组用户,用于并行路径
  • 在并行路径中,一条使用Spark构建并分析全局模型,使用HDFS作为临时存储。 另一条使用R来构建具体地区(国家)模型。地区的数量根据用于分析所选择的队列动态变化。图中的构建地区模型验证地区模型步骤对于每个地区(国家)重复执行,在运行时扩展,使用不同的参数集执行,如下所示。
  • 验证——当两条路径收敛时,使用Scala代码对模型的稳定性进行测试。在这个过程中,如果模型不稳定,则回到上面的步骤,重复整个过程。
  • 发布新模型——使用Docker容器发布这个新模型,其他生产系统来获取这个模型。

上图显示了上面描述的工作流运行过程。

  • 用户集选择,数据清洗的完成由绿色步骤表示。
  • 并行路径正在处理:
    • Spark分支完成了模型的生成和验证。
    • for-each分支分出了4个不同的地区模型,它们都在处理(黄色)。
  • 用于模型选择的Scala步骤是激活的(蓝色)。这表明一个或多个输入分支已经完成,但它还不会安排执行,因为还有些输入分支(a)还没有开始或(b)正在处理。
  • 运行时上下文和参数随着工作流传递,用于业务决策。

揭开面纱

让我们深入幕后场景来了解Meson是如何在不同系统之间统筹,以及生态系统中不同组件之间的相互影响。工作流有着不同的资源需求和总运行时间期望。我们依靠Apache Mesos这样的资源管理系统来满足这些需求。Mesos提供了任务隔离,以及CPU、内存、存储和其他计算资源的优秀抽象。Meson利用这些功能来实现任务的弹性和容错性。

Meson调度器

Meson调度器(Meson scheduler),注册成Mesos框架(Mesos framework),管理着各种工作流的启动,流量控制和运行。Meson委托实际的资源调度给Mesos。各种需求包括内存和CPU一起交给Mesos管理。虽然我们依靠Mesos来调度资源,但是调度程序是可拔插的,我们可以选择使用其他的框架来调度资源。

一旦某个步骤需要调度,Meson调度器从Mesos中选择合适的资源,然后将任务传递给Mesos主节点。

Meson执行器

Meson执行器是一个自定义的Mesos执行器。编写自定义的执行器可以让我们保持与Meson的通信通道。这在长时间运行任务中尤其有效,框架的消息可以被发送给Meson调度器。这也可以让我们传递自定义数据,而不仅仅是退出代码或状态信息。

一旦Mesos调度了一个Meson任务,它会下载所有的任务依赖,然后在子节点上启动一个Meson执行器。当核心任务正在执行时,执行器会做一些例行工作,比如发送心跳、完成百分比、状态信息等。

DSL

Meson提供了基于Scala的DSL,能够轻松编写工作流。这使得开发人员很容易就能创建自定义工作流。下面是使用DSL定义前面说到的工作流。

代码语言:javascript
复制
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
代码语言:javascript
复制
// 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就为了可扩展性而构建,这样它很容易地添加自定义步骤和扩展。Spark Submit步骤,Hive查询步骤,Netflix特定扩展让我们可以接触微服务或其他系统,比如Cassandra。

在上面的工作流中,我们建立了一个Netflix特定扩展来调用Docker执行框架,让开发人员为Docker镜像指定最小参数。扩展处理着所有的通信,比如获取所有的状态URL、日志信息和监控Docker进程状态。

Artifacts

步骤的输出可以视为Meson中的一等公民,以Artifacts形式存储。工作流步骤的重试可以跳过,这取决于artifact id的存在与否。我们同样可以在Meson UI中绘制自定义的artifacts可视化图像。比如,如果我们把特征重要性存储为一个artifact作为管道的一部分,我们可以加入自定义可视化,这样就能够比较过去n天的特征重要性。

Mesos主节点/子节点

Mesos用于资源调度,Meson注册成核心框架。Meson的自定义Mesos执行器部署在子节点上。它们用来下载所有jar包和定制化artifact还有将消息/上下文/心跳发送回Meson调度器。

支持原生Spark

在Meson中原生支持Spark是一个关键要求和目标。Meson中的Spark Submit可以从Meson中监控Spark作业进度,能够重试失败的Spark步骤或杀死可能出错的Spark作业。Meson同时还支持特定版本的Spark——因此,对于那些想要使用最新版本的Spark进行创新的用户来说,也是支持的。

通过Meson在多用户环境下支持Spark有一系列有趣的挑战。工作流有一系列不同的资源需求和总运行时间期望。Meson通过匹配资源需求,将期望传给Mesos子节点来使用可用资源,这些子节点可能会满足所需条件。这是通过对Mesos子节点中组设置标签,并使用Mesos资源属性功能将作业分配给子节点集来实现。

ML构造

随着Meson使用量的增加,一系列大规模并行化问题出现了,比如参数清扫,复杂引导,和交叉验证。

Meson提供了简单的“for循环”构造,可以让数据科学家和研究人员表示参数清扫,他们可以在参数值上运行好几万的Docker容器。使用这种构造的用户可以实时监控上千个任务的进程,通过UI界面查找失败的任务,将日志发送给同一个地方,Meson使得管理这些并行任务非常简单。

结论

在过去一年中,Meson已经在多ML管道的上百个并行作业中发挥作用。对我们算法团队来说,这是创新的一剂催化剂,因此改善了对用户的推荐。

我们计划在未来几个月将Meson开源,并围绕它建立社区。如果你想帮助加快创新步伐,为开源做出努力,那么请加入我们。

目前Meson团队成员包括:

Antony Arokiasamy, Kedar Sadekar, Raju Uppalapati, Sathish Sridharan, Prasanna Padmanabhan, Prashanth Raghavan, Faisal Zakaria Siddiqi, Elliot Chow 及 Davis Shepherd(无linkedin)。

最后附上Meson UI的一些截图:

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-06-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人工智能头条 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 增强机器学习管道
  • 揭开面纱
    • Meson调度器
      • Meson执行器
        • DSL
          • 扩展架构
            • Artifacts
              • Mesos主节点/子节点
                • 支持原生Spark
                  • ML构造
                  • 结论
                  相关产品与服务
                  容器服务
                  腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档