概念

BigDL是一种面向Apache Spark*的分布式深度学习库,用户可以通过BigDL将深度学习应用编写为标准的Spark程序,这些程序可以直接在Spark或Hadoop集群上运行。

具有的特性:

  • 丰富的深度学习支持

BigDL的源代码基于Scala语言实现,同时从Torch框架中汲取了诸多先进的理念。比如像Torch一样,BigDL也为用户实现了一个Tensor类,该类基于英特尔MKL库实现,可以进行各种常见的高阶数学运算。另外,受到 Torch 框架下的神经网络包(这里指 nn 包,neural network package) 的启发,BigDL还提出了Module类的概念,同时还模仿Torch实现了Table类和Criterion类。

注:这里MKL库的全称是“Math Kernel Library”,即英特尔的数学核心函数库,其中包含了诸多常规数学计算的最优实现,包括快速傅里叶变换和矩阵乘法等,这些计算在深度学习领域的模型训练中有着非常广泛的应用。

  • 极高的性能表现

BigDL基于一种同步小批量的随机梯度下降法(Stochastic Gradient Descent,SGD)对模型进行训练,该方法的能够支持单个 Spark 任务的跨平台运行,每个平台的执行器(executor)都可以执行一个多线程引擎并处理其中一小部分的批量数据。

正式由于引入了英特尔MKL和多线程,使得BigDL库在英特尔 Xeon 服务器上的表现要优于Caffe、Torch 或 TensorFlow 等其他的开源框架,甚至达到了主流GPU的运算速度。

  • 高效的横向扩展

BigDL 可以通过利用 Apache Spark 框架、同步的随机梯度下降算法,和 Spark 框架下的 all-reduce 通信进行有效的扩展,以“大数据的规模”执行数据分析任务。外媒报道称,BigDL 可一次支持几十个 Xeon 服务器的扩展。

根据上述特性,BigDL适用的应用场景主要为以下三种:

  • 直接在Hadoop/Spark框架下使用深度学习进行大数据分析(即将数据存储在HDFS、HBase、Hive等数据库上);
  • 在Spark程序中/工作流中加入深度学习功能;
  • 利用现有的 Hadoop/Spark 集群来运行深度学习程序,然后将代码与其他的应用场景进行动态共享,例如ETL(Extract、Transform、Load,即通常所说的数据抽取)、数据仓库(data warehouse)、功能引擎、经典机器学习、图表分析等。

对于直接支持已有Spark集群的深度学习开源库,BigDL是唯一的一个框架。

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一起使用。

Non GPU on Spark

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,以及可视化支持。可参考:https://github.com/intel-analytics/BigDL/wiki/Running-on-EC2。BigDL 的后续版本加入对 Python 的支持,以及开发基于MKL的深度学习扩展包。BigDL库在GitHub平台上的开源地址如下: https://github.com/intel-analytics/BigDL

使用参考

Intel 框架计划: AI+Reasoning 知识系统。

3个层次:

(1)直接优化底层硬件

Tensorflow直接把底层换掉,Caffe侧重实现算法功能。

(2)通过nGraph优化的产品

Spark、Torch、MxNet、Theano、Caffe2

(3)支持的库和语言

  • Intel MKL、MKL-DNN、Nervana Graph
  • 至强加速库:类似CUDA、cuDNN
  • MKL-DNN:C++实现,是一个C++工具接口
  • Nervana Graph:数学层面的过程编译优化,面向硬件目标的运算过程优化。

results matching ""

    No results matching ""