使用Apache Spark做深度學(xué)習(xí) - 第1部分

原文

Apache Spark的入門

如果你在Data World工作,那么你很有可能知道Apache Spark是什么。如果你不知道,那么也還好!我會告訴你它是什么。

Apache Spark TM

由其創(chuàng)建者定義的Spark,是用于大規(guī)模數(shù)據(jù)處理的快速通用的引擎。

快速部分意味著它比之前使用大數(shù)據(jù)(如經(jīng)典MapReduce)的方法更快??斓拿卦E在于Spark運(yùn)行在內(nèi)存(RAM)上,這使得處理速度比在磁盤上快得多。

通用部分意味著它可以用于多種用途,如運(yùn)行分布式SQL,創(chuàng)建數(shù)據(jù)流水線,將數(shù)據(jù)攝入數(shù)據(jù)庫,運(yùn)行機(jī)器學(xué)習(xí)算法,處理圖形,數(shù)據(jù)流等等。

RDD

來自PySpark-Jeffrey Thompson的圖片

Apache Spark的主要抽象和開始是彈性分布式數(shù)據(jù)集(Resilient Distributed Dataset,RDD)。

RDD是可以并行操作的容錯(fault-tolerant)元素集合。您可以創(chuàng)建它們,以跟驅(qū)動程序中的現(xiàn)有數(shù)據(jù)集并行,或者在外部存儲系統(tǒng)(如共享文件系統(tǒng),HDFS,HBase或提供Hadoop InputFormat的任何數(shù)據(jù)源)中引用數(shù)據(jù)集。

了解Spark的非常重要的一點(diǎn)是,所有的轉(zhuǎn)換(transformations) (我們將盡快定義它)都是懶惰的,他們不會馬上計(jì)算結(jié)果。相反,他們只記住應(yīng)用于某些基礎(chǔ)數(shù)據(jù)集(例如文件)的轉(zhuǎn)換(transformations)。轉(zhuǎn)換僅在動作(action)需要將結(jié)果返回給驅(qū)動程序時計(jì)算。

默認(rèn)情況下,每次對其執(zhí)行操作時,每個轉(zhuǎn)換后的RDD都可能會重新計(jì)算。但是,您也可以使用持久化(或緩存)方法將RDD 保留(persist)在內(nèi)存中,在這種情況下,Spark將保留群集中的元素,以便在下次查詢時快速訪問。還支持在磁盤上保存RDD,或在多個節(jié)點(diǎn)上復(fù)制RDD。

如果您想更多地了解Spark中RDD的轉(zhuǎn)換和操作,請查看官方文檔:

RDD編程指南 - Spark 2.3.0文檔
Spark 2.3.0編程指南,Java,Scala和Python

數(shù)據(jù)幀(Dataframe)

來自PySpark-Jeffrey Thompson的圖片

自從Spark 2.0.0開始,DataFrame是一個數(shù)據(jù)集(Dataset),被組織到命名列(named columns)中。它在概念上等同于關(guān)系數(shù)據(jù)庫中的表或R / Python中的數(shù)據(jù)框(data frame),但在其內(nèi)部具有更豐富的優(yōu)化。

我們不會在這里討論數(shù)據(jù)集(Datasets),但是它們被定義為可以從JVM對象構(gòu)建的數(shù)據(jù)的分布式集合,然后使用功能轉(zhuǎn)換(functional transformations)進(jìn)行操作。它們僅在Scala和Java中可用(因?yàn)樗鼈兪怯蓄愋停╰yped)的)。

DataFrame可以從各種來源構(gòu)建而成,例如:結(jié)構(gòu)化數(shù)據(jù)文件,Hive中的表,外部數(shù)據(jù)庫或現(xiàn)有的RDD。

https://aspgems.com/blog/big-data/migrando-de-pandas-spark-dataframes

簡而言之,Dataframes API是Spark創(chuàng)建者在框架中輕松處理數(shù)據(jù)的方式。它們與Pandas Dataframes或R Dataframes非常相似,但有幾個優(yōu)點(diǎn)。首先當(dāng)然是它們可以分布在一個集群中,因此它們可以處理大量的數(shù)據(jù),第二個是它被優(yōu)化了。

這是社區(qū)采取的非常重要的一步。到2014年,Spark與Scala或Java一起使用要快得多,并且由于性能的原因,整個Spark世界變成了Scala(是一種令人敬畏的語言)。但對于DF API,這已不再是問題,現(xiàn)在您可以在R,Python,Scala或Java中使用它,獲得相同的性能。

催化劑(Catalyst)負(fù)責(zé)這種優(yōu)化。你可以把它看作是一個向?qū)?,他會接受你的查詢(哦,是的,你可以在Spark中運(yùn)行類似SQL的查詢,在DF中運(yùn)行它們,并且它們也將被并行化)和你的動作(actions),并創(chuàng)建一個優(yōu)化的計(jì)劃用于分發(fā)計(jì)算(distributing the computation)。

這個過程并不那么簡單,但作為程序員的你甚至都不會注意到它。現(xiàn)在,它一直在幫助你。

深度學(xué)習(xí)和Apache Spark

https://becominghuman.ai/building-an-image-classifier-using-deep-learning-in-python-totally-from-a-beginners-perspective-be8dbaf22dd8

如果您想深入了解深度學(xué)習(xí),請繼續(xù)閱讀以下文章:

深度學(xué)習(xí)的“怪異”介紹
有關(guān)Deep Learning的精彩介紹,課程和博客文章。但這是一種不同的介紹。

我的深度學(xué)習(xí)之旅
在這篇文章中,我將分享我如何研究深度學(xué)習(xí)并用它來解決數(shù)據(jù)科學(xué)問題。這是...

你為什么想要在Apache Spark上進(jìn)行深度學(xué)習(xí)?

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

  1. Apache Spark是一個以簡單和聲明的方式在集群中分發(fā)計(jì)算的驚人框架。正在成為各行各業(yè)的標(biāo)準(zhǔn),因此將深度學(xué)習(xí)的驚人進(jìn)步加入其中將是一件好事。
  2. 有些深度學(xué)習(xí)的部分計(jì)算量很大,很重!分發(fā)這些進(jìn)程可能是解決其他問題的解決方案,Apache Spark是我可以想到分發(fā)它們的最簡單方法。

有幾種方法可以用Apache Spark進(jìn)行深度學(xué)習(xí),我之前曾經(jīng)討論過,我在這里再次列出它們(并非詳盡無遺):

1。 Elephas :Keras&PySpark的分布式DL

maxpumperla/elephas
elephas - 使用Keras&Spark做分布式深度學(xué)習(xí)

2。雅虎公司 :TensorFlowOnSpark

yahoo/TensorFlowOnSpark
將TensorFlow程序引入Apache Spark集群

3。CERN 分布式Keras(Keras + Spark)

cerndb/dist-keras
dist-keras - 分布式深度學(xué)習(xí),關(guān)注分布式訓(xùn)練,使用Keras和Apache Spark。

4。Qubole (Keras教程 + Spark)

在Apache Spark上使用Keras進(jìn)行分布式深度學(xué)習(xí)| Qubole
已經(jīng)證明深度學(xué)習(xí)能夠在不同的領(lǐng)域中產(chǎn)生高效的機(jī)器學(xué)習(xí)模型。一些...

5。英特爾公司 :BigDL(Apache Spark的分布式深度學(xué)習(xí)庫)

intel-analytics/BigDL
BigDL:面向Apache Spark的分布式深度學(xué)習(xí)庫

深度學(xué)習(xí)流水線

Databricks

但是我將關(guān)注這些文章的是Deep Learning Pipelines。

databricks/spark-deep-learning
spark-deep-learning - Apache Sparkgithub.com的深度學(xué)習(xí)流水線

深度學(xué)習(xí)流水線是由Databricks創(chuàng)建的開放源代碼庫,它提供了高級API以便使用Apache Spark在Python中進(jìn)行可伸縮深度學(xué)習(xí)。

這是一項(xiàng)非常棒的工作,不久應(yīng)該就會合并到官方API,所以值得一看。

與我之前列出的相比,這個庫的一些優(yōu)點(diǎn)是:

  • 本著Spark和Spark MLlib的精神,它提供了易于使用的API,可以只用幾行代碼就可以進(jìn)行深入學(xué)習(xí)。
  • 它側(cè)重于易用性和集成性,而不犧牲性能。
  • 它由Apache Spark(也是主要貢獻(xiàn)者)的創(chuàng)建者構(gòu)建,因此它更有可能被合并為官方API。
  • 它是用Python編寫的,因此它將與所有著名的庫集成在一起,現(xiàn)在它使用TensorFlow和Keras這兩個主要的庫來執(zhí)行DL。

在下一篇文章中,我將全面關(guān)注DL流水線庫以及如何從頭開始使用它。您將看到的一件事情就是在簡單的Pipeline上進(jìn)行Transfer Learning,如何使用預(yù)先訓(xùn)練好的模型來處理“少量”數(shù)據(jù),并能夠預(yù)測事情,以及如何將你創(chuàng)建的學(xué)習(xí)模型可用于SQL來服務(wù)你所在的公司等等。

此外,我還將創(chuàng)建一個環(huán)境,在Deep Cognition Platform中使用此庫在筆記本上工作,以便測試所有內(nèi)容。如果您沒有一個賬號可以開始使用,請繼續(xù)創(chuàng)建一個免費(fèi)帳戶:

DeepCognition - 今天成為一家由AI支持的組織
設(shè)計(jì),訓(xùn)練和部署無需編碼的深度學(xué)習(xí)模型。深度學(xué)習(xí)工作室簡化和加速...

哦!!順便說一句,如果你現(xiàn)在想更多關(guān)于Python的數(shù)據(jù)科學(xué)流水線的信息,請查看馬修梅奧的這些精彩文章:

使用Scikit學(xué)習(xí)流水線管理機(jī)器學(xué)習(xí)工作流程第1部分:溫和的介紹
您是否熟悉Scikit-learn Pipelines?他們是一個非常簡單但非常有用的工具來管理機(jī)器...

使用Scikit學(xué)習(xí)流水線管理機(jī)器學(xué)習(xí)工作流程第2部分:集成網(wǎng)格搜索
在我們上一篇文章中,我們將Scikit-learn pipeline作為一種簡化機(jī)器學(xué)習(xí)工作流程的方法。

使用Scikit學(xué)習(xí)流水線管理機(jī)器學(xué)習(xí)工作流程第3部分:多個模型,流水線...
首先,我知道我答應(yīng)我們會在最后一篇文章中通過玩具數(shù)據(jù)集,但出于比較的目的,我們將...

關(guān)于Spark上的流水線簡要介紹一下:

ML Pipelines - Spark 2.3.0文檔
Estimator抽象了學(xué)習(xí)算法的概念或任何適應(yīng)或訓(xùn)練數(shù)據(jù)的算法。技術(shù)上...

再見 :)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容