search
尋找貓咪~QQ 地點 桃園市桃園區 Taoyuan , Taoyuan

CICC科普欄目|分散式機器學習平台大比拼

本文選自紐約州里大學計算機系教授Murat和學生的論文,主要介紹了分散式機器學習平台的實現方法並提出了未來的研究方向。

論文>>https://www.cse.buffalo.edu/~demirbas/publications/DistMLplat.pdf


機器學習特別是深度學習為語音識別、圖像識別、自然語言處理、推薦系統和搜索引擎等領域帶來的革命性的突破。這些技術將會廣泛用於自動駕駛、醫療健康系統、客戶關係管理、廣告、物聯網等場景。在資本的驅動下機器學習的發展十分迅速,近年來我們看到了各個公司和研究機構紛紛推出了自己的機器學習平台。


由於需要訓練的數據集合模型十分巨大,機器學習平台通常採用分散式的架構來實現,會採用成百上千的機器來訓練模型。在不遠的未來,涉及機器學習的計算將會成為數據中心的主要任務。


由於作者分散式系統的專業背景,本文從分散式系統的角度來研究這些機器學習平台,並分析他們在通信和控制方面的瓶頸。同時我們還研究並比較了這些平台的容錯性以及編程實現的難易程度。

根據實現原理和架構的不同,我們將分散式機器學習平台分為三種不同的基本類型:

  • 基礎數據流模式

  • 參數伺服器模型

  • 先進的數據流模式

對於三種主流的實現方式做了簡短的介紹,分別利用Spark、PMLS和Tensorflow(MXNet)來對三種類型進行解讀。我們對不同的平台進行了比較,詳細的結果見論文。

在文章的最後我們總結了分散式機器學習平台並對未來給出了一些建議,如果你很熟悉機分散式器學習平台的話可以跳過這部分。

Spark

在Spark里計算通過有向無環圖來建模,其中每一個頂點代表一個彈性分散式數據集(Resilient Distributed Dataset, RDD) ,而每條邊表示一種對於RDD的操作。RDD是一組分配在不同邏輯分區里的對象,這些邏輯分區直接在內存里儲存並處理,當內存空間不夠的時候,部分分區會被存放在硬碟上,需要的時候再和內存里的分區替換位置。


在有向無環圖中,從A定點指向B定點的E邊表示RDD A 通過E操作得到了RDD B。其中包含兩類操作:轉換類和動作類。轉換類操作意味著會產生新的RDD。

Spark的用戶通過建立對有向無環圖上RDD的轉換或者運行操作來實現計算。有向無環圖被編譯為一個個不同的級別,每一個級別包含一系列可以并行計算的任務(每個分區中一個任務)。任務間較弱的依賴性有利於高效的執行,而較強的依賴性則會因為大量的通信造成性能的嚴重下降。

Spark通過將這些有向無環圖分級分配到不同的機器上來實現分散式計算,上圖顯示了主節點的清晰的工作架構。驅動包含兩個部分的調度器單元,DAG調度器和任務調度器,同時運行和協調不同機器間的工作。

Spark的設計初衷是用於通用的數據處理,並沒有針對機器學習的特殊設計。但是在MKlib工具包的幫助下,也能在Spark上實現機器學習。通常來說,Spark將模型參數存儲於驅動節點上,每一個機器在完成迭代之後都會與驅動節點通信更新參數。對於大規模的應用來說,模型參數可能會存在一個RDD上。由於每次迭代后都會引入新的RDD來存儲和更新參數,這會引入很多額外的負載。更新模型將會在機器和磁碟上引入數據的洗牌操作,這限制了Spark的大規模應用。這是基礎數據流模型的缺陷,Spark對於機器學習的迭代操作並沒有很好的支持。

PMLS

PMLS是為機器學習量身打造的平台,通過引入了參數伺服器抽象概念來處理機器學習訓練過程中頻繁的迭代。

上圖中的綠色框表示系統的參數伺服器,並保存為分散式的鍵值存儲。PS包含兩個方面的任務——複製和分片:每一個節點都是模型的一個分片的主要節點,其次,這個節點還是有別的分片的備份。因此,參數伺服器的性能和節點數量是持正比的。

PS節點存儲並且更新模型的參數,同時對機器的請求作出相應。每台機器會將自己本地PS的參數模型更新到PS節點,同時獲取分配到需要進行計算的數據集。
PMLS 同時採用了Stale Synchronous Parallelism (SSP) 模型,相比於Bulk Synchronous Parellelism (BSP) 模型它放寬了每一個機器在每一次迭代結束時同步的要求。S由於處理過程在誤差允許的範圍內,這樣鬆弛的連續模型對於機器學習依然有效。我曾經發表了一篇博客驗證了這一機制。

博客>>https://muratbuffalo.blogspot.com/2016/04/petuum-new-platform-for-distributed.html

TensorFlow

谷歌有過一個基於參數伺服器的分散式機器學習模型——DistBelief,但它最大的劣勢在於需要很多底層的編程來實現機器學習。谷歌希望員工可以在不需要精通分散式知識的情況下編寫機器學習代碼,所以開發了Tensorflow來實現這一目標。基於同樣的理由,谷歌也曾經為大數據處理提供了MapReduce的分散式框架。

Tensorflow雖然採用了數據流機制,但採用了更先進的計算圖模型。我認為Naiad的設計對TensorFlow產生了很大的影響。

Tensorflow利用有向圖的節點和邊實現計算。節點代表需要實現的計算而邊則代表在節點間進行通信的高維矩陣(張量)用戶需要靜態地申明符號化的計算圖,同時利用圖的複寫和分區來實現分散式計算(MXNet和部分的DyNet則會動態地申明圖來改善程序的靈活性)。

TensorFlow通過使用上圖中的參數伺服器來實現對模型的訓練。當你在TensorFlow中使用參數伺服器抽象概念時,你同時可以使用參數伺服器和數據并行。Tensorflow可以實現更為複雜的操作,但是需要用戶自己編寫程序去探索和實現。

一些評測結果

我們使用亞馬遜的雲服務來進行試驗,利用了Amazon EC2 m4.xlarge 實例 每個包含 Intel Xeon E5-2676 v3 處理器 and 16GiB RAM. 750Mbps的帶寬. 我們利用二分類邏輯回歸和多層神經網路的圖像分類問題來進行評價。下文只是簡要的列出了實驗結果的圖表,欲知詳情請查閱論文。我們的試驗受限於機器規模的限制,同時我們僅僅測試了三種分散式平台在CPU上的表現,並沒有測GPU的。

圖描述了各個平台進行邏輯回歸的速度,Spark<MXNet<PMLS。


下圖顯示了各個平台對於DNNs的處理速度。其中Spark在處理兩層網路時的性能下降主要來自於大量的迭代計算。


下圖是不同平台對於CPU的利用率。Spark的使用率最高,主要來自於大量的串聯負載。我們先前的工作對這一問題進行過討論。

結論與展望

現在的ML/DL 應用基本都是平行運算,而且從演算法角度看不是很有趣。我們可以很有把握的說參數伺服器在分散式機器學習平台上是更好的方案。

目前網路通信還是分散式機器學習系統的瓶頸。與其致力於更先進的通用數據流平台,不吐集中精力來實現更好的數據/模型分級,提高數據/模型的重視度。

在Spark系統中CPU的開銷則是先於網路限制的瓶頸。編程語言的性能同樣的影響著系統的表現。十分需要更高的工具來監測並且預測分散式機器學習系統的表現,最近出現了如Ernest和CherryPick等工具來處理這一問題。

對於機器學習的運行時間依然存在許多懸而未決的問題,例如資源調度和運行時間表現的改善。通過對應用運行時間的監控和分析,下一代分散式機器學習系統將會運行時間的彈性預測以及對於計算資源、內存、網站資源的彈性調度。同時編程和軟體工程方面也存在一些需要解決的問題。什麼是適合分散式機器學習抽象編程語言?這還需要研究人員進行大量的驗證和測試來回答。

-END-

免費訂閱!

C2

如何加入學會

註冊學會會員:

個人會員:

(c2_china),回復「個人會員」獲取入會申請表,按要求填寫申請表即可,如有問題,可在公眾號內進行留言。通過學會審核後方可在線進行支付寶繳納會費。

單位會員:

(c2_china),回復「單位會員」獲取入會申請表,按要求填寫申請表即可,如有問題,可在公眾號內進行留言。通過學會審核後方可繳納會費。

學會近期活動

1. CICC企業會員交流會

會議時間:(具體時間詳見後續通知)

2.2017首屆全國兵棋推演大賽總決賽

2017年10月

長按下方學會二維碼,關注學會微信

感謝關注



熱門推薦

本文由 yidianzixun 提供 原文連結

寵物協尋 相信 終究能找到回家的路
寫了7763篇文章,獲得2次喜歡
留言回覆
回覆
精彩推薦