{Submarine} 在 Apache Hadoop 中執行深度學習框架

大資料文摘發表於2019-01-11

{Submarine}  在 Apache Hadoop 中執行深度學習框架

大資料文摘投稿作品

作者:Wangda Tan、Sunil Govindan、Zhankun Tang

協作:劉勳、周全

Hadoop是用於大型企業資料集的分散式處理的最流行的開源框架,它在本地和雲端環境中都有很多重要用途。

深度學習對於語音識別,影像分類,AI聊天機器人,機器翻譯等領域的企業任務非常有用,僅舉幾例。為了訓練深度學習/機器學習模型,可以利用TensorFlow / MXNet / Pytorch / Caffe / XGBoost等框架。有時需要將這些框架進行組合使用以用於解決不同的問題。

為了使分散式深度學習/機器學習應用程式易於啟動,管理和監控,Hadoop社群啟動了Submarine專案以及其他改進,例如一流的GPU 支援,Docker容器支援,容器DNS支援,排程改進等。

這些改進使得在Apache Hadoop YARN上執行的分散式深度學習/機器學習應用程式就像在本地執行一樣簡單,這可以讓機器學習工程師專注於演算法,而不是擔心底層基礎架構。透過升級到最新的Hadoop,使用者現在可以在同一群集上執行其他ETL / streaming 作業來執行深度學習工作負載。這樣可以輕鬆訪問同一群集上的資料,從而實現更好的資源利用率。

{Submarine}  在 Apache Hadoop 中執行深度學習框架

典型的深度學習工作流程:資料從各個終端(或其他來源)匯聚到資料湖中。資料科學家可以使用筆記本進行資料探索,建立 pipelines 來進行特徵提取/分割訓練/測試資料集。 並開展深度學習和訓練工作。 這些過程可以重複進行。因此,在同一個叢集上執行深度學習作業可以顯著提高資料/計算資源共享的效率。

讓我們仔細看看Submarine專案(它是Apache Hadoop專案的一部分),請看下如何在Hadoop上執行這些深度學習工作。

為什麼叫Submarine 這個名字?

因為潛艇是唯一可以將人類帶到更深處的裝置裝置。B-)

{Submarine}  在 Apache Hadoop 中執行深度學習框架

圖片由NOAA辦公室提供,海洋勘探與研究,墨西哥灣2018年。

SUBMARINE 概覽

Submarine專案有兩個部分:Submarine計算引擎和一套整合 Submarine的生態系統軟體和工具。

Submarine計算引擎透過命令列向YARN提交定製的深度學習應用程式(如 Tensorflow,Pytorch 等)。這些應用程式與YARN上的其他應用程式並行執行,例如Apache Spark,Hadoop Map / Reduce 等。

最重要的是我們的有一套整合Submarine的生態系統軟體和工具,目前包括:

  • Submarine-Zeppelin integration:允許資料科學家在 Zeppelin 的notebook中編寫演算法和調參進行視覺化輸出,並直接從notebook提交和管理機器學習的訓練工作。

  • Submarine-Azkaban integration:允許資料科學家從Zeppelin 的notebook中直接向Azkaban提交一組具有依賴關係的任務,組成工作流進行週期性排程。

  • Submarine-installer:在你的伺服器環境中安裝Submarine和 YARN,輕鬆解決Docker、Parallel network和nvidia驅動的安裝部署難題,以便你更輕鬆地嘗試強大的工具集。

{Submarine}  在 Apache Hadoop 中執行深度學習框架

圖表說明了 Submarine 的整體構成,底部顯示了 Submarine 計算引擎,它只是 YARN 的一個應用程式。 在計算引擎之上,它整合到其他生態系統,如膝上型電腦(Zeppelin / Jupyter)和 Azkaban。

SUBMARINE 能夠做什麼?

透過使用 Submarine 計算引擎,使用者只需提交一個簡單的 CLI 命令即可執行單/分散式深度學習訓練工作,並從YARN UI 中獲取完整的執行情況。所有其他複雜性,如執行分散式等,都會由 YARN 負責。我們來看幾個例子:

就像 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”

透過 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:

{Submarine}  在 Apache Hadoop 中執行深度學習框架{Submarine}  在 Apache Hadoop 中執行深度學習框架

在同一 Tensorboard 上檢視訓練狀態和歷史記錄。

雲端資料科學家 NOTEBOOK

想在 GPU 機器上用筆記本編寫演算法嗎?使用 Submarine,你可以從 YARN 資源池獲取雲端 notebook。

透過執行以下命令,你可以獲得一個notebook,其中包括 8GB 記憶體,2 個 vcores 和 4 個來自 YARN 的 GPU。

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=0:8080

然後在 YARN UI上,你只需單擊一下即可訪問筆記本。

{Submarine}  在 Apache Hadoop 中執行深度學習框架

SUBMARINE 生態

Hadoop Submarine 專案的目標是提供深度學習場景中的資料(資料採集,資料處理,資料清理),演算法(互動式,視覺化程式設計和調優),資源排程,演算法模型釋出和作業排程的全流程服務支援。

透過與 Zeppelin 結合,很明顯可以解決資料和演算法問題。Hadoop Submarine 還將解決 Azkaban 的作業排程問題。 三件套工具集:Zeppelin + Hadoop Submarine + Azkaban 為你提供一個零軟體成本的、開放所有原始碼的隨時可用的深度學習開發平臺。

SUBMARINE 整合 ZEPPELIN

zeppelin 是一個基於 notebook 互動式的資料分析系統。你可以使用 SQL,Scala,Python 等來製作資料驅動的互動式協作文件。

在完成機器學習之前,你可以使用 Zeppelin 中的 20 多種直譯器(例如 Spark,Hive,Cassandra,Elasticsearch,Kylin,HBase 等)在 Hadoop 中的資料中收集資料,清理資料,特徵提取等。模特訓練,完成資料預處理過程。

我們提供 Submarine 直譯器,以支援機器學習工程師從 Zeppelin 筆記本中進行演算法開發,並直接向 YARN 提交訓練任務並從 Zeppelin 中獲得結果。

使用 ZEPPELIN SUBMARINE 直譯器

你可以在 zeppelin 中建立 submarine 直譯器。

在 notebook 的第一行種輸入 %submarine.python REPL(Read-Eval-Print Loop,簡稱REPL)名稱,你就可以開始編寫 tensorflow 的 python 演算法,你可以在一個 Notebook 中至上而下分段落的編寫一個或多個演算法模組,分塊編寫演算法結合視覺化輸出將會幫助你更容易驗證程式碼的正確性。

{Submarine}  在 Apache Hadoop 中執行深度學習框架{Submarine}  在 Apache Hadoop 中執行深度學習框架

The zeppelin submarine 直譯器會自動將分塊編寫的演算法模組進行合併提交到 submarine 計算引擎中執行。

透過點選 Notebook 中的 YARN LOG 超連結,你將會開啟 YARN 的管理頁面檢視執行的任務。

{Submarine}  在 Apache Hadoop 中執行深度學習框架

在 YARN 管理頁面中,你可以開啟自己的任務連結,檢視任務的 docker 容器使用情況以及所有執行日誌。

{Submarine}  在 Apache Hadoop 中執行深度學習框架

有了這個強大的工具,資料科學家不需要了解 YARN 的複雜性或如何使用 Submarine 計算引擎。提交 Submarine 訓練工作與在筆記本中執行 Python 指令碼完全相同。最重要的是,使用者無需更改其已有演算法程式即可轉換為 Submarine 作業執行。

SUBMARINE 整合 AZKABAN

Azkaban 是一種易於使用的工作流程安排服務,透過 Azkaban 安排 Zeppelin 編寫的 Hadoop Submarine Notebook 來安排指定 Notebook 設定某些段落之間的工作流程。

你可以在 Zeppelin 中使用 Azkaban 的作業檔案格式,編寫具有執行依賴性的多個筆記本執行任務。

{Submarine}  在 Apache Hadoop 中執行深度學習框架

Azkaban 能夠排程這些透過 zeppelin 編輯好的具有依賴關係的 notebook。

{Submarine}  在 Apache Hadoop 中執行深度學習框架{Submarine}  在 Apache Hadoop 中執行深度學習框架

一旦執行了帶有 Azkaban 指令碼的 notebook,它將被編譯為 Azkaban 支援的工作流並提交給 Azkaban 以執行。

HADOOP SUBMARINE 安裝程式

由於分散式深度學習框架需要在多個 Docker 容器中執行,並且需要能夠協調容器中執行的各種服務,因此需要為分散式機器學習完成模型訓練和模型釋出服務。這其中將涉及到多個系統工程問題,如 DNS,Docker,GPU,網路,顯示卡驅動,作業系統核心修改等,正確部署這些執行環境是一件非常困難和耗時的事情。

我們為你提供了 submarine installer ,用於執行時環境的安裝, submarine installer 是一個完全由 Shell 指令碼編寫,提供了簡單易用的選單化操作方式,你只需要在一臺可以聯網的伺服器上執行,就可以輕鬆便捷的安裝好執行環境。

{Submarine}  在 Apache Hadoop 中執行深度學習框架

安裝過程中你如果遇見問題,還可以透過我們提供的安裝手冊進行解決。

專案狀態

Alpha 版本的解決方案已經合併到 Haodop 主幹分支。 3.2.0版本的一部分仍處於活動開發/測試階段。Umbrella JIRA: YARN-8135.

Submarine 能夠執行在 Apache Hadoop 3.1+.x release 版本上,實際上你只需要安裝 Apache Hadoop 3.1 的 YARN 就可以使用完整的 Submarine 的功能和服務,經過我們的實際使用, Apache Hadoop 3.1 的 YARN 可以完全無誤的支援 Hadoop 2.7 + 以上的 HDFS 系統。

案例 – 網易

網易杭研大資料團隊是 Submarine 專案的主要貢獻者之一,主要希望透過 Submarine 來解決機器學習開發和運維過程中遇到的以下問題:

現有計算叢集的狀態:

  • 網易透過網際網路提供線上遊戲/電商/音樂/新聞等服務。

  • YARN 叢集中執行有 ~ 4k 伺服器節點

  • 每天 100k 計算任務

單獨部署的 Kubernetes 叢集(配備GPU)用於機器學習工作負載

  • 每天 1000+ 計算學習任務

  • 所有的 HDFS 資料都是透過 Spark、Hive、impala 等計算引擎進行處理

存在的問題:

  • 使用者體驗不佳

    沒有整合的操作平臺,全部透過手動編寫演算法,提交作業和檢查執行結果,效率低,容易出錯。

  • 利用率低

    無法重用現有的YARN群集資源。

    無法整合現有的大資料處理系統(例如:spark,hive等)

  • 維護成本高(需要管理分離的叢集)

    需要同時運維 Hadoop 和 Kubernetes 兩套操作環境,增加維護成本和學習成本。

網易內部 Submarine 部署情況

積極與 Submarine 社群合作開發,已經驗證 20 個 GPU 節點叢集上的 Submarine 的可靠性。

計劃將來將所有深度學習工作轉移到Submarine上

其他資訊

  • Submarine設計文件Google doc:umbrella JIRA for computation engine: YARN-8135

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

    35

  • Submarine 配套的生態專案: Github link。

    35

  • Submarine slides 在 Strata Data Conf 2018 大會上的演講.

    關於作者

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.

致謝

Thanks 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.

相關報導:

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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31562039/viewspace-2375538/,如需轉載,請註明出處,否則將追究法律責任。

相關文章