139.1 Spark MLllib
- MLlib(Machine Learnig lib) 是Spark對常用的機(jī)器學(xué)習(xí)算法的實現(xiàn)庫实束,同時包括相關(guān)的測試和數(shù)據(jù)生成器柳譬。
- MLlib是MLBase一部分,其中MLBase分為四部分:MLlib、MLI特幔、ML Optimizer和MLRuntime。
- ML Optimizer會選擇它認(rèn)為最適合的已經(jīng)在內(nèi)部實現(xiàn)好了的機(jī)器學(xué)習(xí)算法和相關(guān)參數(shù)辰企,來處理用戶輸入的數(shù)據(jù)风纠,并返回模型或別的幫助分析的結(jié)果;
- MLI 是一個進(jìn)行特征抽取和高級ML編程抽象的算法實現(xiàn)的API或平臺牢贸;
- MLlib是Spark實現(xiàn)一些常見的機(jī)器學(xué)習(xí)算法和實用程序竹观,包括分類、回歸潜索、聚類臭增、協(xié)同過濾、降維以及底層優(yōu)化竹习,該算法可以進(jìn)行可擴(kuò)充誊抛; MLRuntime 基于Spark計算框架,將Spark的分布式計算應(yīng)用到機(jī)器學(xué)習(xí)領(lǐng)域整陌。
- MLlib主要包含三個部分:
- 底層基礎(chǔ):包括Spark的運(yùn)行庫拗窃、矩陣庫和向量庫
- 算法庫:包含廣義線性模型、推薦系統(tǒng)泌辫、聚類随夸、決策樹和評估的算法
-
實用程序:包括測試數(shù)據(jù)的生成、外部數(shù)據(jù)的讀入等功能
- MLlib目前支持4種常見的機(jī)器學(xué)習(xí)問題: 分類震放、回歸逃魄、聚類和協(xié)同過濾,MLlib在Spark整個生態(tài)系統(tǒng)中的位置如圖下圖所示澜搅。
139.2 Ray
- Ray是加州大學(xué)伯克利分校實時智能安全執(zhí)行實驗室(RISELab)的研究人員針對機(jī)器學(xué)習(xí)領(lǐng)域開發(fā)的一種新的分布式計算框架伍俘,該框架旨在讓基于Python的機(jī)器學(xué)習(xí)和深度學(xué)習(xí)工作負(fù)載能夠?qū)崟r執(zhí)行,并具有類似消息傳遞接口(MPI)的性能和細(xì)粒度勉躺。
- 增強(qiáng)學(xué)習(xí)的場景癌瘾,按照原理定義,因為沒有預(yù)先可用的靜態(tài)標(biāo)簽信息饵溅,所以通常需要引入實際的目標(biāo)系統(tǒng)(為了加快訓(xùn)練妨退,往往是目標(biāo)系統(tǒng)的模擬環(huán)境)來獲取反饋信息,用做損失/收益判斷蜕企,進(jìn)而完成整個訓(xùn)練過程的閉環(huán)反饋咬荷。典型的步驟是通過觀察特定目標(biāo)系統(tǒng)的狀態(tài),收集反饋信息轻掩,判斷收益幸乒,用這些信息來調(diào)整參數(shù),訓(xùn)練模型唇牧,并根據(jù)新的訓(xùn)練結(jié)果產(chǎn)出可用于調(diào)整目標(biāo)系統(tǒng)的行為Action罕扎,輸出到目標(biāo)系統(tǒng)聚唐,進(jìn)而影響目標(biāo)系統(tǒng)狀態(tài)變化,完成閉環(huán)腔召,如此反復(fù)迭代杆查,最終目標(biāo)是追求某種收益的最大化(比如對AlphoGo來說,收益是贏得一盤圍棋的比賽)臀蛛。
- 在這個過程中亲桦,一方面,模擬目標(biāo)系統(tǒng)浊仆,收集狀態(tài)和反饋信息客峭,判斷收益,訓(xùn)練參數(shù)氧卧,生成Action等等行為可能涉及大量的任務(wù)和計算(為了選擇最佳Action桃笙,可能要并發(fā)模擬眾多可能的行為)氏堤。而這些行為本身可能也是千差萬別的異構(gòu)的任務(wù)沙绝,任務(wù)執(zhí)行的時間也可能長短不一,執(zhí)行過程有些可能要求同步鼠锈,也有些可能更適合異步闪檬。
- 另一方面,整個任務(wù)流程的DAG圖也可能是動態(tài)變化的购笆,系統(tǒng)往往可能需要根據(jù)前一個環(huán)節(jié)的結(jié)果粗悯,調(diào)整下一個環(huán)節(jié)的行為參數(shù)或者流程。這種調(diào)整同欠,可能是目標(biāo)系統(tǒng)的需要(比如在自動駕駛過程中遇到行人了样傍,那么我們可能需要模擬計算剎車的距離來判斷該采取的行動是剎車還是拐彎,而平時可能不需要這個環(huán)節(jié))铺遂,也可能是增強(qiáng)學(xué)習(xí)特定訓(xùn)練算法的需要(比如根據(jù)多個并行訓(xùn)練的模型的當(dāng)前收益衫哥,調(diào)整模型超參數(shù),替換模型等等)襟锐。
- 此外撤逢,由于所涉及到的目標(biāo)系統(tǒng)可能是具體的,現(xiàn)實物理世界中的系統(tǒng)粮坞,所以對時效性也可能是有強(qiáng)要求的蚊荣。舉個例子,比如你想要實現(xiàn)的系統(tǒng)是用來控制機(jī)器人行走莫杈,或者是用來打視頻游戲的互例。那么整個閉環(huán)反饋流程就需要在特定的時間限制內(nèi)完成(比如毫秒級別)。
- 總結(jié)來說筝闹,就是增強(qiáng)學(xué)習(xí)的場景敲霍,對分布式計算框架的任務(wù)調(diào)度延遲俊马,吞吐量和動態(tài)修改DAG圖的能力都可能有很高的要求。按照官方的設(shè)計目標(biāo)肩杈,Ray需要支持異構(gòu)計算任務(wù)柴我,動態(tài)計算鏈路,毫秒級別延遲和每秒調(diào)度百萬級別任務(wù)的能力扩然。
- Ray的目標(biāo)問題艘儒,主要是在類似增強(qiáng)學(xué)習(xí)這樣的場景中所遇到的工程問題。那么增強(qiáng)學(xué)習(xí)的場景和普通的機(jī)器學(xué)習(xí)夫偶,深度學(xué)習(xí)的場景又有什么不同呢界睁?簡單來說,就是對整個處理鏈路流程的時效性和靈活性有更高的要求兵拢。
- Ray框架優(yōu)點(diǎn)
- 海量任務(wù)調(diào)度能力
- 毫秒級別的延遲
- 異構(gòu)任務(wù)的支持
- 任務(wù)拓?fù)鋱D動態(tài)修改的能力
- Ray沒有采用中心任務(wù)調(diào)度的方案翻斟,而是采用了類似層級(hierarchy)調(diào)度的方案,除了一個全局的中心調(diào)度服務(wù)節(jié)點(diǎn)(實際上這個中心調(diào)度節(jié)點(diǎn)也是可以水平拓展的)说铃,任務(wù)的調(diào)度也可以在具體的執(zhí)行任務(wù)的工作節(jié)點(diǎn)上访惜,由本地調(diào)度服務(wù)來管理和執(zhí)行。
- 與傳統(tǒng)的層級調(diào)度方案腻扇,至上而下分配調(diào)度任務(wù)的方式不同的是债热,Ray采用了至下而上的調(diào)度策略。也就是說幼苛,任務(wù)調(diào)度的發(fā)起窒篱,并不是先提交給全局的中心調(diào)度器統(tǒng)籌規(guī)劃以后再分發(fā)給次級調(diào)度器的。而是由任務(wù)執(zhí)行節(jié)點(diǎn)直接提交給本地的調(diào)度器舶沿,本地的調(diào)度器如果能滿足該任務(wù)的調(diào)度需求就直接完成調(diào)度請求墙杯,在無法滿足的情況下,才會提交給全局調(diào)度器括荡,由全局調(diào)度器協(xié)調(diào)轉(zhuǎn)發(fā)給有能力滿足需求的另外一個節(jié)點(diǎn)上的本地調(diào)度器去調(diào)度執(zhí)行高镐。
-
架構(gòu)設(shè)計一方面減少了跨節(jié)點(diǎn)的RPC開銷,另一方面也能規(guī)避中心節(jié)點(diǎn)的瓶頸問題一汽。當(dāng)然缺點(diǎn)也不是沒有避消,由于缺乏全局的任務(wù)視圖,無法進(jìn)行全局規(guī)劃召夹,因此任務(wù)的拓?fù)溥壿嫿Y(jié)構(gòu)也就未必是最優(yōu)的了岩喷。
- Ray架構(gòu)現(xiàn)狀:
- API層以上 的部分還比較薄弱,Core模塊核心邏輯估需要時間打磨监憎。
- 國內(nèi)目前除了螞蟻金服和RISELab有針對性的合作以外纱意,關(guān)注程度還很低,沒有實際的應(yīng)用實例看到鲸阔,整體來說還處于比較早期的框架構(gòu)建階段偷霉。
139.3 Spark stream
- 隨著大數(shù)據(jù)的發(fā)展迄委,人們對大數(shù)據(jù)的處理要求也越來越高,原有的批處理框架MapReduce適合離線計算类少,卻無法滿足實時性要求較高的業(yè)務(wù)叙身,如實時推薦、用戶行為分析等硫狞。 Spark Streaming是建立在Spark上的實時計算框架信轿,通過它提供的豐富的API、基于內(nèi)存的高速執(zhí)行引擎残吩,用戶可以結(jié)合流式财忽、批處理和交互試查詢應(yīng)用。
- Spark是一個類似于MapReduce的分布式計算框架泣侮,其核心是彈性分布式數(shù)據(jù)集即彪,提供了比MapReduce更豐富的模型,可以在快速在內(nèi)存中對數(shù)據(jù)集進(jìn)行多次迭代活尊,以支持復(fù)雜的數(shù)據(jù)挖掘算法和圖形計算算法隶校。Spark Streaming是一種構(gòu)建在Spark上的實時計算框架,它擴(kuò)展了Spark處理大規(guī)模流式數(shù)據(jù)的能力酬凳。
- emsp;?Spark Streaming的優(yōu)勢在于:
- 能運(yùn)行在100+的結(jié)點(diǎn)上惠况,并達(dá)到秒級延遲遭庶。
- 使用基于內(nèi)存的Spark作為執(zhí)行引擎宁仔,具有高效和容錯的特性。
- 能集成Spark的批處理和交互查詢峦睡。
-
為實現(xiàn)復(fù)雜的算法提供和批處理類似的簡單接口翎苫。
-
Spark Streaming把實時輸入數(shù)據(jù)流以時間片Δt (如1秒)為單位切分成塊。Spark Streaming會把每塊數(shù)據(jù)作為一個RDD榨了,并使用RDD操作處理每一小塊數(shù)據(jù)煎谍。每個塊都會生成一個Spark Job處理,最終結(jié)果也返回多塊龙屉。
- 正如Spark Streaming最初的目標(biāo)一樣呐粘,它通過豐富的API和基于內(nèi)存的高速計算引擎讓用戶可以結(jié)合流式處理,批處理和交互查詢等應(yīng)用转捕。因此Spark Streaming適合一些需要?dú)v史數(shù)據(jù)和實時數(shù)據(jù)結(jié)合分析的應(yīng)用場合作岖。當(dāng)然,對于實時性要求不是特別高的應(yīng)用也能完全勝任五芝。另外通過RDD的數(shù)據(jù)重用機(jī)制可以得到更高效的容錯處理痘儡。
大數(shù)據(jù)視頻推薦:
網(wǎng)易云課堂
CSDN
人工智能算法競賽實戰(zhàn)
AIops智能運(yùn)維機(jī)器學(xué)習(xí)算法實戰(zhàn)
ELK7 stack開發(fā)運(yùn)維實戰(zhàn)
PySpark機(jī)器學(xué)習(xí)從入門到精通
AIOps智能運(yùn)維實戰(zhàn)
騰訊課堂
大數(shù)據(jù)語音推薦:
ELK7 stack開發(fā)運(yùn)維
企業(yè)級大數(shù)據(jù)技術(shù)應(yīng)用
大數(shù)據(jù)機(jī)器學(xué)習(xí)案例之推薦系統(tǒng)
自然語言處理
大數(shù)據(jù)基礎(chǔ)
人工智能:深度學(xué)習(xí)入門到精通