1. 介紹
在過(guò)去幾年中,神經(jīng)網(wǎng)絡(luò)已經(jīng)有了很壯觀的進(jìn)展,現(xiàn)在他們幾乎已經(jīng)是圖像識(shí)別和自動(dòng)翻譯領(lǐng)域中最強(qiáng)者[1]。為了從海量數(shù)據(jù)中獲得洞察力,需要部署分布式深度學(xué)習(xí)。現(xiàn)有的DL框架通常需要為深度學(xué)習(xí)設(shè)置單獨(dú)的集群,迫使我們?yōu)闄C(jī)器學(xué)習(xí)流程創(chuàng)建多個(gè)程序(見Figure 1)。擁有獨(dú)立的集群需要我們?cè)谒鼈冎g傳遞大型數(shù)據(jù)集,從而引起不必要的系統(tǒng)復(fù)雜性和端到端的學(xué)習(xí)延遲。
TensorFlow是Google公司剛剛發(fā)布不久一款用于數(shù)值計(jì)算和神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)框架。
TensorFlowOnSpark是yahoo今年剛開源的一個(gè)項(xiàng)目,目的就是充分發(fā)掘TensorFlow在現(xiàn)有的大數(shù)據(jù)集群上進(jìn)行高效深度學(xué)習(xí)的能力,利用TensorFlowOnSpark,數(shù)據(jù)科學(xué)家和工程師們可以直接利用運(yùn)行于CPU/GPU架構(gòu)上的Spark或者Hadoop做分布式模型訓(xùn)練。該庫(kù)支持把現(xiàn)有的TensorFlow程序切換到新的API,同時(shí)實(shí)現(xiàn)了模型訓(xùn)練的性能提升。
在開源公告里,雅虎說(shuō)明了TensorFlowOnSpark想解決的問(wèn)題,比如在深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練中管理Spark數(shù)據(jù)管線之外的其他集群帶來(lái)的運(yùn)維負(fù)載,以網(wǎng)絡(luò)I/O為瓶頸的數(shù)據(jù)集在訓(xùn)練集群的傳入和傳出,令人討厭的系統(tǒng)復(fù)雜性,以及端到端的整體學(xué)習(xí)時(shí)延。TensorFlowOnSpark的工作和雅虎之前開源的CaffeOnSpark相似?,F(xiàn)有的對(duì)TensorFlow和Spark的集成所做的努力,有DataBricks的TensorFrame,以及Amp Lab 的SparkNet,這些對(duì)于雅虎來(lái)說(shuō)都是在正確方向上的邁進(jìn),但是在允許TensorFlow進(jìn)程之間直接通信方面還是有所欠缺。雅虎的目標(biāo)之一,是讓TensorFlowOnSpark成為一個(gè)完全對(duì)Spark兼容的API,在一個(gè)Spark處理工作流里,其集成能力能跟SparkSQL、MLib以及其他Spark核心庫(kù)一樣好。
在架構(gòu)上,它把給定TensorFlow算法和TensorFlow core放在一個(gè)Spark Executor中,并讓TensorFlow任務(wù)能夠通過(guò)TensorFlow的文件閱讀器和QueueRunners直接獲取HDFS數(shù)據(jù),這是一種有著更少網(wǎng)絡(luò)I/O以及“把計(jì)算帶給數(shù)據(jù)”的方案。TensorFlowOnSpark在語(yǔ)義上就支持對(duì)執(zhí)行