论文部分内容阅读
大数据时代,为了高效地挖掘出数据中隐含的知识和价值,大规模机器学习和数据分析系统成为当今热门的一个研究课题。一个优秀的大数据机器学习系统除了满足大规模数据的快速处理功能外,还应该提供良好的编程抽象能力,以提供易于使用的编程方法,满足机器学习与数据分析算法的高效设计实现,并且具备高效、可扩展的大数据处理能力,在有效解决大规模数据分析计算性能问题的同时,还能支持现有的以及未来出现的大数据处理平台的能力。矩阵运算在机器学习和数据分析算法中被广泛使用。除了传统的基于矩阵的单机R和Matlab平台外,目前已经出现了很多分布式矩阵计算库的研究,例如HAMA、ML-Matrix和Marlin。然而,矩阵库只能提供基本的矩阵操作,无法对基于矩阵模型的应用程序中的计算流程实现全局优化,并且也难以根据特定计算平台的特性对整个计算流程进行相应优化。此外,相同的矩阵操作在不同计算平台上的性能各有优劣,这是由于平台的特性、计算逻辑以及矩阵规模所决定的。因此,对于诸如数据科学家等上层用户而言,难以手工合理选择单个平台或多个平台的组合以获取应用程序的最佳执行性能。为了解决大数据机器学习系统的易用性和可编程性问题与计算性能问题,本文研究了基于矩阵模型的大数据分析编程模型与框架、计算流图优化技术、以及完整系统的设计,在此基础上,设计实现了一个基于矩阵编程模型的跨平台大规模机器学习系统“大章鱼”(Octopus)。本文主要的贡献点包括:(1)研究实现了基于大规模矩阵模型的统一机器学习与数据分析编程模型和框架,允许用户基于矩阵模型和R语言,快速设计实现大数据机器学习和数据分析算法,实现了良好的易用性和可编程性。(2)为了提高大规模数据机器学习与数据分析时的计算性能,针对矩阵应用程序的计算流图优化,研究实现了计算流图逻辑执行方案优化方法,提升了计算流图的执行性能。通过声明式矩阵构建矩阵计算流图,对计算流图形成的DAG进行了两种逻辑方案优化,实现了公共子表达式消除优化和矩阵连乘优化。(3)对逻辑执行优化后的矩阵计算流图,进一步研究提出了一套物理优化策略和方法,以进一步提升实际执行的性能。矩阵计算流图的执行可以在单平台上运行也可以在多平台上运行。当矩阵计算流图在单个平台上执行时,为了能够在目前被广泛使用的通用大数据处理平台Spark上提供更好的计算性能,研究实现了 Spark平台的Cache和Shuffle优化。当矩阵计算流图在多个平台下执行时,基于不同矩阵操作在不同平台下的执行性能各有优劣这一事实,研究实现了矩阵操作执行时的多平台的自动选择和调度优化。(4)在上述关键技术方法研究基础上,基于R语言,设计实现了跨平台大数据机器学习系统Octopus,底层支持单节点R计算平台以及Spark、Hadoop和MPI等多种分布式计算平台,提供声明式和命令式两种矩阵接口,实现了良好的易用性和可编程性。用户无需具有分布式程序设计知识,便能够实现机器学习和数据分析算法。此外,上层应用程序只需编写一次,几乎无需修改便能根据实际需要选择在任意的计算平台上执行,实现了“Write Once,Run Anywhere”的跨平台特性。(5)实验结果表明,矩阵计算流图的逻辑优化对高斯非负矩阵分解算法在R、Spark、MPI平台下分别达到了 1.91,1.31,1.23的加速比。Spark平台的物理执行优化对高斯非负矩阵分解算法能够达到1.58-5.06的加速比。矩阵操作自动调度框架中时间模型的误差率在10%以内,对示例应用在Spark和MPI上的跨平台调度执行较之于单Spark和MPI平台执行分别获得91%和62%的性能提升。