天天看點

号外! 大次元機器學習也有計算架構了

簡介

為支援超大次元機器學習模型運算,騰訊資料平台部與香港科技大學合作開發了面向機器學習的分布式計算架構——angel 1.0。

angel是使用java語言開發的專有機器學習計算系統,使用者可以像用spark, mapreduce一樣,用它來完成機器學習的模型訓練。angel已經支援了sgd、admm優化算法,同時我們也提供了一些常用的機器學習模型;但是如果使用者有自定義需求,也可以在我們提供的最優化算法上層比較容易地封裝模型。

angel應用香港科技大學的chukonu 作為網絡解決方案, 在高次元機器學習的參數更新過程中,有針對性地給滞後的計算任務的參數傳遞提速,整體上縮短機器學習算法的運算時間。這一創新采用了香港科技大學陳凱教授及其研究小組開發的可感覺上層應用(application-aware)的網絡優化方案,以及楊強教授上司的的大規模機器學習研究方案。

另外,北京大學崔斌教授及其學生也共同參與了angel項目的研發。

在實際的生産任務中,angel在千萬級到億級的特征緯度條件下運作sgd,性能是成熟的開源系統spark的數倍到數十倍不等。angel已經在騰訊視訊推薦、廣點通等精準推薦業務上實際應用,目前我們正在擴大在騰訊内部的應用範圍,目标是支援騰訊等企業級大規模機器學習任務。

整體架構

angel在整體架構上參考了谷歌的distbelief。distbeilef最初是為深度學習而設計,它使用了參數伺服器,以解決巨大模型在訓練時的更新問題。參數伺服器同樣可用于機器學習中非深度學習的模型,如sgd、admm、lbfgs的優化算法在面臨在每輪疊代上億個參數更新的場景中,需要參數分布式緩存來拓展性能。angel在運算中支援bsp、ssp、asp三種計算模型,其中ssp是由卡耐基梅隆大學ericxing在petuum項目中驗證的計算模型,能在機器學習的這種特定運算場景下提升縮短收斂時間。系統有五個角色:

master:負責資源申請和配置設定,以及任務的管理。

task:負責任務的執行,以線程的形式存在。

worker:獨立程序運作于yarn的container中,是task的執行容器。

parameterserver:随着一個任務的啟動而生成,任務結束而銷毀,負責在該任務訓練過程中的參數的更新和存儲。

号外! 大次元機器學習也有計算架構了

workergroup為一個虛拟概念,由若幹個worker組成,中繼資料由master維護。為模型并行拓展而考慮,在一個workergroup内所有worker運作的訓練資料都是一樣的。雖然我們提供了一些通用模型,但并不保證都滿足需求,而使用者自定義的模型實作可以實作我們的通用接口,形式上等同于mapreduce或spark。

1)使用者友好

    1. 自動化資料切分: angel系統為使用者提供了自動切分訓練資料的功能,友善使用者進行資料并行運算:系統預設相容了hadoop fs接口,原始訓練樣本存儲在支援hadoop fs接口的分布式檔案系統如hdfs、tachyon。

    2. 豐富的資料管理:樣本資料存儲在分布式檔案系統中,系統在計算前從檔案系統讀取到計算程序,放在緩存在記憶體中以加速疊代運算;如果記憶體中緩存不下的資料則暫存到本地磁盤,不需要向分布式檔案系統再次發起通訊請求。

    3. 豐富的線性代數及優化算法庫: angel更提供了高效的向量及矩陣運算庫(稀疏/稠密),友善了使用者自由選擇資料、參數的表達形式。在優化算法方面,angel已實作了sgd、admm;模型方面,支援了latent dirichletallocation (lda)、matrixfactorization (mf)、logisticregression (lr) 、support vector machine(svm) 等。

    4. 可選擇的計算模型: 綜述中我們提到了,angel的參數伺服器可以支援bsp,ssp,asp計算模型。

    5. 更細粒度的容錯: 在系統中容錯主要分為master的容錯,參數伺服器的容災,worker程序内的參數快照的緩存,rpc調用的容錯。

    6. 友好的任務運作及監控: angel也具有友好的任務運作方式,支援基于yarn的任務運作模式。同時,angel的web app頁面也友善了使用者檢視叢集進度。

2)參數服務

在實際的生産環境中,可以直覺的感受到spark的driver單點更新參數和廣播的瓶頸,雖然可以通過線性拓展來減少計算時的耗時,但是帶來了收斂性下降的問題,同時更嚴重的是在資料并行的運算過程中,由于每個executor都保持一個完整的參數快照,線性拓展帶來了n x 參數快照的流量,而這個流量集中到了driver一個節點上!

号外! 大次元機器學習也有計算架構了

從圖中看到,在機器學習任務中,spark即使有更多的機器資源也無法利用,機器隻在特定較少的規模下才能發揮最佳性能,但是這個最佳性能其實也并不理想。

采用參數伺服器方案,我們與spark做了如下比較:在有5000萬條訓練樣本的資料集上,采用sgd解的邏輯回歸模型,使用10個工作節點(worker),針對不同次元的特征逐一進行了每輪疊代時間和整體收斂時間的比較(這裡angel使用的是bsp模式)。

号外! 大次元機器學習也有計算架構了

通過資料可見,模型越大angel對比spark的優勢就越明顯。

3)記憶體優化

在運算過程中為減少記憶體消耗和提升單程序内運算收斂性使用了異步無鎖的hogwild! 模式。同一個運算程序中的n個task如果在運算中都各自保持一個獨立的參數快照,對參數的記憶體開銷就n倍,模型次元越大時消耗越明顯!sgd的優化算法中,實際場景中,訓練資料絕大多數情況下是稀疏的,是以參數更新沖突的機率就大大降低了,即便沖突了梯度也不完全是往差的方向發展,畢竟都是朝着梯度下降的方向更新的。我們使用了hogwild!模式之後,讓多個task在一個程序内共享同一個參數快照,減少記憶體消耗并提升了收斂速度。

4)網絡優化

我們有兩個主要優化點:

1)程序内的task運算之後的參數更新合并之後平滑的推送到參數伺服器更新,這減少了task所在機器的上行消耗,也減少了參數伺服器的下行消耗,同時減少在推送更新的過程中的峰值瓶頸次數;

2)針對ssp進行更深一步的網絡優化:由于ssp是一種半同步的運算協調機制,在有限的視窗運作訓練,快的節點達到視窗邊緣時,任務就必須停下來等待最慢的節點更新最新的參數。針對這一問題,我們通過網絡流量的再配置設定來加速較慢的工作節點。我們給較慢的節點以更高的帶寬;相應的,快的工作節點就分得更少的帶寬。這樣一來,快的節點和慢的節點的疊代次數的差距就得以控制,減少了視窗被突破(發生等待)的機率,也就是減少了工作節點由于ssp視窗而空閑等待時間。

如下圖所示,在1億次元、疊代30輪的效果評測中,可以看到chukonu使得累積的空閑等待時間大幅度減少,達3.79倍。

号外! 大次元機器學習也有計算架構了

下圖展示的是優化前後的執行時間,以5000萬次元的模型為例,20個工作節點和10個參數伺服器,staleness=5,執行30輪疊代。可以看出,開啟chukonu後平均每輪的完成時間隻需7.97秒,相比于比原始的任務平均每輪9.2秒有了15%的提升。

号外! 大次元機器學習也有計算架構了

另外,針對性加速慢的節點可以使慢的節點更大可能的獲得最新的參數,是以對比原始的ssp計算模型,算法收斂性得到了提升。下圖所示,同樣是針對五千萬次元的模型在ssp下的效果評測,原生的angel任務在30輪疊代後(276秒)loss達到了0.0697,而開啟了chukonu後,在第19輪疊代(145秒)就已達到更低的loss。從這種特定場景來看有一個接近90%的收斂速度提升。

号外! 大次元機器學習也有計算架構了

後續計劃

未來,項目組将擴大應用的規模,同時,項目組已經在繼續研發angel的下一版本,下一個版本會在模型并行方面做一些深入的優化。另外,項目組正在計劃把angel進行開源,我們會在後續合适的時機進行公開。

本文作者:陳圳

繼續閱讀