阅读 547

基于Apache Spark以BigDL搭建可扩展的分布式深度学习框架


内容来源:2017 年 9 月 9 日,英特尔机器学习工程师张尧在“Cloudera数据科学峰会—一场纯技术非商业的交流会”进行《在Apache Spark之上以BigDL搭建可扩展的分布式深度学习框架》演讲分享。IT 大咖说(微信id:itdakashuo)作为独家视频合作方,经主办方和讲者审阅授权发布。

阅读字数:2703 | 7分钟阅读

嘉宾演讲视频及PPT回顾:suo.im/4yoyTL

摘要

在这次演讲中,我们将演示大数据用户和数据科学家如何使用BigDL以分布式方式对海量数据进行深度学习分析(如图像识别、对象检测、NLP等)。这可以让他们使用已有的大数据集群(例如Apache Hadoop和Spark)来作为数据存储、数据处理和挖掘、特征工程、传统的(非深度)机器学习和深度学习工作负载的统一数据分析平台。

What is BigDL

BigDL是一个的分布式学习框架,于2016年12月30号进行开源,它是专门为Apache Spark而写的深度学习框架。Apache Spark则是目前非常流行,用途广泛的大数据处理系统。

Spark的最底层是它的核心,往上是大量的接口。最上层是类似DataFrame的处理数据接口,中间是一些功能性的部分,比如常用的SQL、SparkR、Strea ming这些常用的库和接口,而MLlib和GraphX是Spark一直拥有的两个库。

在如今深度学习火热爆发的年代,Spark作为大数据分布式处理系统理所当然需要一个深度学习框架,BigDL就是由此诞生的。BigDL可以像写标准Spark程序一样去写深度学习模型,所以BigDL并不是第三方提供的模块,而是贴合在Spark中,它相当于Spark的一部分,同时可以运行在固有的集群上,而不用对集群做任何改变。

由于BigDL使用英特尔底层的数据计算库,在英特尔的各种cpu上都做了各种优化,让数学的计算更加迅速,同时它还支持多线程编程,所以在性能上是可以与主流的GPU相媲美的。

为什么需要使用BIGDL

趋势

未来的第一个趋势是数据增长越大的神经网络会取得越好的效果,但是同样训练起来会比较复杂速度也会比较慢。

第二个趋势就是Hadoop,它已经成为了全球大数据生态系统中的主流,大数据处理的中心。

第三个趋势今后要想写一个完整的机器学习生态系统,它要应对的不仅是ML code而是整个系统,对此如果没有完整的框架就会浪费大量的时间。

第四个趋势是归于统一,在其他领域趋于统一的趋势在大数据淋雨同样会显现出来。

BigDL Answering The Needs

BigDL就是解决了如何在已有的大数据生态系统上直接去部署深度学习的问题,它使得数据工程师们能够继续的使用熟悉的软件和硬件来实现深度学习的应用,同时能够通过已有的Spark集群来分析大数据。

Overview of BigDlL

对于标准的Spark工作来说不需要对Spark或者Hadoop的集群做任何的改变。它在调度上是通过Spark的管理来进行的,所以性能上会有所优化。Spark中每台机器使用的是同一个模型,但是训练的时候会使用不同的数据。

BigDL不仅仅是一个深度学习的框架而且还能与现有的Spark功能紧密的结合在一起,比如SQL、DataFramer以及Structure Streaming等。

How Does BigDL Compare To Other DL-Spark Effoorts?

BigDL相当于标准的Spark程序,可以与Spark已有的概念无缝的连接在一起,同样也能够与Spark的其他组件进行组合。所以它在使用上是非常方便的,调度效率和可扩展性都很高。

Caffe / TensorFlow on Spark 其实就是在每个 Work 上安装了一个Spark 程序,然后再由 Spark 将程序提起来,从调度效率上来看并不是很高。而且虽然它对 GPU 的优化很好,但对 CPU 的优化却不尽人意,单纯的从服务器的角度来看效率是不行的。

Latest BigDL Features

Python Support & NoteBook Integration

BigDL 是支持 python 的封装的,对于 python2.7 和3.5都有很好的支持,能够在pySpark上运行。BigDL同样能够在 NoteBook上很方便的编写代码,进行编译以及展现。

而通过上面的代码可以让开发人员实时的获取到配置的变化,Apollo提供了事件触发机制,只需要添加一个addChangeListener就行了,每次配置变化的时候会调用onChange方法,并且传入对应配置变化的事件,这个事件包含配置项的改变。

Recurrent Neural Network Support

Recurrent Neural Network Support也就是RNN,它是深度学习中很重要的一部分,主要用来处理循环神经网络以及训练性的模型。而BigDL是支持Simple RNN的,除此之外对LSTM和GRU也能很好的支持。

Functional API

在复杂模型的情况下,网络不能通过训练向的神经网络来表示的时候,就要采用Functional API,它使得多个节点互相之间可以任意的组合,形成所需要的网络。

Models Interoperability Support

BinDL除了在模型训练上很有优势之外,也可以把训练好的TensorFlow或Caffe网络读取到BigDL中,同样BigDL的模型也能导入到Tensor或Caffe内。

Where Can You Use BigDL

Speech Recognition

语音识别是深度学习应用最广的领域之一,BigDL在这方面实现了Deep speech,它是将语音转换为文本的库。

Image Recognition and Object Detection

在复杂模型的情况下,网络不能通过训练向的神经网络来表示的时候,就要采用Functional API,它使得多个节点互相之间可以任意的组合,形成所需要的网络。

BigDL Deployed in the Cloud

BigDL支持众多云端服务,包括Amazon Web Service、Microsoft Azure、Alibaba Cloud、Cloudera等等。