360開源其深度學習調度平臺,支持TensorFlow、MXNet等框架

jopen 7年前發布 | 27K 次閱讀 360 XLearning 開源

360開源其深度學習調度平臺,支持TensorFlow、MXNet等框架

奇虎 360 今日宣布開源深度學習調度平臺 XLearning,項目開源地址:https://github.com/Qihoo360/XLearning

XLearning 由 360 系統部大數據團隊與人工智能研究院聯合開發,基于 Hadoop Yarn 完成了對 TensorFlow、MXNet、Caffe、Theano、PyTorch、Keras、XGBoost 等常用深度學習框架的集成。平臺上線運行近一年時間,經多次版本迭代更新,為各類深度學習框架的使用者提供了統一、穩定的作業提交平臺,實現了資源共享,極大的提高了資源利用率,并且具有良好的擴展性和兼容性,在公司搜索、人工智能研究院、商業化、數據中心等業務部門得到廣泛使用。

我們第一時間采訪了XLearning 項目負責人李遠策,了解平臺建設背景和設計思想。李遠策,2013 年加入奇虎 360,先后參與公司 Hadoop、Spark 、深度學習等平臺的建設,歷經公司 Hadoop 平臺高速發展及 Spark 平臺從無到大規模實踐及深度學習平臺的落地。曾主持數據倉庫索引、MPI on Yarn、XLearning 等多個項目。工作中專注于解決平臺中的各種 Bug 及用戶遇到的各類問題,愛好開源,樂于學習和分享。目前主要關注大數據索引、大數據+深度學習等領域。

AI 前線:請問 XLearning 在 360 公司的研發歷史是什么樣的?起初是為了解決什么問題?目前在 360 公司有哪些應用場景?為什么會在現在選擇開源?

李遠策:人工智能技術最近兩年發展迅速,以 Google 開源的 TensorFlow 為代表的各種深度學習框架層出不窮。為了能讓人工智能技術更好的在公司落地,我們大數據基礎機構團隊聯合公司人工智能研究院共同開發了 XLearning 平臺。XLearning 從今年(2017)4 月份正式開始開發,經過 3 個版本的迭代,目前已經在公司的搜索、人工智能研究院、商業化、大數據中心等業務線廣泛使用。深度學習技術平臺化可以有效的提升 GPU 等硬件資源的利用率,節省硬件投入的成本。另外,可以讓算法工程師更方便的使用各類深度學習技術,從繁雜的諸如運行環境運維等工作中解脫出來。

XLearning 的設計思路是采用 Hadoop Yarn 來調度深度學習框架,是典型的“AI on Hadoop”的實現,同行業的公司都會有類似的需求,所以我們選擇開源,希望能給大家建設大數據+人工智能平臺做個參考。

AI 前線:為什么會考慮在大數據平臺的基礎上集成各種深度學習框架?XLearning 可滿足哪些要求,減輕哪些工作量?

李遠策:在建設公司人工智能平臺的架構設計上確實有多個方案可以選擇,我們主要是從如下幾個方面考慮的:

(1)跟現有平臺的融合;公司已有的機器學習作業多數采用 Spark MLLib 和 MPI 框架,都是采用 Hadoop Yarn 進行統一調度,如果將深度學習框架也集成到 Yarn 上同時數據由 HDFS 存儲,則可以實現平臺的統一。

(2)運維復雜度;重新建設一個新的平臺會引入新的運維工作;

(3)公司程序員的使用習慣;公司很多開發人員對 Hadoop 生態比較熟悉,直接在 Hadoop 上提交深度學習作業更容易推廣;

(4)開發工作量;我們團隊對 Hadoop 生態系統的組件比較熟悉,再次之前曾經實現了“MPI on Yarn”系統。可以說具備實現“AI on Hadoop”的技術儲備。

XLearning 開源版本兼容社區的 Hadoop,同行公司如果有 Hadoop 平臺則可以直接使用它來調度深度學習作業。如果還沒有 Hadoop 平臺則需要提前部署。深度學習的訓練往往依賴海量的樣本數據,一個可靠的大數據存儲系統是訓練平臺的必備條件,Hadoop 部署簡單、穩定可靠,是大數據平臺的行業標準,推薦使用。

AI 前線:XLearning 功能設計和架構設計要點是什么?

李遠策:XLearning 的系統架構圖如下:

360開源其深度學習調度平臺,支持TensorFlow、MXNet等框架

  • Client:XLearning 客戶端,負責啟動作業及獲取作業執行狀態;
  • ApplicationMaster(AM):負責輸入數據分片、啟動及管理 Container、執行日志保存等;  
  • Container:作業的實際執行者,負責啟動 Worker 或 PS(Parameter Server)進程,監控并向 AM 匯報進程狀態,上傳作業的輸出等。對于 TensorFlow 類型作業,還負責啟動 TensorBoard 服務。

XLearning 雖然架構簡潔,但具有豐富的功能方便用戶進行模型訓練,并依托于 Yarn 提供有作業資源的統一管理。

(1)支持多種深度學習框架

XLearning 支持 TensorFlow、MXNet 分布式和單機模式,支持所有的單機模式的深度學習框架,如 Caffe、Theano、PyTorch 等。對于同一個深度學習框架支持多版本和自定義版本,滿足用戶個性化需求,不受限于集群機器上各學習框架的安裝版本。

(2)基于 HDFS 的統一數據管理

XLearning 提供多種模式用于數據的輸入、輸出,包括數據的流式讀寫、直接 HDFS 讀寫等,可根據作業處理的數據量與集群機器硬盤容量,視情況決定所采用的讀寫方式。

(3)可視化界面

為方便用戶查看作業信息,XLearning 提供可視化界面用于展示作業執行進度和輸出日志等內容。作業執行完畢后,亦可查看日志內容,便于分析訓練過程進展。對于 TensorFlow 類型作業,支持 TensorBoard 服務。作業運行界面大致分為三部分(如下圖所示):

  • All Containers:顯示當前作業所含 Container 列表及各 Container 對應信息,如 Contianer ID、所在機器(Container Host)、所屬類型(Container Role)、當前執行狀態(Container Status)、開始時間(Start Time)、結束時間(Finish Time)、執行進度(Reporter Progress);
  • View TensorBoard:當作業類型為 TensorFlow 時,可點擊該鏈接直接跳轉至 TensorBoard 頁面;
  • Save Model:用戶可在作業執行過程中,可以將當前訓練模型的輸出結果上傳至 HDFS,并顯示目前已上傳的模型列表。

360開源其深度學習調度平臺,支持TensorFlow、MXNet等框架

(4)原生代碼兼容

XLearning 支持 TensorFlow 分布式模式的 ClusterSpec 自動分配構建,單機模式和其他深度學習框架代碼不用做任何修改即可遷移到 XLearning 上,便于用戶快速使用。

(5)Checkpoint 功能

利用深度學習框架本身的 Checkpoint 機制和直接讀寫 HDFS 數據功能,XLearning 方便用戶實現訓練恢復繼續執行。

AI 前線:XLearning 在性能上有哪些優勢?平臺設計時考慮到了哪些易用性方面的需求?

李遠策:XLearning 主要負責調度和監控工作,從原理上講訓練性能跟原生的 TensorFlow、Caffe 等框架保持一致。平臺的易用性是推廣的關鍵因素,XLeanring 做了如下考慮:

(1)與原生框架的兼容性,除了剛才說的性能保持一致外,代碼也保持兼容,可以有效降低業務作業遷移的成本;

(2)Web 展示;XLearnin 調度的作業主頁上會展示必要的調度信息、作業進度、日志等,同時還額外提供了隨時保存中間結果的功能,方便工程師根據實際情況提前終止自己的作業;

(3)集成 TensorBoard;對于 TensorFlow 作業 XLearning 會自動拉起 TensorBoard 服務,相比之前手動啟動會更簡單;

(4)自動構建 TensorFlow 的 ClusterSpec;對于分布式模式的 TensorFlow 作業,工程師不再需要手動指定 worker、ps 的 host 信息,僅需要告知 XLearning 需要的 worker 和 ps 節點數即可;

這些在剛才的架構設計要點環節里也都有提到。

AI 前線:您們在開發 XLearning 有哪些經驗和心得值得和大家分享的呢?

李遠策:除了剛才提到的架構選型之外最想分享的經驗就是:所有功能的設計都要以實際需求出發,空想出來的功能往往華而不實。XLearning 設計之初和新版本的規劃過程中,都會跟公司實際用戶做充分的功能需求討論,明確大家工作的痛點,安排好優先級和 deadline 再做架構設計和開發。

AI 前線:XLearning 的開源版本和公司在使用的版本功能上是否存在差異?

李遠策:坦白講開源的 XLearning 是一個簡化的版本,主要是因為受限于對 Yarn 功能的依賴。公司的 Yarn 版本,是我們在社區版本上做了不少增強。比如支持 GPU 的資源調度、GPU 通信親和性的感知、DockerContainer 支持等。依賴于這些特性公司在用的版本多出了 GPU 資源調度支持、作業 Docker 化、臨時 GPU 虛擬機、Container Metrics 可視化圖表展示等功能。這些功能我們后續會通過提供 Yarn Patch 或者開源自用 Yarn 版本來分享給大家,也歡迎大家隨時跟我們溝通。

AI 前線:我們知道您不僅負責了 XLearning 深度學習平臺,也是 Spark 早期研究者和布道者,歷經 360 公司 Hadoop 平臺高速發展及 Spark 平臺從無到大規模實踐和落地,能否結合您的經歷給大家講述下從通用大數據平臺到深度學習平臺的演進歷程?

李遠策:MR、Spark 這些計算框架在大多數互聯網公司都有廣泛的使用,能滿足大多數的數據處理需求。受限于 Spark MLLib 的性能和擴展性,公司還有不少 MPI 類型的作業跑在專用的調度系統(名為 Euler)上。為了實現調度的統一和服務器資源的復用,我們團隊開發了 Euclid(MPI on Yarn)系統,初步統一了機器學習作業和大數據作業的統一調度。然后到了深度學習階段,我們最初也走了些彎路。比如我們最早在 2016 年下半年開發了一款名為 SparkFlow(TensorFlow on Spark)的系統,可以把 TensorFlow 集成到 Spark 中,通過 RDD 完成數據的交互。后來 Yahoo 研究院也開源一個“TensorFlowOnSpark”,實現原理基本類似。受限與 Spark 本身的問題,并不適合做 PS 架構,另外與原生 TensorFlow 代碼兼容性也很難做到完全兼容,在推廣過程中遇到了很多的問題。重新考慮后我們開發了“TensorFlow on Yarn”,試行成功后為了兼容其他的深度學習框架就演化成了現在的 XLearning。后續我們會繼續沿著統一調度的方案前行。目前平臺還有很多問題需要繼續探索,比如我們正在設計的更高性能的算法庫,希望能無縫替換現在的 Spark MLLib,進一步提升公司 AI 平臺的計算能力。關于這方面的工作希望能有機會跟同行的技術專家多多交流。謝謝大家!

來自: InfoQ

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!