分享

使用Submarine实现在Hadoop上运行深度学习工作负载



问题导读:

1.怎样在Hadoop上运行分布式深度学习/机器学习应用程序?
2.Submarine项目包含哪些部分?
3.Submarine计算引擎可以做什么?



介绍

Hadoop是时下最流行的企业级开源大数据平台技术,你可以将它部署在本地,也可以部署在云端。而深度学习,对于企业用户来说举几个简单的例子,常见的场景包括语音识别,图像分类,AI聊天机器人或者机器翻译。为了训练深度学习/机器学习模型,我们可以利用TensorFlow/MXNet/Pytorch/Caffe/XGBoost等框架。有时这些框架也会被一起使用用于解决不同的问题。

为了使分布式深度学习/机器学习应用程序易于启动,管理和监控,Hadoop社区启动了Submarine项目,同时还包含一些其它的改进比如GPU支持,Docker容器支持,容器DNS支持,调度改进等。

这些改进使得在Apache Hadoop YARN上运行的分布式深度学习/机器学习应用程序就像在本地运行一样简单,这可以让机器学习工程师专注于算法,而不用担心底层基础架构。通过升级到最新的Hadoop,用户现在可以在集群上直接使用ETL/Streaming作业运行深度学习。这样可以轻松访问同一集群上的数据,从而实现更好的资源利用率。

640.jpg

上图是一个典型的深度学习工作流:数据来自边缘或其它地方,最终会落地到数据湖中。数据科学家可以使用notebook进行探索,创建pipeline来进行特征提取,切分训练/测试数据集,同时运行深度学习的训练作业。这些过程都可以被重复执行。因此,在同一个Hadoop集群上运行深度学习作业可以提高数据/计算资源共享的效率。

让我们仔细看看Submarine项目(它是Apache Hadoop项目的一部分),看看如何在Hadoop上运行这些深度学习工作负载。

为什么叫这个名字

因为潜艇是唯一可以将人类带到更深处的工具。B-)

640.jpg
图片由NOAA办公室提供,海洋勘探与研究,墨西哥湾2018年

潜水艇概述


Submarine项目包含2个部分:Submarine计算引擎和一套Submarine生态系统集成插件/工具。

Submarine计算引擎从命令行向YARN提交定制的深度学习应用程序(如Tensorflow,Pytorch等)。 这些应用程序与YARN上的其他应用程序并行运行,例如Apache Spark,Hadoop Map/Reduce等。

最重要的是,我们有一套与Submarine集成的生态系统,目前包括:

  • Submarine-Zeppelin integration:允许数据科学家在Zeppelin notebook中编码,并直接从notebook提交/管理训练工作。
  • Submarine-Azkaban integration:允许数据科学家从notebook中直接向Azkaban提交一组具有依赖关系的任务。
  • Submarine-installer: 在你的环境中安装submarine和YARN,以便你更轻松地尝试强大的工具集。

640.jpg

上图示例显示了Submarine,底部是Submarine计算引擎,它是另一种YARN应用程序。在计算引擎之上,它可以集成到其它生态系统,如notebook(Zeppelin/Jupyter)和Azkaban。

Submarine计算引擎可以做什么?
使用Submarine计算引擎,用户可以提交一个简单的命令来运行单机/分布式深度学习训练作业,并可以从YARN UI直接跳到notebook。所有其它复杂的事情比如分布式运行,都会由YARN负责。我们来看看几个例子。

像Hello World一样启动一个分布式深度学习训练作业
使用以下命令启动一个深度学习训练作业:读取HDFS上的cifar10数据。这个作业使用用户指定的Docker镜像,与YARN上运行的其他作业共享计算资源(如CPU/GPU/内存)。

[mw_shl_code=shell,true]yarn jar hadoop-yarn-applications-submarine-<version>.jar job run \
–name tf-job-001 –docker_image <your docker image> \
–input_path hdfs://default/dataset/cifar-10-data \
–checkpoint_path hdfs://default/tmp/cifar-10-jobdir \
–num_workers 2 \
–worker_resources memory=8G,vcores=2,gpu=2 \
–worker_launch_cmd “cmd for worker …” \
–num_ps 2 \
–ps_resources memory=4G,vcores=2 \
–ps_launch_cmd “cmd for ps”[/mw_shl_code]

在同一个Tensorboard上访问所有训练作业历史

以下命令启动深度学习训练作业读取HDFS上的cifar10数据。

[mw_shl_code=shell,true]yarn jar hadoop-yarn-applications-submarine-<version>.jar job run \
–name tensorboard-service-001 –docker_image <your docker image> \
–tensorboard[/mw_shl_code]

在YARN UI上,用户可以通过一个简单的点击就访问tensorboard:

640.jpg

为数据科学家准备的云notebook

想在GPU机器上用notebook编写算法吗? 使用Submarine,你可以从YARN资源池获取云notebook。

通过运行以下命令,你就可以获得一个notebook,包括8GB内存,2个vcores和4个GPU,都是来自YARN上的资源。

[mw_shl_code=shell,true]
yarn jar hadoop-yarn-applications-submarine-<version>.jar job run \
–name zeppelin-note—book-001 –docker_image <your docker image> \
–num_workers 1 \
–worker_resources memory=8G,vcores=2,gpu=4 \
–worker_launch_cmd “/zeppelin/bin/zeppelin.sh” \
–quicklink Zeppelin_Notebook=http://master-0:8080[/mw_shl_code]

在YARN UI上,一个点击就可以直接访问notebook。

640.jpg

Submarine生态系统的周边项目


Hadoop Submarine的项目目标是为数据(数据采集,数据处理,数据清洗),算法(交互式,可视化编程和调优),资源调度,算法模型发布和作业调度提供深度学习算法的服务支持功能。

通过与Zeppelin整合,可以解决数据和算法。Hadoop Submarine同时还会与Azkaban整合解决作业调度的问题。三件套工具集:Zeppelin + Hadoop Submarine + Azkaban将提供一个开放且随时可用的深度学习开发平台。

Zeppelin与Submarine的集成

Zeppelin是一款支持交互式数据分析的web端notebook。你可以使用SQL,Scala,Python等来进行交互式的开发。

在完成机器学习模型训练之前,你可以使用Zeppelin中的20多个解释器(例如Spark,Hive,Cassandra,Elasticsearch,Kylin,HBase等)在Hadoop中收集数据,清洗数据,特征提取等。也即数据预处理过程。

我们提供Submarine解释器,以支持数据科学家在Zeppelin中进行开发,并直接将训练作业提交给YARN,然后通过notebook获得结果。

在Zeppelin中使用Submarine解释器

你可以在Zeppelin中创建一个submarine notebook。在notebook中输入 '%submarine.python',并开始使用python编写TensorFlow。

640.jpg

640.jpg

640.jpg

zeppelin submarine interpreter自动将算法文件合并为几个部分,并将它们提交给submarine计算引擎执行。

在notebook中点击“YARN LOG”超链接,可以打开YARN管理页面并查看任务的执行情况。

640.jpg

在YARN管理页面中,你可以打开自己的任务链接,查看任务的docker容器使用情况以及所有执行日志。

640.jpg

有了这个强大的工具,数据科学家不需要了解复杂的YARN或如何使用Submarine计算引擎。提交Submarine训练作业就像在notebook中运行Python脚本一样。最重要的是,用户不需要更改自己的应用程序就可以直接作为Submarine作业运行。

Azkaban与Submarine集成
Azkaban是一款易于使用的工作流调度工具,它可以调度在Zeppelin中编写的Hadoop submarine笔记,包括调度单独的笔记或者单独的段落。

你可以在Zeppelin中使用Azkaban的作业文件格式。编写具有依赖性的多个notebook任务。

640.jpg
Azkaban可以在zeppelin中调度这些有依赖性的notebooks

640.jpg

640.jpg

一旦执行了带有Azkaban脚本的notebook,它将被编译为Azkaban工作流程并提交给Azkaban执行。

Hadoop Submarine安装器
由于分布式深度学习框架需要在多个Docker容器中运行,并且需要能够协调容器中运行的各种服务,同时需要为分布式机器学习完成模型训练和模型发布服务。涉及多个系统的技术问题包括DNS,Docker,GPU,网络,显卡,操作系统内核修改等。所以部署Hadoop Submarine运行环境是非常困难和耗时的。但我们提供了一个安装工具来简化部署,参考:
https://github.com/hadoopsubmarine/hadoop-submarine-ecosystem/blob/master/submarine-installer

640.gif

项目状态


Alpha解决方案已经合并到了trunk中,作为Hadoop3.2的一部分,仍然处于积极的开发与测试中,Umbrella JIRA: YARN-8135。Submarine可以运行在Apache Hadoop 3.1+的发布版本中。

案例分析 – 网易

Netease是Submarine项目的主要贡献者之一。

已有的计算集群状态:

  • 中国最大的在线游戏/新闻/音乐提供商
  • 总共差不多有6000个节点的YARN集群
  • 每天10万个作业,40%是Spark作业。

一个单独的1000个节点的Kubernetes集群(安装了GPU),用于机器学习

每天1000个ML作业

  • 所有的数据来自于HDFS并且被Spark处理

存在的问题:

  • 用户体验差

没有集成的操作平台,全部通过手动实现算法,提交作业和检查运行结果。效率低且容易出错。

  • 利用率低(YARN任务不能利用这个K8S集群)

不能重复使用已有的YARN集群的资源。

不能集成到已有的大数据处理系统(eg: spark, hive, etc.)

  • 高维护费用(需要管理单独的集群)

我们需要同时维护Hadoop和Kubernetes两套环境,增加了维护成本和学习成本。

网易submarine的部署状态

  • 积极的参与到Submarine社区的开发,在20个GPU节点的集群上验证Submarine。
  • 计划在未来将所有的深度学习工作负载移动到Submarine。

其他参考


1.Submarine设计文档:
https://docs.google.com/document/d/199J4pB3blqgV9SCNvBbTqkEoQdjoyGMjESV4MktCo0k/edit

2.计算引擎的umbrella JIRA,YARN-8135:
https://issues.apache.org/jira/browse/YARN-8135

4.2018 Strata Data Conf上Submarine的PPT:
https://conferences.oreilly.com/strata/strata-ny-2018/public/schedule/detail/68289





最新经典文章,欢迎关注公众号



来源: weixin
作者: ApachePulsar

原文链接:0499-如何使用潜水艇在Hadoop之上愉快的玩耍深度学习
https://mp.weixin.qq.com/s/SPScgd3hT5pdbPZEIiSpuw


本帖被以下淘专辑推荐:

已有(1)人评论

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条