使用R语言异构平台进行数据挖掘
摘要:数据产生和收集的指数级增长导致我们站在了数据分析和信息提取的新时代。基于通用处理器的常规系统不能够和大量计算需求的数据挖掘技术并驾齐驱。像GPU和FPGA的高性能协处理器有处理大量的计算工作负载的潜力。在本文中,我们提出了一个可扩展框架,旨在提供一个能够在异构平台上开发和使用高性能的数据挖掘应用平台。该框架采用了软件基础架构和高性能的内核库。此外,它包含了各种增加应用程序吞吐量的优化。该框架涵盖多种技术,包括R、GPU、多核心CPU、MPI和并行netCDF,利用它们的能力进行高性能计算。本文还介绍了来自多个应用程序提供显著的效能增益的交错GPU核心的概念。因此,相比喻其它可用的数据挖掘工具,我们的框架提供了一个易于使用的和可扩展的环境,无论是应用程序开发和执行。该框架是作为一个软件包,它可以很容易地集成在R编程环境上。
关键字——R;GPU;数据挖掘;MPI;K-Means;模糊K-Means;PCA;并行netCDF;
I. 介绍
要在当今世界中取得成功,知识驱动决策是一个关键。工商企业,金融机构,政府部门,研究和发展组织收集大量的数据,以获得在各自的领域更深入的了解。社交网络如Facebook和微型博客网站Twitter上生成大量的能够提供当今社会最新趋势的有用信息的数据。通过筛选这样大量收集的数据和发现未知的模式不是一个简单的任务,尤其是当数据的大小是艾字节和千兆兆字节的顺序排列。数据挖掘提出了自动分析技术池,可以发现隐藏的知识,并预测新的趋势和行为。
分析大量的数据需要计算资源。最近看许多像GPGPU、胞、多核、FPGA
等,均设计了自己独特的优势的高性
能架构的出现。同质范式计算的所有节点都具有相同的架构,正逐步转型为异构计算,每个任务被分配到最适合其属性的架构。由于数据挖掘内核的特征在密集计算,新一代架构可以显著提升其性能。此外,存储和检索大量数据增加了数据挖掘应用的复杂性。
探索隐藏的模式和趋势需要数据挖掘的收集技术。例如Clementine和WEKA工具提供了丰富的收集算法。然而,它们缺乏利用协处理器的好处,并没有可扩展的I/O功能的能力。这限制了它们作为一个高性能的数据分析工具的可用性。本文介绍了在异构计算骨干开发并行应用程序的可扩展的框架。它采用的计算密集型内核库,并探讨了性能优化技术来提高应用程序的吞吐量。在我们的框架中,使用由模块组成的脚步来编写应用程序(例如,常用的内核)。该框架提供了中间件部署这些模块到异构硬件平台的群集上。此外,处理大量的数据需要读取和写入存储设备,如磁盘驱动器,固态硬盘等。I/O显示了在数据挖掘应用的整体性能中,作为一个贫乏的读/写接口可以阻碍从并行体系结构得到任何好处的显著瓶颈。为了缓解这个问题,我们的框架采用了并行I/ O接口。因此,在本文中讨论的框架提供在I/O和计算的并行,同时仍然简单而灵活。
除了上述功能外,拟议框架概述了一个新的旨在为了GPU架构的优化技术。这项技术涉及到从不同的应用程序交织的内核,以提高他们的产量。优化依赖于特定领域的知识,它并不总是知道最好的apripori算法来采集原始数据的有用信息。在这种情况下数据是利用多个算法探索。由于所有的算法对同一数据集工作,他们可以密
切配合运行,以提高整体性能。总体来说,本文的主要贡献如下:
1) 一个用于在异构平台上编
写高性能应用程序的可扩展框架。
2) 常用的内核进行数据探索
的高性能库。
3) 并行I / O功能的接口。 4) 各种优化,以增加应用程
序的吞吐量。
本文的结构如下。第二节介绍了相关工作;第三部分提出了框架的执行概述;第四部分介绍了如何用框架来写应用程序;第五节介绍了讨论结果。我们在文章的第六节总结并指示今后的工作。
II. 相关工作
R是一种广泛使用的编程语言,用于统计和数据处理。鉴于其现今经常用于处理庞大的统计问题,已经开发出了许多平行的R套件。有几个这样显式并性的包如下所述。Rmpi包提供从R到MPI接口。SNOW包运行在RMPI之上(或通过套接字或直接),允许程序员更方便地表达作品的并行处理。Rdsm包提供了在R编程的共享内存视图,但对象不是物理共享。相反,它们被存储在一个服务器上,并且通过网络套接字访问,从而使一个线程状图。ParallelR和PR使R中可用的统计分析程序来部署在高性能架构。
密歇根大学的M0BNI芯片实验室提供了一个R的gputools包,它是由一个极少数的在生物医学研究领域中使用用的统计算法构成。RGPU包是在这个领域的其它工作,它使得线性代数表达式能够并行计算,,以及访问一些CUDA软件开发包提供的功能。magma包提供了一个接口来对GPU和多核架构实现混合矩阵代数。
已经有多个工程中使用并行GPU的集群。DisMaRC,一个基于MapReduce框架的分布式GPGPU,被
提出来。在Lawlor的另一个工作中,作者分析了两个新的通信库,cudaMPI和glMPI,其提供一个MPI-like消息传递接口交换存储分布式内存并行计算机的图形卡上的数据。再就这里有众多的简单程序实例被移植到GPU簇上。在数据挖掘领域GPU已经被广泛使用。在GPU上的K-Means的一些实现可以在[18], [19], [20], [21],[22], [23]中找到。我们的工作主要集中在一个可扩展框架中使用定制的内核库探索低级别和微观层面的性能优化。在这项工作中,我们专注于使用简单的内核开发高性能的应用程序的自底向上的方法。这是在合同上面提到的各种工程,遵循自上而下的方法。此外,我们强调对应用程序的整体吞吐量,而不是扩展独立的应用程序。
III. 实施概述
在本文提出的框架的跨度跨越了不同的领域到利用自己的能力,试图利用数据挖掘应用的知识发现提供一个可扩展的系统。本节提供了在框架中使用的不同组件的详细描述。该框架的前端是广泛使用的R-统计工具。MPI是用于群集节点之间的通信以及并行I/ O使用MPI-IO和ParallelnetCDF接口实现。计算密集型任务由多核心CPU和GPU的多线程处理。图1展示出了系统的各个组件。
图2显示了在我们的框架的数据
流。该框架是在一个主从配置的所有节点上启动。该应用程序是使用R脚本编写的。脚本调用高性能I / O接口
并行读取来自平台无关的netCDF文件中的数据。一旦数据被读取后,脚本调用高性能内核,通过一个高效的RC接口,对数据进行分析。MPI通讯使节点能够彼此交互。这些被传达给R环境的结果可以获得R中丰富的分析和/或可视化工具的优势。编程模型包括:(1)编程基础设施和(2)高性能内核库。前者提供的工具和方法开发可伸缩的应用程序,而后者则提供了常用的数据挖掘内核的集合,以加速应用程序的开发。
A. 编程基础设施
编程的基础设施提供了一个软件平台,其呈现出不同的方法来与可伸缩的实施和高性能的脚本接口为一种易于使用的前端编写各种应用程序的视图管理的各种组件。
1)软件平台:正如上面提到的,我们在我们的框架中四个主要组成部分:前端(或脚本接口),后端(用C/ C + +/ CUDA技术管理),通信(这是MPI)和I/ O。广义的定义,有两种不同的实现方法胶合这些组件有一个可扩展的平台,同时保持足够的灵活性,以整合不同的内核。这些方法在下文中有描述。在第一实施方式中,这被称为C级并行性(C-LP),显示如图3中虚线箭头所示。在此,在MPI通信不是在R环境中可见。每个运行R调用相应的C接口函数和所有的MPI调用的节点都在C级进行处理。其他的实施方式,称为R-级并行性(R-LP),其中,MPI通讯在R环境中是可见的,显示如图3中的实线箭头。在R节点调用C接口的内核和节点间
的通信在R处理。请注意,在C内核是串口,而不是在C-LP MPI功能的内核。 实现是有有优点和缺点的。R-LP具有共享数据的节点之间的一个更高的开销,因为数据需要来对R的环境,然后传送到其他节点之前最后过滤下来到C的环境中,而不是C-LP,其中的数据可以被共享在相同的水平,即在整个C环境下,如图3所示。其次,它使用MPI的范式写好C的应用程序/内核可以没有或很少修改的直接连接到R环境。相反,R-LP需要应用使用R脚本编写。C-LP面临的局限性在于,它要求所有的开发须在RMPI包内,例如,所有的代码编译时需要RMPI代码。究其原因证明了一个事实,即对于整个系统MPI只要初始化一次,这使得包不可能在没有使用Rmi编译下来使用MPI函数调用。R-LP是更灵活的在这方面的高性能库包可以独立开发的RMPI包。这两种方法已循不同组件的框架。在后面的章节中讨论,并行I/ O接口是建立在C-LP中,而内核库和应用程序的开发遵循了R-LP方法。
2)高性能R:我们的框架的程序设计基础结构包括能够在分布式计算环境中被用于一个高性能的脚本语言。这种脚本语言界面是基于广泛使用的统计工具R。然而R语言是不适合繁重的工作,提供一个接口,如众所周知的C/ C + +/ Fortran高级计算机语言。此外,由于所有的加速器/协处理器有一个高级语言接口,一个高效的R-C接口是必要的真正的高性能脚本功能。对于用户而言,R充当一个前端界面。使用C或调用接口函数可以再R环境中执行编译的C函数。在被传递给C代码之前,R对象被复制到C数据结构中,然后当编译代码返回时再复制到一个R列表对象中。相反,调用不会复制参数。由于数据挖掘算法处理海量数据,参数复制会严
重阻碍应用程序的性能。我们的框架使用调用函数提供的C接口给R。此外,我们还没有注意到使用调用接口的C函数的执行的任何退化。除了复制的数据量较低,使用调用功能的其它优点包括:
划定C代码答案范围的能力; 访问向量的属性;
访问其他类型,例如,表达式和原始类型
这些优势是以增加编写接口功能都的复杂性为代价。
B. 高性能内核库
我们的框架编程模型中的第二组分是可以嵌入R脚本的优化的、高性能的内核库。该库提供了用于实现不同体系结构的常用数据挖掘内核的集合。除此之外,还包括节点内和节点间的优化。为了保持开发过程简单而灵活,我们遵循R-LP的方法(参见图3)。从应用解耦高性能内核使我们有机会来开发新的应用。此外,在不同的架构实现的内核使我们能够探索设计空间,以达到最佳的性能。
1)计算密集型内核:我们同时为CPU和GPU实现了内核。CPU内核被用于包括GPU和CPU的异构集群的混合执行。对于CPU,一些内核在R中已经可用了。实施完成后保持在该内核可以在群集环境中轻松扩展。在GPU实现方式中,输入数据首先被传
输到GPU设备存储器中,然后处理输入数据的设备存储器的内核被启动。结果随后传回主机(CPU)内存。
2)GPU内核的优化:上述核工作时,输入的数据完全符合GPU存储器。然而,由于数据挖掘处理大量的数据,通常情况下,整个数据将不适合GPU存储器存储。数据传输和GPU设备将明显导致性能退化。这就要求实现CUDA流。然而,框架采用了多线程的内核(上述),并协调安排他们的主机/设备的数据进行重叠传输。这限制了发展新的核心内核的需要。图4显示了一个例子,输入数据集分成更小的块,分为两个不同的流。每个数据传输流1与流2减少开销的内核执行重叠。
3)沟通+ I / O:在我们的框架中的群集节点之间的通信是通过MPI的Rmpi包的。然而,除了数据共享的计算中,大量的数据需要从存储设备进行访问。一个并行I/O接口,没有任何的性能增益,将严重影响使用多核多线程的内核实现。因此,我们增强参数包R并行读/写能力,及其提供的MPI-IO接口。此外,它是建立在顶部的MPI-IO。我们已经实施了R提供的NetCDF文件格式的读/写功能,和所有节点具有平行性能的NetCDF接口。
IV使用框架的应用开发
相关推荐: