基於 Apache Spark 的深度學習

【導讀】本文主要介紹了基於 Apache Spark 的深度學習。我們知道 Spark 是快速處理海量數據的框架,而深度學習一直以來都非常耗費硬件資源,因此使用在 Spark 框架上進行深度學習對於提升速度是非常有用的。本文介紹了 Apache Spark 內部結構和工作原理,以及一些實用 Spark 的深度學習庫,並在最後介紹了相關 DL pipelines 庫。想要學習基於 Spark 分佈式深度學習庫的讀者可以瞭解下。

基於 Apache Spark 的深度學習

【導讀】本文主要介紹了基於 Apache Spark 的深度學習。我們知道 Spark 是快速處理海量數據的框架,而深度學習一直以來都非常耗費硬件資源,因此使用在 Spark 框架上進行深度學習對於提升速度是非常有用的。本文介紹了 Apache Spark 內部結構和工作原理,以及一些實用 Spark 的深度學習庫,並在最後介紹了相關 DL pipelines 庫。想要學習基於 Spark 分佈式深度學習庫的讀者可以瞭解下。

Apache Spark 深度學習——第一部分

第一部分主要介紹:什麼是 Spark,Spark + DL 的基礎知識以及一些其它相關的內容。

Apache Spark 的入門

如果你要在海量數據集上進行工作,那麼你很有可能知道 Apache Spark 是什麼。如果你不知道也沒事!我會告訴你它是什麼。

由其創建者開發的 Spark 是用於大規模數據處理的快速且通用的工具。

快速意味着它比之前使用大數據(如經典 MapReduce)的方法更快。加速的祕訣在於 Spark 在內存(RAM)上運行,這使得處理速度比在磁盤上快得多。

通用意味着它可以用於多種用途,如運行分佈式 SQL,創建數據管道,將數據存入數據庫,運行機器學習算法,處理圖形、數據流等等。

RDD(彈性分佈式數據集)

Apache Spark 最抽象和最開始會接觸到的是彈性分佈式數據集(RDD)。

RDD 是可以並行操作的容錯元素集合。您可以創建它們來並行化驅動程序中的現有集合,或者在外部存儲系統中引用數據集。(例如共享文件系統,HDFS,HBase,或提供 Hadoop InputFormat 的任何數據源)

Spark 非常重要且需要了解的一點是,所有的變換(我們一會就去定義它)都是懶惰的,這意味着他們不會馬上計算結果。相反,他們只記得應用於某些基礎數據集(例如,一個文件)的變換。變換僅在有行爲需要將結果返回給驅動程序時才進行計算。

默認情況下,每次對其執行操作時,每個已轉換的 RDD 都可能會重新計算。但是,您也可以使用持久化(或緩存)方法將 RDD 保留在內存中,在這種情況下,Spark 將保留羣集中的元素,以便在下次查詢時快速訪問。還支持在磁盤上保存 RDD,或在多個節點上覆制 RDD。

如果您想更多地瞭解 Spark 中 RDD 的轉換和操作,請查看官方文檔:

https://spark.apache.org/docs/latest/rdd-programming-guide.html#transformations

Dataframe

自 Spark 2.0.0 以來,DataFrame 是由命名列組成的數據集。它在概念上等同於關係數據庫中的表或 R / Python 中的 dataframe,但在引擎蓋下具有更豐富的優化。

我們不會在這裏討論數據集,但它們被定義爲一個分佈式數據集合,可以用 JVM 對象構建,然後使用功能轉換進行操作。它們僅在 Scala 和 Java 中可用(因爲它們是鍵入的)。

DataFrame 可以由各種來源構建而成,例如:結構化數據文件,Hive 中的表,外部數據庫或現有的 RDD。

簡而言之,Dataframes API 是 Spark 創建者在框架中輕鬆處理數據的方式。它們與 Pandas Dataframes 或 R Dataframes 非常相似,但有幾個優點。當然,首先它們可以跨羣集分佈,所以它們可以處理大量數據,第二個是優化。

這是 community 採取的非常重要的一步。2014 年時,Spark 與 Scala 或 Java 一起使用要快得多。並且由於性能的原因,整個 Spark 世界轉向了 Scala(是一種令人敬畏的語言)。但對於 DF API,這已不再是問題,現在您可以在 R,Python,Scala 或 Java 中使用 spark 來獲得相同的性能。

Catalyst 負責這種優化。你可以把它想象成一個嚮導,他會接受你的查詢(哦,是的,你可以在 Spark 中運行類似 SQL 的查詢)和你的行爲,並創建一個優化的計劃用於分配計算。

這個過程並不那麼簡單,但作爲一名程序員你甚至不會注意到它。現在,它一直在幫助你。

深度學習和 Apache Spark

如果您想深入瞭解深度學習,請繼續閱讀以下文章:

https://towardsdatascience.com/a-weird-introduction-to-deep-learning-7828803693b0

https://towardsdatascience.com/my-journey-into-deep-learning-c66e6ef2a317

這是我在開始研究這個問題之前自問的問題。答案分爲兩部分:

1、 Apache Spark 是一個以簡單和陳述的方式在集羣中分佈計算的框架。正在成爲各行各業的標準,因此將深度學習的驚人進步加入其中將是一件好事。

2、 深度學習的有些部分計算量很大,很重!而分配這些進程可能是解決這個問題的又一個問題,Apache Spark 是我可以想到分發它們的最簡單方法。

這裏有幾種可以使用 Apache Spark 進行深度學習的方法,我在此列出它們:

1、 Elephas: 基於 Keras 和 PySpark 的分佈式深度學習框架

https://github.com/maxpumperla/elephas

2、 Yahoo! Inc.: TensorFlowOnSpark:

https://github.com/yahoo/TensorFlowOnSpark

3、 CERN 分佈式 Keras(Distributed Keras) (Keras + Spark) :

https://github.com/cerndb/dist-keras

4、 Qubole (tutorial Keras + Spark):

https://www.qubole.com/blog/distributed-deep-learning-keras-apache-spark/

5、 Intel Corporation: BigDL(Apache Spark 的分佈式深度學習庫):

https://github.com/intel-analytics/BigDL

Deep Learning Pipeline

但是我將關注的這些文章的是 Deep Learning Pipelines。

 https://github.com/databricks/spark-deep-learning

Deep Learning Pipelines 是由 Databricks 創建的開源代碼庫,提供高級 API 以便使用 Apache Spark 對 Python 進行可伸縮深度學習。

這是一項非常棒的工作,在合併到官方 API 中之前不會很長時間,所以值得一看。

與我之前列出的相比,這個庫的一些優點是:

1、 延續 Spark 和 Spark MLlib 的精神,它提供了易於使用的 API,通過幾行代碼,就可以進行深度學習。

2、 它側重於易用性和集成性,但不犧牲性能。

3、 它由 Apache Spark(也是主要貢獻者)的創建者構建,因此它更有可能被合併爲官方 API。

4、 它是用 Python 編寫的,因此它將與所有着名的庫集成在一起,現在它使用 TensorFlow 和 Keras 這兩個主要的庫來做 DL

在下一篇文章中,我將全面關注 DL pipelines 庫以及如何從頭開始使用它。您將看到的一件事情就是在簡單的 Pipeline 上進行 Transfer Learning,如何使用預先訓練好的模型來處理 “少量” 數據,並能夠預測事情,以及如何通過使您創建的深度學習模型可用於 SQL 等等,從而爲您公司中的每個人提供支持。

此外,我還將在 Deep Cognition Platform 上創建一個環境,從而可以在筆記本上使用此庫工作,以便測試所有內容。如果您沒有一個可用的帳戶,請創建一個免費帳戶:

http://deepcognition.ai/

關於 Spark 上的 pipelines 簡要介紹, 請看:

 https://spark.apache.org/docs/latest/ml-pipeline.html

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/Mxp0glBipv_AyMJ7Qi9Q4g