PAI分佈式機器學習平臺編程模型演進之路

機器學習 MapReduce 大數據 深度學習 雲棲社區 2017-06-26

在雲棲計算之旅第5期—大數據與人工智能大會上,來自阿里雲大數據事業部的九豐分享了《PAI分佈式機器學習平臺編程模型演進之路》。他主要介紹了在集團中使用機器學習解決大數據問題時如何通過編程模型的演進逐步解決業務上的痛點。其中,他只要分享了MapReduce、MPI、Parameter Server編程模型的演進過程。

以下內容根據大會視頻整理而成。

什麼是PAI?

PAI的全稱是Platform of Artificial Intelligence,主要在使用機器學習做模型訓練時提供整套鏈路。機器學習即服務,把機器學習作為服務對外推出,大家可以在平臺上使用比較先進的機器學習算法。將多種深度學習框架集成到PAI中,同時基於深度學習框架包裝成更加易用的組件。具備異構的計算服務能力,把CPU計算能力和GPU計算能力統一調度起來,異構的計算能力透明,大家的注意力是哪些機器學習算法可以幫助業務,不用關心底層資源的申請和分配。PAI也支持在線預測服務,模型一鍵發佈。

大規模分佈式機器學習的挑戰

數據規模和特徵會不斷增加,這就會導致模型複雜度的增加,之前的模型已經不能夠處理這麼高的複雜度了。特徵增加之後,模型變得越來越大,模型很難做到單機加載,所以在模型存儲時需要做分片和切分。在常規的機器學習裡面,更多的注意力放在理解業務的數據、特徵,而現在的注意力會轉移到模型本身,更多考慮怎麼通過調整模型的結構達到更好的預測效果。

編程模型演進

MapReduce編程模型

PAI分佈式機器學習平臺編程模型演進之路

MapReduce核心的思想是分而治之,即把數據切分成很多塊,每個節點處理其中的一小塊。做分佈式系統時會面臨很多問題,比如希望計算任務可以在MapReduce框架層面做切分和調度。MapReduce從框架層面極大地降低了把任務遷移到分佈式計算系統上的難度和門檻。對於數據的分佈式存儲和劃分,數據可分散存儲在幾千臺機器上,並且都有相應副本,不需要擔心數據的丟失,底層的分佈式存儲會統一進行處理。計算任務的同步和計算節點的容錯與恢復,若使用普通機器去搭大型計算群的時候,機器的宕機時比較普遍的現象,使用MapReduce則不需要關心這一點。右圖是MapReduce的編程模型,最初是用來處理SQL等問題。

PAI分佈式機器學習平臺編程模型演進之路

在機器學習裡面,有些算法是基於MapReduce編程模型去實現的。TF-IDF用來評估文檔裡面單詞是否能表示文檔主題。首先計算文檔裡面單詞出現的頻率,把謂詞和嘆詞去掉,關注真正有意義的詞。IDF則是統計該詞在所有文檔裡面出現的頻率,將其和文檔裡出現的頻率經過算法計算得出最終結果。這個過程如何通過MapReduce實現呢?在Mapper中迭代的去加載每一篇要訓練的文章,在迭代過程中統計每個單詞出現的頻率。將統計結果放入Reducer中,進行計算,得到TF-IDF結果表。

MapReduce編程模型有兩個特點:不同計算任務之間獨立,每個Mapper和Reducer只會計算自己相關的數據,數據並行度高;適合不需要不同節點通信的機器學習算法。

MPI編程模型

PAI分佈式機器學習平臺編程模型演進之路

邏輯迴歸算法是需要節點間進行通信的,該算法在個性化推薦中可以經常看到。個性化推薦算法是指每個人點擊進來之後會進行分類,判斷是否會對某些商品感興趣,然後進行推薦。模型函數如上圖中公式所示,定義損失函數,損失函數值越小說明模型擬合越好,尋找損失函數最小值的過程中用到了梯度下降算法。

早期,很多邏輯迴歸算法都是基於MPI編程模型實現的,MPI是消息傳遞接口,定義了Send,Receive,BC阿斯圖,AllReduce接口,支持單機多Instance和多機多Instance,具有高度靈活,描述能力強,大量用於科學計算。

PAI分佈式機器學習平臺編程模型演進之路

MPI使用時有很多限制,首先必須提前知道階段任務在哪些計算節點上做。在大規模的計算集群裡面,所有資源的分配都是動態的,在任務執行之前不知道任務會調度到哪些節點上,但是早期有很多算法需要基於MPI實現,所以對MPI底層做了網絡拓撲的建立,做了大量的重構,幫助MPI相關程序能夠基於分佈式的調度系統調度起來。

PAI分佈式機器學習平臺編程模型演進之路

邏輯迴歸的實現過程如上圖所示。其中,有n個計算節點,首先會加載訓練樣本,計算梯度,然後本地加和,最後調用AllReduce接口去計算現在模型所在的位置。MPI本身還存在一些缺點:首先MPI中Worker的數目有上限,當需要更多節點的時候會發生性能下降。

參數服務器Parameter Server

PAI分佈式機器學習平臺編程模型演進之路

Parameter Server和MPI相比,在更高的層次定義了編程模型和接口。Parameter Server中有三個角色,Server節點用來存儲模型,計算節點會加載部分模型、訓練數據,每輪迭代時每個節點會計算下個梯度,將節點和Server進行通信。Coordinator用來判斷訓練是否結束。此外,Parameter Server支持異步通信接口,不需要在不同計算節點間做同步。

PAI分佈式機器學習平臺編程模型演進之路

阿里在2014年下半年,獨立自研了PAI Parameter Server計算模型,已在集團內大規模使用。具體做的工作如上圖所示。MPI的一個缺點是不支持容錯,而每天上萬臺的集群會出現各種各樣的故障,PAI Parameter Server針對大規模集群做了節點容錯功能。Parameter Server集成很多算法,比如邏輯迴歸等。

深度學習

PAI分佈式機器學習平臺編程模型演進之路

深度學習是人工神經網絡的延伸,相比之下能夠支持更深的網絡。上圖中,Alexnet是卷積神經網絡,總共有8層網絡,深度學習如果想要獲得更好的效果,必須要構建一個更深的神經網絡。隨著神經網絡變深,需要更多的參數,並且模型也會更加龐大。多級訓練則需要更高量級的通信量。

TensorFlow

PAI分佈式機器學習平臺編程模型演進之路

TensorFlow是谷歌第二代的深度學習框架,支持各種神經網絡,具有高度的靈活性,豐富的社區生態,支持CNN、RNN、LSTM等網絡。

上圖中TensorFlow的例子是兩層神經網絡做圖片的分類。上面通過API定義訓練圖片和測試數據,接著定義了模型(softmax多分類模型),定義損失函數通過交叉熵來做,最後選擇優化函數找最優點。下面部分則是通過API把訓練數據餵給模型再計算當前模型的準確率。從上例中,可以看出,API非常靈活,基於Python,所以非常方便。

PAI TensorFlow

將TensorFlow遷移到PAI上之後,將TensorFlow作業服務化,起TensorFlow作業的時候不需要去申請資源、做訓練數據的遷移;分佈式調度(包括單機和多機)只需提交模型訓練Python文件;GPU卡映射;多種數據源,結構化數據和非結構化數據都支持;超參支持,訓練模型時會調整學習率,通過超參把參數存進來就不需要每次都調整了;模型在線預測,訓練好模型之後可以部署到在線預測服務上,調用API獲知模型結果是否正面。

PAI Pluto(多機多卡Caffe)

PAI分佈式機器學習平臺編程模型演進之路

Caffe早於TensorFlow,Caffe可以認為是第一代的深度學習框架,使用Caffe時需要通過配置文件配置深度學習的卷積神經網路。目前,很多關於圖像的應用都是基於Caffe來做的,使用CNN的網絡,比如身份證識別、駕照識別等。其缺點是單機,當訓練樣本多的時候訓練時間非常長。將Caffe底層嫁接到OpenMPI通信框架上,可以支持多機Caffe,能夠達到線性加速比。

總結

PAI分佈式機器學習平臺編程模型演進之路

前文提到了PAI上支持的各種編程模型,在公有云上希望把機器學習作為一個服務推出來,包括數據上傳、數據清洗、特徵工程、模型訓練、模型評價。這樣就可以在PAI上做一站式的模型訓練和預測。

相關推薦

推薦中...