UDN-企业互联网技术人气社区

板块导航

浏览  : 1913
回复  : 0

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

[复制链接]
狗尾巴草的头像 楼主
发表于 2016-6-14 13:16:56 | 显示全部楼层 |阅读模式
本帖最后由 狗尾巴草 于 2016-6-14 13:16 编辑

     摘要: 在Netflix,我们的目标是在你观看之前预测你想观看的。为做到这一点,我们每天运行了大量的机器学习(ML)工作流。为了支持建立这些工作流并且有效利用资源,我们开发了Meson。Meson是一个通用的工作流编排和调度框 ...
  
  在Netflix,我们的目标是在你观看之前预测你想观看的。为做到这一点,我们每天运行了大量的机器学习(ML)工作流。为了支持建立这些工作流并且有效利用资源,我们开发了Meson。
  
  Meson是一个通用的工作流编排和调度框架,用于管理跨异构系统执行工作负载的ML管道。它管理着一些ML管道的生命周期,这些ML管道用来构建、训练并验证驱动视频推荐的个性化算法。
  
  Meson的主要目标之一是提高算法实验的速度,可靠性和可重复性,同时允许工程师使用他们选择的技术来处理每个步骤。
  
  增强机器学习管道
  
  在Netflix内部,Spark、MLlib、Python、R以及Docker在当前一代的机器学习管道中起到了重要作用。
  
  我们来看看驱动视频推荐的典型机器学习管道,以及在Meson中它是如何表示和处理的。
 
165053rgvcvggx9ccre7gh.png

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

 
  上图显示了上面描述的工作流运行过程。
  
  用户集选择,数据清洗的完成由绿色步骤表示。
  
  并行路径正在处理:
  
  Spark分支完成了模型的生成和验证。
  
  for-each分支分出了4个不同的地区模型,它们都在处理(黄色)。
  
  用于模型选择的Scala步骤是激活的(蓝色)。这表明一个或多个输入分支已经完成,但它还不会安排执行,因为还有些输入分支(a)还没有开始或(b)正在处理。
  
  运行时上下文和参数随着工作流传递,用于业务决策。
  
  揭开面纱
  
  让我们深入幕后场景来了解Meson是如何在不同系统之间统筹,以及生态系统中不同组件之间的相互影响。工作流有着不同的资源需求和总运行时间期望。我们依靠Apache Mesos这样的资源管理系统来满足这些需求。Mesos提供了任务隔离,以及CPU、内存、存储和其他计算资源的优秀抽象。Meson利用这些功能来实现任务的弹性和容错性。
 
165053og1gpte8ehzl3mrx.png

 
  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定义前面说到的工作流。
 
  1. val getUsers = Step("Get Users", ...)
  2. val wrangleData = Step("Wrangle Data", ...)
  3. ...
  4. val regionSplit = Step("For Each Region", ...)
  5. val regionJoin = Step("End For Each", ...)
  6. val regions = Seq("US", "Canada", "UK_Ireland", "LatAm", ...)

  7. val wf = start -> getUsers -> wrangleData ==> (
  8.   trainGlobalModel -> validateGlobalModel,
  9.   regionSplit **(reg = regions) --< (trainRegModel, validateRegModel) >-- regionJoin
  10. ) >== selectModel -> validateModel -> end

  11. // If verbs are preferred over operators
  12. val wf = sequence(start, getUsers, wrangleData) parallel {
  13.   sequence(trainGlobalModel, validateGlobalModel)
  14.   sequence(regionSplit,
  15.            forEach(reg = regions) sequence(trainRegModel, validateRegModel) forEach,
  16.            regionJoin)
  17. } 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天的特征重要性。
 
165053mygkkgkktbg9vvtk.png

 
  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的一些截图:
  
165053hrxuxsxmnxaaxnmn.png

165053b1h8opeopjegwe18.png
165053aibfe39o3o3bb8bu.png
165053u663ztqfvte65myv.png

165054k14ncej11852kgk8.png

165054egm6kw7qsg9jjuqd.png

165054lqqcszufqmfyisfm.png

165054it2e6rpikil6klc3.png

165054swit7sp0qn832wtt.png



作者:炼数成金

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部