近些年来机器学习中的子领域深度学习成为一个热门的话题,特殊是在围棋领域,谷歌的AlphaGo也利用了深度学习的技能。
在大数据领域,Spark MLlib是一个很盛行的机器学习算法库,如果你想用Spark来做深度学习演习,MLlib还无法很好的支持。本文要先容Intel开源的深度学习框架BigDL,他也是在Spark上的一个算法库,供应了全面的深度学习算法支持,包括数值打算(Tensor)和高阶神经网络等。
由于BigDL是在Spark上运行的,借助Spark平台的分布式扩展性,可以方便的扩展到上百或上千个节点。同时BigDL利用了Intel MKL等前辈的数学打算库,基于Intel CPU打算能力可能取得媲美GPU的性能。

BigDL的利用场景
BigDL可能利用不才列场景中:
直接在Hadoop或Spark平台上利用深度学习进行大数据剖析,同时数据是存储在HDFS、HBase、Hive等文件系统或数据库上;
希望在Spark程序或事情流中加入深度学习功能;
利用现有的 Hadoop/Spark 集群来运行深度学习程序,然后将代码与其他的Spark运用处景进行动态共享,例如ETL、数据仓库(Spark SQL)、功能引擎、经典机器学习(MLlib)、图剖析(GraphX)等。
E-MapReduce
阿里云的EMR做事供应了全面的开源大数据组件的支持,比如Hadoop、Spark、HBase等。EMR供应了一个完全的Spark运行环境,以是BigDL也可以很方便的在EMR集群内运行。
BigDL安装
当前EMR还未直接支持BigDL,以是须要我们自己在EMR节点上编译和安装BigDL组件。在不久的未来,EMR上可能会直接安装BigDL,这样EMR用户就可以和Spark MLlib一样直策应用BigDL了。
通过SSH登录EMR Master节点,参考EMR文档
环境准备(我们假设EMR环境上的Spark是2.0.x)
下载并安装Maven
由于BigDL所在的Maven库须要用HTTPS连接,为了让OpenJDK支持,须要额外安装包:sudo yum install nss
参考BigDL build文档编译:
git clone https://github.com/intel-analytics/BigDL.git
cd BigDL
bash make-dist.sh -P spark_2.0
如果上述过程实行成功,Build得到的BigDL/dist目录里有我们须要的运行环境,包括作业提交脚本和jar包等。
运行一个BigDL的样例
在BigDL在EMR的Master节点上安装好之后,我们可以来运行一个大略的深度学习算法(详情请参考BigDL官方文档)。这是一个在MNIST数据集上的LeNet-5模型演习算法,模型可以用来识别手写的数字。
数据准备,从http://yann.lecun.com/exdb/mnist/下载演习模型数据和测试数据特色文件以及label文件,并且解压缩放到本地的./data/mnist目录
创建模型的checkpoint目录./model/lenet_model
演习:
./dist/bin/bigdl.sh -- \
(更多的参数请参考BigDL文档)
这是在Spark上的作业,可以通过WebUI看到作业运行进度:
末了,测试演习结果:
./dist/bin/bigdl.sh -- \
traing.log和test.log文件分别包含了演习的过程和测试的结果。我们可以用剖析工具(比如Linux Shell工具或微软的Excel)来剖析结果数据,来更好的理解演习模型。
这是某次利用Lenet-5演习MNIST的结果:
总结
本文是深度学习框架BigDL的入门先容,目的是在EMR上运行一个真实的深度学习算法。当然,你看可以基于BigDL框架实现自己的深度学习算法,或者利用EMR notebook(Apache Zeppelin或交互式事情台)直策应用剖析和演习模型。你可以关注E-MapReduce产品博客获取更多的Spark和BigDL实践文章。