隨著訓(xùn)練數(shù)據(jù)規(guī)模的持續(xù)擴(kuò)大,模型特征的持續(xù)增長(zhǎng)窜管,常用的機(jī)器學(xué)習(xí)算法面臨著越來(lái)越多的挑戰(zhàn)。從很多人熟悉的R語(yǔ)言稚机,到基于MPI的多機(jī)的計(jì)算框架幕帆,再到支持超大規(guī)模特征的Parameter Server架構(gòu),再到如今的深度學(xué)習(xí)計(jì)算框架赖条,機(jī)器學(xué)習(xí)平臺(tái)上的編程模型也在不斷演進(jìn)失乾,以滿足業(yè)務(wù)上持續(xù)的挑戰(zhàn)。本次主題主要和大家分享PAI分布式機(jī)器學(xué)習(xí)平臺(tái)的多種編程模型的演進(jìn)過(guò)程纬乍。
機(jī)器學(xué)習(xí)在阿里的應(yīng)用
阿里是一家數(shù)據(jù)公司碱茁,阿里的各項(xiàng)業(yè)務(wù)都嚴(yán)重依賴(lài)機(jī)器學(xué)習(xí),比如搜索仿贬、個(gè)性化推薦纽竣、精準(zhǔn)廣告、風(fēng)控模型茧泪、智能客服和物流等多項(xiàng)業(yè)務(wù)蜓氨,在使用這些業(yè)務(wù)的背后都依賴(lài)于機(jī)器學(xué)習(xí)。
為了支撐集團(tuán)業(yè)務(wù)對(duì)機(jī)器學(xué)習(xí)的需求队伟,我們構(gòu)建阿里云機(jī)器學(xué)習(xí)平臺(tái)PAI穴吹,我們致力于構(gòu)建阿里集團(tuán)的統(tǒng)一機(jī)器學(xué)習(xí)平臺(tái),該平臺(tái)致力于建設(shè)一站式的數(shù)據(jù)挖掘建模平臺(tái)嗜侮,平臺(tái)具備的功能如下:
該平臺(tái)提供完整鏈路的數(shù)據(jù)建模服務(wù)港令,包括數(shù)據(jù)清洗組件啥容、特征處理組件、模型訓(xùn)練組件顷霹、模型生命周期管理組件和在線預(yù)測(cè)服務(wù)咪惠。通過(guò)機(jī)器學(xué)習(xí)平臺(tái),完整的從前端數(shù)據(jù)清洗到最后模型的預(yù)測(cè)泼返,整個(gè)生命周期都可以基于機(jī)器學(xué)習(xí)PAI來(lái)做硝逢。
阿里數(shù)據(jù)規(guī)模及其龐大,機(jī)器學(xué)習(xí)平臺(tái)PAI致力于提供先進(jìn)計(jì)算框架绅喉,通過(guò)技術(shù)推動(dòng)商業(yè)的發(fā)展渠鸽,具體支持MapReduce、MPI柴罐、Parameter Server和Deep Learning Framework等框架徽缚。
編程模型演進(jìn)
MapReduce編程模型
MapReduce編程模型的核心是分而治之,將常見(jiàn)的數(shù)據(jù)處理抽象成兩個(gè)操作革屠,Map & Reduce凿试,Map操作就是根據(jù)用戶數(shù)據(jù)分片映射成特定輸出,后接Reduce對(duì)數(shù)據(jù)進(jìn)行加工似芝,MapReduce模型之所以非常流行那婉,因?yàn)镸apReduce在框架層面解決了以下幾個(gè)分布式難題:
支持計(jì)算任務(wù)的劃分和調(diào)度
支持?jǐn)?shù)據(jù)的分布式存儲(chǔ)和劃分
支持計(jì)算任務(wù)的同步
支持計(jì)算節(jié)點(diǎn)的容錯(cuò)與恢復(fù)
那么,PAI上的算法是怎樣基于MapReduce實(shí)現(xiàn)的党瓮?舉例說(shuō)明:
TF-IDF(term frequency–inverse document frequency)详炬,是用來(lái)評(píng)價(jià)某一單詞對(duì)于某篇文檔的重
要性。
? TF = COUNT(Word, Document) / SIZE(Document)代表單個(gè)單詞在文檔中出現(xiàn)次數(shù)
? IDF = log(N / docs(Word, Document)代表某單詞在所有文檔出現(xiàn)的次數(shù)
在Mapper里加載每一篇文檔寞奸,同時(shí)我們會(huì)遍歷這篇文檔呛谜,統(tǒng)計(jì)文檔中每個(gè)單詞出現(xiàn)的頻率,統(tǒng)計(jì)這篇文檔中所有單詞的個(gè)數(shù)枪萄,也會(huì)統(tǒng)計(jì)包含單詞的文檔個(gè)數(shù)隐岛;在Mapper里實(shí)現(xiàn)后,會(huì)將相應(yīng)數(shù)據(jù)推送到Reducer瓷翻,在Reducer算子里聚凹,會(huì)根據(jù)某個(gè)單詞在文檔里出現(xiàn)的次數(shù)除以這篇文檔包含所有單詞個(gè)數(shù),就會(huì)得到term frequyency齐帚,然后我們會(huì)拿到一個(gè)單詞出現(xiàn)的次數(shù)和所有文檔里包含單詞的次數(shù)元践,根據(jù)公式可以計(jì)算出inverse document frequency,將TF與IDF相乘童谒,從而得到某個(gè)單詞對(duì)某篇文檔重要性单旁。
和其它機(jī)器學(xué)習(xí)算法相比,MapReduce模型特別適合一些不同計(jì)算任務(wù)之間獨(dú)立饥伊、數(shù)據(jù)并行度高的算法象浑,也適合不需要不同節(jié)點(diǎn)通信的機(jī)器學(xué)習(xí)算法蔫饰。
MPI編程模型
MPI全稱(chēng)叫消息傳遞接口(Message Passing Interface),嚴(yán)格意義來(lái)說(shuō)愉豺,MPI并不是編程模型篓吁,更多是消息傳遞接口。MPI定義了很多底層通信接口蚪拦,包括Send杖剪、Receive、Bcast和AllReduce等驰贷,MPI庫(kù)支持單機(jī)多Instance和多機(jī)多Instance實(shí)現(xiàn)盛嘿,正是由于MPI提供了高度靈活,描述能力強(qiáng)的接口括袒,在過(guò)去的一二十年里次兆,在科學(xué)計(jì)算領(lǐng)域得到大量應(yīng)用。如今锹锰,在分布式計(jì)算集群里芥炭,也有很多算法可以借鑒MPI進(jìn)行實(shí)現(xiàn)。
由于MPI計(jì)算任務(wù)通過(guò)底層分布式調(diào)度系統(tǒng)動(dòng)態(tài)調(diào)度到不同機(jī)器上恃慧,而跑MPI任務(wù)時(shí)需要提前知道MPI任務(wù)需要運(yùn)行相應(yīng)host名字园蝠,所以我們對(duì)MPI底層網(wǎng)絡(luò)拖口建立進(jìn)行了重構(gòu),以此適配分布式調(diào)度系統(tǒng)痢士。目前PAI機(jī)器學(xué)習(xí)上彪薛,支持兩個(gè)版本的MPI,分別是MPICH (CPU)和OpenMPI (GPU)良瞧,PAI MPI支持分布式調(diào)度,無(wú)需事先指定資源训唱,支持本地調(diào)試褥蚯,線上執(zhí)行。
當(dāng)給客戶推薦商品時(shí)况增,會(huì)基于邏輯回歸模型去判斷商品是否會(huì)被用戶點(diǎn)擊赞庶,該名用戶是男是女,方便給用戶推薦商品澳骤。根據(jù)模型函數(shù)建立模型損失函數(shù)和梯度函數(shù)歧强,圖右為模型狀態(tài),我們想要收斂到最佳狀態(tài)的模型为肮,通過(guò)多輪迭代達(dá)到收斂摊册,得到滿意模型。這就要求在每輪迭代間對(duì)不同節(jié)點(diǎn)之間大家計(jì)算出的模型進(jìn)行通信颊艳,進(jìn)行allReduce的操作茅特。
圖為PAI MPI邏輯回歸具體實(shí)現(xiàn)忘分,假設(shè)有N個(gè)節(jié)點(diǎn)做好數(shù)據(jù)的分片,在每一輪迭代里會(huì)加載用戶的訓(xùn)練數(shù)據(jù)白修,同時(shí)會(huì)基于當(dāng)前模型計(jì)算梯度妒峦,在本地加和后會(huì)調(diào)用MPI接口AllReduce,這樣兵睛,每輪迭代后所有計(jì)算節(jié)點(diǎn)都會(huì)得到新的模型肯骇,基于最新模型開(kāi)始下一輪迭代,就會(huì)得到相對(duì)較優(yōu)的邏輯回歸模型祖很。
PAI Parameter Server
MPI雖然接口靈活笛丙,算法實(shí)現(xiàn)快,但MPI也有缺點(diǎn)突琳,比如不支持單點(diǎn)容錯(cuò)等若债。由于模型越來(lái)越復(fù)雜,訓(xùn)練樣本越來(lái)越多拆融,特征維數(shù)越來(lái)越高蠢琳,對(duì)此漾月,阿里獨(dú)立自研設(shè)計(jì)實(shí)現(xiàn)Parameter Server框架占业,在集團(tuán)內(nèi)大規(guī)模使用,框架特點(diǎn)如下:
支持上百億超大規(guī)模特征
支持多種數(shù)據(jù)切分方式
模型分片
高速通信框架惦费,使得在不同worker和server間數(shù)據(jù)同步效率提高
優(yōu)化內(nèi)存使用
支持節(jié)點(diǎn)容錯(cuò)趟脂,使得PAI Parameter Server在數(shù)千臺(tái)機(jī)器上進(jìn)行模型訓(xùn)練任務(wù)成為可能
Deep Learning深度學(xué)習(xí)
傳統(tǒng)機(jī)器學(xué)習(xí)算法做模型訓(xùn)練時(shí)泰讽,注意力可能放在訓(xùn)練數(shù)據(jù)上,放在了數(shù)據(jù)加工昔期、圖形處理上已卸,我們需要更多理解數(shù)據(jù),發(fā)現(xiàn)新特征硼一;深度學(xué)習(xí)與常規(guī)的機(jī)器學(xué)習(xí)相比累澡,從數(shù)據(jù)的理解到模型的創(chuàng)新,目前理論上可以證明般贼,神經(jīng)網(wǎng)絡(luò)層數(shù)越多愧哟,層次越深,模型訓(xùn)練效果就會(huì)越好哼蛆,這意味著我們需要支持更深的人工神經(jīng)網(wǎng)絡(luò)蕊梧,更多的參數(shù),更龐大的模型腮介,更高量級(jí)的通信量肥矢,更靈活的表示模型。
TensorFlow
TensorFlow是谷歌第二代深度學(xué)習(xí)框架叠洗,支持各種神經(jīng)網(wǎng)絡(luò)橄抹,具備高度的靈活性和豐富的社區(qū)生態(tài)靴迫,支持CNN、RNN楼誓、LSTM等網(wǎng)絡(luò)玉锌。
圖為一個(gè)簡(jiǎn)單的分類(lèi)模型,第一塊和第二塊代碼疟羹,定義了訓(xùn)練樣本和測(cè)試樣本主守,第三塊定義了模型結(jié)構(gòu),第四塊定義了模型評(píng)估的實(shí)現(xiàn)榄融,我們會(huì)用測(cè)試樣本評(píng)估當(dāng)前模型準(zhǔn)確度参淫。
接下來(lái)通過(guò)TensorFlow session API開(kāi)始驅(qū)動(dòng)模型訓(xùn)練,可以看出愧杯,TensorFlow提供API非常靈活涎才,功能強(qiáng)大。目前在PAI上也提供了TensorFlow的計(jì)算服務(wù)力九。
PAI Pluto (多機(jī)多卡Caffe)
Caffe在圖像領(lǐng)域得到大量使用耍铜,是流行的深度學(xué)習(xí)框架,網(wǎng)絡(luò)通過(guò)有向無(wú)環(huán)圖定義跌前,對(duì)于CNN網(wǎng)絡(luò)可以支持的更好棕兼,大量用于圖像識(shí)別。
我們實(shí)現(xiàn)了多機(jī)多卡版Caffe抵乓,完全兼容Caffe語(yǔ)法伴挚,基于OpenMPI通信框架,支持線性加速比灾炭,多數(shù)據(jù)源支持茎芋。
機(jī)器學(xué)習(xí)即服務(wù)
PAI本身就是機(jī)器學(xué)習(xí)即服務(wù)的產(chǎn)品,通過(guò)PAI提供包括數(shù)據(jù)清洗蜈出、特征工程田弥、模型訓(xùn)練和模型評(píng)價(jià)等多套工具。