英特爾開源分布式深度學習庫BigDL:支持高性能大數據分析
近日,英特爾開源了一個運行在 Apache Spark 上的分布式深度學習庫 BigDL,其可以利用已有的 Spark 集群來運行深度學習計算,并且還能簡化從 Hadoop 的大數據集的數據加載。
開源地址: https://github.com/intel-analytics/BigDL
據介紹,在 Xeon 服務器上的測試表明,BigDL 相比于 Caffe、Torch 或 TensorFlow 等開源框架實現了顯著的速度提升。其速度可與主流的 GPU 相媲美,而且 BigDL 也能擴展到多達數十個 Xeon 服務器。
BigDL 庫支持 Spark 1.5、1.6 和 2.0,并且允許將深度學習嵌入到已有的基于 Spark 的程序中。其中包含了將 Spark RDD(Resilient Distributed Datasets,彈性分布式數據集)轉換成 BigDL 定義的 Dataset 的方法,并且也可以直接運用到 Spark ML Pipelines 上。
為了進行模型訓練,BigDL 應用了一個同步小批量隨機梯度下降(synchronous mini-batch SGD),該過程在跨多個執行器(executor)的單個 Spark 任務中執行。每一個執行器都執行一個多線程引擎并處理一部分微批量數據(micro-batch data)。在當前的版本中,所有的訓練和驗證數據都會加載到內存(memory)中。
BigDL 是用 Scala 實現的,并且模仿了 Torch。類似于 Torch,它也提供了一個 Tensor 類,其使用了 Intel MKL 庫進行計算。Intel MKL 是英特爾的數學核心函數庫(Math Kernel Library)的縮寫,其中包含了一系列為計算優化過的歷程,其中包括 FFT(快速傅立葉變換)和矩陣乘法等等,這些計算在深度學習模型訓練中有廣泛的應用。另外受到 Torch 的 nn 包(https://github.com/torch/nn)的啟發,BigDL 借鑒了 Torch,提出了 Module 的概念,用于表示單個神經網絡層、Table 和 Criterion。
BigDL 還提供了一個 AWS EC2 鏡像和一些案例,其中包括:文本分類(使用卷積神經網絡)、圖像分類、以及將 Torch 或 Caffe 中預訓練的模型加載到 Spark 中用于預測計算的方法。目前社區討論區上大多數用戶請求 BigDL 支持 Python,以及開發 MKL-DNN(MKL 的深度學習擴展)。
以下是 BigDL GitHub 項目的 README.md 介紹:
BigDL:在 Apache Spark 上的分布式深度學習
BigDL 是什么?
BigDL 是一個用于 Apache Spark 的分布式深度學習庫。使用 BigDL,用戶可以像編寫標準 Spark 程序一樣編寫深度學習應用,并且可以直接將其運行在已有的 Spark 或 Hadoop 集群上。BigDL 有哪些優點呢?
豐富的深度學習支持。類似 Torch,BigDL 提供了全面的深度學習支持,包括數值計算(通過 Tensor)和高層面的神經網絡;此外,用戶還可以使用 BigDL 將預訓練的 Caffe 或 Torch 模型加載到 Spark 程序中。
極高的性能。為了實現高性能,BigDL 在每一個 Spark 任務中都使用了 Intel MKL 和多線程編程。從而使得 BigDL 在單節點 Xeon(與主流 GPU 媲美)上能夠實現比當前開源的 Caffe、Torch 或 TensorFlow 快幾個數量級的表現。
有效的擴展。BigDL 可以利用 Apache Spark(一種超快的分布式數據處理框架)以及同步 SGD 的有效實現和在 Spark 上的 all-reduce 通信來進行有效地擴展,從而可在「大數據規模」上執行數據分析。
為什么選擇 BigDL?
如果你滿足以下條件,你就應該使用 BigDL 來編寫你的深度學習程序:
你想在數據存儲(比如以 HDFS、HBase、Hive 等方式)于的同一個大數據(Hadoop/Spark)集群上進行大量數據的分析。
你想為你的大數據(Spark)程序和/或工作流添加深度學習功能(不管是訓練還是預測)。
你想使用已有的 Hadoop/Spark 集群來運行你的深度學習應用,然后將其動態地共享給其它工作負載(如 ETL、數據倉庫、特征工程、經典機器學習、圖分析等等)。
如何使用 BigDL?
要學習如何在 Linux 或 macOS 上安裝和編譯 BigDL,你可以查看: https://github.com/intel-analytics/BigDL/wiki/Build-Page
要學習如何運行 BigDL 程序(作為本地 Java 程序或 Spark 程序),你可以查看: https://github.com/intel-analytics/BigDL/wiki/Getting-Started
要在 EC2 上嘗試 BigDL,你可以查看: https://github.com/intel-analytics/BigDL/wiki/Running-on-EC2
要學習如何使用 BigDL 在幾分鐘內創建一個實用的神經網絡,你可以查看教程: https://github.com/intel-analytics/BigDL/wiki/Tutorials
了解更多細節,請查閱文檔(包含教程、案例、編程指南等): https://github.com/intel-analytics/BigDL/wiki/Documents
支持
更多關于 BigDL 的問題和討論,請加入 BigDL 谷歌討論組( https://groups.google.com/forum/#!forum/bigdl-user-group ) 或訂閱郵件列表(請發郵件至: bigdl-user-group+subscribe@googlegroups.com )
你也可以在 GitHub 問題頁面報告錯誤或提交你想要的新功能: https://github.com/intel-analytics/BigDL/issues
來自: http://www.jiqizhixin.com/article/2149