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