1 介绍

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

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

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

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

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

2 为什么叫这个名字

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

3 潜水艇概述

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,以便你更轻松地尝试强大的工具集。

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

4 Submarine计算引擎可以做什么?

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

4.1 像Hello World一样启动一个分布式深度学习训练作业

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

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”

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

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

yarn jar hadoop-yarn-applications-submarine-<version>.jar job run \
–name tensorboard-service-001 –docker_image <your docker image> \
–tensorboard

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

4.3 为数据科学家准备的云notebook

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

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

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

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

5 Submarine生态系统的周边项目

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

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

5.1 Zeppelin与Submarine的集成

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

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

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

5.2 在Zeppelin中使用Submarine解释器

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

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

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

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

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

5.3 Azkaban与Submarine集成

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

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

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

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

6 Hadoop Submarine安装器

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

https://github.com/hadoopsubmarine/hadoop-submarine-ecosystem/blob/master/submarine-installer

7 项目状态

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

8 案例分析 – 网易

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。

9 其他参考

1.Submarine设计文档:

https://docs.google.com/document/d/199J4pB3blqgV9SCNvBbTqkEoQdjoyGMjESV4MktCo0k/edit

2.计算引擎的umbrella JIRA,YARN-8135:

https://issues.apache.org/jira/browse/YARN-8135

3.Submarine生态系统的项目:

https://github.com/hadoopsubmarine/hadoop-submarine-ecosystem

4.2018 Strata Data Conf上Submarine的PPT:

https://conferences.oreilly.com/strata/strata-ny-2018/public/schedule/detail/68289

欢迎参与贡献!

10 关于作者

Wangda Tan @ Hortonworks, Engineering Manager of YARN team @ Hortonworks. Apache Hadoop PMC member and committer, working on Hadoop since 2011. Major working field: scheduler / deep learning on YARN / GPUs on YARN, etc.

Xun Liu @ Netease, has been working on Hadoop development for 5 years. Currently in the Netease Hangzhou Research Institute is responsible for the machine learning development team.

Sunil Govindan, Staff Software Engineer @Hortonworks. Contributing to Apache Hadoop project since 2013 in various roles as Hadoop Contributor, Hadoop Committer and a member Project Management Committee (PMC). Majorly working on YARN Scheduling improvements / Multiple Resource types support in YARN etc.

Quan Zhou @ Netease, Senior Big Data Engineer @NetEase, Focusing on Hadoop, yarn, and hive, worked at Cisco since 2013 and joined in NetEase in 2015

Zhankun Tang. Staff Software Engineer @Hortonworks. He’s interested in big data, cloud computing, and operating system. Now focus on contributing new features to Hadoop as well as customer engagement. Prior to Hortonworks, he works for Intel.

1 致谢

Thanks for inputs and contributions from Vinod Vavilapalli, Saumitra Buragohain, Yanbo Liang, Zian Chen, Weiwei Yang, Zhe Zhang (Linkedin), Jonathan Hung (Linkedin), Keiqiu Hu (Linkedin), Anthony Hsu.

原文参考:

https://hortonworks.com/blog/submarine-running-deep-learning-workloads-apache-hadoop/

0499-如何使用潜水艇在Hadoop之上愉快的玩耍深度学习相关推荐

  1. Hadoop 之上的数据建模 - Data Vault 2.0

    对比传统的基于 RDBMS 之上的数据仓库和商业智能项目,尝试着说说,Hadoop 之上的数据仓库,从ETL, 数据存储,到分析展现.重点围绕数据建模方面做分析,因为这是本文的重点,介绍一份新的数据建 ...

  2. Submarine:在 Apache Hadoop 中运行深度学习框架

    \u003cp\u003e作者: \u003ca href=\"https://hortonworks.com/blog/author/wtan/\"\u003eWangda Ta ...

  3. 贾扬清:希望Caffe成为深度学习领域的Hadoop

    [转自20150707](http://www.csdn.net/article/2015-07-07/2825150) 在深度学习(Deep Learning)的热潮下,Caffe作为一个高效.实用 ...

  4. 【转】贾扬清:希望Caffe成为深度学习领域的Hadoop

    [转:http://www.csdn.net/article/2015-07-07/2825150] 在深度学习(Deep Learning)的热潮下,Caffe作为一个高效.实用的深度学习框架受到了 ...

  5. Peter Cnudde谈雅虎如何使用Hadoop、深度学习和大数据平台

    \ 本文要点 \ 了解雅虎如何利用Hadoop和大数据平台技术: \ 在类似Flickr和Esports这样的产品中,雅虎如何使用深度学习技术进行场景检测和对象识别: \ 机器学习在图像识别.定向广告 ...

  6. 雅虎开源CaffeOnSpark:基于Hadoop/Spark的分布式深度学习

    雅虎开源CaffeOnSpark:基于Hadoop/Spark的分布式深度学习 [日期:2016-02-26] 来源:极客头条 作者: [字体:大 中 小] 在基于Hadoop集群的大规模分布式深度学 ...

  7. 【Hadoop Summit Tokyo 2016】Spark上可扩展的深度学习

    本讲义出自Matthias Langer.Dr. Zhen He与Dr. Zhen He在Hadoop Summit Tokyo 2016上的演讲,主要介绍了深度学习的基本概念和相关知识,分享了Spa ...

  8. 数仓是如何与“夏令时”愉快的玩耍?

    摘要:主要讲述夏令时的起源,发展,标准化以及如何在GaussDB中查询任一时区的夏令时规则. 本文分享自华为云社区<DWS如何与"夏令时"愉快的玩耍!>,原文作者:le ...

  9. 工作就是愉快的带薪学习

    工作就是一种愉快的带薪学习,只有我们认真的思索这句话才能够真正的理解到工作和学习的关系,工作和自我职业发展关系,工作和知识技能,工作与经验 积累之 间的关系.工作的过程就是学习的过程和自我知识积累的过 ...

最新文章

  1. Solaris 上网配置
  2. RocketMQ-初体验RocketMQ(07)-使用API操作RocketMQ_顺序消息 ordermessage
  3. stm32 IAP APP 相互跳转实验 (keil4 jlink STM32F407ZE
  4. 816固件a2可以升a1吗_关于A1,A2,A3,B1,B2驾驶证使用新规定,你知多少?
  5. InfluxDB学习之InfluxDB的基本操作
  6. java的decode_Java decode机试题
  7. mysql 5.7 window x64_window环境配置Mysql 5.7.21 windowx64.zip免安装版教程详解
  8. java中集合(List)的嵌套分配值、移除等操作
  9. 势高,则围广:TiDB 的架构演进哲学
  10. HDOJ--2094--产生冠军
  11. dynamips tutorial
  12. IDEA新手使用教程(详解)
  13. 多维Ellipse(椭球)形状与方程对应关系分析
  14. 乐高机器人 搭建钟摆_乐高创意百变31088拼搭指北:深海生物大鲨鱼,拼成3变变形金刚...
  15. 计算机优质书籍搜集(持续更新)
  16. android 图片的处理方法,Android图片处理,ImageView的属性和方法大全
  17. 移动端点击a标签后默认蓝色背景如何去除
  18. 回顾2007:新兴网络服务汇总(完整篇)
  19. 【算法训练营学习笔记-Week06】一遍不懂就多刷几遍
  20. Tomcat脚本一键装机

热门文章

  1. 移动安全-BTS-Potentially Harmful Applications (PHAs)
  2. 西湖大学遭质疑,多是“天坑”专业?校长施一公“霸气”回应
  3. 计算机毕业设计springboot+vue+elementUI幼儿园管理系统
  4. I/O控制器 和 DMA控制方式
  5. Puppet函数介绍(十八)
  6. 从三个角度分析,UI设计师为什么要学习产品原型设计?
  7. 关于PL2303用于STC单片机下载的讨论
  8. Python自动化小技巧06——任意图片做出二维码
  9. const volatile int i=10
  10. 正交矩阵(部分转载)