【干货】基于Apache Spark的深度学习

【导读】本文主要介绍了基于Apache Spark的深度学习。我们知道Spark是快速处理海量数据的框架,而深度学习一直以来都非常耗费硬件资源,因此使用在Spark框架上进行深度学习对于提升速度是非常有用的。本文介绍了Apache Spark内部结构和工作原理,以及一些实用Spark的深度学习库,并在最后介绍了相关DL pipelines库。想要学习基于Spark分布式深度学习库的读者可以了解下。

作者 | Favio Vázquez

编译 | 专知

参与 | Fan, Hujun

基于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

为什么想在Apache Spark做深度学习?



这是我在开始研究这个问题之前自问的问题。 答案分为两部分:

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

参考链接:

https://towardsdatascience.com/deep-learning-with-apache-spark-part-1-6d397c16abd

-END-

原文发布于微信公众号 - 专知(Quan_Zhuanzhi)

原文发表时间:2018-04-20

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

GPU不再安全!研究员首次成功发起GPU旁路攻击

作者:Hoda Naghibijouybari、Ajaya Neupane、Zhiyun Qian、Nael Abu-Ghazaleh

1311
来自专栏AI科技大本营的专栏

被 TensorFlowLite 刷屏了吧,偏要再发一遍

在本文中,Google 展示了 TensorFlow Lite 的框架构成以及一些功能特性。

4580
来自专栏大数据文摘

手把手 | 如何在你的iPhone上建立第一个机器学习模型(Apple最新CoreML框架入门)

3665
来自专栏吉浦迅科技

NVIDIA®Jetson嵌入式平台开发工具JetPack 3.0正式发布

JetPack(Jetson SDK)是一个按需的一体化软件包,捆绑了NVIDIA®Jetson嵌入式平台的开发人员软件。JetPack 3.0包括对Jetso...

3889
来自专栏新智元

【最大降40%】CPU漏洞补丁对机器学习和深度学习性能影响实测

来源:Medium 作者:Mikel Bober-Irizar 编译:刘小芹 【新智元导读】上周爆出的英特尔CPU漏洞门受到很大关注,Linux内核针对Me...

35910
来自专栏大数据文摘

手把手教你搭建自己的深度学习机器

6394
来自专栏机器之心

开源 | 基于Metal的机器学习框架Bender:可在iOS上运行TensorFlow模型

选自GitHub 机器之心编译 参与:吴攀 在正在举行的 WWDC 2017 上,苹果宣布发布了 Metal 2,详情可参阅机器之心的报道《苹果开发者大会 W...

3809
来自专栏华章科技

使用python抓取婚恋网用户数据并用决策树生成自己择偶观

之前在世纪佳缘上爬取过类似的数据,总体的感觉是上面的用户数据要么基本不填要么一看就很假,周围的一些老司机建议可以在花田网上看下,数据质量确实高很多,唯一的缺点就...

822
来自专栏量子位

手把手教你训练一个秒杀科比的投篮AI,不服来练 | 附开源代码

在这篇教程中,谷歌工程师Abe Haskins用简洁易懂的语言,教你用Unity3D和TensorFlow生产一只会投篮的AI。

1340
来自专栏ATYUN订阅号

【业界】Booking.com如何使用Kubernetes进行机器学习

1963

扫码关注云+社区

领取腾讯云代金券