7月2日,2019可信云大會在北京國際會議中心隆重開幕。2019可信云大會以“智能云網(wǎng)邊,可信創(chuàng)未來”為主題,由中國信息通信研究院主辦。
下午13:30大會特設(shè)的智能云論壇活動正式開始,MAXP大賽最佳案例獲得者清華大學(xué)計算機系研究生耿金坤做了《大規(guī)模分布式機器學(xué)習(xí)未來發(fā)展之我見》的精彩演講。
耿金坤
很高興,也很榮幸能夠站在這個臺上跟大家分享一下關(guān)于我的科研經(jīng)歷,以及結(jié)合本次比賽的經(jīng)歷,分享一點關(guān)于分布式機器學(xué)習(xí)的有趣故事。
剛才陳媛提到對于產(chǎn)業(yè)界來講,可能更重要的是落地,對于高校來講,更著重的是創(chuàng)新,也就是要往前看一步,從高校的角度來看,到底會有什么樣的故事,跟大家聊一聊。
眾所周知,我們目前處在大數(shù)據(jù)驅(qū)動的AI時代,大數(shù)據(jù)成為業(yè)界常態(tài)有兩個原因:1.數(shù)據(jù)量在爆炸式增長。數(shù)據(jù)將在2020年達(dá)到175ZB。
2.模型復(fù)雜度不斷增加。目前想要得到更高的準(zhǔn)確度,擬合能力必須足夠強,這個模型深度要跟上。以后很有可能還會再出現(xiàn)2000層、3000層的網(wǎng)絡(luò),這使得單機根本沒有辦法承受。
在未來的發(fā)展過程中,只想靠一臺單機筆記本寫300行,跑一個模型,圈一筆投資不太可行。現(xiàn)在一提到機器學(xué)習(xí)就是數(shù)據(jù)中心化,就是上云,動輒幾百臺甚至上千臺規(guī)模的也有進(jìn)行聯(lián)合訓(xùn)練。
在大規(guī)模分布式學(xué)習(xí)中有哪些基本問題?主要有四個問題:
DML架構(gòu)和參數(shù)同步算法
參數(shù)同步模式
數(shù)據(jù)/模型并行模式
新型加速技術(shù)的應(yīng)用
基礎(chǔ)架構(gòu)與同步算法。
大家都在推自己的分布式框架,美國服務(wù)器,Tensorflow、PaddlePaddle等,無非就是有三種架構(gòu):
1.基于參數(shù)服務(wù)器的架構(gòu)
稍微有點系統(tǒng)開發(fā)經(jīng)驗的都知道,每個Work負(fù)責(zé)訓(xùn)練模型,然后把自己的參數(shù)推送到參數(shù)服務(wù)器,然后由worker推送下來,這是最基本的工作流。
2.基于Mesh的架構(gòu)
3.基于Ring的架構(gòu)
對比,基于PS架構(gòu)是最常用的,最經(jīng)典的Tensorflow、MXNet都是支持PS架構(gòu),優(yōu)勢顯而易見,被多數(shù)主流框架支持;部署簡單;彈性擴展好;魯棒性強。劣勢是容易產(chǎn)生中心化瓶頸。
基于Mesh負(fù)載更加均衡,但擴展性比較差。
基于Ring這個架構(gòu)目前被廣泛關(guān)注,起源并不是分布式,起源于高性能,但大家一提到Ring都提到百度,其實百度并不是Ring的發(fā)明者,早在2009年由三個學(xué)者在一個論文中發(fā)表這個算法,這個算法的優(yōu)點是帶寬最優(yōu),2017年百度一個科學(xué)家是以博客形式貼出來,廣受關(guān)注。帶寬最優(yōu),意思是如果給定這樣帶寬資源,同步效率不可能做得比Ring更高,所以大家都很認(rèn)可它。劣勢是魯棒性差,比如把所有的節(jié)點連成一個圈,只要有一個節(jié)點斷掉,這個工作流就沒有辦法進(jìn)行,路棒性很差。
一個公司如果很有錢,或跟BAT協(xié)商好,搭一個私有集群來訓(xùn)練業(yè)務(wù),私有集群就沒有必要采用經(jīng)典架構(gòu),扁平架構(gòu)反而效率很低,可以考慮采用模塊化架構(gòu)。BQ這種情況可以不用扁平式的算法,而可以采用層次化的算法進(jìn)行高效同步。
參數(shù)同步模式。
SP、ASP、SSP三種模式。
BSP是目前最常用的,假如現(xiàn)在有三個節(jié)點,節(jié)點性能肯定不一樣,有的節(jié)點跑得快,有的節(jié)點跑得慢,有的節(jié)點率先把參數(shù)算出來,BSP要求每一次迭代時所有的節(jié)點都必須等最慢的節(jié)點算完以后,然后大家把自己的參數(shù)進(jìn)行同步,同步完成以后同時開始第二次迭代。這個形式優(yōu)劣勢都很明顯,優(yōu)勢在于每一個worker下一次開始都能拿到最新的全局參數(shù),意味著同步迭代質(zhì)量很高,但劣勢也很明顯,那些跑的快的worker要等慢的worker,導(dǎo)致計算資源很大程度被浪費。
所以為了解決這個問題采用ASP異步同步,就是沒有同步,比如現(xiàn)在worker2比較快,運行第0次迭代,就可以直接運行第1次迭代,所達(dá)到的參數(shù)就是有多新就多新,比如運行完第一次迭代以后,要進(jìn)行參數(shù)同步,只能從Work0和1那里拿到第0次迭代參數(shù)。ASP這種情況帶來的問題是迭代質(zhì)量偏低,本來BSP運行100次、200次就可以收斂,但ASP需要運行300次、400次,甚至異構(gòu)性很強的話,這種情況有可能就不收斂。
由于這兩個都有問題,既不用BSP也不用ASP,用SSP,就是允許同步的過程中采用舊的參數(shù)進(jìn)行同步,但舊的參數(shù)能夠舊到什么程度必須有一個閾值。如果認(rèn)為比我慢一次迭代的參數(shù),接受它。
對比起來BSP實現(xiàn)簡單,在PS、現(xiàn)有主流框架中都被廣泛支持。好處是算法在線性好,如果采用BSP進(jìn)行分布式訓(xùn)練,初始化條件是給定的,算法模型是給定的,輸入是給定的,不管運行100次、200次這樣的算法都應(yīng)該可以在線出相同的結(jié)果。劣勢是快節(jié)點必須等慢節(jié)點,性能嚴(yán)重的被最慢者拖慢。