隨著“大數(shù)據(jù)”概念而興起的分布式機(jī)器學(xué)習(xí),在人工智能的新時(shí)代里解決了大量最具挑戰(zhàn)性的問(wèn)題。
近幾年,機(jī)器學(xué)習(xí)在很多領(lǐng)域取得了空前的成功,也因此徹底改變了人工智能的發(fā)展方向。大數(shù)據(jù)時(shí)代的到來(lái)一方面促進(jìn)了機(jī)器學(xué)習(xí)的長(zhǎng)足發(fā)展,另一方面也給機(jī)器學(xué)習(xí)帶來(lái)了前所未有的新挑戰(zhàn)。
在這些發(fā)展與挑戰(zhàn)中,分布式機(jī)器學(xué)習(xí)應(yīng)運(yùn)而生并成功解決了大量具有挑戰(zhàn)性的關(guān)鍵問(wèn)題,今天晚上班主任就來(lái)和同學(xué)們聊一聊分布式機(jī)器學(xué)習(xí)起源、流程、算法以及目前流行的分布式機(jī)器學(xué)習(xí)平臺(tái)。
01
起源:大數(shù)據(jù)和大模型帶來(lái)的挑戰(zhàn)
在開(kāi)始聊起源之前,我們先來(lái)看張圖:
這張圖是展示了ImageNet近幾年的錯(cuò)誤率,2011年的時(shí)候錯(cuò)誤率還將近有25%,這樣的錯(cuò)誤率很難運(yùn)用到實(shí)際應(yīng)用中。到2015年,ImageNet錯(cuò)誤率已經(jīng)降低到3%左右,比人類的錯(cuò)誤率(5%)還要低, 短短的4-5年時(shí)間,機(jī)器在ImageNet上的識(shí)別率便超過(guò)了人類。
導(dǎo)致這一結(jié)果的原因有2個(gè):一是數(shù)據(jù),另一個(gè)是模型。
大規(guī)模訓(xùn)練數(shù)據(jù)的出現(xiàn)為訓(xùn)練大模型提供了物質(zhì)基礎(chǔ),大規(guī)模機(jī)器學(xué)習(xí)模型具有超強(qiáng)的表達(dá)能力,可以解決很多復(fù)雜和高難度的問(wèn)題。
在解決這些問(wèn)題的同時(shí),大規(guī)模機(jī)器學(xué)習(xí)模型也有著非常明顯的弊端:包含參數(shù)眾多,訓(xùn)練耗時(shí);模型巨大,傳統(tǒng)的計(jì)算機(jī)和工作站難以處理;容易過(guò)擬合,在訓(xùn)練數(shù)據(jù)集上表現(xiàn)良好,在未知測(cè)試數(shù)據(jù)上表現(xiàn)不盡人意。
比較典型的例子是電商網(wǎng)站上的用戶行為數(shù)據(jù),比如在淘寶上很多用戶每天都能看到系統(tǒng)推薦的產(chǎn)品,這些產(chǎn)品是根據(jù)用戶日常瀏覽和點(diǎn)擊習(xí)慣進(jìn)行推薦的,淘寶的服務(wù)器將用戶點(diǎn)擊的產(chǎn)品行為記錄下來(lái),作為分布式機(jī)器學(xué)習(xí)系統(tǒng)的輸入。輸出是一個(gè)數(shù)學(xué)模型,可以預(yù)測(cè)一個(gè)用戶喜歡看到哪些商品,從而在下一次展示推薦商品的時(shí)候,多展示那些用戶喜歡的商品。
類似的,還有互聯(lián)網(wǎng)廣告系統(tǒng),根據(jù)幾億用戶的廣告點(diǎn)擊行為,為其推薦更容易被點(diǎn)擊的廣告。
淘寶推薦系統(tǒng)大致如圖所示
由上述案例可以知,現(xiàn)在我們很難用一臺(tái)計(jì)算機(jī)去處理工業(yè)規(guī)模的機(jī)器學(xué)習(xí)模型了,所以說(shuō)分布式訓(xùn)練已經(jīng)成為了一個(gè)先決條件。
流程:了解-探索-設(shè)計(jì)
分布式機(jī)器學(xué)習(xí)說(shuō)白了,其實(shí)就是把任務(wù)發(fā)放給許多機(jī)器,然后讓它們協(xié)同去幫忙訓(xùn)練數(shù)據(jù)和模型。

如圖所示,我們會(huì)把任務(wù)下發(fā)給許多的worker,然后這些worker協(xié)同的去訓(xùn)練模型。
通過(guò)對(duì)分布式機(jī)器學(xué)習(xí)起源的講解,我們可以將分布式機(jī)器學(xué)習(xí)的使用場(chǎng)景粗分為三類:計(jì)算量太大、訓(xùn)練數(shù)據(jù)太多、訓(xùn)練模型太大太過(guò)復(fù)雜。
這三種場(chǎng)景都有相對(duì)應(yīng)的解決辦法,對(duì)于計(jì)算量太大可采用共享內(nèi)存的多機(jī)并行運(yùn)算;對(duì)于訓(xùn)練數(shù)據(jù)太多,可以將數(shù)據(jù)進(jìn)行劃分,分配到多個(gè)工作節(jié)點(diǎn)上進(jìn)行訓(xùn)練;而對(duì)于訓(xùn)練模型太大,也可以將模型進(jìn)行劃分,分配到不同的工作節(jié)點(diǎn)上進(jìn)行訓(xùn)練。

不管是以上場(chǎng)景中的哪一種,還是幾種場(chǎng)景混合在一起的情況,分布式機(jī)器學(xué)習(xí)都可以分為三步流程:
第一步是了解機(jī)器學(xué)習(xí)的模型以及優(yōu)化方法;第二步是要去探索分布式機(jī)器學(xué)習(xí)的范式;第三步是設(shè)計(jì)系統(tǒng),無(wú)論系統(tǒng)的設(shè)計(jì)者還是系統(tǒng)的使用者,都要知道系統(tǒng)為什么要這樣設(shè)計(jì),這樣設(shè)計(jì)對(duì)我們選擇什么樣的機(jī)器學(xué)習(xí)有怎樣的幫助。
算法:數(shù)據(jù)并行、模型并行、梯度下降
數(shù)據(jù)并行
數(shù)據(jù)并行是指由于訓(xùn)練樣本非常多模型非常大,我們需要把訓(xùn)練數(shù)據(jù)劃分到不同的機(jī)器上,比如說(shuō)我們用100臺(tái)機(jī)器同時(shí)存儲(chǔ)這些數(shù)據(jù),如果這些模型有10萬(wàn)個(gè)數(shù)據(jù)樣,用100臺(tái)機(jī)器來(lái)存儲(chǔ),每臺(tái)機(jī)器存儲(chǔ)1000條數(shù)據(jù)即可。
對(duì)于每一臺(tái)worker來(lái)說(shuō),訓(xùn)練算法、分布式和在單機(jī)上沒(méi)有什么區(qū)別,只是需要在節(jié)點(diǎn)之間同步模型參數(shù)。
其中參數(shù)平均是最簡(jiǎn)單的一種數(shù)據(jù)并行化。若采用參數(shù)平均法,訓(xùn)練的過(guò)程如下所示:
1、基于模型的配置隨機(jī)初始化網(wǎng)絡(luò)模型參數(shù)
2、將當(dāng)前這組參數(shù)分發(fā)到各個(gè)工作節(jié)點(diǎn)
3、在每個(gè)工作節(jié)點(diǎn),用數(shù)據(jù)集的一部分?jǐn)?shù)據(jù)進(jìn)行訓(xùn)練
4、將各個(gè)工作節(jié)點(diǎn)的參數(shù)的均值作為全局參數(shù)值
5、若還有訓(xùn)練數(shù)據(jù)沒(méi)有參與訓(xùn)練,則繼續(xù)從第二步開(kāi)始

模型并行
模型并行將模型拆分成幾個(gè)分片,由幾個(gè)訓(xùn)練單元分別持有,共同協(xié)作完成訓(xùn)練。
深度學(xué)習(xí)的計(jì)算其實(shí)主要是矩陣運(yùn)算,而在計(jì)算時(shí)這些矩陣都是保存在內(nèi)存里的,如果是用GPU卡計(jì)算的話就是放在顯存里,可是有的時(shí)候矩陣會(huì)非常大。面對(duì)這種超大矩陣便需要將其拆分,分到不同處理器上去計(jì)算。

梯度下降
1847年梯度下降被提出來(lái)之后,這些年業(yè)內(nèi)提出了各種各樣的優(yōu)化算法,優(yōu)化算法是一個(gè)非常漫長(zhǎng)的演變過(guò)程。

大家可以看到圖中有一條分界線, 在2010之前的算法主要是Deterministic algorithms,這種算法具有很強(qiáng)確定性。換句話說(shuō),就是可以在數(shù)學(xué)上保證此算法進(jìn)行的每一步都是精確的,能夠指導(dǎo)我們的優(yōu)化目標(biāo)。
2010年之后的這些模型被稱做stochastic algorithms,不再要求每一步都是精確的梯度下降,或者每一步要做最精確的優(yōu)化。stochastic algorithms讓每一步只進(jìn)行隨機(jī)的優(yōu)化,最終把所有數(shù)據(jù)優(yōu)化完以后,還是能夠優(yōu)化到最低點(diǎn)。
隨著數(shù)據(jù)越來(lái)越大,Deterministic algorithms規(guī)則已經(jīng)越來(lái)變得越來(lái)越不適用了。對(duì)于大量的計(jì)算數(shù)據(jù),我們不可能每一次都做梯度下降,隨機(jī)梯度下降變得越來(lái)越有優(yōu)勢(shì),資源利用率也會(huì)更高。
04
分布式機(jī)器學(xué)習(xí)三大平臺(tái):Spark、PMLS、TensorFlow
在紐約州立大學(xué)布法羅分校計(jì)算機(jī)科學(xué)與工程教授、Petuum Inc. 顧問(wèn) Murat Demirbas 和他的兩位學(xué)生一起發(fā)表的那篇對(duì)比現(xiàn)有分布式機(jī)器學(xué)習(xí)平臺(tái)的論文中,將分布式機(jī)器學(xué)習(xí)平臺(tái)歸類為了三大基本設(shè)計(jì)方法:
1.基本數(shù)據(jù)流(basic dataflow)
2.參數(shù)服務(wù)器模型(parameter-server model)
3.先進(jìn)數(shù)據(jù)流(advanced dataflow)
并根據(jù)這三大基本設(shè)計(jì)方法,使用了業(yè)內(nèi)著名的三大分布式機(jī)器學(xué)習(xí)平臺(tái),其中基本數(shù)據(jù)流方法使用了 Apache Spark、參數(shù)服務(wù)器模型使用了 PMLS(Petuum)、先進(jìn)數(shù)據(jù)流模型使用了 TensorFlow 和 MXNet。
并在測(cè)試中得出相應(yīng)的結(jié)論,班主任摘取關(guān)鍵部分出來(lái),供大家參考(論文原文可訪問(wèn):https://www.cse.buffalo.edu/~demirbas/publications/DistMLplat.pdf,譯文參考網(wǎng)絡(luò)翻譯)
Spark
在基本的設(shè)置中,Spark 將模型參數(shù)存儲(chǔ)在驅(qū)動(dòng)器節(jié)點(diǎn),工作器與驅(qū)動(dòng)器通信從而在每次迭代后更新這些參數(shù)。對(duì)于大規(guī)模部署而言,這些模型參數(shù)可能并不適合驅(qū)動(dòng)器,并且會(huì)作為一個(gè) RDD 而進(jìn)行維護(hù)更新。
這會(huì)帶來(lái)大量額外開(kāi)銷,因?yàn)槊看蔚夹枰獎(jiǎng)?chuàng)造一個(gè)新的 RDD 來(lái)保存更新后的模型參數(shù)。更新模型涉及到在整個(gè)機(jī)器/磁盤(pán)上重排數(shù)據(jù),這就限制了 Spark 的擴(kuò)展性。
PMLS
PMLS節(jié)點(diǎn)會(huì)存儲(chǔ)和更新模型參數(shù)以及響應(yīng)來(lái)自工作器的請(qǐng)求。工作器會(huì)請(qǐng)求來(lái)自它們的局部 PS 副本的最新模型參數(shù),并在分配給它們的數(shù)據(jù)集部分上執(zhí)行計(jì)算。
?
PMLS還采用了 SSP(Stale Synchronous Parallelism)模型,這比 BSP(Bulk Synchronous Parellelism)模型更寬松——其中工作器在每次迭代結(jié)束時(shí)同步。SSP 為工作器的同步減少了麻煩,確保最快的工作器不能超過(guò)最慢的工作器 s 次迭代。
?TensorFlow
?TensorFlow使用節(jié)點(diǎn)和邊的有向圖來(lái)表示計(jì)算。節(jié)點(diǎn)表示計(jì)算,狀態(tài)可變。而邊則表示多維數(shù)據(jù)數(shù)組(張量),在節(jié)點(diǎn)之間傳輸。
TensorFlow 需要用戶靜態(tài)聲明這種符號(hào)計(jì)算圖,并對(duì)該圖使用復(fù)寫(xiě)和分區(qū)(rewrite& partitioning)將其分配到機(jī)器上進(jìn)行分布式執(zhí)行。(MXNet,尤其是 DyNet 使用了圖的動(dòng)態(tài)聲明,這改善了編程的難度和靈活性。)
?

電子發(fā)燒友App




















































評(píng)論