您好,登錄后才能下訂單哦!
這篇文章給大家介紹基于Spark和TensorFlow 的機器學(xué)習(xí)實踐是怎么樣的,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
EMR E-Learning平臺
EMR E-Learning平臺基于的是大數(shù)據(jù)和AI技術(shù),通過算法基于歷史數(shù)據(jù)來構(gòu)建機器學(xué)習(xí)模型,從而進行訓(xùn)練與預(yù)測。目前機器學(xué)習(xí)被廣泛應(yīng)用到很多領(lǐng)域,如人臉識別、自然語言處理、推薦系統(tǒng)、計算機視覺等。近年來,大數(shù)據(jù)以及計算能力的提升,使得AI技術(shù)有了突飛猛進的發(fā)展。
機器學(xué)習(xí)中重要的三要素是算法、數(shù)據(jù)和算力。而EMR本身是一個大數(shù)據(jù)平臺,平臺之上擁有多種數(shù)據(jù),比如傳統(tǒng)的數(shù)據(jù)倉庫數(shù)據(jù)、圖像數(shù)據(jù);EMR有很強的調(diào)度能力,可以很好地吊調(diào)度GPU和CPU資源;其結(jié)合機器學(xué)習(xí)算法,就可以成為一個比較好的AI平臺。
典型的AI開發(fā)流程如下圖所示:首先是數(shù)據(jù)收集,手機、路由器或者日志數(shù)據(jù)進入大數(shù)據(jù)框架Data Lake;然后是數(shù)據(jù)處理,收集到的數(shù)據(jù)需要通過傳統(tǒng)的大數(shù)據(jù)ETL或特征工程進行處理;其次是模型訓(xùn)練,經(jīng)過特征工程或ETL處理后的數(shù)據(jù)會進行模型的訓(xùn)練;最后對訓(xùn)練模型進行評估和部署;模型預(yù)測的結(jié)果會再輸入到大數(shù)據(jù)平臺進行處理分析,整個過程循環(huán)往復(fù)。
下圖展示了AI開發(fā)的流程,左側(cè)是單機或者集群,主要進行AI訓(xùn)練和評估,包含數(shù)據(jù)存儲;右側(cè)是大數(shù)據(jù)存儲,主要進行大數(shù)據(jù)處理,如特征工程等,同時可以利用左側(cè)傳輸?shù)臋C器學(xué)習(xí)模型進行預(yù)測。
AI開發(fā)的現(xiàn)狀主要有以下兩點:
? 兩套集群運維復(fù)雜:從圖中可以看出,AI開發(fā)涉及的兩套集群是分離的,需要單獨維護,運維成本復(fù)雜,容易出錯。
? 訓(xùn)練效率較低:左右兩側(cè)集群需要大量數(shù)據(jù)傳輸和模型傳輸,帶來較高的端到端訓(xùn)練的延遲。
EMR作為統(tǒng)一的大數(shù)據(jù)平臺,包含了很多特性。最底層基礎(chǔ)設(shè)施層,其支持GPU和CPU機器;數(shù)據(jù)存儲層包括HDFS和阿里云OSS;數(shù)據(jù)接入層包括Kafka和Flume;資源調(diào)度層計算引擎包括 YARN、K8S和Zookeeper;計算引擎最核心的是E-learning平臺,基于目前比較火的開源系統(tǒng)Spark,這里的Spark用的是jindo Spark,是EMR團隊基于Spark改造和優(yōu)化而推出的適用于AI場景下的版本,除此之外,還有PAI TensorFlow on Spark;最后是計算分析層,提供了數(shù)據(jù)分析、特征工程、AI訓(xùn)練以及Notebook的功能,方便用戶來使用。
EMR平臺的特性主要有以下幾點:
? 統(tǒng)一的資源管理與調(diào)度:支持CPU、Mem和GPU的細粒度的資源調(diào)度和分配,支持YARN和K8S的資源調(diào)度框架;
? 多種框架支持:包括TensorFlow、MXNet和Caffe等;
? Spark通用的數(shù)據(jù)處理框架:提供Data Source API來方便各類數(shù)據(jù)源的讀取,MLlib pipeline廣泛用于特征工程;
? Spark+深度學(xué)習(xí)框架:Spark和深度學(xué)習(xí)框架的集成支持,包括高效的Spark和TensorFlow之間的數(shù)據(jù)傳輸,Spark資源調(diào)度模型支持分布式深度學(xué)習(xí)訓(xùn)練;
? 資源監(jiān)控與報警:EMR APM系統(tǒng)提供完善的應(yīng)用程序和集群監(jiān)控多種報警方式;
? 易用性:Jupyter notebook以及Python多環(huán)境部署支持,端到端機器學(xué)習(xí)訓(xùn)練流程等。
EMR E-Learning集成了PAI TensorFlow,其支持對深度學(xué)習(xí)的優(yōu)化和對大規(guī)模稀疏場景的優(yōu)化。
TensorFlow on Spark
經(jīng)過市場調(diào)研發(fā)現(xiàn),大多數(shù)的客戶在深度學(xué)習(xí)之前的數(shù)據(jù)ETL和特征工程階段使用的都是開源計算框架Spark,之后的階段廣泛使用的是TensorFlow,因此就有了將TensorFlow和Spark有機結(jié)合的目標。TensorFlow on Spark主要包含了下圖中的六個具體設(shè)計目標。
TensorFlow on Spark從最底層來講實際上是PySpark應(yīng)用框架級別的封裝??蚣苤袑崿F(xiàn)的主要功能包括:首先調(diào)度用戶特征工程任務(wù),然后再調(diào)度深度學(xué)習(xí)TensorFlow任務(wù),除此之外還需要將特征工程的數(shù)據(jù)高效快速地傳輸給底層的PAI TensorFlow Runtime進行深度學(xué)習(xí)和機器學(xué)習(xí)的訓(xùn)練。由于Spark目前不支資源的異構(gòu)調(diào)度,假如客戶運行的是分布式TensorFlow, 就需要同時運行兩個任務(wù)(Ps任務(wù)和Worker任務(wù)),根據(jù)客戶需求的資源來產(chǎn)生不同的Spark executor,Ps任務(wù)和Worker任務(wù)通過Zookeeper來進行服務(wù)注冊。框架啟動后會將用戶寫的特征工程任務(wù)調(diào)度到executor中執(zhí)行,執(zhí)行后框架會將數(shù)據(jù)傳輸給底層的PAI TensorFlow Runtime進行訓(xùn)練,訓(xùn)練結(jié)束后會將數(shù)據(jù)保存到Data Lake中,方便后期的模型發(fā)布。
在機器學(xué)習(xí)和深度學(xué)習(xí)中,數(shù)據(jù)交互是可以提升效率的點,因此在數(shù)據(jù)交互部分,TensorFlow on Spark做了一系列優(yōu)化。具體來講采用了Apache Arrow進行高速數(shù)據(jù)傳輸,將訓(xùn)練數(shù)據(jù)直接喂給API TensorFlow Runtime,從而加速整個訓(xùn)練流程。
TensorFlow on Spark的容錯機制如下圖所示:最底層依賴TensorFlow的Checkpoints機制,用戶需要定時的將訓(xùn)練模型Chenpoint到Data Lake中。當重新啟動一個TensorFlow的時候,會讀取最近的Checkpoint進行訓(xùn)練。容錯機制會根據(jù)模式不同有不同的處理方式,針對分布式任務(wù),會啟動Ps和Worker任務(wù),兩個任務(wù)直接存在daemon進程,監(jiān)控對應(yīng)任務(wù)運行情況;對于MPI任務(wù),通過Spark Barrier Execution機制進行容錯,如果一個task失敗,會標記失敗并重啟所有task,重新配置所有環(huán)境變量;TF任務(wù)負責(zé)讀取最近的Checkpoint。
TensorFlow on Spark的功能和易用性主要體現(xiàn)在以下幾點:
? 部署環(huán)境多樣:支持指定conda,打包python運行時virtual env 支持指定docker
? TensorFlow 架構(gòu)支持:支持分布式TensorFlow原生PS架構(gòu)和分布式Horovod MPI架構(gòu)
? TensorFlow API支持:支持分布式TensorFlow Estimator高階API和分布式TensorFlow Session 低階API
? 快速支持各種框架接入:可以根據(jù)客戶需求加入新的AI框架,如MXNet
EMR客戶有很多來自于互聯(lián)網(wǎng)公司,廣告和推送的業(yè)務(wù)場景比較常見,下圖是一個比較典型的廣告推送業(yè)務(wù)場景。整個流程是EMR客戶通過Kafka將日志數(shù)據(jù)實時推送到Data Lake中,TensorFlow on Spark負責(zé)的是上半部分流程,其中可以通過Spark的工具如SparkSQL、MLlib等對實時數(shù)據(jù)和離線數(shù)據(jù)進行ETL和特征工程,數(shù)據(jù)訓(xùn)練好之后可以通過TensorFlow 框架高效地喂給PAI TensorFlow Runtime進行大規(guī)模訓(xùn)練和優(yōu)化,然后將模型存儲到Data Lake中。
在API層面,TensorFlow on Spark提供了一個基類,該基類中包含了三個方法需要用戶去實現(xiàn):pre_train、shutdown和train。pre_train是用戶需要做的數(shù)據(jù)讀取、ETL和特征工程等任務(wù),返回的是Spark的DataFrame對象;shutdown方法實現(xiàn)用戶長連接資源的釋放;train方法是用戶之前在TensorFlow中實現(xiàn)的代碼,如模型、優(yōu)化器、優(yōu)化算子的選擇。最后通過pl_submit命令來提交TensorFlow on Spark的任務(wù)。
FM是一個比較常見的推薦算法,具體場景是給電影評分,根據(jù)客戶對之前電影評分、電影類型和發(fā)布時間為用戶推薦潛在的電影。左側(cè)是一個特征工程,用戶可以使用Spark data source API讀取電影和評分信息,原生支持Spark所有操作,如join、ETL處理等;右側(cè)是TensorFlow,進行模型、優(yōu)化器的選擇。
關(guān)于基于Spark和TensorFlow 的機器學(xué)習(xí)實踐是怎么樣的就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。