Intel开源了基于Apache Spark的分布式深度学习框架BigDL。BigDL借助现有的Spark集群来运行深度学习计算,并简化存储在Hadoop中的大数据集的数据加载。
BigDL适用的应用场景主要为以下三种:
直接在Hadoop/Spark框架下使用深度学习进行大数据分析(即将数据存储在HDFS、HBase、Hive等数据库上);
在Spark程序中/工作流中加入深度学习功能;
利用现有的 Hadoop/Spark 集群来运行深度学习程序,然后将代码与其他的应用场景进行动态共享,例如ETL(Extract、Transform、Load,即通常所说的数据抽取)、数据仓库(data warehouse)、功能引擎、经典机器学习、图表分析等。
运行于Spark集群上
Spark是被工业界验证过的,并有很多部署的大数据平台。BigDL针对那些想要将机器学习应用到已有Spark或Hadoop集群的人。
BigDL可以直接运行在已有Spark集群之上,和Spark RDD, DataFrame/DataSet直接接口,不需要额外的集群数据加载,从而大大提高从数据抽取到深度学习建模的开发运行效率。用户不需要对他们的集群做任何改动,就可以直接运行BigDL。BigDL可以和其它的Spark的workload一起运行,非常方便的进行集成。
BigDL库支持Spark 1.5、1.6和2.0版本。BigDL库中有把Spark RDDs转换为BigDL DataSet的方法,并且可以直接与Spark ML Pipelines一起使用。
BigDL目前的测试结果是基于单节点Xeon服务器的(即,与主流GPU相当的CPU),在Xeon上的结果表明,比开箱即用的开源Caffe,Torch或TensorFlow速度上有“数量级”的提升,最高可达到48倍的提升(Orders of magnitude ,up-to 48X today)。而且能够扩展到数十个Xeon服务器。
为什么创建一个默认情况下不使用GPU加速的深度学习框架?对于英特尔来说,它是促进下一代CPU机器学习的策略的一部分。
Spark传统上不是一个GPU加速的产品,虽然目前IBM和Databricks(于去年底)有在自己的集群上增加支持GPU加速的Spark服务;其实使用GPU也将是一种趋势。从另一方面来说,BigDL是给开发者的一个福利,理论上,使用现有软件会比移植到GPU架构上的工作量小很多。比如说英特尔采用GPU-a PCIe附加卡的形式封装了Xeon Phi处理器,由Xeon Phi插件卡组成的系统可以通过简单地更换或添加卡来升级或扩展,而不用更换整个机架。
与使用GPU加速来加速过程的其他机器学习框架不同,BigDL使用英特尔数学内核库(Intel MKL)来得到最高性能要求。在性能提高策略上,它还针对每个Spark task使用了多线程编程。
对于模型训练,BigDL使用了在多个执行器中执行单个Spark任务的同步小批量SGD(Stochastic Gradient Descent)。每个执行器运行一个多线程引擎并处理一部分微批次数据。在当前版本中,所有的训练和验证数据都存储到存储器中。
BigDL使用Scala开发,并参考了Torch的模型。像Torch一样,它有一个使用Intel MKL库进行计算的Tensor类。Intel MKL(Math Kernel Library)是由一系列为计算优化过的小程序所组成的库,这些小程序从FFT(快速傅立叶变换)到矩阵乘法均有涉及,常用于深度学习模型训练。Module是另一个从Torch借鉴而来的概念,它的灵感来自Torch的nn package。Module代表单独的神经网络层、Table和Criterion。
BigDL的API是参考torch设计的,为用户提供几个模块:
Module: 构建神经网络的基本组件,目前提供100+的module,覆盖了主流的神经网络模型。
Criterion:机器学习里面的目标函数,提供了十几个,常用的也都包含了。
Optimizer:分布式模型训练。包括常用的训练算法(SGD,Adagrad),data partition的分布式训练。
用户只需定义好模型和目标函数,就可以放到Optimizer里面去训练。对于数据预处理,BigDL提供了一个叫Transformer的接口封装,并且提供了很多图像、自然语言处理方面的预处理算法的实现。另外还提供很多示例程序,让用户了解怎么使用BigDL。例如怎么训练模型,怎么和Spark其它模块一起工作。
BigDL提供了一个AWS EC2镜像和一些示例,比如使用卷积神经网络进行文本分类,还有图像分类以及如何将在Torch或Caffe中预训练过的模型加载到Spark中进行预测计算。来自社区的请求主要包括提供对Python的支持,MKL-DNN(MKL的深度学习扩展),faster-rcnn,以及可视化支持。