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

\u003cp\u003e作者: \u003ca href=\"https://hortonworks.com/blog/author/wtan/\"\u003eWangda Tan\u003c/a\u003e \u0026amp; \u003ca href=\"https://hortonworks.com/blog/author/sgovindan/\"\u003eSunil Govindan\u003c/a\u003e \u0026amp; \u003ca href=\"https://hortonworks.com/blog/author/ztang/\"\u003eZhankun Tang\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cem\u003e(这篇博文由网易杭研的 \u003ca href=\"https://github.com/liuxunorg\"\u003e刘勋\u003c/a\u003e 和 \u003ca href=\"https://github.com/yuanzac\"\u003e周全\u003c/a\u003e 协助编写).\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003e原文地址:\u003ca href=\"https://hortonworks.com/blog/submarine-running-deep-learning-workloads-apache-hadoop/\"\u003ehttps://hortonworks.com/blog/submarine-running-deep-learning-workloads-apache-hadoop/\u003c/a\u003e\u003c/p\u003e\n\u003ch2\u003e介绍\u003c/h2\u003e\n\u003cp\u003eHadoop 是用于大型企业数据集的分布式处理的最流行的开源框架,它在本地和云端环境中都有很多重要用途。\u003c/p\u003e\n\u003cp\u003e深度学习对于语音识别,图像分类,AI 聊天机器人,机器翻译等领域的企业任务非常有用,仅举几例。 为了训练深度学习/机器学习模型,可以利用 \u003ccode\u003eTensorFlow\u003c/code\u003e / \u003ccode\u003eMXNet\u003c/code\u003e / \u003ccode\u003ePytorch\u003c/code\u003e / \u003ccode\u003eCaffe\u003c/code\u003e / \u003ccode\u003eXGBoost\u003c/code\u003e 等框架。 有时需要将这些框架进行组合使用以用于解决不同的问题。\u003c/p\u003e\n\u003cp\u003e为了使分布式深度学习/机器学习应用程序易于启动,管理和监控,\u003ccode\u003eHadoop\u003c/code\u003e 社区启动了 \u003ccode\u003eSubmarine\u003c/code\u003e 项目以及其他改进,例如一流的 GPU 支持,Docker 容器支持,容器 DNS 支持,调度改进等。\u003c/p\u003e\n\u003cp\u003e这些改进使得在 Apache Hadoop YARN 上运行的分布式深度学习/机器学习应用程序就像在本地运行一样简单,这可以让机器学习工程师专注于算法,而不是担心底层基础架构。 通过升级到最新的 Hadoop,用户现在可以在同一群集上运行其他 ETL / streaming 作业来运行深度学习工作负载。 这样可以轻松访问同一群集上的数据,从而实现更好的资源利用率。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c2d7051e38c1.png\" alt=\"image\" /\u003e\u003c/p\u003e\n\u003cp\u003e典型的深度学习工作流程:数据从各个终端(或其他来源)汇聚到数据湖中。 数据科学家可以使用笔记本进行数据探索,创建 pipelines 来进行特征提取/分割训练/测试数据集。 并开展深度学习和训练工作。 这些过程可以重复进行。 因此,在同一个集群上运行深度学习作业可以显著提高数据 / 计算资源共享的效率。\u003c/p\u003e\n\u003cp\u003e让我们仔细看看 Submarine 项目(它是 Apache Hadoop 项目的一部分),请看下如何在 Hadoop 上运行这些深度学习工作。\u003c/p\u003e\n\u003ch3\u003e为什么叫 Submarine 这个名字?\u003c/h3\u003e\n\u003cp\u003e因为潜艇是唯一可以将人类带到更深处的装置设备。B-)\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c2d705181f58.png\" alt=\"image\" /\u003e\u003c/p\u003e\n\u003cp\u003e图片由 NOAA 办公室提供海洋勘探与研究,墨西哥湾2018年。\u003c/p\u003e\n\u003ch2\u003eSUBMARINE 概览\u003c/h2\u003e\n\u003cp\u003eSubmarine 项目有两个部分:Submarine 计算引擎和一套集成 Submarine 的生态系统软件和工具。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eSubmarine 计算引擎\u003c/strong\u003e 通过命令行向 YARN 提交定制的深度学习应用程序(如 Tensorflow,Pytorch 等)。 这些应用程序与 YARN 上的其他应用程序并行运行,例如 Apache Spark,Hadoop Map / Reduce 等。\u003c/p\u003e\n\u003cp\u003e最重要的是我们的有一套集成 Submarine 的生态系统软件和工具,目前包括:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSubmarine-Zeppelin integration:\u003c/strong\u003e 允许数据科学家在 Zeppelin 的 notebook 中编写算法和调参进行可视化输出,并直接从 notebook 提交和管理机器学习的训练工作。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSubmarine-Azkaban integration:\u003c/strong\u003e 允许数据科学家从 Zeppelin 的 notebook 中直接向 Azkaban 提交一组具有依赖关系的任务,组成工作流进行周期性调度。\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSubmarine-installer:\u003c/strong\u003e 在您的服务器环境中安装 Submarine 和 YARN,轻松解决 Docker 、Parallel network 和 nvidia 驱动的安装部署难题,以便您更轻松地尝试强大的工具集。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c2d705328758.png\" alt=\"image\" /\u003e\u003c/p\u003e\n\u003cp\u003e图表说明了 Submarine 的整体构成,底部显示了 Submarine 计算引擎,它只是 YARN 的一个应用程序。 在计算引擎之上,它集成到其他生态系统,如笔记本电脑(Zeppelin / Jupyter)和 Azkaban。\u003c/p\u003e\n\u003ch2\u003eSUBMARINE 能够做什么?\u003c/h2\u003e\n\u003cp\u003e通过使用 Submarine 计算引擎,用户只需提交一个简单的 CLI 命令即可运行单/分布式深度学习训练工作,并从YARN UI 中获取完整的运行情况。 所有其他复杂性,如运行分布式等,都会由 YARN 负责。 我们来看几个例子:\u003c/p\u003e\n\u003ch4\u003e就像 HELLO WORLD 一样轻松启动分布式深度学习训练\u003c/h4\u003e\n\u003cp\u003e以下命令启动深度学习训练工作读取 HDFS上 的 cifar10 数据。 这项工作是使用用户指定的 Docker 镜像,与YARN 上运行的其他作业共享计算资源(如CPU / GPU /内存)。\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eyarn jar hadoop-yarn-applications-submarine-\u0026lt;version\u0026gt;.jar job run \\\n–name tf-job-001 –docker_image \u0026lt;your docker image\u0026gt; \\\n–input_path hdfs://default/dataset/cifar-10-data \\\n–checkpoint_path hdfs://default/tmp/cifar-10-jobdir \\\n–num_workers 2 \\\n–worker_resources memory=8G,vcores=2,gpu=2 \\\n–worker_launch_cmd “cmd for worker …” \\\n–num_ps 2 \\\n–ps_resources memory=4G,vcores=2 \\\n–ps_launch_cmd “cmd for ps”\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch4\u003e通过 TENSORBOARD 访问您所有的训练历史任务\u003c/h4\u003e\n\u003cp\u003e以下命令启动深度学习训练工作读取 HDFS 上的 cifar10 数据。\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eyarn jar hadoop-yarn-applications-submarine-\u0026lt;version\u0026gt;.jar job run \\\n–name tensorboard-service-001 –docker_image \u0026lt;your docker image\u0026gt; \\\n–tensorboard\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e在 YARN UI 上,用户只需单击即可访问 tensorboard:\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c2d705282612.png\" alt=\"image\" /\u003e\u003cbr /\u003e\n\u003cimg src=\"https://static.geekbang.org/infoq/5c2d70542eece.png\" alt=\"image\" /\u003e\u003c/p\u003e\n\u003cp\u003e在同一 Tensorboard 上查看训练状态和历史记录。\u003c/p\u003e\n\u003ch4\u003e云端数据科学家 NOTEBOOK\u003c/h4\u003e\n\u003cp\u003e想在 GPU 机器上用笔记本编写算法吗? 使用 Submarine,您可以从 YARN 资源池获取云端 notebook。\u003c/p\u003e\n\u003cp\u003e通过运行以下命令,您可以获得一个notebook,其中包括 8GB 内存,2 个 vcores 和 4 个来自 YARN 的 GPU。\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eyarn jar hadoop-yarn-applications-submarine-\u0026lt;version\u0026gt;.jar job run \\\n–name zeppelin-note—book-001 –docker_image \u0026lt;your docker image\u0026gt; \\\n–num_workers 1 \\\n–worker_resources memory=8G,vcores=2,gpu=4 \\\n–worker_launch_cmd “/zeppelin/bin/zeppelin.sh” \\\n–quicklink Zeppelin_Notebook=http://master-0:8080\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e然后在 YARN UI上,您只需单击一下即可访问笔记本。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c2d714829901.png\" alt=\"image\" /\u003e\u003c/p\u003e\n\u003ch2\u003eSUBMARINE 生态\u003c/h2\u003e\n\u003cp\u003eHadoop Submarine 项目的目标是提供深度学习场景中的数据(数据采集,数据处理,数据清理),算法(交互式,可视化编程和调优),资源调度,算法模型发布和作业调度的全流程服务支持。\u003c/p\u003e\n\u003cp\u003e通过与 Zeppelin 结合,很明显可以解决数据和算法问题。 Hadoop Submarine 还将解决 Azkaban 的作业调度问题。 三件套工具集:Zeppelin + Hadoop Submarine + Azkaban 为您提供一个零软件成本的、开放所有源码的随时可用的深度学习开发平台。\u003c/p\u003e\n\u003ch3\u003eSUBMARINE 集成 ZEPPELIN\u003c/h3\u003e\n\u003cp\u003eZeppelin 是一款基于网络的笔记本电脑,支持交互式数据分析。 您可以使用 SQL,Scala,Python 等来制作数据驱动的交互式协作文档。\u003c/p\u003e\n\u003cp\u003e在完成机器学习之前,您可以使用 Zeppelin 中的 20 多种解释器(例如 Spark,Hive,Cassandra,Elasticsearch,Kylin,HBase 等)在 Hadoop 中的数据中收集数据,清理数据,特征提取等。 模特训练,完成数据预处理过程。\u003c/p\u003e\n\u003cp\u003e我们提供 Submarine 解释器,以支持机器学习工程师从 Zeppelin 笔记本中进行算法开发,并直接向 YARN 提交训练任务并从 Zeppelin 中获得结果。\u003c/p\u003e\n\u003ch4\u003e使用 ZEPPELIN SUBMARINE 解释器\u003c/h4\u003e\n\u003cp\u003e你可以在 zeppelin 中创建 submarine 解释器。\u003c/p\u003e\n\u003cp\u003e在 notebook 的第一行种输入 \u003ccode\u003e%submarine.python\u003c/code\u003e REPL(\u003cem\u003eRead-Eval-Print Loop\u003c/em\u003e,简称 \u003cem\u003eREPL\u003c/em\u003e)名称,你就可以开始编写 tensorflow 的 python 算法,你可以在一个 Notebook 中至上而下分段落的编写一个或多个算法模块,分块编写算法结合可视化输出将会帮助你更容易验证代码的正确性。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c2d71c15b90e.png\" alt=\"image\" /\u003e\u003cbr /\u003e\n\u003cimg src=\"https://static.geekbang.org/infoq/5c2d71c2f29be.png\" alt=\"image\" /\u003e\u003cbr /\u003e\n\u003cimg src=\"https://static.geekbang.org/infoq/5c2d71c4dd2f2.png\" alt=\"image\" /\u003e\u003c/p\u003e\n\u003cp\u003eThe zeppelin submarine 解释器会自动将分块编写的算法模块进行合并提交到 submarine 计算引擎中执行。\u003c/p\u003e\n\u003cp\u003e通过点击 Notebook 中的 \u003ccode\u003eYARN LOG\u003c/code\u003e 超链接,你将会打开 YARN 的管理页面查看执行的任务。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c2d71c68cf3c.png\" alt=\"image\" /\u003e\u003c/p\u003e\n\u003cp\u003e在 YARN 管理页面中,您可以打开自己的任务链接,查看任务的 docker 容器使用情况以及所有执行日志。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c2d71c5a2fc5.png\" alt=\"image\" /\u003e\u003c/p\u003e\n\u003cp\u003e有了这个强大的工具,数据科学家不需要了解 YARN 的复杂性或如何使用 Submarine 计算引擎。 提交 Submarine 训练工作与在笔记本中运行 Python 脚本完全相同。 最重要的是,用户无需更改其已有算法程序即可转换为 Submarine 作业运行。\u003c/p\u003e\n\u003ch3\u003eSUBMARINE 集成 AZKABAN\u003c/h3\u003e\n\u003cp\u003eAzkaban 是一种易于使用的工作流程安排服务,通过 Azkaban 安排 Zeppelin 编写的 Hadoop Submarine Notebook 来安排指定 Notebook 设置某些段落之间的工作流程。\u003c/p\u003e\n\u003cp\u003e您可以在 Zeppelin 中使用 Azkaban 的作业文件格式,编写具有执行依赖性的多个笔记本执行任务。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c2d71c3c9545.png\" alt=\"image\" /\u003e\u003cbr /\u003e\nAzkaban 能够调度这些通过 zeppelin 编辑好的具有依赖关系的 notebook。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c2d71c46f908.png\" alt=\"image\" /\u003e\u003cbr /\u003e\n\u003cimg src=\"https://static.geekbang.org/infoq/5c2d71c510a40.png\" alt=\"image\" /\u003e\u003c/p\u003e\n\u003cp\u003e一旦执行了带有 Azkaban 脚本的 notebook,它将被编译为 Azkaban 支持的工作流并提交给 Azkaban 以执行。\u003c/p\u003e\n\u003ch3\u003eHADOOP SUBMARINE 安装程序\u003c/h3\u003e\n\u003cp\u003e由于分布式深度学习框架需要在多个 Docker 容器中运行,并且需要能够协调容器中运行的各种服务,因此需要为分布式机器学习完成模型训练和模型发布服务。 这其中将涉及到多个系统工程问题,如 DNS,Docker,GPU,网络,显卡驱动,操作系统内核修改等,正确部署这些运行环境是一件非常困难和耗时的事情。\u003c/p\u003e\n\u003cp\u003e我们为您提供了 \u003ca href=\"https://github.com/hadoopsubmarine/hadoop-submarine-ecosystem/blob/master/submarine-installer\"\u003esubmarine installer\u003c/a\u003e ,用于运行时环境的安装, submarine installer 是一个完全由 Shell 脚本编写,提供了简单易用的菜单化操作方式,您只需要在一台可以联网的服务器上运行,就可以轻松便捷的安装好运行环境。\u003c/p\u003e\n\u003cp\u003e\u003cimg src=\"https://static.geekbang.org/infoq/5c2d71c285c3e.png\" alt=\"image\" /\u003e\u003c/p\u003e\n\u003cp\u003e安装过程中你如果遇见问题,还可以通过我们提供的 \u003ca href=\"https://github.com/hadoopsubmarine/hadoop-submarine-ecosystem/blob/master/submarine-installer/README-CN.md\"\u003e安装手册\u003c/a\u003e 进行解决。\u003c/p\u003e\n\u003ch2\u003e项目状态\u003c/h2\u003e\n\u003cp\u003eAlpha 版本的解决方案已经合并到 Haodop 主干分支。 3.2.0版本的一部分仍处于活动开发/测试阶段。Umbrella JIRA: \u003ca href=\"https://issues.apache.org/jira/browse/YARN-8135\"\u003eYARN-8135\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eSubmarine 能够运行在 Apache Hadoop 3.1+.x release 版本上,实际上你只需要安装 Apache Hadoop 3.1 的 YARN 就可以使用完整的 Submarine 的功能和服务,经过我们的实际使用, Apache Hadoop 3.1 的 YARN 可以完全无误的支持 Hadoop 2.7 + 以上的 HDFS 系统。\u003c/p\u003e\n\u003ch2\u003e案例 – 网易\u003c/h2\u003e\n\u003cp\u003e网易杭研大数据团队是 Submarine 项目的主要贡献者之一,主要希望通过 Submarine 来解决机器学习开发和运维过程中遇到的以下问题:\u003c/p\u003e\n\u003cp\u003e现有计算集群的状态:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e网易通过互联网提供在线游戏/电商/音乐/新闻等服务。\u003c/li\u003e\n\u003cli\u003eYARN 集群中运行有 ~ 4k 服务器节点\u003c/li\u003e\n\u003cli\u003e每天 100k 计算任务\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e单独部署的 Kubernetes 集群(配备GPU)用于机器学习工作负载\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e每天 1000+ 计算学习任务\u003c/li\u003e\n\u003cli\u003e所有的 HDFS 数据都是通过 Spark、Hive、impala 等计算引擎进行处理\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e存在的问题:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e用户体验不佳\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e没有集成的操作平台,全部通过手动编写算法,提交作业和检查运行结果,效率低,容易出错。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e利用率低\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e无法重用现有的YARN群集资源。\u003c/p\u003e\n\u003cp\u003e无法集成现有的大数据处理系统(例如:spark,hive等)\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e维护成本高(需要管理分离的集群)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e需要同时运维 Hadoop 和 Kubernetes 两套操作环境,增加维护成本和学习成本。\u003c/p\u003e\n\u003cp\u003e网易内部 Submarine 部署情况\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e积极与 Submarine 社区合作开发,已经验证 20 个 GPU 节点集群上的 Submarine 的可靠性。\u003c/li\u003e\n\u003cli\u003e计划将来将所有深度学习工作转移到 Submarine 上\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e其他信息\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eSubmarine 设计文档 \u003ca href=\"https://docs.google.com/document/d/199J4pB3blqgV9SCNvBbTqkEoQdjoyGMjESV4MktCo0k/edit\"\u003eGoogle doc\u003c/a\u003e: , umbrella JIRA for computation engine: \u003ca href=\"https://issues.apache.org/jira/browse/YARN-8135\"\u003eYARN-8135\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSubmarine 配套的生态项目: \u003ca href=\"https://github.com/hadoopsubmarine/hadoop-submarine-ecosystem\"\u003eGithub link\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://conferences.oreilly.com/strata/strata-ny-2018/public/schedule/detail/68289\"\u003eSubmarine slides\u003c/a\u003e 在 Strata Data Conf 2018 大会上的演讲.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e欢迎大家参与到 Submarine 项目中来!\u003c/p\u003e\n\u003ch2\u003e关于作者\u003c/h2\u003e\n\u003cp\u003eWangda 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.\u003c/p\u003e\n\u003cp\u003eXun 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.\u003c/p\u003e\n\u003cp\u003eSunil 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.\u003c/p\u003e\n\u003cp\u003eQuan Zhou @ Netease, Senior Big Data Engineer @NetEase, Focusing on Hadoop, yarn, and hive, worked at Cisco since 2013 and joined in NetEase in 2015\u003c/p\u003e\n\u003cp\u003eZhankun 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.\u003c/p\u003e\n\u003ch2\u003e致谢\u003c/h2\u003e\n\u003cp\u003eThanks for inputs and contributions from Vinod Vavilapalli, Saumitra Buragohain, Yanbo Liang, Zian Chen, Weiwei Yang, Jeff Zhang ,Zhe Zhang (Linkedin), Jonathan Hung (Linkedin), Keiqiu Hu (Linkedin), Anthony Hsu.\u003c/p\u003e\n

你可能感兴趣的:(Submarine:在 Apache Hadoop 中运行深度学习框架)