在基于Hadoop集群的大規(guī)模分布式深度學(xué)習(xí)一文中,雅虎介紹了其集Caffe和Spark之長開發(fā)CaffeOnSpark用于大規(guī)模分布式深度學(xué)習(xí),并向github.com/BVLC/caffe貢獻(xiàn)了部分代碼?,F(xiàn)在,雅虎機(jī)器學(xué)習(xí)團(tuán)隊(duì)又在這篇tumblr文章上宣布將整個(gè)CaffeOnSpark開源作為Spark的深度學(xué)習(xí)包。 Github:yahoo/CaffeOnSpark(Apache 2.0 license) 許多現(xiàn)有的DL框架需要一個(gè)分離的集群進(jìn)行深度學(xué)習(xí),而一個(gè)典型的機(jī)器學(xué)習(xí)管道需要?jiǎng)?chuàng)建一個(gè)復(fù)雜的程序(如圖1)。分離的集群需要大型的數(shù)據(jù)集在它們之間進(jìn)行傳輸,從而系統(tǒng)的復(fù)雜性和端到端學(xué)習(xí)的延遲不請自來。
雅虎認(rèn)為,深度學(xué)習(xí)應(yīng)該與現(xiàn)有的支持特征工程和傳統(tǒng)(非深度)機(jī)器學(xué)習(xí)的數(shù)據(jù)處理管道在同一個(gè)集群中,創(chuàng)建CaffeOnSpark意在使得深度學(xué)習(xí)訓(xùn)練和測試能被嵌入到Spark應(yīng)用程序(如圖2)中。
CaffeOnSpark:API&配置和CLICaffeOnSpark被設(shè)計(jì)成為一個(gè)Spark深度學(xué)習(xí)包。Spark MLlib支持各種非深度學(xué)習(xí)算法用于分類、回歸、聚類、推薦等,但目前缺乏深度學(xué)習(xí)這一關(guān)鍵能力,而CaffeOnSpark旨在填補(bǔ)這一空白。CaffeOnSpark API支持dataframes,以便易于連接準(zhǔn)備使用Spark應(yīng)用程序的訓(xùn)練數(shù)據(jù)集,以及提取模型的預(yù)測或中間層的特征,用于MLLib或SQL數(shù)據(jù)分析。
使用CaffeOnSpark和MLlib的Scala應(yīng)用如下:
這段代碼演示了CaffeOnSpark和MLlib如何協(xié)同:
CaffeOnSpark使得深度學(xué)習(xí)步驟能夠無縫嵌入Spark應(yīng)用。它消除了在傳統(tǒng)的解決方案不得不做的數(shù)據(jù)移動(dòng)(如圖1所示),并支持直接在大數(shù)據(jù)集群上進(jìn)行深度學(xué)習(xí)。直接訪問大數(shù)據(jù)和大規(guī)模計(jì)算能力對(duì)深度學(xué)習(xí)至關(guān)重要。 如同標(biāo)準(zhǔn)的CaffeCa,CaffeOnSpark用配置文件于求解器和神經(jīng)網(wǎng)絡(luò)。正如例子中的神經(jīng)網(wǎng)絡(luò)有一個(gè)MemoryData層有2個(gè)額外的參數(shù):
最初發(fā)布的CaffeOnSpark有幾個(gè)內(nèi)置的數(shù)據(jù)源類(包括com.yahoo.ml.caffe.LMDB的LMDB數(shù)據(jù)庫和com.yahoo.ml.caffe.SeqImageDataSource的Hadoop的序列文件)。用戶可以很容易地引入自定義的數(shù)據(jù)源類與現(xiàn)有的數(shù)據(jù)格式進(jìn)行交互。 CaffeOnSpark應(yīng)用程序?qū)⑼ㄟ^標(biāo)準(zhǔn)的Spark命令(如spark-submit)launch。這里有兩個(gè)spark-submit命令的例子。第一個(gè)命令使用CaffeOnSpark訓(xùn)練一個(gè)DNN模型保存到HDFS上。第二個(gè)命令是一個(gè)定制的嵌入CaffeOnSpark及MLlib的應(yīng)用。 第一個(gè)命令:
第二個(gè)命令:
系統(tǒng)架構(gòu)
CaffeOnSpark系統(tǒng)架構(gòu)如圖4所示(和之前相比沒有變化)。Spark executor中,Caffe引擎在GPU設(shè)備或CPU設(shè)備上,通過調(diào)用一個(gè)細(xì)顆粒內(nèi)存管理的JNI層。不同于傳統(tǒng)的Spark應(yīng)用,CaffeOnSpark executors之間通過MPI allreduce style接口通信,通過TCP/以太網(wǎng)或者RDMA/Infiniband。這個(gè)Spark+MPI架構(gòu)使得CaffeOnSpark能夠?qū)崿F(xiàn)和專用深度學(xué)習(xí)集群相似的性能。 許多深度學(xué)習(xí)工作是長期運(yùn)行的,處理潛在的系統(tǒng)故障很重要。CaffeOnSpark支持定期快照訓(xùn)練狀態(tài),因此job出現(xiàn)故障后能夠恢復(fù)到之前的狀態(tài)。 雅虎已經(jīng)在多個(gè)項(xiàng)目中應(yīng)用CaffeOnSpark,如Flickr小組通過在Hadoop集群上用CaffeOnSpark訓(xùn)練數(shù)百萬張照片,顯著地改進(jìn)圖像識(shí)別精度?,F(xiàn)在深度學(xué)習(xí)研究者可以在一個(gè)AWS EC2云或自建的Spark集群上進(jìn)行測試CaffeOnSpark。
|
|