道器相融,論一個(gè)優(yōu)秀機(jī)器學(xué)習(xí)平臺(tái)的自我修養(yǎng)

姓名:郭金? 學(xué)號(hào):17101223407

轉(zhuǎn)載自:http://mp.weixin.qq.com/s?__biz=MzA5NzkxMzg1Nw==&mid=2653163406,有刪節(jié)

【嵌牛導(dǎo)讀】:分享一則人工智能時(shí)代的大數(shù)據(jù)平臺(tái)的演進(jìn)之路,并結(jié)合 Angel 的開(kāi)發(fā)經(jīng)驗(yàn),談?wù)勅绾未蛟煲粋€(gè)優(yōu)秀的機(jī)器學(xué)習(xí)平臺(tái),以及開(kāi)源后 Angel 的最新消息和未來(lái)規(guī)劃。

【嵌牛鼻子】:機(jī)器學(xué)習(xí)、人工智能

【嵌牛提問(wèn)】:人工智能到底會(huì)給企業(yè)帶來(lái)什么?——是改變,機(jī)遇,還是更大的挑戰(zhàn)?

【嵌牛正文】:

在過(guò)去的兩年(2015-2017),隨著機(jī)器學(xué)習(xí)、特別是深度學(xué)習(xí)在多個(gè)領(lǐng)域取得革命性成功,各種專用的機(jī)器學(xué)習(xí)平臺(tái)應(yīng)運(yùn)而生,百花齊放,Angel 也是其中的一員。

人工智能時(shí)代,大數(shù)據(jù)平臺(tái)的演進(jìn)之路

其實(shí)推動(dòng)這一轉(zhuǎn)變的,本質(zhì)上是人們對(duì)更高層面的追求所驅(qū)動(dòng)的。從了解過(guò)去,到預(yù)知未來(lái);從有限空間的窮舉,到無(wú)限空間的探索;從有監(jiān)督的訓(xùn)練,到無(wú)監(jiān)督的自我學(xué)習(xí)……無(wú)論是企業(yè)高管,還是產(chǎn)品用戶,大家都希望能得到更加智能的服務(wù),而也只有提供了這種服務(wù)級(jí)別的的產(chǎn)品和公司,才能在殘酷的互聯(lián)網(wǎng)競(jìng)爭(zhēng)中勝出。

2010 年,業(yè)界的大數(shù)據(jù)剛剛興起,當(dāng)時(shí)有很多受歡迎的項(xiàng)目都是統(tǒng)計(jì)類(lèi)的,可以告訴大家昨天最流行的是什么。底層的框架是 Hadoop 和 Hive,很多平臺(tái)的最大的功能就是出各種各樣的報(bào)表,天報(bào)表、月報(bào)表……這時(shí)的層次是知道發(fā)生了什么。

2012 年,當(dāng)時(shí)有兩大發(fā)展方向,一種是更快的 SQL,一種是機(jī)器學(xué)習(xí),涌現(xiàn)了很多開(kāi)源項(xiàng)目。Spark 能夠勝出,是因?yàn)樗趦烧咧虚g取得了均衡,并展現(xiàn)了機(jī)器學(xué)習(xí)的潛質(zhì)。Matei Zaharia 等人在 NSDI 的 RDD Paper[1] 提到了,Spark 的目標(biāo)是為了解決 iterative algorithms 和 interactive data mining tools 這兩類(lèi)問(wèn)題,這個(gè)判斷從現(xiàn)在來(lái)看,依然是正確的。Spark 后來(lái)普及開(kāi)來(lái),目前很多公司依然會(huì)把 Spark 當(dāng)成他們首選的通用數(shù)據(jù)處理平臺(tái)兼機(jī)器學(xué)習(xí)平臺(tái)。這是人們希望知道即將發(fā)生什么。

到了 2014 年,李沐等人在 osdi 關(guān)于 Parameter Server 的 Paper[2] 中,給出了分布式機(jī)器學(xué)習(xí)一個(gè)更好的思路,后面 Petuum 和 DMLC 的 ps-lite 就出來(lái)了。Spark 當(dāng)時(shí)的跟進(jìn)不是很到位,而且本身 RDD 的理念和 PS 也有些沖突。我們當(dāng)時(shí)還給 Spark 提過(guò)一個(gè) PR[3],后來(lái)也沒(méi)被接受,但是引出了 Glint。到現(xiàn)在為止,官方的 Spark 依然以 RDD 為核心來(lái)實(shí)現(xiàn)機(jī)器學(xué)習(xí)算法,這是個(gè)很大的約束和障礙。

但是在 2015 年,PS 的發(fā)展也受到了深度學(xué)習(xí)的沖擊,隨著 TensorFlow 的出現(xiàn),大家紛紛轉(zhuǎn)向了深度學(xué)習(xí)的框架開(kāi)發(fā)。包括微軟的 DMTK 轉(zhuǎn)向 CNTK,DMLC 的 PS-Lite 轉(zhuǎn)向 MXNet……但是實(shí)際上,很多公司的數(shù)據(jù)中心依然有大量 CPU 機(jī)器,大量的非深度學(xué)習(xí)算法還是需要在大規(guī)模數(shù)據(jù)集上進(jìn)行分布式訓(xùn)練,這個(gè)領(lǐng)域是有空缺的,深度學(xué)習(xí)替代不了。

騰訊是 2015 年開(kāi)始調(diào)研和開(kāi)發(fā) Angel,其目的就是為了填補(bǔ)上面所說(shuō)的空缺,2016 年 Angel 開(kāi)始在內(nèi)部使用,到了 2017 年,Angel 終于開(kāi)源,整個(gè)開(kāi)源的過(guò)程還是很不容易的(詳情可查閱 InfoQ 早前的報(bào)道 [4][5])。希望 Angel 能把這塊空白填補(bǔ)上,成為一個(gè)專用的分布式機(jī)器學(xué)習(xí)平臺(tái),服務(wù)更多的公司內(nèi)外產(chǎn)品,推動(dòng)人們對(duì)更高層次的追求。

最后,未來(lái)數(shù)據(jù)中心,相信依然會(huì)有很多數(shù)據(jù)處理任務(wù)。因?yàn)闊o(wú)論什么樣的模型和算法,其前提都要建立在干凈的數(shù)據(jù)之上。脫離了完整的數(shù)據(jù)預(yù)處理流程,談機(jī)器學(xué)習(xí)和人工智能都是不現(xiàn)實(shí)的。但是大部分?jǐn)?shù)據(jù)任務(wù),它們的最終出口和末端,也將會(huì)是機(jī)器學(xué)習(xí)和人工智能的任務(wù),因?yàn)槿绻麤](méi)有了這個(gè)終點(diǎn),前面的數(shù)據(jù)處理,也將是毫無(wú)意義的,能把控住末端的人,才是最終的勝利者。

大數(shù)據(jù)平臺(tái)早期多以離線批處理為主,實(shí)時(shí)計(jì)算作為補(bǔ)充,但是現(xiàn)在越來(lái)越多應(yīng)用場(chǎng)景對(duì)數(shù)據(jù)處理有了高時(shí)效性的要求。騰訊大數(shù)據(jù)平臺(tái)也歷經(jīng)了離線計(jì)算、實(shí)時(shí)計(jì)算、機(jī)器學(xué)習(xí)三個(gè)階段的發(fā)展。未來(lái)批處理計(jì)算和實(shí)時(shí)流式計(jì)算在企業(yè)構(gòu)建 AI 平臺(tái)的基礎(chǔ)架構(gòu)中將分別起到什么作用?

對(duì)一個(gè)高科技企業(yè)來(lái)說(shuō),實(shí)時(shí)計(jì)算能力和機(jī)器學(xué)習(xí)能力,都是 AI 能力的基礎(chǔ),確實(shí)是必備的。而且機(jī)器學(xué)習(xí)的訓(xùn)練(Training)和推理(Inference)兩個(gè)階段的重要性會(huì)并駕齊驅(qū),實(shí)時(shí)計(jì)算能力的優(yōu)勢(shì)還將進(jìn)一步輻射到推理場(chǎng)景。但是這并不代表離線批量計(jì)算不重要了,尤其是訓(xùn)練階段,離線批量計(jì)算依然是主要場(chǎng)景,原因是:好的模型需要大量的數(shù)據(jù),反復(fù)迭代并達(dá)到一定的精確度才能上線,尤其是效果好的深度學(xué)習(xí)模型,通常需要多張 GPU 卡,訓(xùn)練較長(zhǎng)的時(shí)間,才能完成,所以這里高性能的分布式機(jī)器學(xué)習(xí)平臺(tái),必不可少。

有很多的算法和場(chǎng)景不支持實(shí)時(shí)更新,本身就存在約束,或者數(shù)學(xué)證明不成立,或者不支持流式疊加,所以模型還是需要離線訓(xùn)練好之后,再推送到手機(jī)端或者其它終端設(shè)端。

在線學(xué)習(xí)(Online Learning)這個(gè)領(lǐng)域,模型的持續(xù)優(yōu)化和更新的非常重要,但是總是需要一個(gè)基礎(chǔ)模型,而這個(gè)基礎(chǔ)模型的質(zhì)量,很重要的制約了后續(xù)的改進(jìn)效果。

綜合以上 3 點(diǎn),離線批量處理,依然會(huì)是非常重要和核心的場(chǎng)景,不可替代。但是實(shí)時(shí)流式計(jì)算會(huì)快速發(fā)展,尤其是在推理階段。主要是因?yàn)樵谏疃葘W(xué)習(xí)時(shí)代:

模型比以前復(fù)雜,從淺層模型變成了深度模型,其推理計(jì)算不是簡(jiǎn)單的代數(shù)計(jì)算。

傳輸數(shù)據(jù)比之前大,輸入很可能是圖片、聲音、文本等,對(duì)吞吐量要求很高,而對(duì)推理過(guò)程依然要求在毫秒級(jí)別完成。這對(duì)推理的性能有更高的要求。

所以相信在未來(lái) 1-2 年,這方面,從硬件到軟件都將會(huì)涌現(xiàn)出很多優(yōu)秀的初創(chuàng)公司。

一個(gè)優(yōu)秀的機(jī)器學(xué)習(xí)平臺(tái)是如何煉成的:計(jì)算是機(jī)器學(xué)習(xí)平臺(tái)的基礎(chǔ),但不是全部,在您看來(lái),一個(gè)優(yōu)秀的機(jī)器學(xué)習(xí)平臺(tái)需要具備哪些特性?

在機(jī)器學(xué)習(xí)界,有些人喜歡把調(diào)參和訓(xùn)練的過(guò)程,比喻為煉丹, 上升到“道”的層面。而道器相融,在我看來(lái),那煉丹就需要一個(gè)好的丹爐了,也就是一個(gè)優(yōu)秀的機(jī)器學(xué)習(xí)平臺(tái)。它需要能為煉丹提供合適的火候,也就是為創(chuàng)新的模型和算法提供最佳的運(yùn)行環(huán)境。因此,一個(gè)機(jī)器學(xué)習(xí)平臺(tái)要取得成功,最好具備如下五個(gè)特點(diǎn):

1.精辟的核心抽象

一個(gè)機(jī)器學(xué)習(xí)平臺(tái),必須有其靈魂,也就是它的核心抽象。當(dāng)這個(gè)核心抽象和它要面對(duì)的模型和算法匹配時(shí),這個(gè)平臺(tái)就成功了一半。如果一開(kāi)始就錯(cuò)誤了,例如 SQL 作為平臺(tái)的核心抽象,那么對(duì)后期的發(fā)展制約將會(huì)非常明顯,無(wú)異于緣木求魚(yú),無(wú)論怎么努力都不會(huì)成功的。

Spark 的 RDD 核心抽象,很好的解決了分布式大數(shù)據(jù)的通用問(wèn)題;而 TensorFlow 中 Tensor、Mutable Variables 和 Dataflow Graphs 的 3 個(gè)核心抽象,高度概括了深度學(xué)習(xí)中的各個(gè)元素。Angel 目前的核心抽象是 PSModel,重點(diǎn)解決了分布式機(jī)器學(xué)習(xí)中 模型切分,數(shù)據(jù)并行 和 模型并行,模式異步 這 3 大問(wèn)題,基本上可以滿足大部分非深度學(xué)習(xí)的機(jī)器學(xué)習(xí)需求。

2.充分的性能優(yōu)化

在核心抽象正確的大前提下,性能是決定速度的關(guān)鍵。這就涉及了到平臺(tái)層對(duì)硬件層的理解、調(diào)優(yōu)和封裝。去年我們用 500 臺(tái)高性能機(jī)器,獲得了 TeraSort 比賽的冠軍,也是這種性能優(yōu)化能力的體現(xiàn),并將其嫁接到了 Angel 之上。

現(xiàn)在已經(jīng)不是 MR 的時(shí)代走海量低配機(jī)器路線。無(wú)論是 CPU 機(jī)器,還是 GPU 機(jī)器,都在往更強(qiáng)更快的方向走。去年比賽我們用的是很高性能的單機(jī),包括 IBM 的 PowerPC,512G 的內(nèi)存,多個(gè) NVME 的 SSD,RDMA 的 100G 網(wǎng)絡(luò)……都是業(yè)界頂配。

但是光有硬件堆砌是不夠的,平臺(tái)要對(duì)硬件有充分的利用。對(duì)于非深度學(xué)習(xí),Java 系的莫過(guò)于 JVM 的調(diào)優(yōu)了。怎樣更好地使用內(nèi)存,避免 FullGC 的產(chǎn)生,盡量讓計(jì)算不落地,預(yù)讀數(shù)據(jù)流水化處理……這些都是對(duì)平臺(tái)設(shè)計(jì)的考驗(yàn)。而對(duì)于深度學(xué)習(xí),CUDA 和 OpenCL 的性能利用,顯存和內(nèi)存的數(shù)據(jù)拷貝,浮點(diǎn)運(yùn)算和定點(diǎn)運(yùn)算的選擇,一機(jī)多卡的內(nèi)部通訊……平臺(tái)都需要進(jìn)行很多調(diào)整,甚至于引入像 XLA 這樣的黑科技。

既然是分布式機(jī)器學(xué)習(xí)平臺(tái),肯定會(huì)涉及到分布式的拓?fù)浣Y(jié)構(gòu)。目前來(lái)看,比較成熟的分布式拓?fù)浣Y(jié)構(gòu)依然是 MR、MPI、PS 這 3 者。機(jī)器學(xué)習(xí)中,基本上 MR 已經(jīng)出局了,MPI 憑借深度學(xué)習(xí)卷土重來(lái),和 PS 分庭抗禮,當(dāng)然也有整體用 PS、局部用 MPI 的做法,這也未嘗不可。在確定網(wǎng)絡(luò)拓?fù)渲?,就要考慮網(wǎng)絡(luò)加速了。RDMA 和 NVLINK 這 2 個(gè)關(guān)鍵技術(shù)很值得關(guān)注,也是未來(lái)的方向。畢竟數(shù)據(jù)是直接顯存落顯存,還是走兩次內(nèi)存,差別是可想而知的,再加上不需要 CPU 開(kāi)銷(xiāo),對(duì)性能帶來(lái)的影響還是很可觀的。

所有這些優(yōu)化,最后暴露給平臺(tái)用戶的,最好是越簡(jiǎn)單越好,平臺(tái)能夠依據(jù)簡(jiǎn)單的參數(shù),自動(dòng)選擇最佳的性能通道,這才是對(duì)算法工程師和數(shù)據(jù)科學(xué)家意義最大的。

3.強(qiáng)大的容錯(cuò)能力

談到容錯(cuò),不得不再提一下 MPI 和 MR。在 Hadoop 時(shí)代,海量低配機(jī)器理論的盛行,使 MPI 被 MR 打壓得很厲害。但是到了深度學(xué)習(xí)時(shí)代,大家發(fā)現(xiàn)這些高配機(jī)器和 HPC 也差不了太多,十幾萬(wàn)一臺(tái)的機(jī)器,可靠性還是很強(qiáng)的,出錯(cuò)的概率很低,相比之下性能更加重要了,所以 MPI 這種模式又活了過(guò)來(lái)。

都是從整體來(lái)看,規(guī)模上去之后,在大型的數(shù)據(jù)中心,高配版本的 GPU 機(jī)器和 T 級(jí)別的訓(xùn)練數(shù)據(jù),對(duì)容錯(cuò)性依然需要取得一定的均衡,這種情況下 PS 模式仍是最合適的。整體架構(gòu)包括網(wǎng)絡(luò)的通訊性能是最靈活和魯棒的,可以做的容災(zāi)措施很多,代價(jià)也小。最終能夠達(dá)到的效果會(huì)遠(yuǎn)勝于簡(jiǎn)單的定期 Checkpoint。

4.靈活的接口設(shè)計(jì)

正如大家所知,2017 年 Python 已經(jīng)借助人工智能成為了第一編程語(yǔ)言。這在某種程度上,當(dāng)然歸功于 TensorFlow 和 PyTorch 的神助攻,但是這個(gè)趨勢(shì)背后有其必然原因。Python 語(yǔ)言的優(yōu)勢(shì)在于語(yǔ)法簡(jiǎn)單、上手難度低,而且資源豐富,有充實(shí)的數(shù)據(jù)、可視化和機(jī)器學(xué)習(xí)算法庫(kù),建立了非常良好的生態(tài)環(huán)境,同時(shí)它又能與 C 無(wú)縫結(jié)合,借助 py4j 還能和 Java 結(jié)合。基于以上原因,Python 能夠?yàn)楹笈_(tái)強(qiáng)勁的平臺(tái)提供友好的接口層,達(dá)到簡(jiǎn)約而不簡(jiǎn)單的效果,也就難怪它會(huì)奇軍突起、一枝獨(dú)秀了。

但 Python 其實(shí)始終只是后臺(tái)接口的體現(xiàn),決定整體的,還是后臺(tái)的接口設(shè)計(jì),這時(shí)架構(gòu)師的整體設(shè)計(jì)能力就非常重要了。核心理念的封裝和延伸、多個(gè)機(jī)器學(xué)習(xí)概念的整合、系統(tǒng)的分層和解耦、多個(gè)子系統(tǒng)的一致性,這些最終都會(huì)體現(xiàn)到接口上,從而決定用戶基于接口編寫(xiě)算法的難度。

5.完善的周邊系統(tǒng)

TensorFlow 開(kāi)源之初,吸引眼球的工具之一,莫過(guò)于它的 TensorBoard,驚艷度超越了同期產(chǎn)品。當(dāng)時(shí)還懷疑它是否會(huì)部分開(kāi)源,不開(kāi)源這個(gè)模塊。一個(gè)好的機(jī)器學(xué)習(xí)平臺(tái)還是要在周邊系統(tǒng)的完善上多做些功夫,如果用戶基于你的平臺(tái),可以快速地調(diào)試和定位 Bug,將會(huì)大大增強(qiáng)他們使用的信心,這會(huì)對(duì)用戶形成很強(qiáng)的吸引力,最終也有助于形成更好的生態(tài) 。

在您看來(lái),如何才能高效搭建一個(gè)優(yōu)秀的機(jī)器學(xué)習(xí)平臺(tái)?

首先,要搭建一支工程和算法模型能力都很強(qiáng)的團(tuán)隊(duì)。整體上這個(gè)團(tuán)隊(duì)需要很好的互補(bǔ)能力,要有算法工程師,也要有系統(tǒng)架構(gòu)師,大家互相配合。算法工程師的數(shù)學(xué)功底和表達(dá)能力很重要,而系統(tǒng)架構(gòu)師的理解能力和快速實(shí)現(xiàn)能力很重要。另外最好能將學(xué)術(shù)界的創(chuàng)新能力和工程界的落地能力結(jié)合,才能使系統(tǒng)創(chuàng)新性和可靠性兼得。騰訊的 Angel 項(xiàng)目從一開(kāi)始,就是北大的博士生和騰訊的工程師聯(lián)合主導(dǎo)的項(xiàng)目,雖然遠(yuǎn)比不上 Hinton 和 Jeff Dean 這樣的大神級(jí)別,但是模式是類(lèi)似的,這是非常關(guān)鍵的一個(gè)要素。

其次,需要有大數(shù)據(jù)作為驅(qū)動(dòng)。之前我們研究過(guò) Petuum,發(fā)現(xiàn)有些理念很不錯(cuò),但是穩(wěn)定性非常差,在大數(shù)據(jù)量下很難跑通,而且搭建也很難。所以在 Angel 的研發(fā)過(guò)程中,我們始終堅(jiān)持以大數(shù)據(jù)為驅(qū)動(dòng)的原則,各種 Tricks 和設(shè)計(jì)必須以最終壓測(cè)通過(guò)為原則,并緊密依靠?jī)?nèi)部業(yè)務(wù),通過(guò)場(chǎng)景落地來(lái)檢驗(yàn)效果,以此保障系統(tǒng)的設(shè)計(jì)合理性和可用性。這點(diǎn)對(duì)于大公司來(lái)說(shuō)其實(shí)沒(méi)有太大的難度,只要有正確的理念和合作即可。但是這對(duì)于小公司來(lái)說(shuō)則比較困難。所以這也是 BAT 等大企業(yè)開(kāi)源的框架,和實(shí)驗(yàn)室或者初創(chuàng)公司出品的框架相比的優(yōu)勢(shì)之一。

最后,需要保持很快的演進(jìn)速度。TensorFlow 現(xiàn)在經(jīng)常被批評(píng)接口改動(dòng)太快。其實(shí)最近 Angel 的接口改動(dòng)也很多,而且有些不能向后兼容。這其中原因很簡(jiǎn)單,一個(gè)是因?yàn)闃I(yè)界的深度學(xué)習(xí)發(fā)展太快,新算法和模型、技巧層出不窮,作為一個(gè)平臺(tái)必須能快速適應(yīng),不進(jìn)則退。另一個(gè)原因是開(kāi)發(fā)的人太多,即便是 Angel 目前 Star 還比較少,但是內(nèi)部大量的并行開(kāi)發(fā),很難保證所有的模塊都是合理的,定期重構(gòu)是消除這些不合理的唯一方法。整體來(lái)看,只要是合理的重構(gòu),能提升性能,就標(biāo)識(shí)著這個(gè)項(xiàng)目還在快速的生長(zhǎng)期中,不失為一件好事。

在未來(lái)一年里,相信大部分的機(jī)器學(xué)習(xí)框架,包括深度學(xué)習(xí)框架,都會(huì)圍繞著上述幾個(gè)問(wèn)題重點(diǎn)發(fā)力。這也是 Angel 需要面對(duì)的挑戰(zhàn)和機(jī)遇。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容