­

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/