基于GPU的分布式图处理系统的制作方法

文档序号:17988795发布日期:2019-06-22 00:37阅读:193来源:国知局
基于GPU的分布式图处理系统的制作方法

本发明涉及图处理系统领域,特别是涉及一种基于gpu的分布式图处理系统。



背景技术:

今天,大规模的图在生活中越来越常见:更为复杂的道路网络、更为广泛的社交运用、在交叉学科的更多模型的建立,等等。为了这些错综复杂的图中获取必要的信息来进行更好的生产与创造活动,在大规模的图上进行的大规模图分析也越来越重要,并且也在获得越来越广泛的关注。如何面对越来越庞大规模的图、越来越复杂的结构、以及越来越多样化的需求,成为了今天高性能计算研究领域一个值得研究的方向。

由于图结构本身的特殊性,用于图分析的图算法在实际执行之时不只会带来很大的计算与数据访问负担,并且极易产生读写、计算负载分配的不平衡。由于庞大的计算需求,人们倾向于利用高性能的计算框架和/或硬件等资源来满足任务发布者对于低响应时间的需求。然而同时由于极不平衡的数据读写与计算负担的发生,在传统方案无法很好地兼顾两者之间的平衡之时,如何更好地发挥分布式系统方案和/或高性能硬件在图分析处理上各自的优势,同时尽可能避开各自固有的弱点,就成为了在该领域进行开发与优化的研究技术人员的共同挑战。



技术实现要素:

本发明主要解决的技术问题是提供一种基于gpu的分布式图处理系统,是通过在现有的分布式图处理框架下加入对于gpu的整合,并且对合并的系统进行任务调度,数据访问等内部机制的优化,从而实现在图分析应用的数据访问与计算方面都取得较高且稳定的性能表现。

为解决上述技术问题,本发明采用的一个技术方案是:

提供一种基于gpu的分布式图处理系统,其包括:控制模块、主存管理模块、外存管理模块、主机-设备通信接口模块、gpu模块,

所述控制模块:将需要传输的数据和任务打包并发送给gpu,并对图算法模型与图结构进行评估;负责图数据在各个分布式节点之间的划分以及调度各计算任务的分配比例;用于向主存/外存管理模块提出数据访问的请求,并且对获得的数据执行用户指定的处理任务;根据开销模型给出的评估结果,调度和监督gpu之间的协同工作,并且对每次迭代的执行结果给出反馈;

所述主存管理模块:用于读取和更新所述控制模块和所述gpu模块所需的数据,完成graphx框架模块与系统主存模块之间的交互;

所述外存管理模块:用于完成graphx框架模块与各节点上的外部存储设备之间的交互;

所述主机-设备通信接口模块:用于完成控制模块和gpu模块之间的数据或执行逻辑交互;

所述gpu模块:用于生成和判断图算法中每次迭代时产生的更新需求信息和在spark中传递的信息。

在本发明一个较佳实施例中,采用pergel式的分布式图处理模型来进行图算法的迭代计算。

在本发明一个较佳实施例中,graphx框架模块架构于spark系统模块上。

在本发明一个较佳实施例中,所述主机-设备通信接口模块与所述gpu模块之间设置有用于语言转换的jni接口,所述jni接口将控制单元模块发送来的图数据与任务转换成gpu模块适用的图数据与任务。

在本发明一个较佳实施例中,所述基于gpu的分布式图处理系统的控制步骤包括:

1)接收用户提交的图分析任务请求;

2)控制模块依据用户提交的任务请求内容,结合图的数据规模、图的结构来对图数据与任务进行面向gpu模块的划分;

2.1)控制模块根据计算量阈值在图中选出若干个核心顶点,并组成用于代价估计的若干个核心顶点集合;

2.2)控制模块对各个核心顶点集合及其核心顶点周边的顶点组成的子图区域进行代价估计,其计算公式如下:

其中,ci为第i种类型的基础计算,aj为第j种类型的数据访问,mk为第k种类型的系统通信,count函数得到ci的数量、size函数分别得到aj和mk的数据量的累积量、t()函数计算在当前系统环境下ci、aj、mk在单位量的数据上进行一次操作所需要的时间;

2.3)控制模块根据系统环境中各个节点的算力估计的数值以及负载均衡的方式,对完成代价估计的子图提出图划分方式与任务的全局调度方案,并实施图划分与任务分配。

3)主机-设备通信接口模块将控制模块给出的数据划分方案和任务的全局调度方案交由下层gpu模块;

4)主机-设备通信接口模块确定同步界限,gpu模块计算当前迭代中的图中顶点状态的更新与用于下一步迭代的更新请求,将上述信息打包成在分布式系统框架中对应的rdd形式,并提交给控制模块以进行进一步的数据更新操作,其中,所述主机-设备通信接口模块确定同步界限的具体步骤包括:在每个节点执行完成当前迭代中其所负责的分区的内部计算后,各个节点将优先检查内部计算有没有对外部分区的图顶点产生数据更新请求,若所有的节点均未报告该类请求的存在,则认为当前迭代无需发生全局数据同步以维持数据一致性,此时各个计算节点间的数据同步将不会发生,各个节点将会直接进入下一步迭代过程中;

5)控制模块确认任务是否全部执行完毕,如果否,则依据上一步骤的返回值更新当前的分析任务执行状态,给出下一步执行的调度方案,并回到步骤3),否则结束这个执行过程。

在本发明一个较佳实施例中,在步骤5)中,所述依据上一步骤的返回值更新当前的分析任务执行状态的具体步骤包括:对于即将进行数据更新的顶点,先检查其是否密集地聚集于一个或多个分区之中,如果得到了肯定的返回值,系统则判断当前的数据更新是不均衡的,并且将会对步骤2)中得到的各个核心顶点集合基于开销表达式对更新过程产生的数据访问量与通信量进行重新评估,而后基于评估结果重新组织划分方式,使得均衡每个分区中所产生的更新任务数量。

在本发明一个较佳实施例中,在步骤2.1)中,控制模块根据图中顶点的邻近子图的数据规模与结构得到计算量阈值,其中,图的数据规模包括顶点数和边数,图的结构包括各个顶点的入边数量、出边数量、多阶邻居数和图的半径,控制模块根据计算量阈值选出满足这些计算量阈值的核心顶点;控制模块再以负载均衡的方式将选出来的核心顶点组成若干个核心顶点集合,以用于下一步的子图代价估计。

在本发明一个较佳实施例中,在步骤2.3)中,控制模块根据系统中的硬件条件获取每个节点的算力,所述硬件条件包括各个节点的cpu核心数、gpu核心数、各自的时钟频率、内存大小、节点间通信时延。

在本发明一个较佳实施例中,在步骤2.3)中,控制模块根据gpu硬件信息和图的结构特征选择划分方案,使得控制模块将具有相邻关系的数据与任务划分到同一个分区中,其中,图划分方式包括完全随机划分、一维均匀划分、一维区间划分、二维网格划分。

在本发明一个较佳实施例中,在步骤2.3)中,控制模块根据代价估计的结果对数据与任务进行均衡分配。

本发明的有益效果是:结合了gpu在计算方面的高性能与分布式系统在数据访问、控制调度的优势,并且该整合工作对于在其他问题的分析解决上充分结合分布式系统与高性能硬件各自的优点,大大提高了图处理的执行精度和效率。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图,其中:

图1是本发明的基于gpu的分布式图处理系统一较佳实施例的框架结构示意图;

图2是本发明的基于gpu的分布式图处理系统一较佳实施例的第一流程结构示意图;

图3是本发明的基于gpu的分布式图处理系统一较佳实施例的第二流程结构示意图。

具体实施方式

下面将对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

请参阅图1-3,本发明实施例包括:

一种基于gpu的分布式图处理系统,是结合了gpu在计算方面的高性能与分布式系统在数据访问、控制调度的优势,对大规模图分析处理任务进行性能优化的方案。

在已有的分布式图处理框架的基础上,针对图算法的性质与gpu的特点,为利用gpu在图分析上的性能优势,对分布式框架进行了部分重开发以使其适应于gpu处理的特点与图算法的性质。另外,在gpu的图分析高性能处理部分,也针对分布式系统所具有的特点,对现有的纯粹gpu图分析系统方案进行了适应性整合。该系统在大规模图分析任务上将兼备两方解决方案的优点,并且该整合工作对于在其他问题的分析解决上充分结合分布式系统与高性能硬件各自的优点来实现更优方案的实现也具有一定的指导意义。

一种基于gpu的分布式图处理系统,其主要包括以下模块:

基于graphx的分布式处理模型:在本系统中,图数据将以graphx中的形式:类vertexrdd、edgerdd与triplets的形式而存在。更进一步地,在进行图算法的执行时,本系统将基于graphx中采用的类pergel式的分布式图处理模型来进行图算法的迭代计算。在各种计算、迭代、值更新与消息传递过程之中,程序执行的正确性和运算结果的一致性将由graphx所基于的分布式框架spark来保证。

控制模块:该模块负责系统中的调度任务处理。需要调度的内容主要包括执行时提交给gpu的数据与任务的打包、基于特定的图算法模型与图结构进行评估,在此基础上进行图数据在各个分布式节点之间的划分、以及合理调度各计算任务的分配比例,使得系统达到平衡高效的状态。另外,如同graphx原型一样,控制单元也承担着向主存/外存管理模块提出数据访问的请求,并且对获得的数据执行用户指定的处理的任务。根据后述的花费模型所给出的评估结果,控制单元也需要调度gpu之间的协同工作,对其执行过程进行监督,并且对每次迭代的执行结果及时给出反馈,以使得在接下来的迭代之中系统仍然能保持相对高的性能。

主存管理模块:该模块主要负责基于graphx的系统模型与节点内部内存为主的内部存储之间的数据交互。对于该模块的设计基于原spark-graphx的内存管理模块所具有的rdd数据一致性维护机制,并在此之上,基于开销模型,加入批次处理更新机制来进行内部数据的更新操作。通过合理地设计上文所述的控制模块,主存管理模块在选择性读取后文所述的gpu模块所需的数据的过程将得到优化。基本的实现方式仍然基于spark的rdd类与机制,以期充分利用spark在分布式系统框架下多节点内存管理/访问的优越性能。

外存管理模块:该模块主要负责系统模型与各节点上的外部存储设备(硬盘)之间的交互。基于成熟的分布式系统spark的该模块的实现保证了在不同节点上读取大量数据时的性能。

主机-设备通信接口模块:负责实现cpu-gpu之间的数据与执行逻辑交互。由于系统设计模型的不同,位于主机上的基于spark的分布式框架中数据的表示形式与在gpu设备端中进行处理时数据的表现形式有极大的不同。同时,由于spark分布式框架所基于的scala语言体系和gpu处理模块所基于的c/c++语言体系不能直接互通,两部分的数据流与控制流的交互也不能简单实现。为了解决上述两个问题,一个中间的通信模块需要被引入该系统。它应该具备以下数种功能:

(1)能够负责将待处理的主机端分布式框架带来的数据重新打包成gpu设备能够进行数据处理的模式,并提交给gpu进行处理;

(2)能够将处理完毕的gpu设备端结果数据重新打包成分布式框架的数据模式,并返回给主机的分布式框架来进行数据更新;

(3)能够完成在这些数据传递过程之间存在的语言翻译问题(为了适应各自的模块,数据需要基于scala与c++形式分别被表示);

(4)在前述3点的基础上,使得该过程尽可能迅速高效。

在本系统中,该接口将通过java本地接口(jni)来实现语言之间的互相转换(由于scala可以简单地被表示为java形式,无需别的转换过程)。在此基础上,此接口将控制单元模块发送来的打包完成的图数据与任务通过jni转换成c++中的形式,并且基于c++形式在c++模块中完成gpu形式的数据与任务打包,然后提交到gpu模块进行计算。对于gpu模块执行完的结果,c++模块则负责收集,并且再经由jni将其还原成spark-graphx中基于rdd的图的表示形式,然后交由上述修改过的graphx的控制单元进行结果的检验与更新。

gpu模块:负责实际计算图算法中每次迭代时产生的更新需求和在spark中传递的信息。基于迭代的定义,在每次图算法的迭代中产生的所有任务与更新需求都不会产生数据访问冲突,这给以一次迭代中的任务为单位来进行并行计算的思路提供了合理性的保障。从spark中传来的任务将以lambda表达式的形式经由上文所述的主机-设备通信接口实现传递,保证了gpu与graphx层面上看到的迭代子程序的一致性。

一种基于gpu的分布式图处理系统,其主要包括以下步骤:

step0:系统收到用户提交的图分析任务请求。

step1:控制单元首先将依据用户提交的任务请求内容,对图的数据结构进行简要分析。对图的数据结构的主要分析包括图的数据规模(顶点数、边数)、图的结构(各个顶点的入边、出边数量),并在这个基础上对图的“核心”(即一系列无加权距离较短的、并且拥有较高的入度、出度的顶点的集合)进行基本的估计和划分。

1)接收用户提交的图分析任务请求;

2)控制模块依据用户提交的任务请求内容,结合图的数据规模、图的结构来对图数据与任务进行面向gpu模块的划分;

具体来说,该处理过程由以下三个步骤组成:

2.1)控制模块根据计算量阈值在图中选出若干个核心顶点,并组成用于代价估计的若干个核心顶点集合;

核心顶点是对应于计算量大于给定阈值的图顶点,其中计算量的评估主要基于核心顶点邻近子图的数据规模与结构。图的数据规模包括顶点数和边数,图的结构包括各个顶点的入边数量和出边数量、以及多阶邻居数、图的半径(所有顶点到图中其余顶点的距离的最大值的最小值,即和图的半径,其中dij为顶点i到顶点j的距离)等。控制单元根据以上信息,确定一系列阈值,并根据这一系列的值生成一个计算量阈值的总的参考值,并且选出满足这些阈值的核心顶点。控制单元再以负载均衡的方式将它们组成若干个核心顶点集合,以用于下一步的子图代价估计。

2.2)控制模块从各个核心顶点集合出发,对各个核心顶点集合及其周边顶点组成的子图区域进行代价估计。

在本步骤中,用于代价估计的表达式如下所示:

其中,其中,ci为第i种类型的基础计算,aj为第j种类型的数据访问,mk为第k种类型的系统通信,count函数得到ci的数量、size函数分别得到aj和mk的数据量的累积量、t()函数计算在当前系统环境下ci、aj、mk在单位量的数据上进行一次操作所需要的时间,count指的是计数、size指的是对于涉及到的数据量的累积、t函数给定了在当前系统环境下这一种对应的操作进行一次(在单位量的数据上)所需要的时间(在具体程序运行前,该系统会自动依据一些内置的测试样例给出对应的t函数的值)。

2.3)对完成代价估计的子图,控制单元给出数据划分方案与任务的全局调度方案,并实际进行图划分与任务分配。

数据划分与任务全局调度方案均将以负载均衡的方式,结合系统环境中各个节点的算力估计而进行。控制模块进行算力估计时,根据系统中的硬件条件(各个节点的cpu核心数、gpu核心数、各自的时钟频率、内存大小、节点间通信时延等)进行决定。参照的标准均统一成时间(例如:对于特定的计算任务所需要的运行时间。特定的计算任务在t函数估计时已经提到)以方便进行量化估计。在选择划分方案时,控制单元将结合gpu硬件的特点与2.1中分析得到的图的结构特征,利用常见的图划分方式(如完全随机划分、一维均匀划分、一维区间划分、二维网格划分等),并以2.2的代价估计来对数据与任务进行均衡分配。

以上任务与数据集的划分操作均立足于gpu的硬件构造。控制单元通过更好地将具有相邻关系的数据与任务划分到同一个分区中,从而使得可能会产生的gpu的数据交换量大幅下降,并且增加任务的并行度,从而提高任务的执行效率。

在此之后,系统利用图划分策略和基于计算时间因子的开销表达式,通过得到均匀化的开销表达式结果,得到数据划分方案和任务的全局调度方案,并完成数据的预划分。图的基本划分策略取自graphx中的数种基本方法(包括完全随机划分、一维均匀划分、一维区间划分、二维网格划分等)。在此基础上,系统根据前述的简要分析的结果,决定此处需要采用哪一种基本图划分方法、抑或是数种划分方法的组合。

决定了划分方法之后,为了使得划分结果更为均匀,对于前文所估计出的每个“核心”,系统将由开销表达式进行性能估计。概要的开销表达式形式如下:

总开销=σi(计σ算i次数*计算i的时间修正因子)+σj(数据访问类型j的时间修正因子*数据访问类型j数据访问量)+k(通信种类k的时间修正因子*通信种类k产生的通信量)。

其中一些基础操作和数据访问操作的例子在下文的具体案例给出。各类时间修正因子将从对系统的预先测试得来,而对于本次计算中各类基础操作的种类和数量的估计将从用户输入的算法得来。

在对每个“核心”的开销完成了基本估计后,控制单元结合对于系统中各个节点计算能力的估计,基于均匀的准则将各个核心按照前述阶段决定的划分方法进行图数据划分(将一或多个核心放置到对应的分区中),并且依据划分区域来决定具体哪些节点进行那些划分区域内的计算任务,从而完成调度方案的设计。

step2:主机-设备通讯接口将控制单元给出的当前步的数据·任务的预划分方案交由下层gpu计算层。

在此步骤中,由于开发所基于的分布式系统框架并没有与gpu计算层沟通的接口,因而该部分最重要的挑战就是如何设计出一套高效的通信接口,其能够高效地在分布式系统结构下的图数据与gpu框架下的图数据之间进行数据类型转换、数据交互。我们在此系统中设计了一套在分布式系统框架的scala语言架构与gpu框架下的c++语言架构之间进行转换的主机-设备通讯接口,其不仅实现了在分布式框架与gpu框架的不同框架之间,在scala语言与c++语言的不同语言环境之间的数据交换,并且通过一系列的优化方案,保证了数据交互过程的高效性以及生成的数据被对应的框架利用时能发挥出的高性能。

step3:主机-设备通讯接口等待gpu计算层的结果,当前迭代中交由gpu模块所计算出来的图中顶点状态的更新与用于下一步迭代的更新请求(表现为分布式系统内的数据通信包)将被各自打包成其在分布式系统框架中对应的rdd形式,并提交给控制单元以进行进一步的数据更新操作。

在此步骤中,由于gpu计算层和分布式系统层位于不同的硬件体系上,为了保持系统执行的一致性,必须进行数据的同步。而gpu计算层在何时进行何种程度的数据同步,将影响到与上层分布式系统进行交互的发生频度,进而影响到系统执行的性能;同时,通信的频度也会影响到数据的一致性(当系统出错时需要回滚的执行过程的量),因而如何依据分析过程的执行状况来决定合适的同步界限也是一项重要的考量。本系统中,在每个计算节点执行完成当前迭代中其所负责的分区的内部计算(计算任务由用户指定)后,在提交给分布式系统进行全局数据同步之前,各个计算节点将优先检查内部计算有没有产生对于区域外部的图顶点的数据更新请求。若所有的计算节点均未报告该类请求的存在,系统即认为当前迭代无需发生全局数据同步以维持数据一致性,此时各个计算节点间的数据同步将不会发生,各个节点将会直接进入下一步迭代过程中。

step4:系统控制单元确认任务是否全部执行完毕,如果否,则依据上一步骤的返回值更新当前的分析任务执行状态,给出下一步执行的调度方案,并回到step2,否则结束这个执行过程。

在此步骤中,由于图、以及图算法的特殊性,原有的分布式系统中采用的数据更新方案无法很好地适应频繁地、非均衡地进行更新的图分析应用场景。基于此,在系统中设计了一套批次更新方案,对于即将进行数据更新的顶点,系统先检查其是否密集地聚集于某些分区之中。如果得到了肯定的返回值,系统则认为当前的数据更新将是不均衡的,并且将会对step1中得到的各个核心基于上述开销表达式对更新过程产生的数据访问量与通信量进行重新评估,而后基于评估结果重新组织划分方式,以期每个分区中所产生的更新任务数量尽可能均衡。这样做既减少了非均衡的数据计算与更新带来的系统性能损失,同时也仍然利用了分布式系统在数据一致性维护上的长处,在保证程序执行准确性的前提下,在图分析这个应用场景下合理地减少了运行开销,从而提升了整体系统的性能。

(1)对于用户输入的分析任务要求,系统利用开销模型中的评估方案将分析任务分解成若干个元操作的组合,该步骤的分析将被用于下一步骤中的分析中。系统中所记录的元操作可以大致分为以下几个类别。下表中给出了元操作的基本分类情况,系统将针对这些子操作分别在特定的运行环境中给出一套估计参数,并且对完成分解后的用户任务运用此套估计参数估计出任务执行的运行时状况,从而为接下来的算法调度提供依据。

(2)系统根据前述方法估计出来的用户任务的全局开销,结合环境中各个节点的计算能力与数据存储能力等的估计,设计出一套均衡的调度方案,以期在各个节点上运行的任务负载与其自身能力相匹配,从而达到全局的开销最小化。

(3)划分好的任务被提交到下层gpu计算层进行计算。

(4)计算完成的任务将按照批次被收集,并且在收集完成后由分布式框架进行全局的合并更新,保证数据的一次性的同时提供了更为均衡的更新负载。该过程的设计思路已于上文的技术方案章节中进行阐述。

通过以上分析可见,本发明在处理大规模的图分析任务时,较好地吸收结合了分布式图处理系统与gpu图处理系统各自的优势,并且将其有机地结合在一起,克服了各自的缺点,使其具有了较两者都更为优秀的性能表现。因此,此发明适合于进行大规模图分析任务的处理,其具有实质性的技术特点与显著的技术进步,应用前景非常广阔。

本发明基于gpu的分布式图处理系统的有益效果是:

1.在系统结构方面提出了一套能够充分发挥高性能硬件性能的分布式图处理框架,基本吸收结合了两者的长处,实现了性能与易用性的结合。其中又可以细分为以下几点:

采用了一套全新的分布式系统的批次处理机制,使得分布式系统能和gpu编程模型更好地结合在一起,同时也在一定程度上改善了在图应用中由于频繁且不均衡的计算与更新导致的性能损失;

对系统中产生的多种形式的通信用量化的方式统一了起来,并且基于图处理的特点对分布式系统中、以及cpu-gpu中的通信机制进行了适应性修正;

采用了一套图划分算法选择机制,使用户在设计分布式图处理应用时从繁琐的细节中摆脱出来,并且由一个量化标准来保证较好的执行性能。

2.在开销模型方面:针对系统各方面出现的负载均衡问题,利用一套基于统一标准量化的花费模型,从而使得系统设计更具一体性,达到了均衡负载的作用。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1