Intel開源了基於Apache Spark的分佈式深度學習框架BigDL。BigDL藉助現有的Spark集羣來運行深度學習計算,並簡化存儲在Hadoop中的大數據集的數據加載。算法
BigDL適用的應用場景主要爲如下三種:數據庫
直接在Hadoop/Spark框架下使用深度學習進行大數據分析(即將數據存儲在HDFS、HBase、Hive等數據庫上);編程
在Spark程序中/工做流中加入深度學習功能;小程序
利用現有的 Hadoop/Spark 集羣來運行深度學習程序,而後將代碼與其餘的應用場景進行動態共享,例如ETL(Extract、Transform、Load,即一般所說的數據抽取)、數據倉庫(data warehouse)、功能引擎、經典機器學習、圖表分析等。服務器
運行於Spark集羣上 網絡
Spark是被工業界驗證過的,並有不少部署的大數據平臺。BigDL針對那些想要將機器學習應用到已有Spark或Hadoop集羣的人。多線程
對於直接支持已有Spark集羣的深度學習開源庫,BigDL是惟一的一個框架。架構
BigDL能夠直接運行在已有Spark集羣之上,和Spark RDD, DataFrame/DataSet直接接口,不須要額外的集羣數據加載,從而大大提升從數據抽取到深度學習建模的開發運行效率。用戶不須要對他們的集羣作任何改動,就能夠直接運行BigDL。BigDL能夠和其它的Spark的workload一塊兒運行,很是方便的進行集成。框架
BigDL庫支持Spark 1.五、1.6和2.0版本。BigDL庫中有把Spark RDDs轉換爲BigDL DataSet的方法,而且能夠直接與Spark ML Pipelines一塊兒使用。機器學習
Non GPU on Spark
BigDL目前的測試結果是基於單節點Xeon服務器的(即,與主流GPU至關的CPU),在Xeon上的結果代表,比開箱即用的開源Caffe,Torch或TensorFlow速度上有「數量級」的提高,最高可達到48倍的提高(Orders of magnitude ,up-to 48X today)。並且可以擴展到數十個Xeon服務器。
爲何建立一個默認狀況下不使用GPU加速的深度學習框架?對於英特爾來講,它是促進下一代CPU機器學習的策略的一部分。
Spark傳統上不是一個GPU加速的產品,雖然目前IBM和Databricks(於去年末)有在本身的集羣上增長支持GPU加速的Spark服務;其實使用GPU也將是一種趨勢。從另外一方面來講,BigDL是給開發者的一個福利,理論上,使用現有軟件會比移植到GPU架構上的工做量小不少。好比說英特爾採用GPU-a PCIe附加卡的形式封裝了Xeon Phi處理器,由Xeon Phi插件卡組成的系統能夠經過簡單地更換或添加卡來升級或擴展,而不用更換整個機架。
性能上的優化措施
與使用GPU加速來加速過程的其餘機器學習框架不一樣,BigDL使用英特爾數學內核庫(Intel MKL)來獲得最高性能要求。在性能提升策略上,它還針對每一個Spark task使用了多線程編程。
對於模型訓練,BigDL使用了在多個執行器中執行單個Spark任務的同步小批量SGD(Stochastic Gradient Descent)。每一個執行器運行一個多線程引擎並處理一部分微批次數據。在當前版本中,全部的訓練和驗證數據都存儲到存儲器中。
BigDL使用Scala開發,並參考了Torch的模型。像Torch同樣,它有一個使用Intel MKL庫進行計算的Tensor類。Intel MKL(Math Kernel Library)是由一系列爲計算優化過的小程序所組成的庫,這些小程序從FFT(快速傅立葉變換)到矩陣乘法均有涉及,經常使用於深度學習模型訓練。Module是另外一個從Torch借鑑而來的概念,它的靈感來自Torch的nn package。Module表明單獨的神經網絡層、Table和Criterion。
易用性上的優化
BigDL的API是參考torch設計的,爲用戶提供幾個模塊:
Module: 構建神經網絡的基本組件,目前提供100+的module,覆蓋了主流的神經網絡模型。
Criterion:機器學習裏面的目標函數,提供了十幾個,經常使用的也都包含了。
Optimizer:分佈式模型訓練。包括經常使用的訓練算法(SGD,Adagrad),data partition的分佈式訓練。
用戶只需定義好模型和目標函數,就能夠放到Optimizer裏面去訓練。對於數據預處理,BigDL提供了一個叫Transformer的接口封裝,而且提供了不少圖像、天然語言處理方面的預處理算法的實現。另外還提供不少示例程序,讓用戶瞭解怎麼使用BigDL。例如怎麼訓練模型,怎麼和Spark其它模塊一塊兒工做。
BigDL提供了一個AWS EC2鏡像和一些示例,好比使用卷積神經網絡進行文本分類,還有圖像分類以及如何將在Torch或Caffe中預訓練過的模型加載到Spark中進行預測計算。來自社區的請求主要包括提供對Python的支持,MKL-DNN(MKL的深度學習擴展),faster-rcnn,以及可視化支持。
轉自infoq中文站
做者 杜小芳