有望取代Spark的實(shí)時(shí)機(jī)器學(xué)習(xí)框架Ray
一個(gè)新的項(xiàng)目旨在為實(shí)時(shí)處理開(kāi)發(fā)一種速度更快的框架,可用來(lái)支持用Python編寫(xiě)的機(jī)器學(xué)習(xí)應(yīng)用。
加州大學(xué)伯克利分校實(shí)時(shí)智能安全執(zhí)行實(shí)驗(yàn)室(RISELab)的研究人員已開(kāi)發(fā)出了一種新的分布式框架,該框架旨在讓基于Python的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)工作負(fù)載能夠?qū)崟r(shí)執(zhí)行,并具有類似消息傳遞接口(MPI)的性能和細(xì)粒度。這種框架名為Ray,看起來(lái)有望取代Spark,業(yè)界認(rèn)為Spark對(duì)于一些現(xiàn)實(shí)的人工智能應(yīng)用而言速度太慢了;過(guò)不了一年,Ray應(yīng)該會(huì)準(zhǔn)備好用于生產(chǎn)環(huán)境。
Ray是率先從RISELab誕生的技術(shù)之一,加州大學(xué)伯克利分校的這個(gè)研究組織取代了曾大獲成功的AMPLab,后者開(kāi)發(fā)出了一大批引人入勝的分布式技術(shù),這些技術(shù)影響了高性能和企業(yè)計(jì)算,包括Spark、Mesos、Tachyon及其他技術(shù)。
計(jì)算機(jī)科學(xué)教授邁克爾·喬丹(Michael Jordan)是昔日AMPLab、今日RISAab的顧問(wèn)之一,最近他在加州圣何塞舉行的Strata + Hadoop World大會(huì)上討論了Ray的核心原則和驅(qū)動(dòng)因素。
喬丹在3月16日的主題演講中說(shuō):“之所以開(kāi)發(fā)Spark,是由于我的學(xué)生抱怨Hadoop差強(qiáng)人意。他們抱怨,每當(dāng)在邏輯回歸之類的操作中進(jìn)行迭代,總是要面臨很長(zhǎng)的延遲。”
喬丹繼續(xù)說(shuō):“馬泰·扎哈里亞(Matei Zaharia)是實(shí)驗(yàn)室的學(xué)生之一,他聽(tīng)到他們抱怨后說(shuō)‘我會(huì)幫助你們解決這個(gè)問(wèn)題。我會(huì)構(gòu)建某種緩存系統(tǒng),那意味著你不必一直去使用磁盤(pán)。這就是Spark的起源。”
他的學(xué)生們注意到扎哈里亞開(kāi)發(fā)Spark后突然變得“多重要、多有名”;扎哈里亞后來(lái)順理成章地與他人創(chuàng)辦了Databricks,并成為了加州大學(xué)伯克利分校的對(duì)手:斯坦福大學(xué)的助理教授。
喬丹說(shuō):“所以現(xiàn)在是著眼于下一代技術(shù)的時(shí)候。他們說(shuō)‘我們絕不會(huì)將一個(gè)項(xiàng)目交給搞系統(tǒng)的人。我們準(zhǔn)備自己來(lái)搞。“所以這下一個(gè)項(xiàng)目由機(jī)器學(xué)習(xí)學(xué)生來(lái)搞,開(kāi)發(fā)之初就抱著要取代Spark的目的。”
Ray由RISELab的兩名博士:菲利浦·莫里茲(Philipp Moritz)和羅伯特·西原(Robert Nishihara)開(kāi)發(fā)而成。研究人員竭力構(gòu)建一種框架,可以結(jié)合在實(shí)際環(huán)境下運(yùn)行機(jī)器學(xué)習(xí)或基于深入學(xué)習(xí)的應(yīng)用所需要的許多不同元素。據(jù)喬丹聲稱,研究人員將應(yīng)用程序分解成了各組成部分,了解如何實(shí)際構(gòu)建一個(gè)允許實(shí)時(shí)決策機(jī)制的端到端系統(tǒng)。
喬丹說(shuō):“你需要靈活性。你需要的不光光是組建神經(jīng)網(wǎng)絡(luò)之類的東西,還需要規(guī)劃、搜索和模擬。這帶來(lái)了種種復(fù)雜的任務(wù)依賴關(guān)系。單單編寫(xiě)MapReduce類型的范例(paradigm,又可譯成模式)就不是很容易。這種范例能編寫(xiě)得出來(lái),但是如果你有大不一樣的異構(gòu)工作負(fù)載和任務(wù),它執(zhí)行起來(lái)不會(huì)非常高效。它需要適應(yīng)算法的性能,因?yàn)橄到y(tǒng)在不斷學(xué)習(xí)。”
很顯然,喬丹指派Spark來(lái)完成MapReduce風(fēng)格的編程。雖然Spark的速度比MapReduce快得多,但它仍然是MapReduce面向批處理的工作流程范例的一些核心元素。他表示,Ray避免了Spark使用的“塊同步”(block synchronous)范例,改用了速度更快的范例。
據(jù)喬丹聲稱,Ray的速度很快,處理單個(gè)任務(wù)時(shí)延遲只有微秒。它還可以處理異構(gòu)硬件,一些應(yīng)用工作負(fù)載在CPU上執(zhí)行,另一些工作負(fù)載在在GPU上運(yùn)行。Ray有許多調(diào)度程序可以統(tǒng)籌安排這一切。
它還會(huì)借鑒MPI的任務(wù)依賴屬性,MPI是低級(jí)分布式編程環(huán)境,高性能計(jì)算(HPC)領(lǐng)域的人士使用MPI來(lái)構(gòu)建模型,模擬工作負(fù)載運(yùn)行起來(lái)非???。喬丹說(shuō):“我們其實(shí)也想達(dá)到那樣級(jí)別的性能。我們不是要取代MPI。但是我們希望能夠獲得與MPI一樣好的性能,但是要簡(jiǎn)單得多,強(qiáng)大得大,而且不太依賴分布式平臺(tái)。”
喬丹在Strata大會(huì)上演示期間展示了Ray如何幫助數(shù)字機(jī)器人學(xué)會(huì)跑步。
喬丹將讓集群中的各個(gè)節(jié)點(diǎn)保持計(jì)算狀態(tài),但是狀態(tài)會(huì)盡可能少,這將***限度地提高穩(wěn)定性。他補(bǔ)充道:“不過(guò)需要注意可以在諸任務(wù)之間共享的狀態(tài)計(jì)算(stateful computation)。然后,我們顯然想要容錯(cuò)機(jī)制,我們也會(huì)實(shí)現(xiàn)序列化運(yùn)行,那樣我們就能輕松共享數(shù)據(jù)了。”
Ray框架目前正在開(kāi)發(fā)中,不過(guò)還不是已完成的項(xiàng)目。有興趣的朋友可以看一看該項(xiàng)目放在Github上的初期測(cè)試版代碼(https://github.com/ray-project/ray)。
Ray對(duì)于開(kāi)發(fā)一系列需要利用實(shí)際數(shù)據(jù)進(jìn)行快速?zèng)Q策的應(yīng)用將大有用處,比如自主駕駛或某些新興形式的人工智能輔助醫(yī)療所需要的那種應(yīng)用。由于對(duì)這個(gè)領(lǐng)域做出的巨大貢獻(xiàn),喬丹已被戲稱為“機(jī)器學(xué)習(xí)界的邁克爾·喬丹”,他認(rèn)為Ray***的影響力將體現(xiàn)在強(qiáng)化學(xué)習(xí)(reinforcement learning)領(lǐng)域,而不是監(jiān)督式學(xué)習(xí)系統(tǒng)。由于用來(lái)解決計(jì)算機(jī)視覺(jué)和分類問(wèn)題的深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)大行其道,監(jiān)督式學(xué)習(xí)系統(tǒng)隨之流行起來(lái)。
他說(shuō):“當(dāng)你開(kāi)始更接近實(shí)際的決策時(shí),不是僅僅想要模仿人類,而是想要找出***的決策。那就是強(qiáng)化學(xué)習(xí)范例。強(qiáng)化學(xué)習(xí)其實(shí)缺乏一種很好的系統(tǒng)級(jí)支持。”
Ray是用C ++編寫(xiě)的,基本上旨在加快用Python開(kāi)發(fā)的機(jī)器學(xué)習(xí)算法的執(zhí)行速度。
Python腳本提交并執(zhí)行作業(yè)(job),Ray使用Python的語(yǔ)法特性來(lái)表示對(duì)象和作業(yè)是如何運(yùn)行的。如果你為某個(gè)函數(shù)添加了@ray.remote,這表明該函數(shù)可以跨集群異步執(zhí)行。函數(shù)運(yùn)行時(shí),它會(huì)立即返回一個(gè)對(duì)象ID,之后可以查詢?cè)揑D,獲得該函數(shù)生成的任何最終結(jié)果。Ray的說(shuō)明文檔表明了可以如何結(jié)合Python的列表推導(dǎo)(list comprehension),運(yùn)行一系列函數(shù),并自動(dòng)返回結(jié)果。
雖然Ray處于初期測(cè)試版狀態(tài),但它顯然是為了支持機(jī)器學(xué)習(xí)這個(gè)主要任務(wù)而開(kāi)發(fā)的。說(shuō)明文檔中給出的主要例子包括:超參數(shù)優(yōu)化(這是機(jī)器學(xué)習(xí)框架的一種常見(jiàn)工作負(fù)載)和訓(xùn)練人工智能網(wǎng)絡(luò)打乒乓球。還詳細(xì)介紹了如何將Ray與TensorFlow結(jié)合使用,包括如何借助深度學(xué)習(xí)系統(tǒng),充分利用Ray的遠(yuǎn)程對(duì)象模型方面的若干技巧。
喬丹表示,雖然Ray仍處于早期階段,還沒(méi)有準(zhǔn)備好用于生產(chǎn)環(huán)境,但應(yīng)該在一年內(nèi)作好準(zhǔn)備。他說(shuō):“我們其實(shí)會(huì)讓這種框架盡可能強(qiáng)大、穩(wěn)定,但又盡量遵循學(xué)術(shù)界在激動(dòng)人心的機(jī)器學(xué)習(xí)方面所要實(shí)現(xiàn)的目標(biāo)。”