CaffeOnSpark分布式深度學習
該項目已歸檔
許多現(xiàn)有的DL框架需要一個分離的集群進行深度學習,而一個典型的機器學習管道需要創(chuàng)建一個復(fù)雜的程序(如圖1)。分離的集群需要大型的數(shù)據(jù)集在它們之間進行傳輸,從而系統(tǒng)的復(fù)雜性和端到端學習的延遲不請自來。
圖1 分離集群上復(fù)雜程序的ML Pipeline
雅虎認為,深度學習應(yīng)該與現(xiàn)有的支持特征工程和傳統(tǒng)(非深度)機器學習的數(shù)據(jù)處理管道在同一個集群中,創(chuàng)建CaffeOnSpark意在使得深度學習訓(xùn)練和測試能被嵌入到Spark應(yīng)用程序(如圖2)中。
圖2 單一集群上單程序的ML Pipeline
CaffeOnSpark:API&配置和CLI
CaffeOnSpark被設(shè)計成為一個Spark深度學習包。Spark MLlib支持各種非深度學習算法用于分類、回歸、聚類、推薦等,但目前缺乏深度學習這一關(guān)鍵能力,而CaffeOnSpark旨在填補這一空白。CaffeOnSpark API支持dataframes,以便易于連接準備使用Spark應(yīng)用程序的訓(xùn)練數(shù)據(jù)集,以及提取模型的預(yù)測或中間層的特征,用于MLLib或SQL數(shù)據(jù)分析。
圖3 CaffeOnSpark成為一個Spark深度學習package
系統(tǒng)架構(gòu):
CaffeOnSpark系統(tǒng)架構(gòu)如圖4所示(和之前相比沒有變化)。Spark executor中,Caffe引擎在GPU設(shè)備或CPU設(shè)備上,通過調(diào)用一個細顆粒內(nèi)存管理的JNI層。不同于傳統(tǒng)的Spark應(yīng)用,CaffeOnSpark executors之間通過MPI allreduce style接口通信,通過TCP/以太網(wǎng)或者RDMA/Infiniband。這個Spark+MPI架構(gòu)使得CaffeOnSpark能夠?qū)崿F(xiàn)和專用深度學習集群相似的性能。
許多深度學習工作是長期運行的,處理潛在的系統(tǒng)故障很重要。CaffeOnSpark支持定期快照訓(xùn)練狀態(tài),因此job出現(xiàn)故障后能夠恢復(fù)到之前的狀態(tài)。
雅虎已經(jīng)在多個項目中應(yīng)用CaffeOnSpark,如Flickr小組通過在Hadoop集群上用CaffeOnSpark訓(xùn)練數(shù)百萬張照片,顯著地改進圖像識別精度?,F(xiàn)在深度學習研究者可以在一個AWS EC2云或自建的Spark集群上進行測試CaffeOnSpark。
