自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

大規(guī)模機(jī)器學(xué)習(xí)系統(tǒng)中的No Free Lunch

人工智能 機(jī)器學(xué)習(xí)
企業(yè)機(jī)器學(xué)習(xí)應(yīng)用系統(tǒng)中的核心模型訓(xùn)練系統(tǒng)有著什么樣的設(shè)計(jì)和優(yōu)化的考慮?與教科書中的機(jī)器學(xué)習(xí)應(yīng)用相比,企業(yè)實(shí)際的機(jī)器學(xué)習(xí)應(yīng)用中有哪些容易被人忽略的陷阱?涂威威對此作了經(jīng)驗(yàn)分享,同時(shí)給出了一些可供參考的解決方案。

[[205684]]

作為第四范式•先知平臺核心機(jī)器學(xué)習(xí)框架GDBT的設(shè)計(jì)者,涂威威在大規(guī)模分布式機(jī)器學(xué)習(xí)系統(tǒng)架構(gòu)、機(jī)器學(xué)習(xí)算法設(shè)計(jì)和應(yīng)用等方面有深厚積累。演講中,涂威威表示,現(xiàn)在有越來越多的企業(yè)開始利用機(jī)器學(xué)習(xí)技術(shù),把數(shù)據(jù)轉(zhuǎn)換成智能決策引擎。企業(yè)機(jī)器學(xué)習(xí)應(yīng)用系統(tǒng)中的核心模型訓(xùn)練系統(tǒng)有著什么樣的設(shè)計(jì)和優(yōu)化的考慮?與教科書中的機(jī)器學(xué)習(xí)應(yīng)用相比,企業(yè)實(shí)際的機(jī)器學(xué)習(xí)應(yīng)用中有哪些容易被人忽略的陷阱?涂威威對此作了經(jīng)驗(yàn)分享,同時(shí)給出了一些可供參考的解決方案。

工業(yè)界大規(guī)模分布式機(jī)器學(xué)習(xí)計(jì)算框架的設(shè)計(jì)經(jīng)驗(yàn)

機(jī)器學(xué)習(xí)的經(jīng)典定義,是利用經(jīng)驗(yàn)(數(shù)據(jù))來改善系統(tǒng)性能。在應(yīng)用過程中,首先要明確機(jī)器學(xué)習(xí)目標(biāo)的定義,也就是用機(jī)器學(xué)習(xí)來做什么事情。以谷歌提升搜索廣告業(yè)務(wù)收入為例,谷歌首先對提升收入的目標(biāo)進(jìn)行拆解,廣告收入=平均單次點(diǎn)擊價(jià)格點(diǎn)擊率廣告展現(xiàn)量,其中“廣告展現(xiàn)量”被硬性控制(考慮到政策法規(guī)和用戶體驗(yàn)),“單次點(diǎn)擊價(jià)格”受廣告主主動(dòng)出價(jià)影響,與上面兩者不同,“點(diǎn)擊率”的目標(biāo)明確,搜索引擎記錄了大量的展現(xiàn)點(diǎn)擊日志,而廣告候選集很大,不同廣告的點(diǎn)擊率差別很大,谷歌廣告平臺有控制廣告展現(xiàn)的自主權(quán),因此對于谷歌提升搜索廣告收入的問題而言,機(jī)器學(xué)習(xí)最適合用來優(yōu)化“廣告點(diǎn)擊率”。在確定了機(jī)器學(xué)習(xí)具體的優(yōu)化目標(biāo)是廣告點(diǎn)擊率之后,谷歌機(jī)器學(xué)習(xí)系統(tǒng)會循環(huán)執(zhí)行四個(gè)系統(tǒng):數(shù)據(jù)收集→數(shù)據(jù)預(yù)處理→模型訓(xùn)練→模型服務(wù)(模型服務(wù)產(chǎn)生的數(shù)據(jù)會被下一個(gè)循環(huán)的數(shù)據(jù)收集系統(tǒng)收集)。在這四個(gè)系統(tǒng)中,與機(jī)器學(xué)習(xí)算法最相關(guān)的就是模型訓(xùn)練系統(tǒng)。

 

在涂威威看來,計(jì)算框架設(shè)計(jì)上,沒有普適的***框架,只有最適合實(shí)際計(jì)算問題的框架。

針對機(jī)器學(xué)習(xí)的兼顧開發(fā)效率和執(zhí)行效率的大規(guī)模分布式并行計(jì)算框架

在工業(yè)應(yīng)用中,有效數(shù)據(jù)、特征維度正在迅速攀升。在數(shù)據(jù)量方面,以往一個(gè)機(jī)器學(xué)習(xí)任務(wù)僅有幾萬個(gè)數(shù)據(jù),如今一個(gè)業(yè)務(wù)的數(shù)據(jù)量已很容易達(dá)到千億級別。在特征維度方面,傳統(tǒng)的機(jī)器學(xué)習(xí)采用“抓大放小”的方式—只使用高頻宏觀特征,忽略包含大量信息的低頻微觀特征—進(jìn)行訓(xùn)練,但隨著算法、計(jì)算能力、數(shù)據(jù)收集能力的不斷增強(qiáng),更多的低頻微觀特征被加入到機(jī)器學(xué)習(xí)訓(xùn)練中,使模型的效果更加出色。

 

特征頻率分布

機(jī)器學(xué)習(xí)技術(shù)也在工業(yè)應(yīng)用中不斷發(fā)展,最早期的機(jī)器學(xué)習(xí)工業(yè)應(yīng)用只利用宏觀特征、簡單模型,到后來發(fā)展為兩個(gè)不同的流派:以微軟、雅虎為代表的只利用宏觀特征但使用復(fù)雜模型流派,以谷歌為代表的使用簡單模型但利用微觀特征流派,到現(xiàn)在,利用更多微觀特征以及復(fù)雜模型去更精細(xì)地刻畫復(fù)雜關(guān)系已是大勢所趨。這便對模型訓(xùn)練提出了更高的要求。

 

其一,訓(xùn)練系統(tǒng)需要分布式并行。由于功率墻(Power Wall,芯片密度不能***增長)和延遲墻(Latency Wall,光速限制,芯片規(guī)模和時(shí)鐘頻率不能***增長)的限制,摩爾定律正在慢慢失效,目前,提升計(jì)算能力的方式主要是依靠并行計(jì)算,從早期的以降低執(zhí)行延遲為主到現(xiàn)在的以提升吞吐量為主。在模型訓(xùn)練的高性能計(jì)算要求下,單機(jī)在IO、存儲、計(jì)算方面的能力力不從心,機(jī)器學(xué)習(xí)模型訓(xùn)練系統(tǒng)需要分布式并行化。當(dāng)然我們也需要牢記Amdahl定律。

 

Power Wall,功耗隨著集成電路密度指數(shù)提升

其二,訓(xùn)練框架需要高開發(fā)效率。機(jī)器學(xué)習(xí)領(lǐng)域里,一個(gè)著名的定理叫No Free Lunch[Wolpert and Macready 1997],是指任意算法(包括隨機(jī)算法)在所有問題上的期望性能一樣,不存在通用的算法,因此需要針對不同的實(shí)際問題,研發(fā)出不同的機(jī)器學(xué)習(xí)算法。這就需要機(jī)器學(xué)習(xí)計(jì)算框架的開發(fā)效率非常高。

 

典型的機(jī)器學(xué)習(xí)建模過程

其三,訓(xùn)練系統(tǒng)需要高執(zhí)行效率。在面對實(shí)際問題時(shí),需要對數(shù)據(jù)、特征表達(dá)、模型、模型參數(shù)等進(jìn)行多種嘗試,且每一次嘗試,都需要單獨(dú)做模型訓(xùn)練。所以,模型訓(xùn)練是整個(gè)機(jī)器學(xué)習(xí)建模過程中被重復(fù)執(zhí)行最多的模塊,執(zhí)行效率也就成為了重中之重。

 

機(jī)器學(xué)習(xí)核心系統(tǒng)對計(jì)算資源的需求對比

其四,底層框架的No Free Lunch。對于不同的計(jì)算問題,計(jì)算的模式和對各種計(jì)算資源的需求都是不一樣的,因此沒有在所有問題上***的架構(gòu),只有最適合實(shí)際問題的架構(gòu)。針對機(jī)器學(xué)習(xí)任務(wù)的特性進(jìn)行框架設(shè)計(jì)才能更有效地解決大規(guī)模機(jī)器學(xué)習(xí)模型訓(xùn)練的計(jì)算問題。

開發(fā)效率的優(yōu)化

在提高開發(fā)效率上,這里分享計(jì)算和編程模式的選擇、編程語言的選擇兩個(gè)方面。

并行計(jì)算范式分為兩種,一種是基于共享內(nèi)存的并行計(jì)算范式,不同的計(jì)算節(jié)點(diǎn)共享同一塊內(nèi)存,這里底層需要處理訪存沖突等問題,這種模式一般被用在小規(guī)模處理器的情況,比如單機(jī)多處理器;另外一種是基于消息傳遞的并行計(jì)算范式,每個(gè)計(jì)算節(jié)點(diǎn)使用自己的內(nèi)存,計(jì)算節(jié)點(diǎn)之間通過消息傳遞的模式進(jìn)行并行計(jì)算。在實(shí)際的分布式并行系統(tǒng)中,多機(jī)器之間一般基于消息傳遞,單機(jī)內(nèi)部一般基于共享內(nèi)存(也有一些系統(tǒng)基于消息傳遞)。

機(jī)器學(xué)習(xí)的分布式模式,又分為數(shù)據(jù)分布式和模型分布式。數(shù)據(jù)分布式是指將訓(xùn)練數(shù)據(jù)切成很多份,不同的機(jī)器處理一部分?jǐn)?shù)據(jù)。但對于一些較大的模型,單機(jī)可能沒有辦法完成整個(gè)模型的運(yùn)算,于是把模型切成很多份,不同機(jī)器計(jì)算模型的不同部分。在實(shí)際應(yīng)用過程中,根據(jù)不同的場景需要,二者一般是并存的。

 

數(shù)據(jù)分布式和模型分布式

機(jī)器學(xué)習(xí)模型訓(xùn)練中常見的分布式并行計(jì)算模型

最常見的就是分布式數(shù)據(jù)流計(jì)算模型。數(shù)據(jù)流模型是一種數(shù)據(jù)驅(qū)動(dòng)的并行計(jì)算執(zhí)行模型。數(shù)據(jù)流計(jì)算邏輯基于數(shù)據(jù)流圖表達(dá)。 用戶通過描述一個(gè)計(jì)算流圖來完成計(jì)算,對計(jì)算流圖中的計(jì)算節(jié)點(diǎn)進(jìn)行定義,用戶一般不需要指定具體執(zhí)行流程。數(shù)據(jù)流圖內(nèi)部不同數(shù)據(jù)的計(jì)算一般是異步完成的,其中的計(jì)算節(jié)點(diǎn)只要上游ready就可以執(zhí)行計(jì)算邏輯。目前主流的ETL(Extract-Transform-Load)數(shù)據(jù)處理框架比如Hadoop、Spark、Flink等都是基于數(shù)據(jù)流計(jì)算模型。但是機(jī)器學(xué)習(xí)計(jì)算任務(wù)有一個(gè)共享的不斷被擦寫的中間狀態(tài):模型參數(shù),計(jì)算過程會不斷的讀寫中間狀態(tài)。數(shù)據(jù)流的計(jì)算模型在執(zhí)行過程中一般是異步的,所以很難對共享中間狀態(tài)——模型參數(shù),進(jìn)行很好的一致性控制。所以基于數(shù)據(jù)流計(jì)算模型的一致性模型一般都是同步的,在數(shù)據(jù)流內(nèi)部保證強(qiáng)一致性,但是基于同步的系統(tǒng)執(zhí)行性能取決于最慢的計(jì)算節(jié)點(diǎn),計(jì)算效率比較低。

 

數(shù)據(jù)流計(jì)算模型中的模型參數(shù)困惑

另一個(gè)常見的分布式并行計(jì)算模型就是基于參數(shù)服務(wù)器的分布式計(jì)算模型。參數(shù)服務(wù)器就是對機(jī)器學(xué)習(xí)模型訓(xùn)練計(jì)算中的共享狀態(tài)——模型參數(shù)管理的一種直觀的抽象,對模型參數(shù)的讀寫由統(tǒng)一的參數(shù)服務(wù)器管理,參數(shù)服務(wù)器本質(zhì)上就是一個(gè)支持多種一致性模型的高性能Key-Value存儲服務(wù)?;趨?shù)服務(wù)器可以實(shí)現(xiàn)不同的一致性模型,一個(gè)極端就是BSP(Bulk Synchronous Parallel,同步并行),所有的計(jì)算節(jié)點(diǎn)在計(jì)算過程中都獲取一致的模型參數(shù),對于算法實(shí)現(xiàn)而言有一致性的保障,但是代價(jià)是同步造成的資源浪費(fèi);另一個(gè)極端是ASP(Asynchronous Parallel,異步并行),所有的計(jì)算節(jié)點(diǎn)在計(jì)算過程中彼此之間的模型參數(shù)沒有任何的一致性保證,計(jì)算節(jié)點(diǎn)之間完全異步執(zhí)行,這種一致性模型計(jì)算效率很高,但是模型參數(shù)沒有一致性保證,不同節(jié)點(diǎn)獲取到的是不同版本的模型,訓(xùn)練過程不穩(wěn)定,影響算法效果;CMU的Erix Xing教授提出了介于BSP和ASP兩者之間的SSP(Stale Synchronous Parallel),通過限制***不一致的參數(shù)版本數(shù)來控制整體的同步節(jié)奏,這樣既能緩解由于同步帶來的執(zhí)行效率問題,又使得算法相對于ASP在收斂性質(zhì)上有更好的保證。基于不同的一致性模型可以很好地在運(yùn)行速度和算法效果上進(jìn)行權(quán)衡。

 

 

其實(shí),數(shù)據(jù)流計(jì)算模型和參數(shù)服務(wù)器計(jì)算模型刻畫了機(jī)器學(xué)習(xí)模型訓(xùn)練計(jì)算過程的不同方面,機(jī)器學(xué)習(xí)的樣本數(shù)據(jù)的流動(dòng)用數(shù)據(jù)流來描述就很自然,模型訓(xùn)練過程中的中間狀態(tài)可以被參數(shù)服務(wù)器計(jì)算模型自然的描述。因此,這兩者進(jìn)行結(jié)合是整體的發(fā)展趨勢:在數(shù)據(jù)流中對參數(shù)服務(wù)器進(jìn)行讀寫操作,比如Intel就開發(fā)了Spark上的參數(shù)服務(wù)器。但是數(shù)據(jù)流計(jì)算模型和參數(shù)服務(wù)器計(jì)算模型的一致性模型不盡相同,參數(shù)服務(wù)器的一致性模型比如BSP或者SSP都會打破數(shù)據(jù)流原有的異步計(jì)算邏輯。參數(shù)服務(wù)器和數(shù)據(jù)流結(jié)合的災(zāi)備策略和一致性管理策略需要仔細(xì)的設(shè)計(jì)才能很好地統(tǒng)一和融合。

 

數(shù)據(jù)流和參數(shù)服務(wù)器結(jié)合的架構(gòu)

編程模型和編程語言的選擇

編程范式可以分為兩種,命令式與聲明式。命令式編程通過顯式指定具體執(zhí)行流程來進(jìn)行編程,常見的命令式語言是C/C++等;與命令式編程不同,聲明式編程不顯示指定具體執(zhí)行流程,只定義描述計(jì)算任務(wù)目標(biāo),將具體執(zhí)行交由底層計(jì)算框架決定。命令式編程由于顯式指定具體執(zhí)行流程會顯得更加靈活,而聲明式編程底層計(jì)算框架可以針對執(zhí)行流程進(jìn)行更深入的優(yōu)化從而可能會更加高效。在實(shí)際的機(jī)器學(xué)習(xí)模型訓(xùn)練計(jì)算框架中,兩者其實(shí)一般是并存的,比如MxNet、Tensorflow等。 

 

求和運(yùn)算的命令式實(shí)現(xiàn)和聲明式實(shí)現(xiàn)比較

為了兼顧運(yùn)行效率和易用性,機(jī)器學(xué)習(xí)模型訓(xùn)練計(jì)算框架的編程語言的選擇一般采用前后端分離的方式:以C/C++、Java/Scala等作為后端以保證系統(tǒng)運(yùn)行效率,使用Python、R等作為前端以提供更為易用的編程接口。對于后端語言的選擇上,主流的就是Java和C++,這兩者各有優(yōu)劣:

在生態(tài)上,Java由于易于開發(fā)使得其生態(tài)要遠(yuǎn)遠(yuǎn)好于C++,很多大數(shù)據(jù)計(jì)算框架都基于Java或者類Java語言開發(fā);

在可移植性上,由于JVM屏蔽了很多底層差異性,所以Java要優(yōu)于C++;

在內(nèi)存管理上,基于GC的Java在大數(shù)據(jù)、同步分布式并行的情況下,效率要遠(yuǎn)低于優(yōu)化過的C++的效率,因?yàn)榇髷?shù)據(jù)情況下,GC的概率會很高,而一旦一臺服務(wù)器開始GC其計(jì)算能力將受很大影響,整體集群尤其在同步情況下的計(jì)算效率也會大打折扣,而機(jī)器數(shù)增加的情況下,在一定時(shí)刻觸發(fā)GC的概率也會大大增加;

在語言抽象上,C++的模板機(jī)制在編譯時(shí)刻進(jìn)行展開,可以做更多的編譯優(yōu)化,在實(shí)際執(zhí)行時(shí)除了產(chǎn)生的程序文件更大一些之外,整體執(zhí)行效率非常高,而與之對應(yīng)的Java泛型采用類型擦除方式實(shí)現(xiàn),在實(shí)際運(yùn)行時(shí)做數(shù)據(jù)類型cast,會帶來很多額外的開銷,使得其整體執(zhí)行效率受到很大影響。

在實(shí)際機(jī)器學(xué)習(xí)模型訓(xùn)練系統(tǒng)的設(shè)計(jì)上,具體的選擇取決于框架設(shè)計(jì)者的偏好和實(shí)際問題(比如系統(tǒng)部署要求、開發(fā)代價(jià)等)的需求。

 

執(zhí)行效率的優(yōu)化

執(zhí)行效率優(yōu)化方面主要舉例分享計(jì)算、存儲、通訊、容錯(cuò)四個(gè)方面的優(yōu)化。

在計(jì)算方面,最重要的優(yōu)化點(diǎn)就是均衡。均衡不僅包括不同的機(jī)器、不同的計(jì)算線程之間的負(fù)載均衡,還包括算術(shù)邏輯運(yùn)算資源、存儲資源、通訊資源等等各種與計(jì)算有關(guān)資源之間的均衡,其最終目的是***化所有計(jì)算資源的利用率。在實(shí)際的優(yōu)化過程中,需要仔細(xì)地對程序進(jìn)行Profiling,然后找出可能的性能瓶頸,針對性能瓶頸進(jìn)行優(yōu)化,解決瓶頸問題,但是這時(shí)候性能瓶頸可能會轉(zhuǎn)移,就要繼續(xù)迭代:Profiling→發(fā)現(xiàn)瓶頸→解決瓶頸。

 

典型的計(jì)算性能優(yōu)化循環(huán)

 

CPU和GPU的架構(gòu)對比

分布式計(jì)算是有代價(jià)的,比如序列化代價(jià)、網(wǎng)絡(luò)通訊代價(jià)等等,并不是所有的任務(wù)都需要分布式執(zhí)行,有些情況下任務(wù)或者任務(wù)的某些部分可以很好地被單機(jī)執(zhí)行,不要為了分布式而分布式。為了得到更好的計(jì)算性能,需要對單機(jī)和分布式進(jìn)行分離優(yōu)化。

CPU、GPU、FPGA等不同硬件有各自的優(yōu)勢,比如CPU適合復(fù)雜指令,有分支預(yù)測,大緩存,適合任務(wù)并行;GPU有大量的算術(shù)邏輯運(yùn)算單元,但緩存較小,沒有分支預(yù)測,適合粗粒度數(shù)據(jù)并行,但不適合復(fù)雜指令執(zhí)行,可以用來加速比如矩陣運(yùn)算等粗粒度并行的計(jì)算任務(wù);FPGA對于特定的計(jì)算任務(wù),比如深度學(xué)習(xí)預(yù)測,經(jīng)過優(yōu)化后有著介于CPU和GPU之間的峰值,同時(shí)功耗遠(yuǎn)低于GPU芯片。針對機(jī)器學(xué)習(xí)任務(wù)需要進(jìn)行合理的任務(wù)調(diào)度,充分發(fā)揮不同計(jì)算硬件的優(yōu)勢,提升計(jì)算硬件的利用率。

近些年CPU、GPU等計(jì)算硬件的效率提升速度遠(yuǎn)高于主存性能的提升速度,所以計(jì)算和存儲上的性能差距在不斷擴(kuò)大,形成了“存儲墻”(Memory Wall),因此在很多問題上,存儲優(yōu)化更為重要。在存儲方面,從CPU的寄存器到L1、L2等高速緩存,再到CPU本地內(nèi)存,再到其他CPU內(nèi)存,還有外存等有著復(fù)雜的存儲結(jié)構(gòu)和不同的存儲硬件,訪問效率也有著量級的差距。Jeff Dean建議編程人員牢記不同存儲硬件的性能數(shù)據(jù)。

 

 

存儲層級架構(gòu)、性能數(shù)據(jù)和存儲墻

針對存儲的層次結(jié)構(gòu)和各個(gè)層級存儲硬件的性能特性,可以采取數(shù)據(jù)本地化及訪存模式等存儲優(yōu)化的策略。因?yàn)闄C(jī)器學(xué)習(xí)是迭代的,可以將一些訓(xùn)練數(shù)據(jù)或者一些中間計(jì)算結(jié)果放在本地,再次訓(xùn)練時(shí),無需請求遠(yuǎn)端的數(shù)據(jù);另外在單機(jī)情況下,也可以嘗試不同的內(nèi)存分配策略,調(diào)整計(jì)算模式,增強(qiáng)數(shù)據(jù)本地化。在訪存模式優(yōu)化方面,也可以進(jìn)行很多優(yōu)化:數(shù)據(jù)訪問重新排序,比如GPU中紋理渲染和矩陣乘法運(yùn)算中常見的Z秩序曲線優(yōu)化;調(diào)整數(shù)據(jù)布局,比如可以采用更緊致的數(shù)據(jù)結(jié)構(gòu),提升順序訪存的緩存***率,同時(shí),在多線程場景下,盡量避免線程之間頻繁競爭申請釋放內(nèi)存,會競爭同一把鎖。除此之外還可以將冷熱數(shù)據(jù)進(jìn)行分離,提升緩存***率;數(shù)據(jù)預(yù)取,比如可以用另外一根線程提前預(yù)取數(shù)據(jù)到更快的存儲中,提升后續(xù)計(jì)算的訪存效率。

通信是分布式機(jī)器學(xué)習(xí)計(jì)算系統(tǒng)中至關(guān)重要的部分。通訊包括點(diǎn)對點(diǎn)通訊和組通訊(如AllReduce、AllGather等)??赏ㄟ^軟件優(yōu)化、硬件優(yōu)化的形式提高執(zhí)行效率。

在軟件優(yōu)化方面,可以通過比如序列化框架優(yōu)化、通訊壓縮、應(yīng)用層優(yōu)化的方式進(jìn)行優(yōu)化:

通訊依賴于序列化,通用序列化框架比如ProtoBuffer、Thrift等,為了通用性、一些前后兼容性和跨語言考慮等會犧牲一定的效率,針對特定的通訊場景可以設(shè)計(jì)更加簡單的序列化框架,提升序列化效率。

在帶寬成為瓶頸時(shí),可以考慮使用CPU兌換帶寬的方式,比如利用壓縮技術(shù)來降低帶寬壓力。

更重要的優(yōu)化來自于考慮應(yīng)用層通訊模式,可以做更多的優(yōu)化:比如參數(shù)服務(wù)器的客戶端,可以將同一臺機(jī)器中多個(gè)線程的請求進(jìn)行請求合并,因?yàn)橥淮螜C(jī)器學(xué)習(xí)訓(xùn)練過程中,不同線程之間大概率會有很多重復(fù)的模型參數(shù)請求;或者根據(jù)參數(shù)服務(wù)器不同的一致性模型,可以做請求緩存,提升查詢效率,降低帶寬;或者對于不同的網(wǎng)絡(luò)拓?fù)?,可以采取不同的組通訊實(shí)現(xiàn)方式。

除了軟件優(yōu)化之外,通訊架構(gòu)需要充分利用硬件特性,利用硬件來提升網(wǎng)絡(luò)吞吐、降低網(wǎng)絡(luò)延遲,比如可以配置多網(wǎng)卡建立冗余鏈路提升網(wǎng)絡(luò)吞吐,或者部署 Infiniband提升網(wǎng)絡(luò)吞吐、降低網(wǎng)絡(luò)延遲等。

在容錯(cuò)方面,對于不同的系統(tǒng),容錯(cuò)策略之間核心的區(qū)別就在于選擇最適合的Tradeoff。這里的Tradeoff是指每次失敗后恢復(fù)任務(wù)所需要付出的代價(jià)和為了降低這個(gè)代價(jià)所付出的overhead之間的權(quán)衡。在選擇機(jī)器學(xué)習(xí)模型訓(xùn)練系統(tǒng)的容錯(cuò)策略時(shí),需要考慮機(jī)器學(xué)習(xí)模型訓(xùn)練任務(wù)的特點(diǎn):首先機(jī)器學(xué)習(xí)模型訓(xùn)練是一個(gè)迭代式的計(jì)算任務(wù),中間狀態(tài)較多;其次機(jī)器學(xué)習(xí)模型訓(xùn)練系統(tǒng)中模型參數(shù)是最重要的狀態(tài);***,機(jī)器學(xué)習(xí)模型訓(xùn)練不一定需要強(qiáng)一致性。

在業(yè)界常見的有Data Lineage和Checkpointing兩種機(jī)器學(xué)習(xí)訓(xùn)練任務(wù)災(zāi)備方案。Data Lineage通過記錄數(shù)據(jù)的來源,簡化了對數(shù)據(jù)來源的追蹤,一旦數(shù)據(jù)發(fā)生錯(cuò)誤或者丟失,可以根據(jù)Data Lineage找到之前的數(shù)據(jù)利用重復(fù)計(jì)算進(jìn)行數(shù)據(jù)恢復(fù),常見的開源項(xiàng)目Spark就使用這種災(zāi)備方案。Data Lineage的粒度可大可小,同時(shí)需要一個(gè)比較可靠的維護(hù)Data Lineage的服務(wù),總體overhead較大,對于機(jī)器學(xué)習(xí)模型訓(xùn)練中的共享狀態(tài)——模型參數(shù)不一定是很好的災(zāi)備方式,因?yàn)槟P蛥?shù)是共享的有著非常多的中間狀態(tài),每個(gè)中間狀態(tài)都依賴于之前版本的模型參數(shù)和中間所有數(shù)據(jù)的計(jì)算;與Data Lineage不同,機(jī)器學(xué)習(xí)模型訓(xùn)練系統(tǒng)中的Checkpointing策略,一般會重點(diǎn)關(guān)注對機(jī)器學(xué)習(xí)模型參數(shù)的災(zāi)備,由于機(jī)器學(xué)習(xí)是迭代式的,可以利用這一點(diǎn),在滿足機(jī)器學(xué)習(xí)一致性模型的情況下,在單次或多次迭代之間或者迭代內(nèi)對機(jī)器學(xué)習(xí)模型參數(shù)以及訓(xùn)練進(jìn)度進(jìn)行災(zāi)備,這樣在發(fā)生故障的情況下,可以從上一次迭代的模型checkpoint開始,進(jìn)行下一輪迭代。相比于Data Lineage,機(jī)器學(xué)習(xí)模型訓(xùn)練系統(tǒng)對模型參數(shù)和模型訓(xùn)練進(jìn)度進(jìn)行Checkpointing災(zāi)備是更加自然和合適的,所以目前主流的專門針對機(jī)器學(xué)習(xí)設(shè)計(jì)的計(jì)算框架比如Tensorflow、Mxnet等都是采用Checkpointing災(zāi)備策略。

 

除了上述的容錯(cuò)方式之外,還可以使用傳統(tǒng)災(zāi)備常用的部署冗余系統(tǒng)來進(jìn)行災(zāi)備,根據(jù)災(zāi)備系統(tǒng)的在線情況,可以分為冷、溫和熱備份方式,實(shí)際應(yīng)用中可以根據(jù)實(shí)際的資源和計(jì)算性能要求選擇最合適實(shí)際問題的冗余容錯(cuò)方式。

機(jī)器學(xué)習(xí)實(shí)際應(yīng)用的常見陷阱

在實(shí)際的機(jī)器學(xué)習(xí)應(yīng)用中,經(jīng)常會遇到一些容易被忽視的陷阱。這里舉例分享一些常見的陷阱:一致性、開放世界、依賴管理、可理解性/可調(diào)試性。

一致性陷阱

一致性陷阱是最常見的容易被忽視的陷阱。

首先訓(xùn)練/預(yù)估一致性問題是最常見的,其中包括特征表達(dá)不一致以及目標(biāo)含義不一致。特征表達(dá)不一致較為常見,起因也有很多:表達(dá)方式不一是比較常見的,比如在訓(xùn)練數(shù)據(jù)中0代表男,1代表女,可是在預(yù)估數(shù)據(jù)中1代表女,0代表男;訓(xùn)練和評估特征提取中,某一方或者兩方都出現(xiàn)了邏輯錯(cuò)誤,會導(dǎo)致不一致;有一種比較隱秘的不一致叫“穿越”,尤其在時(shí)序數(shù)據(jù)上特別容易發(fā)生,“穿越”就是指特征里包含了違反時(shí)序或者因果邏輯的信息,比如有特征是在整個(gè)訓(xùn)練數(shù)據(jù)集中取該特征時(shí)正負(fù)例的個(gè)數(shù)/比例,這里其實(shí)隱含使用到了樣本的標(biāo)注信息,但是實(shí)際在預(yù)估過程中是不可能提前拿到標(biāo)注信息的(否則就不需要預(yù)估了);又比如某些特征使用了當(dāng)前樣本時(shí)間點(diǎn)之后的信息,但是這在實(shí)際的預(yù)估中是做不到的,因?yàn)槟壳斑€無法穿越到未來。還有一種不一致性是目標(biāo)含義的不一致性,比如目標(biāo)是優(yōu)化搜索結(jié)果的用戶滿意度,但是卻用用戶點(diǎn)擊作為機(jī)器學(xué)習(xí)的目標(biāo),用戶點(diǎn)擊了某個(gè)搜索結(jié)果不代表用戶對這個(gè)結(jié)果滿意。

 

另外一種容易被忽視的一致性是字段含義會隨著時(shí)間的推移會發(fā)生變化。

在實(shí)際應(yīng)用中需要重點(diǎn)關(guān)注一致性測試,留意特征的具體物理含義,避免出現(xiàn)特征表達(dá)不一致、目標(biāo)含義不一致、隨時(shí)間變化的不一致的問題。

開放世界陷阱

機(jī)器學(xué)習(xí)系統(tǒng)被應(yīng)用到實(shí)際業(yè)務(wù)中去時(shí),面對的就是一個(gè)開放世界,機(jī)器學(xué)習(xí)系統(tǒng)不再是一個(gè)靜態(tài)孤立的系統(tǒng),而是需要跟外部世界打交道,這里就有很多的陷阱。其中有一個(gè)非常著名的幸存者偏差問題,因?yàn)楫?dāng)前的模型會影響下一次模型的訓(xùn)練數(shù)據(jù),如果不做干涉,那么訓(xùn)練數(shù)據(jù)是有偏差的。這個(gè)偏差***的起源來自二戰(zhàn)期間,科學(xué)家團(tuán)隊(duì)研究如何對飛機(jī)加固來提升飛機(jī)在戰(zhàn)場的存活率,他們找來了戰(zhàn)場上存活下來的飛機(jī)上的彈孔進(jìn)行分析,***得出結(jié)論:腹部中彈最多,所以需要在腹部進(jìn)行加固,可提高存活率。但是,統(tǒng)計(jì)學(xué)家Abraham Wald指出他們忽略了那些被摧毀的飛機(jī),因?yàn)樗鼈儽粨糁辛藱C(jī)翼、引擎等關(guān)鍵部位,所以可能更好地保護(hù)機(jī)翼、引擎等關(guān)鍵部位才能提升飛機(jī)在戰(zhàn)場上的存活率。在推薦系統(tǒng)、搜索引擎等系統(tǒng)中這樣的問題是非常常見的,用戶看到的結(jié)果是基于機(jī)器學(xué)習(xí)模型推薦出來的,而這些結(jié)果又會成為下一次機(jī)器學(xué)習(xí)模型訓(xùn)練的數(shù)據(jù),但是這些數(shù)據(jù)是有模型偏置的。本質(zhì)上這是一個(gè)Exploitation和Exploration上權(quán)衡的問題,需要以長期效果為目標(biāo),解決這樣的問題可以參考強(qiáng)化學(xué)習(xí)中的解決方案。除了幸存者偏差陷阱之外,機(jī)器學(xué)習(xí)系統(tǒng)在實(shí)際業(yè)務(wù)系統(tǒng)中也可能會與其他系統(tǒng)進(jìn)行配合,機(jī)器學(xué)習(xí)系統(tǒng)的輸出會隨著數(shù)據(jù)而發(fā)生變化,但是如果與之配合的系統(tǒng)中依賴機(jī)器學(xué)習(xí)系統(tǒng)輸出的參數(shù)比如閾值等卻固定不變,就可能會影響整個(gè)系統(tǒng)的效果。實(shí)際應(yīng)用中需要監(jiān)控機(jī)器學(xué)習(xí)系統(tǒng)的輸出分布和對其他系統(tǒng)的影響,可采取比如預(yù)估分布矯正等策略。

 

依賴陷阱

不謹(jǐn)慎的依賴容易導(dǎo)致非常災(zāi)難性的結(jié)果,但是在實(shí)際應(yīng)用中往往會被忽視。常見的依賴有:

數(shù)據(jù)依賴:與傳統(tǒng)軟件系統(tǒng)不同,機(jī)器學(xué)習(xí)系統(tǒng)的表現(xiàn)依賴于外部數(shù)據(jù)。而數(shù)據(jù)依賴相比于代碼依賴會更加可怕,因?yàn)楹芏嗲闆r下是隱式的很難察覺或分析。

在大公司中經(jīng)常發(fā)生的情況是模型之間的依賴,在解決某個(gè)業(yè)務(wù)問題時(shí),建立了機(jī)器學(xué)習(xí)模型B,為了圖快,依賴了其他團(tuán)隊(duì)模型A的輸出,但是如果依賴的團(tuán)隊(duì)升級了模型A,那么對于B而言將會是災(zāi)難性的。

 

除了數(shù)據(jù)依賴和模型之間的依賴之外,更難被察覺的是隱性依賴,可能會有一些特征字段會被模型自己改變,比如推薦系統(tǒng)中“用戶點(diǎn)擊推薦文章的次數(shù)”這個(gè)特征會隨著推薦模型的升級而發(fā)生改變。

實(shí)際應(yīng)用中要密切關(guān)注數(shù)據(jù)依賴,盡量避免產(chǎn)生模型之間的依賴,避免出現(xiàn)隱性依賴。

可理解性/可調(diào)試性陷阱

可理解性/可調(diào)試性最容易被大家忽略。在實(shí)際的業(yè)務(wù)應(yīng)用中,經(jīng)常為了追求效果可能會采用非常復(fù)雜的模型,然后這個(gè)模型可能很難理解,也很難調(diào)試。

對于一些業(yè)務(wù),比如醫(yī)療應(yīng)用、銀行審計(jì)等都會需要模型的可理解性。對于可理解性,一種常見的解決方法是說做模型轉(zhuǎn)換,比如說像周志華教授提出的Twice Learning方法,可以把一個(gè)非常復(fù)雜的應(yīng)用模型,通過Twice Learning的方式轉(zhuǎn)換成一個(gè)性能相近的決策樹模型,而決策樹模型是一個(gè)比較容易理解的模型。還有一種做法就是對模型的預(yù)測結(jié)果給出解釋,比如***的工作LIME借用類似Twice Learning的思想,在局部區(qū)域內(nèi)用可理解模型對復(fù)雜模型進(jìn)行解釋。

可調(diào)試性對于實(shí)際應(yīng)用是非常重要的,因?yàn)槟P蛶缀醪豢赡?00%正確,而為了追求業(yè)務(wù)效果,容易采用非常復(fù)雜的特征和模型,但是在復(fù)雜模型和特征情況下沒發(fā)生了bad case,或者想要提升模型性能,會很難分析,導(dǎo)致模型很難提升,不利于后續(xù)的發(fā)展,所以在實(shí)際的業(yè)務(wù)中需要選擇適合實(shí)際問題和團(tuán)隊(duì)能力的特征、模型復(fù)雜度。

 

 

[Twice Learnig和LIME]

總結(jié)

機(jī)器學(xué)習(xí)利用數(shù)據(jù)改善系統(tǒng)性能,是一種數(shù)據(jù)驅(qū)動(dòng)的實(shí)現(xiàn)人工智能的方式,已經(jīng)被廣泛應(yīng)用在各行各業(yè)。隨著實(shí)際業(yè)務(wù)數(shù)據(jù)量和數(shù)據(jù)維度的增長,計(jì)算能力的不斷提升,機(jī)器學(xué)習(xí)算法的持續(xù)優(yōu)化,工業(yè)應(yīng)用中的機(jī)器學(xué)習(xí)正在從早期的簡單模型宏觀特征轉(zhuǎn)變到現(xiàn)在的復(fù)雜模型微觀特征,這樣的轉(zhuǎn)變?yōu)闄C(jī)器學(xué)習(xí)訓(xùn)練系統(tǒng)的設(shè)計(jì)與優(yōu)化帶來了新的挑戰(zhàn)。

機(jī)器學(xué)習(xí)應(yīng)用的核心系統(tǒng)包括數(shù)據(jù)收集、數(shù)據(jù)預(yù)處理、模型訓(xùn)練和模型服務(wù),每個(gè)系統(tǒng)對計(jì)算、存儲、通訊和一致性的要求都不一樣。對于模型訓(xùn)練系統(tǒng)而言,由于摩爾定律失效,實(shí)際業(yè)務(wù)整體的數(shù)據(jù)量和數(shù)據(jù)維度持續(xù)不斷的增長,機(jī)器學(xué)習(xí)算法的No Free Lunch定理,實(shí)際建模過程中頻繁嘗試的需要,計(jì)算框架的No Free Lunch,實(shí)際的機(jī)器學(xué)習(xí)系統(tǒng)需要一個(gè)專門針對機(jī)器學(xué)習(xí)設(shè)計(jì)的兼顧開發(fā)效率和執(zhí)行效率的分布式并行計(jì)算框架。這次分享首先對解決開發(fā)效率中的計(jì)算和編程模型的選擇,編程語言的選擇做了介紹,開發(fā)者需要根據(jù)自己實(shí)際的應(yīng)用場景、開發(fā)成本和團(tuán)隊(duì)能力等去做權(quán)衡和選擇。然后又舉例介紹了解決執(zhí)行效率中涉及到的計(jì)算、存儲、通訊和容錯(cuò)的設(shè)計(jì)和優(yōu)化。持續(xù)Profiling,迭代消除瓶頸,均衡利用好各種計(jì)算資源,盡可能***化各類計(jì)算資源的利用率,從而提升整體執(zhí)行效率。

機(jī)器學(xué)習(xí)被應(yīng)用到實(shí)際的業(yè)務(wù)中會有很多容易被忽視的陷阱。這次分享對其中常見的各種類型的一致性陷阱、機(jī)器學(xué)習(xí)面對開放世界中的陷阱、機(jī)器學(xué)習(xí)系統(tǒng)中各種依賴的陷阱以及容易被忽視的模型可理解性和可調(diào)試性做了簡單的介紹,同時(shí)給出了一些可供參考的解決方案。在實(shí)際的機(jī)器學(xué)習(xí)應(yīng)用中需要盡量避免踏入這些陷阱。 

責(zé)任編輯:龐桂玉 來源: 36大數(shù)據(jù)
相關(guān)推薦

2017-11-06 10:15:36

機(jī)器學(xué)習(xí)框架Tensorflow

2016-02-25 09:31:02

2017-06-27 15:35:02

機(jī)器學(xué)習(xí)Spark微博應(yīng)用

2017-01-20 08:53:37

數(shù)據(jù)系統(tǒng)架構(gòu)驅(qū)動(dòng)

2017-09-11 15:19:05

CoCoA機(jī)器學(xué)習(xí)分布式

2016-01-15 09:59:12

機(jī)器學(xué)習(xí)數(shù)據(jù)集

2017-05-23 14:00:26

機(jī)器學(xué)習(xí)編程技術(shù)計(jì)算模型

2016-12-09 10:11:40

機(jī)器學(xué)習(xí)算法庫Fregata

2023-09-08 10:13:35

存儲EC系統(tǒng)

2013-03-22 14:44:52

大規(guī)模分布式系統(tǒng)飛天開放平臺

2023-05-26 08:39:44

深度學(xué)習(xí)Alluxio

2017-04-19 14:33:48

互聯(lián)網(wǎng)

2017-08-15 11:04:05

機(jī)器學(xué)習(xí)實(shí)際場景

2020-11-16 08:54:05

Google 開源技術(shù)

2022-07-07 11:00:09

美團(tuán)模型實(shí)踐

2018-04-12 17:23:41

金融Linux紅旗軟件

2016-01-29 20:23:23

華為

2009-04-09 09:32:00

VoWLANWLAN

2010-09-01 15:16:49

WLAN交換機(jī)結(jié)構(gòu)

2017-04-26 13:30:24

爬蟲數(shù)據(jù)采集數(shù)據(jù)存儲
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號