【對標TensorFlow】阿里公開內部超大規模分散式機器學習平台
摘要: 近年來,隨著「大」數據及「大」模型的出現,學術界和工業界對分散式機器學習演算法引起了廣泛關注。針對這一剛需,阿里集團和螞蟻金服設計了自己的分散式平台——鯤鵬。鯤鵬結合了分散式系統及並行優化演算法,解決了大規模機器學習演算法帶來的一系列問題,不僅囊括了數據/模型並行、負載平衡、模型同步、稀疏表示、工業容錯等特性,而且還提供了封閉好的、宜於調用的 API 供普通的機器學習者開發分散式演算法,降低使用成本並提升效率。
近年來,隨著「大」數據及「大」模型的出現,學術界和工業界對分散式機器學習演算法引起了廣泛關注。針對這一剛需,阿里集團和螞蟻金服設計了自己的分散式平台——鯤鵬。鯤鵬結合了分散式系統及並行優化演算法,解決了大規模機器學習演算法帶來的一系列問題,不僅囊括了數據/模型並行、負載平衡、模型同步、稀疏表示、工業容錯等特性,而且還提供了封閉好的、宜於調用的 API 供普通的機器學習者開發分散式演算法,降低使用成本並提升效率。相關論文在本屆 KDD 以口頭報告的形式發表(應用數據科學 Track)。
論文《鯤鵬:基於參數伺服器的分散式學習系統及其在阿里巴巴和螞蟻金服的應用》(KunPeng: Parameter Server based Distributed Learning Systems and Its Applications in Alibaba and Ant Financial),由螞蟻金服人工智慧部和阿里雲團隊的周俊,李小龍,趙沛霖,陳超超,李龍飛,楊新星,崔卿,余晉,陳緒,丁軼,漆遠合作完成。
文中描述的實驗在十億級別的樣本和特徵數據上進行。結果表示,鯤鵬的設計使得一系列演算法的性能都得到了極大的提升,包括 FTRL,Sparse-LR,以及 MART。此外,鯤鵬在阿里巴巴「雙11」狂歡購物節及螞蟻金服的交易風險檢測中,體現出了巨大的應用價值。
研究背景:工業界需要能夠訓練 TB-PB 級數據量的機器學習平台
現在是個大數據的時代,各個平台的數據量都與時俱進。舉例而言,國外的 Twitter 每天新增 5 億條Tweets,阿里巴巴每天有 5000 萬個包裹,螞蟻金服的支付寶交易峰會達到 12 萬筆/秒,僅僅在 2016 年「雙11」當天就產生了 10.5 億筆交易。
如此大的數據量,使得機器學習不得不面臨著樣本及特徵規模巨大的挑戰。例如,阿里巴巴內部的模型會達到千億樣本,百億特徵,TB-PB 級的訓練數據量。因此,如果搭建能夠訓練如此大規模數據的機器學習平台是工業界面臨的一個巨大問題。
(圖 2:阿里某生產集群中 MPI 任務狀態)
目前,業界已經有一些比較成熟的分散式處理框架,如 Hadoop,Spark,GraphLab 和 GraphX。雖然它們可以支持機器學習演算法並行化,但它們很難讓開發人員設計出更有效率且支持更大規模的機器學習演算法。
具體而言,Hadoop 和 Spark 雖然提供了一些同步和粗粒度運算符(例如,Map,Reduce 和 Join 等),但主要還停留在解決中小規模機器學習的問題。GraphLab/GraphX 主要是為了圖存儲和計算,並不適用於普通的大規模機器學習演算法。MPI 雖然能夠支持普通的分散式計算,但其缺乏容錯機制。特別是在 worker 很大的情況下,MPI 的運行成功率會大大降低,如圖1所示。
因此,如何設計更有效率且支持更大規模的機器學習演算法,就成為一個業界難題。
鯤鵬:超大規模分散式計算系統 + 超大規模分散式優化演算法
為了解決這一問題,螞蟻金服人工智慧部&阿里雲團隊開發了鯤鵬。
鯤鵬取名自《莊子·逍遙遊》,文中記載「北冥有魚,其名曰鯤。鯤之大,不知其幾千里也;化而為鳥,其名為鵬。鵬之背,不知其幾千里也。怒而飛,其翼若垂天之雲。」
研究人員表示,在他們的鯤鵬系統中,「鯤」即是超大規模分散式計算系統,擁有超強的計算能力;而「鵬」即是超大規模分散式優化演算法,建立在「鯤」之上。「鯤鵬」即同時擁有超大規模分散式計算系統及超大規模分散式優化演算法,合二為一使得它有「一飛衝天」的能力,如圖3 所示。
(圖 3:鯤鵬的研究動機及創新性)
在系統方面,鯤鵬的創新在於它擁有了以下功能:
強大的容錯功能,甚至在複雜且忙碌的線上集群環境中
Backup Instance for Straggler Management
支持有向無循環圖形式的調度和同步,包括BSP/SSP/ASP
用戶友好的界面和編程
從演算法創新角度看,鯤鵬架構使得常用的機器學習演算法的大規模化成為了可能,截止目前,已經有眾多機器學習演算法在鯤鵬上得以實現和應用,包括但不限於LR,FTRL,MART,FM,HashMF,DSSM,DNN,LDA。
鯤鵬的總體架構
鯤鵬的架構建立在阿里巴巴集團內部的大規模分散式 Apasra 平台上面,擁有Robust Failover、Backup Instance,以及 DGA for Scheduling & Synchronization 等特性。
(圖4:鯤鵬的架構)
圖4中的核心模塊包括以下幾部分:
- Server nodes:對模型做分片存儲
- Worker nodes:對訓練數據做分片並計算
- Coordinator:控制演算法整體流程,如初始化,迭代,終止等
- ML Bridge:使用腳本形式的工作流對數據進行預處理
- PS-Core:核心的參數伺服器組件 (servers/workers/coordinator)
- Fuxi:監控所有機器運行狀態,必要時進行容錯
用戶視角
鯤鵬系統的調用,對普通用戶而言也非常簡單。用戶只需要使用簡單的幾行腳本形式的命令,即可完成整個演算法的調度。整個過程主要包括:
- 數據預處理,準備成演算法接受格式
- 構建演算法的輸入/出表
- 調用鯤鵬演算法,ps_train -i demo_batch_input -o demo_batch_result -a xxAlgo -t
- xxTermination;
- 評估演算法效果
- 進行A/B測試
(圖 5:鯤鵬架構用戶視角)
從圖5 中可以看出,整個流程對用戶而言都是透明的,使用過程也「如絲般順滑」,不用感知演算法背後複雜的優化及調度過程。
開發者視角
鯤鵬架構對普通的機器學習演算法開發者而言也非常簡單,它將複雜的通信及調度過程包裝成了 API。例如,Worker.PullFrom(Server),開發者只需要這一行簡單的代碼即可把模型從 server 端 pull 到 worker 端。再如,SyncBarrier(),這開發者只需要這一行簡單的代碼即可完成 server 端模型的同步。
(圖 6:鯤鵬架構開發者視角)
實驗結果
1. 與 Spark 和 MPI 比較
(圖 7:鯤鵬與 Spark 和 MPI 訓練時間及內存消耗對比)
圖7 顯示了在 7 個不同數據集上(D1-D7),鯤鵬與 Spark 和 MPI 的邏輯回歸演算法(LR)訓練時間及內存消耗對比。如 D1(460K,20M) 指該數據集包含了 46 萬特徵,2000 萬樣本。從中可以看出,Spark 和 MPI 的 LR 在特徵超大的情況下(D7)會出錯,而鯤鵬的LR則可順利訓練成功。
2. Kunpeng-MART 與 XGBoost 比較
(圖 8:Kunpeng-MART 與 XGBoost 內存消耗對比結果)
圖8 顯示了基於鯤鵬實現的 Multiple Additive Regression Trees(MART)與開源的 XGBoost 在 4 個不同數據集上的對比結果。從中可以看出,基於鯤鵬的 MART 內存使用情況要穩定的低於 XGBoost。此外,我們在 Ads CVR2 數據上重複跑了 10 次 XGBoost,但無一成功得到結果。
圖9 顯示了基於鯤鵬的 MART 和 XGBoost 在相同數據集上運行時間的對比,其中也可以看出基於鯤鵬的 MART 訓練時間要優於 XGBoost。
(圖 8:Kunpeng-MART 與 XGBoost 訓練時長對比結果)
3. Worker 數量對演算法的影響實驗
(圖 10 Worker 數量與演算法加速及單 Worker 內存使用關係)
圖10 顯示了 Worker 數量與演算法加速及單 Worker 內存使用的關係。在該實驗中,我們使用的是基於鯤鵬的稀疏 LR 演算法,特徵約有 70 億個,樣本約有 180 億個。從中可以看出,25 個 worker 就能訓練這些數據。而且隨著 worker 的增多,演算法訓練速度倍增,同時單機上的內存使用會倍降。
總結
超大規模分散式學習系統能力對大數據的公司而言尤為重要。鯤鵬在阿里和螞蟻眾多實際場景中發揮出了巨大的優勢。例如,在 2015 年「雙11」中,鯤鵬系統上實現的「樓層」排序(LR 演算法)使得 UV CTR 提升了 21%,GMV 提升了10%。再如,基於鯤鵬實現的 GBDT+DNN 演算法,應用在支付寶交易風險評估業務中,上線以來在相同覆蓋度的情況下,案件召回率從 91% 增加到 98%,每天減少了幾千萬次用戶的打擾。此外,在鯤鵬上實現的 Deep Structured Semantic Model(DSSM),已經廣泛被應用於搜索、廣告和智能客服等業務中。總體來說,鯤鵬系統上的 10 多個成熟演算法已經被廣泛應用於 120 多個產品中,這些無一不是阿里生態體系內最大規模的演算法。
來源:新智元
原文鏈接:【對標TensorFlow】阿里公開內部超大規模分散式機器學習平台-博客-雲棲社區-阿里雲
更多技術乾貨敬請關注云棲社區知乎機構號:阿里云云棲社區 - 知乎
推薦閱讀:
※幾個有意思的開源庫/工具
※現在主流開源分散式系統架構都有哪些?
※下一波計算浪潮
※分散式計算和並行計算到底有啥區別 能讓我知道什麼時候是哪種就好了?
※深入淺出Spark(二) 什麼是RDD