面向大数据环境的大规模机器学习工具研究综述
2021-11-21
(北方工业大学经济管理学院,北京 100144)
0 引言
伴随着互联网产业的兴起,大数据迅速成为学术界、企业界甚至政府机构关注的热点。相对于传统数据,人们将大数据的特征总结为5 个大写的“V”,即体量大(Vol⁃ume)、速度快(Velocity)、模态多(Variety)、难辨识(Veraci⁃ty)和价值大密度低(Value)[1]。人们关注大数据的一个重要目的在于从规模巨大、纷繁复杂的数据中探求规律,释放数据所蕴含的价值;否则,数据再大,也毫无意义。而作为人工智能重要分支的机器学习,在大数据价值发现中扮演着不可或缺的角色。
机器学习在学术界和产业界都有巨大实用价值,尤其是大数据环境下的机器学习算法成为学术界和工业界共同关注的课题。一般而言,大规模机器学习算法通常采用分而治之思想,通过分布式计算方式,将数据或者模型进行分割,进而出色地完成对大规模数据的模型训练及预测[2]。然而,从零开始构建一个分布式机器学习算法是繁琐和重复性的。针对该问题,越来越多开源和商业性的大规模机器学习工具应运而生。大规模机器学习工具的产生,降低了机器学习算法的使用门槛,减少了科研技术人员的重复性劳动,使他们将更多的精力集中在创新研究和应用分析上,极大地提高了生产效率。并且,开源大规模机器学习工具平台的出现,也顺应了当前潮流,开源方式能够充分集中大众智慧,让更多的科研人员投身于算法研究和工具平台建设中,也更快更好地促进了机器学习发展。
目前,国内外机器学习工具种类繁多,功能和适用环境也各不相同。本文主要分析当前国内外机器学习算法开发和应用主要工具,总结各机器学习工具包的特点及适用场景,以便科研和技术人员在面临实际问题时能够选择合适的机器学习工具平台。
1 开源的机器学习工具
开源即开放源代码,开源软件以开放源代码的形式提供给使用者使用,在为使用者提供便利的同时,也接受更多来自于开发者的改造。目前,开源工具已逐渐成为机器学习界的主流,主要有以下几个分类。
1.1 基于GPU 的深度学习工具
深度学习是研究如何从数据中自动抽取多层特征表示,它与传统机器学习模型的不同之处在于,深度学习能够学到数据更高层次的抽象表示,能够自动从数据中提取特征[3]。一个高层的神经网络模型通常包含上百万参数,这样一个巨大的模型在普通CPU 上训练非常耗时,而GPU的并行训练算法可以极大缩短训练时间。
cuDNN 是Nvidia 研发的一款专注于深度学习的GPU加速工具,通过将卷积神经网络计算转变为对GPU 更有利的矩阵运算,可以非常有效地提高深度神经网络训练速度[4]。由于cuDNN 的强大性能,包括Torch、Caffe 在内的很多机器学习工具包在深度神经网络运算时,都采用cuDNN 的算法加以实现。
Torch 和TensorFlow 都以对深度神经网络的良好支持为特点,与cuDNN 相比,这两个机器学习包提供了更加高层的算法支持[5-6]。
Torch 由Facebook 公司开发,提供了一个非常丰富的社区驱动算法库,涉及领域包括机器学习、计算机视觉、信号处理、并行运算、图像、音频、视频和计算机网络。Torch采用了LuaJIT 语言编写,它继承了LuaJIT 语言优势,包括极高的运行速度、灵活的跨平台特性、良好的可读性[7]。它支持神经网络,而且其深度学习模块运算效率非常高。通过使用Torch 深度学习模块构造的CNN(卷积神经网络),比普通CNN 快23.5 倍[8]。
TensorFlow 由谷歌开发,其命名来源于自身运行原理,Tensor 意为张量,Flow 是流的意思[9]。它是基于DistBelief研发的机器学习工具,提供了一种数据驱动的流式计算框架,采用了一种基于数据流的运算模型。一个TensorFlow的计算可以描述为一个有向图,图由节点和边构成。每一个节点可以有零个或者多个输入和零个或者多个输出,它们代表某一种操作,在不同节点之间边上流动的数据就是Tensor[10]。
与Torch 相比,TensorFlow 的平台兼容性更加强大,它还提供了异构的网络结构以便将不同设备包含在同一个任务中。TensorFlow 强大的跨平台功能正是源于它的流式计算结构。在TensorFlow 中,节点之间通过统一的数据结构Tensor 进行信息交互,从而屏蔽了不同节点之间的差异性。
1.2 基于数据并行的分布式计算机器学习工具
大数据时代的一个特点是数据规模变得越来越大,为了获得有效信息,用户需要构建的大规模模型往往无法在一台电脑上完成训练[11]。于是,分布式计算平台被提上日程,即将数据分割成小份发送到每一个工作节点上加以处理,它较好地满足了大数据背景下的大规模运算。目前,主流的分布式计算平台,如Hadoop、Spark 等,都是基于数据并行的分布式计算平台[12]。但是,进行大规模的模型训练即使在分布式环境下依然是一个非常困难的问题。
Mahout 是Hadoop 分布式计算平台上的一个机器学习工具,为了帮助开发人员更加方便快捷地在Hadoop 上进行分布式数据挖掘任务,它采用Map-reduce 的方式将很多传统单机上的经典算法在分布式环境下实现[13]。同时,在Spark 分布式计算平台上也存在一个与之对应的机器学习工具MlLib。针对Spark 平台的特性,MlLib 提供了两个不同的算法库:Spark.mllib 和Spark.ml。Spark.mllib 提供了面向RDD 的原始算法,而spark.ml 则提供了面向DataFrames的机器学习算法。Spark 对两个库都进行维护,以支持用户的不同需求,但是,鉴于Spark 对DataFrame 的算法优化,使用DataFrames 会是一个更好的选择[14]。
由IBM 公司开发的SystemML 更加倾向于创造一个灵活、可伸缩的机器学习工具,希望为用户提供一个工具,使他们编写的程序可以在各种分布式计算平台上运行[15]。为此,SystemML 提供了两种高层次的编程语言,类R 的脚本语言DML 和类Python 的脚本语言PyDML,使用这两种语言编写的程序可以完全无修改地在各种平台上运行,包括Hadoop 分布式平台和Spark 分布式平台。此外,System⁃ML 还会对这两种语言编写的算法进行自动优化,通过数据和集群性能以保证高效性和可伸缩性。
SystemML 同样提供了支持各种机器学习算法的工具包,以帮助用户编写程序。除在DML 或PyDml 中调用这些工具包外,SystemMl 还提供了Java 语言和Scala 语言的API 接口以方便用户编程。
1.3 基于模型并行的分布式机器学习工具
与基于数据并行的分布式计算不同,基于模型的并行计算框架除将数据分割分发给工作节点外,还会将模型参数发放给每一个工作节点进行训练,这种方式更适合进行机器学习模型训练。
Petuum 是一个基于模型同步的分布式机器学习框架,它致力于提供一个超大型机器学习的系统接口及通用算法[16]。同时,它也会根据数据统计相关性,通过优化模型训练算法提升模型训练速度。
微软的分布式机器学习框架DMTK 则更加关注分布式计算框架的计算性能,它可以在很少的机器集群上训练出超大规模的模型[17]。目前,微软在DMTK 实现了3 个算法:LightLDA[18]、分布式词向量[19]、多义的分布式词向量[20]。借助DMTK 分布式框架,LightLDA 可以仅仅使用8台计算机组成的集群,在2 千亿训练样本的数据集上训练具有1 百万词汇表和1 百万个话题的LDA 模型,而这项工作在以往实验中通常要用上千台计算机的集群才能够运行。
DMTk 分布式框架由参数服务器和客户端服务程序两部分组成。与传统参数服务器相比,DMTK 中的参数服务器有一个很大优势是,它允许存储异构参数模型,即高频参数和低频参数分开存储,以达到更好的服务器负载。
DMTK 的客户端服务程序运行在各工作节点上。在参数同步时,DMTK 的客户端服务程序为工作节点添加缓存功能,极大减少通信开销。它还会在训练程序和模型之间建立高速通道,以提高通信速度。对于DMTK 最重要的机制是,DMTK 采用一种Round-robin 的调度方式,工作节点只有在需要时才会从服务器上下载部分参数,正是由于这项改进才使得DMTK 可以在非常有限的资源上训练超大规模的模型。
1.4 基于图并行的机器学习工具
基于图并行的机器学习框架是为了解决大规模数据下传统Map-reduce 分布式计算框架不适合机器学习迭代式运行特点而提出的,在解决机器学习领域的问题时,它具有更高的效率。但是这种分布式计算框架需要使用者能够将机器模型抽象成图模型的结构。
GraphLab 是GraphLab 实验室开发的一款基于图并行的分布式机器学习框架,其并行的核心思想是对顶点的切分[21]。在GraphLab 中,顶点是最小并行粒度和通信粒度,对于某一个顶点,GraphLab 将其部署到多台机器上,其中一台作为master 节点,其余机器作为mirror 节点,master 是管理者节点,会给每一个mirror 安排具体计算任务,mirror作为代理执行者需要与master 的数据保持同步[22]。而对于某一条边,则只会被部署到一台机器上,通过对每一条边所关联的顶点进行多份存储以保持模型完整性。这种方式可以解决图模型边上数据量大的问题。
通过将数据抽象成Graph 结构,GraphLab 将算法执行过程抽象成Gather、Apply、Scatter 3 个步骤。在Gather 阶段,工作顶点的边从临界顶点和自身收集数据;在Apply 阶段,Mirror 会将Gather 计算结果发送给Master 顶点;在Scatter 阶段,Mater 节点更新边上的数据并通知对其有依赖的临界顶点更新状态。
2 商业化机器学习工具
商业软件是在计算机软件中被作为商品进行交易的软件,与开源软件相比,商业软件更加注重用户体验,大部分商业软件还会配备比较完善的技术支持。
2.1 IBM SPSS Modeler
IBM 公司出产的IBM SPSS Modeler 是一款商用的机器学习工具,其设计思想是用尽量简单的方式进行数据挖掘,尽可能屏蔽数据挖掘算法的复杂性及软件操作的繁琐性,使数据挖掘分析员在解决商业问题时,能够较好地绕开软件操作本身,将更多精力放在先进数据挖掘技术使用上[23]。
SPSS Modeler 提供了一个易于操作的拖拽式图形用户界面,用户不需要编写任何代码就可以完成自己的数据挖掘任务。开源机器学习工具Weka 也提供了类似的图形操作界面,但是相比而言,IBM SPSS Modeler 的界面更加简洁,用户不需太多数据挖掘知识即可读懂每一个控件的功能[24]。通常,对于数据挖掘任务而言,数据准备是一项繁琐工作,SPSS Modeler 则通过数据准备节点帮助用户自动准备数据。
SPSS Modeler 还提供了一个与之配套的程序SPSS Modeler Server 以支持用户完成大数据集上的训练。SPSS Modeler Server 运行在服务器端,以分布式模式为用户提供支持服务。大数据集下的内存密集型操作可以在服务器端快速执行,并将结果下载到客户端,因而可以加快运行速度。目前,SPSS Modeler 依然无法支持超大规模数据的数据挖掘任务。
2.2 SAS
SAS 全称是Statistics Analysis System,它是一个用来管理数据、分析数据和编写报告的大型集成应用软件系统,目前已经被广泛应用于政府行政管理、科研、教育、生产和金融等不同领域[25]。作为一款商用的数据挖掘工具,SAS与IBM SPSS Modeler 的定位完全不同,它的目标用户是具有数据分析知识的专业用户,因此其操作主要以SAS 语言编程为主,虽然SAS 也提供非编程方式的菜单系统,但人机对话界面并不友好。
SAS 提供了当今流行的主要统计分析方法,包括多元分析、回归分析、方差分析、非参数分析、生存分析、聚类分析、判别分析和心理测量分析等[26]。
SAS 提供多种语句及选项供用户灵活使用,以满足用户不同的功能需求。同时,SAS 也具有良好的跨平台特性,它可以在多种计算机和操作系统上运行,最新版本的SAS也可以支持Hadoop 分布式计算平台。
2.3 云平台上的机器学习工具
云平台上的机器学习工具将其部署在云端,以出售计算的形式供用户使用。这种商业模式无疑是一种大胆创新,但是具体效果还需等待市场考验。
由百度公司开发的BML 是一种部署在云端的机器学习工具,通过BML,用户无须关心具体算法细节,也无需进行计算平台配置,只需要上传数据,选择计算模型即可自动完成模型训练,但是BML 并不支持用户自定义方法[27]。微软的Azure ML[28]和阿里巴巴的御膳房[29]也提供了一个类似的云端机器学习工具,除Azure ML 提供拖拽式操作外,用户还可使用Python 语言进行更加灵活的操作,但是用户用脚本语言编写的程序无法在Azure ML 上并行运行。
数据处理模型的局限性是云平台上机器学习工具的一大共性特点。目前,基于云平台机器学习工具的新型商业模式正处于起步阶段,其将在不断的发展和完善中,为用户提供更好的体验。
3 结语
大数据时代,由于数据规模较大且数据复杂多样,传统机器学习在数据价值深度挖掘上都面临巨大挑战,而大规模机器学习技术的产生,为人们提供了一个在海量数据中挖掘价值的有效方法。大量开源或者商用的面向大数据的机器学习工具,为人们使用这些新技术提供了便利。目前,国内外各种机器学习工具特点不同,适用领域也不同。从小数据集上的数据挖掘任务,到大数据集下的服务器端数据挖掘任务,再到超大规模大数据下的机器学习任务,机器学习算法在不断进步,机器学习工具也在不断完善。
无论是工业界还是学术界,研究机器学习的最终目的都是为了方便人类,机器学习工具可以降低机器学习使用门槛,促进机器学习算法普及。未来,机器学习工具也会向着更加全面和更加易用的方向发展,必将呈现以下功能特点:面向更广泛更普通的用户群体、具备良好可视化功能、操作界面简洁直观、对常用机器学习算法兼容性强、能够与企业自身大数据分析无缝衔接、便于生产环境建设和升级维护等。