皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

专访英特尔首席工程师戴金权,全面解析英特尔深度学习框架BigDL

作者 陈思

为了降低企业用户使用深度学习进行数据分析和构建人工智能应用的门槛,2016年12月31日,英特尔开源了基于 Apache Spark 的分布式深度学习框架BigDL,为整个数据分析和机器学习过程提供比现有框架更加统一和集成化的体验,进一步帮助用户减少端到端的学习延迟,降低总体拥有成本。

InfoQ专访了英特尔高级首席工程师戴金权,为读者解读BigDL的研发目的、整体架构、技术特点以及英特尔在深度学习方向的未来规划。

BigDL是如何诞生的

戴金权,英特尔高级首席工程师,负责英特尔大数据分析,包括分布式机器学习、深度学习,也包括BigDL项目的研发工作。同时也在和世界一些顶级的研究机构,像伯克利的AMPLab、RICELab等等,在数据分析、机器学习等研究上进行合作。此外,他也是Apache Spark创始的Committer和项目管理委员会的成员。

专访英特尔首席工程师戴金权,全面解析英特尔深度学习框架BigDL

在整个BigDL的开发团队中,戴金权负责整个项目的架构和技术路线,同时,他也领导着硅谷和上海两部分,20多人的团队进行BigDL和数据分析相关技术的研发,包括BigDL本身的底层框架平台,也包括上层很多的算法和应用。

戴金权说道:“我们开发BigDL的主要原因或者目的是为了让深度学习更方便地使用。今天大家可以看到在机器学习、深度学习的社区,主要是Research的社区有很多新的突破、新的结果不停地涌现。但是大多数的数据的用户,不管是大数据的用户,数据工程师,数据科学家甚至分析师,他们通常不是深度学习的专家,但是他们希望能够使用深度学习的技术。怎么样更方便地使深度学习为他们所使用,这是我们开发BigDL的主要目的。”

戴金权随后分享了团队的做法:

第一,可以让大家重新利用现有的软件、硬件的架构,不需要做任何改变,可以直接开发深度学习的框架。

第二,可以在现有的大数据的集群上高效运行,不需要多少改变也能够高效、方便地进行扩展。

大数据集群的一个特点就是横向水平扩展,戴金权表示BigDL应该目前在所有社群中能够最方便地让大家做分布式水平扩展,用户不需要做任何事情就可以扩展到很大数量的节点上来运行这样的框架。

戴金权提到,BigDL是目前来说唯一一个直接在大数据的生态圈、大数据的平台上原生构建的深度学习框架,它跟现有的其他深度学习框架,比如Tensorflow、Caffe相比,一个最大的特点,就是它的易用性;

从方便管理的角度来说,大数据的平台其实已经有非常好的服务,像Yarn或者Mesos,对资源的管理和共享非常方便。而很多其他的框架都假定有一个特殊的、单独的基础架构来支持它,从资源管理、运维方便性来说也是非常大的挑战。BigDL能够很方便地进行分布式的横向扩展,在其他的框架上要做很多特殊的事情就是不那么方便。方便性是研发团队主要的一个目标。

从效率上来说,戴金权强调到:这里的效率不光是单点的性能,英特尔能够针对单点性能做非常好的优化,但是怎么做分布式这是另一方面,现实环境中计算通常是处在动态的、弹性的环境中,会有很大的集群,并且集群里面的机器可能是不一样的,可能和其他很多任务是动态共享的,运行当中可能会为了更高级的任务把有的任务杀掉等等,在很多实验室的环境可以设立一个集群,几个节点、十几个节点,在上面运行,但是真实生产环境中怎么样能够很方便、很高效地和不同的生产环境融合在一起,“因为我们基于大数据的架构,所以我们很容易做到这些事情。”

除了BigDL外,英特尔也有SparseML这样构建在Spark上的开源机器学习库。戴金权介绍到,在与很多客户合作的过程中,特别是一些大规模的互联网公司合作时,会有大量维度很高可能几亿甚至几十亿,但是非常稀疏的数据产生,每一条数据记录里面可能非零项可能只有几百个、几千个,大多数的字段都是零,这是在互联网公司非常常见的。高维度、非常稀疏的数据,如果直接在现有的机器学习的算法上运行,其实不是特别高效。所以英特尔与一些客户合作构建了SparkML,专门为稀疏数据做相对比较经典的机器学习工具,对此类应用场景有非常好的支持。

BigDL的整体架构

戴金权介绍:从最高级别来讲,BigDL采用了分布式的synchronous mini-batch SGD,它的分布式训练就是一个循环。这个循环里面每个迭代处理一个mini-batch,每个mini-batch里面根据神经网络的定义计算它的偏差,然后根据偏差来更新它的参数。每个mini-batch的处理是很自然的数据并行化的工作,对每个迭代的处理都可以用一个Spark的作业来处理,Spark作业天然的就可以通过RDD进行数据并行化的操作,然后来计算这些偏差。

每一个迭代结束的时候,需要把所有的偏差的参数进行同步,然后对参数进行更新,然后分发到下一个迭代,那就是另外一些系列的Spark的作业任务来进行处理。所以从高层来说就是synchronous mini-batch SGD,然后做分布式的工作。

从性能方面,戴金权从两部分进行了解析:一部分是单点的性能,单点的性能,英特尔已经优化了非常多,英特尔的MKL可能是IA平台上最快的数学库,此外还有大量的,包括在多线程上对JVM的优化,对多线程的优化、对JNI的优化等等这个过程,这样我们能做到单点非常高的效率。另一方面是做分布式,利用Spark本身的架构做数据并行处理;另外一块要做同步,因为是同步的mini-batch SGD,所以需要在每个迭代结束后对参数进行同步,进行更新。

据介绍,研发团队采用了类似于“参数服务器”的架构,但是并没有引入新的参数服务器的实现,这是通过跟用户的合作,发现对用户来说多部署一套系统是更麻烦的事情,由于Spark是基于内存计算的框架,所以它内部有一些Block Manager。

同时由于Spark内部是基于内存的cache的机制,为了整个系统的易用性,直接利用这个机制构建一个类似于参数服务器的架构,直接在Spark内部就可以做类似于参数服务器的这样的操作,可以很高效的同步。这样不管是计算还是整个网络的分布式、同步都能做到性能上的极致。

BigDL的工作流程

所有的深度学习、人工智能的应用并不是一个孤立的系统,它是一个端到端的非常复杂的数据处理、数据分析的流水线,里面有非常核心的算法模型。同时从数据输入到数据管理,特征的转换、提取然后去训练,训练过程中要考虑到各种各样的资源管理,整个Data Science Workflow再加上整个数据的管理,这是一个非常复杂的过程。

戴金权说:“因为今天有很多人,在使用一些框架的时候,做的事情无非是在Spark、Hadoop上对数据进行处理,然后转换。转换完的结果拷贝到另外一个地方然后进行处理”,所以他和研发团队在Spark,或者说在广义的Apache Hadoop平台之上,构建了BigDL这样一个平台,能够帮助使用者进行从数据一开始的管理到抽取,到特征的处理,再到算法模型的实现。BigDL团队在Spark大数据平台上做这件事情,能够把深度学习这样一个功能和现有的数据科学、数据管理、特征提取工作流整合在一起,作为一个工作流进行管理。

BigDL开源这些天

从开源到现在也有一些公司也对BigDL做了一些集成,比如偏向公有云的AWS、Azure、阿里云等等。业界在几周前有一个发布:Cray,美国的一个做超级计算的公司,它刚刚在ISC宣布他们会发布自己的分析软件包,BigDL也包括在里面,可以为他们的超级计算提供深度学习的功能,某种意义上来说是BigDL的第一个商业发行版,但是由Cray公司来提供的。

在与不同的公司合作过程中,英特尔也得到了很多不错的反馈,戴金权举例说,比如Python的支持,BigDL在去年年底发布的第一版时候,是基于Spark的Scala的实现,后面加入了非常大量的Python的支持,因为今天数据科学家或者分析师用的最主要的一个环境就是Python。同时他表示,研发团队加入了很多功能诸如:集成像Notebook、或者谷歌的Tensorboard之类的可视化的工具,可以使用Tensorboard对程序进行可视化,以及进行大量的RNN的支持,大量的文本NLP处理的支持。

戴金权说,目前团队正在进行BigDL 0.2的发布。之前Cray产品会集成BigDL 0.1的版本,而英特尔目前正在工作在BigDL 0.2发布的周期中,这里面有非常多新功能:比如会加入对Tensorflow的支持,使用者可以导入Tensorflow的模型,甚至可以用Tensorflow来定义自己在BigDL上运行的模型;可以和Spark ML pipeline很好地集成,可以直接在Spark的pipeline里面把BigDL所有的深度学习的功能很方便地用起来;同时也会加入对Windows的支持;使用者也可以用BigDL跑在一个Local JVM上,从而可以在其他的框架,比如Storm上直接运行BigDL的模型;此外还有非常多更高级的神经网络功能的支持。

英特尔在深度学习领域的布局

英特尔公司来说一直致力于人工智能计算的民主化,从端到端,从硬件到软件栈,从数据中心端到设备端都有非常多的工作在进行中。戴金权说,目前英特尔也在专注一些硬件的加速工作,比如Nervana即将推出的Lake Crest;还有上层的类似于MKL的数学库;还包括对各个深度学习的框架,比如Tensorflow、Caffe,英特尔都做了大量优化。

在开源方面,戴金权介绍说,除了BigDL,英特尔方面还在做一些工作,比如在MKL里面加入一些深度神经网络的支持;或者列如Nervana Graph的工作,从某种意义上来说,它是对深度学习增加了一个优化器,能够针对不同的硬件架构生成高效的执行代码。这些工作英特尔都在进行中,也会陆续开源。

转自 http://www.infoq.com/cn/news/2017/08/Intel-deep-framework-BigDL