0499-如何使用潜水艇在Hadoop之上愉快的玩耍深度学习
- 2019 年 11 月 27 日
- 笔记
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.
11
致谢
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/