英特尔开源分布式深度学习库BigDL:支持高性能大数据分析

近日,英特尔开源了一个运行在 Apache Spark 上的分布式深度学习库 BigDL,其可以利用已有的 Spark 集群来运行深度学习计算,并且还能简化从 Hadoop 的大数据集的数据加载。

开源地址:https://github.com/intel-analytics/BigDL 

据介绍,在 Xeon 服务器上的测试表明,BigDL 相比于 Caffe、Torch 或 TensorFlow 等开源框架实现了显著的速度提升。其速度可与主流的 GPU 相媲美,而且 BigDL 也能扩展到多达数十个 Xeon 服务器。

BigDL 库支持 Spark 1.5、1.6 和 2.0,并且允许将深度学习嵌入到已有的基于 Spark 的程序中。其中包含了将 Spark RDD(Resilient Distributed Datasets,弹性分布式数据集)转换成 BigDL 定义的 Dataset 的方法,并且也可以直接运用到 Spark ML Pipelines 上。

为了进行模型训练,BigDL 应用了一个同步小批量随机梯度下降(synchronous mini-batch SGD),该过程在跨多个执行器(executor)的单个 Spark 任务中执行。每一个执行器都执行一个多线程引擎并处理一部分微批量数据(micro-batch data)。在当前的版本中,所有的训练和验证数据都会加载到内存(memory)中。

BigDL 是用 Scala 实现的,并且模仿了 Torch。类似于 Torch,它也提供了一个 Tensor 类,其使用了 Intel MKL 库进行计算。Intel MKL 是英特尔的数学核心函数库(Math Kernel Library)的缩写,其中包含了一系列为计算优化过的历程,其中包括 FFT(快速傅立叶变换)和矩阵乘法等等,这些计算在深度学习模型训练中有广泛的应用。另外受到 Torch 的 nn 包(https://github.com/torch/nn)的启发,BigDL 借鉴了 Torch,提出了 Module 的概念,用于表示单个神经网络层、Table 和 Criterion。

BigDL 还提供了一个 AWS EC2 镜像和一些案例,其中包括:文本分类(使用卷积神经网络)、图像分类、以及将 Torch 或 Caffe 中预训练的模型加载到 Spark 中用于预测计算的方法。目前社区讨论区上大多数用户请求 BigDL 支持 Python,以及开发 MKL-DNN(MKL 的深度学习扩展)。

以下是 BigDL GitHub 项目的 README.md 介绍:

BigDL:在 Apache Spark 上的分布式深度学习

BigDL 是什么?

BigDL 是一个用于 Apache Spark 的分布式深度学习库。使用 BigDL,用户可以像编写标准 Spark 程序一样编写深度学习应用,并且可以直接将其运行在已有的 Spark 或 Hadoop 集群上。BigDL 有哪些优点呢?

丰富的深度学习支持。类似 Torch,BigDL 提供了全面的深度学习支持,包括数值计算(通过 Tensor)和高层面的神经网络;此外,用户还可以使用 BigDL 将预训练的 Caffe 或 Torch 模型加载到 Spark 程序中。

极高的性能。为了实现高性能,BigDL 在每一个 Spark 任务中都使用了 Intel MKL 和多线程编程。从而使得 BigDL 在单节点 Xeon(与主流 GPU 媲美)上能够实现比当前开源的 Caffe、Torch 或 TensorFlow 快几个数量级的表现。

有效的扩展。BigDL 可以利用 Apache Spark(一种超快的分布式数据处理框架)以及同步 SGD 的有效实现和在 Spark 上的 all-reduce 通信来进行有效地扩展,从而可在「大数据规模」上执行数据分析。

为什么选择 BigDL?

如果你满足以下条件,你就应该使用 BigDL 来编写你的深度学习程序:

你想在数据存储(比如以 HDFS、HBase、Hive 等方式)于的同一个大数据(Hadoop/Spark)集群上进行大量数据的分析。

你想为你的大数据(Spark)程序和/或工作流添加深度学习功能(不管是训练还是预测)。

你想使用已有的 Hadoop/Spark 集群来运行你的深度学习应用,然后将其动态地共享给其它工作负载(如 ETL、数据仓库、特征工程、经典机器学习、图分析等等)。

如何使用 BigDL?

要学习如何在 Linux 或 macOS 上安装和编译 BigDL,你可以查看:https://github.com/intel-analytics/BigDL/wiki/Build-Page 

要学习如何运行 BigDL 程序(作为本地 Java 程序或 Spark 程序),你可以查看:https://github.com/intel-analytics/BigDL/wiki/Getting-Started 

要在 EC2 上尝试 BigDL,你可以查看:https://github.com/intel-analytics/BigDL/wiki/Running-on-EC2 

要学习如何使用 BigDL 在几分钟内创建一个实用的神经网络,你可以查看教程:https://github.com/intel-analytics/BigDL/wiki/Tutorials 

了解更多细节,请查阅文档(包含教程、案例、编程指南等):https://github.com/intel-analytics/BigDL/wiki/Documents 

支持

更多关于 BigDL 的问题和讨论,请加入 BigDL 谷歌讨论组(https://groups.google.com/forum/#!forum/bigdl-user-group  )或订阅邮件列表(请发邮件至:bigdl-user-group+subscribe@googlegroups.com

你也可以在 GitHub 问题页面报告错误或提交你想要的新功能:https://github.com/intel-analytics/BigDL/issues 

入门开源英特尔工程大数据BigDL应用深度学习框架