返回 登录
0

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

原文链接:Meson: Workflow Orchestration for Netflix Recommendations
作者:Meson Team
译者:刘翔宇 审校:刘帝伟
责编:周建丁
未经许可,谢绝转载。机器学习投稿、采访请联系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定义前面说到的工作流。

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 operators
val 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的一些截图:

图片描述

(点击放大图片)

图片描述

(点击放大图片)

图片描述

(点击放大图片)

图片描述

(点击放大图片)

图片描述

(点击放大图片)

图片描述

(点击放大图片)

图片描述

(点击放大图片)

图片描述

(点击放大图片)

图片描述

(点击放大图片)


更多内容请关注机器学习知识库。该知识库包含了专家精心绘制的机器学习知识图谱,及由特邀编辑(领域专家)从海量数据中层层筛选出的精华内容和资源(学习视频、实践Demo、图书)。
图片描述

评论