一种用于分布式计算的作业分解处理方法与流程

文档序号:30298689发布日期:2022-06-04 20:38阅读:90来源:国知局
一种用于分布式计算的作业分解处理方法与流程

1.本发明涉及智能计算领域的作业分解方法,尤其涉及一种用于分布式计算的作业分解处理方法。


背景技术:

2.随着计算技术的发展,有些应用需要非常巨大的计算能力才能完成。如果采用集中式计算,需要耗费相当长的时间来完成,而分布式计算是一种计算方法,和集中式计算是相对的,分布式计算是将该应用分解成许多小的部分,然后分配给多个计算资源进行处理,这样可以节约整体计算时间,大大提高计算效率。
3.hadoop 是由apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。其中主要包括分布式文件系统hdfs和mapreduce算法。mapreduce算法提供了一种并行程序设计模型与方法,它借助于函数式程序设计语言lisp的设计思想,提供了一种并行程序设计方法,用map和reduce两个函数编程实现基本的并行计算任务,提供了抽象的操作和并行编程接口,用户需分别编写map和reduce的函数,使得系统能够管理map或reduce并行任务的执行以及任务之间的协调,并且能够处理上述某个任务失败的情况,同时保障对硬件故障的容错性。
4.spark是专为大规模数据处理而设计的快速通用的计算引擎,是uc berkeley amp lab所开源的类hadoop mapreduce的通用并行框架,spark相比于mapreduce所具有的优点是,其中间的输出结果可保存在内存中,从而不需要再读写hdfs,因此spark能更好地适用于数据挖掘与机器学习等需要迭代的mapreduce的算法,且能够提供交互式查询,还可以优化迭代工作的负载。spark是在scala语言中实现的,它将scala用作其应用程序框架,与hadoop不同,spark和scala能够紧密集成,其中scala可以像操作本地集合对象一样轻松地操作分布式数据集,spark可以理解为,为了支持分布式数据集上的迭代作业,是对hadoop mapreduce的补充。
5.ray 是uc berkeley riselab在2017年提出的机器学习分布式框架,虽然ray与tensorflow一样,也是面向机器学习的场景框架,但是ray被大家使用作为分布式计算框架,因为ray的核心部分提供了分布式计算的能力。与spark相比,ray的分布式计算方式比较小巧,它看上去与原生的python函数并无二致,只需要给函数加上@ray.remote 的注解,该函数就可以在除本机以外的其他ray集群中的节点中执行。所以,ray是在几乎不提高用户代码复杂性的情况下,实现了分布式计算的能力。除了轻量级api的优势外,ray的主要特性包括:高吞吐但低延迟的调度能力;支持任务的动态构建。
6.mapreduce、spark和ray作为分布式计算框架,被广泛使用,但是它们有个共同的使用前提,需要在程序设计之初就将分布式计算框架考虑进来,用相应的编程api语言进行编写程序。如果对于已经编写完成的程序,要修改成分布式程序相当困难,这是因为对于有分布式执行需求的作业而言,其程序体往往很大,逻辑细节很多,设计思想复杂。而在互联网行业人员流动比较大,因此往往是其他的程序员改写和理解这个需要改写成分布式计算
方式的程序。


技术实现要素:

7.本发明的目的是在于针对现有技术的不足,提供一种用于分布式计算的作业分解处理方法。
8.本发明的目的是通过以下技术方案来实现的:一种用于分布式计算的作业分解处理方法,包括以下步骤:采用程序静态分析对待运行的源程序进行分析,确定所述待运行程序所包含的函数调用图,所述函数调用图用于表征所述源程序所包含的函数间的调用关系;根据所述调用关系,确定所述源程序所包含的函数中函数特征信息,所述函数特征信息用于表征各函数运行时的函数计算相关信息;根据所述函数特征信息、调用关系和源程序待运行的平台的可用资源信息,对所述源程序进行分解,确定所述源程序在所述平台上运行时,所述源程序所包含的各函数间的运行关系和各函数在所述平台上的执行建议,所述运行关系包括所述运行关系包括串行运行和/或并行运行,所述执行建议用于指示所述平台上执行各函数的硬件资源;根据所述函数调用关系和执行建议,在所述源程序中插入基于分布式计算框架的代码的修饰符,使得所述源程序能够在所述平台上进行分布式计算;根据所述执行建议,在所述平台上运行所述插入所述修饰符后的源程序。
9.进一步地,所述采用程序静态分析对待运行的源程序进行分析,确定所述源程序所包含的函数调用图,包括:在不运行所述源程序的代码的条件下,对所述源程序的代码进行扫描,确定所述源程序所包含的函数调用图。
10.进一步地,所述函数调用图为有向无环图;所述方法还包括:采用邻接表保存所述函数调用图。
11.进一步地,所述对源程序的代码进行扫描,确定所述源程序所包含的函数调用图,包括:对所述源程序进行代码分割与收集:将程序分割成多个包,对包内依赖关系进行分析与管控,创建节点调用关系图;对所述源程序中每个函数抽取函数信息:根据函数声明和调用方式,构造不同的信息提取结构,来分别提取与参数和参数类型有关的信息,得到函数间关系表;根据所述节点调用关系图和函数间关系表,生成函数调用图。
12.进一步地,根据所述调用关系,确定所述源程序所包含的函数中的特征信息,包括:根据所述调用关系,采用程序动态分析确定所述源程序所包含的函数中函数特征信息。
13.进一步地,根据所述调用关系,采用程序动态分析确定所述源程序所包含的函数中函数特征信息,包括:在所述源程序运行前,对程序中每个函数进行插桩操作;在所述源程序运行时,进入插桩的记录函数,以记录各函数执行时特征数据,所述特征数据包括如下函数计算相关信息中的至少一种:gpu、cpu、内存、i/o、运行时间。
14.进一步地,所述根据所述调用关系,确定所述源程序所包含的函数中函数特征信息,包括:根据所述调用关系,采用预先训练的程序智能分解算法,确定所述源程序所包含的函数中函数特征信息;其中,所述程序智能分解算法的输入为所述调用关系,输出为所述源程序所包含的函数中函数特征信息。
15.进一步地,所述程序智能分解算法的训练过程包括:对不同程序中的各函数,在数据量一致的情况下,分别在单一资源上重复执行至少两次,获得各函数对应的函数特征信息平均值;将不同所述函数的函数特征信息平均值进行分组,基于分组结果,采用机器学习和/或只是图谱模型进行训练,获得程序智能分解算法模型。
16.其训练数据为函数在单一资源上重复执行得到的平均值,生成的函数特征表。其训练结果为对函数特征表进行分组,形成基于机器学习、知识图谱模型的程序智能分解算法。
17.进一步地,所述程序智能分解算法包括以下方式中的至少一种:相似度度量建模、回归相似性学习、分类相似性学习、排序相似性学习。
18.进一步地,所述平台的硬件资源包括服务器、虚拟机、网关、端计算设备中的至少一种;所述执行建议通过执行建议表表征。
19.进一步地,所述基于分布式计算框架的代码包括以下中的一种:mapreduce、ray、spark。
20.本发明的有益效果如下:本发明所述作业分解方法,是通过对非分布式的源程序进行处理,源程序的理解和分析,并综合计算平台的可用资源信息,将源程序中能够分布式执行的部分识别出来,再通过对源程序输入进行低侵入的方式,插入类似mapreduce、spark或ray的分布式执行框架。通过使用本技术文件中所述作业分解方法,用户不需要自己对源程序做任何修改,即可实现源程序的分布式执行,保障了对源程序分布式修改方案的可重复性,避免了人员操作的主观性,同时节省了人员操作的成本,具有灵活性、普适性、便利性等优点。
附图说明
21.图1是本发明方法的流程图;图2是本发明实施例1的流程示意图;图3是本发明实施例2的流程示意图;图4是本发明实施例3的流程示意图;图5是本发明实施例4的流程示意图;图6是本发明实施例5的流程示意图;图7是实施例7的流程示意图。
具体实施方式
22.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的方法类的例子。
23.在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。以下结合说明书附图对本发明的优选实施例进行
说明,应当理解,此处所描述的两个优选实施例仅用于说明和解释本发明,并不用于限定本发明,并且在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
24.如图1所示,本发明提供一种用于分布式计算的作业分解处理方法,包括以下步骤:(1)采用程序静态分析对待运行的源程序进行分析,确定所述待运行程序所包含的函数调用图,所述函数调用图用于表征所述源程序所包含的函数间的调用关系。
25.具体地,所述采用程序静态分析对待运行的源程序进行分析,确定所述源程序所包含的函数调用图,包括:在不运行所述源程序的代码的条件下,对所述源程序的代码进行扫描,确定所述源程序所包含的函数调用图。示例性地,所述函数调用图为有向无环图。
26.所述方法还包括:采用邻接表保存所述函数调用图。
27.进一步地,所述对源程序的代码进行扫描,确定所述源程序所包含的函数调用图,包括:对所述源程序进行代码分割与收集:将程序分割成多个包,对包内依赖关系进行分析与管控,创建节点调用关系图;对所述源程序中每个函数抽取函数信息:根据函数声明和调用方式,构造不同的信息提取结构,来分别提取与参数和参数类型有关的信息,得到函数间关系表;根据所述节点调用关系图和函数间关系表,生成函数调用图。
28.(2)根据所述函数间的调用关系,确定所述源程序所包含的函数中函数特征信息,所述函数特征信息用于表征各函数运行时的函数计算相关信息。
29.具体地,根据所述调用关系,确定所述源程序所包含的函数中的特征信息,包括:根据所述调用关系,采用程序动态分析确定所述源程序所包含的函数中函数特征信息。
30.具体地,根据所述调用关系,采用程序动态分析确定所述源程序所包含的函数中函数特征信息,包括:在所述源程序运行前,对程序中每个函数进行插桩操作;在所述源程序运行时,进入插桩的记录函数,以记录各函数执行时特征数据,所述特征数据包括如下函数计算相关信息中的至少一种:gpu、cpu、内存、i/o、运行时间。
31.具体地,所述根据所述调用关系,确定所述源程序所包含的函数中函数特征信息,包括:根据所述调用关系,采用预先训练的程序智能分解算法,确定所述源程序所包含的函数中函数特征信息;其中,所述程序智能分解算法的输入为所述调用关系,输出为所述源程序所包含的函数中函数特征信息。
32.进一步地,所述程序智能分解算法的训练过程包括:对不同程序中的各函数,在数据量一致的情况下,分别在单一资源上重复执行至少两次,获得各函数对应的函数特征信息平均值;将不同所述函数的函数特征信息平均值进行分组,基于分组结果,采用机器学习和/或只是图谱模型进行训练,获得程序智能分解算法模型;其训练数据为函数在单一资源上重复执行得到的平均值,生成的函数特征表;其训练结果为对函数特征表进行分组,形成基于机器学习、知识图谱模型的程序智能分解算
法。
33.示例性地,所述程序智能分解算法包括以下方式中的至少一种:相似度度量建模、回归相似性学习、分类相似性学习、排序相似性学习。
34.(3)根据所述函数特征信息、调用关系和源程序待运行的平台的可用资源信息,对所述源程序进行分解,确定所述源程序在所述平台上运行时,所述源程序所包含的各函数间的运行关系和各函数在所述平台上的执行建议,所述运行关系包括所述运行关系包括串行运行和/或并行运行,所述执行建议用于指示所述平台上执行各函数的硬件资源。
35.示例性地,所述平台的硬件资源包括服务器、虚拟机、网关、端计算设备中的至少一种;所述执行建议通过执行建议表表征。(4)根据所述函数调用关系和执行建议,在所述源程序中插入基于分布式计算框架的代码的修饰符,使得所述源程序能够在所述平台上进行分布式计算。
36.示例性地,所述基于分布式计算框架的代码包括以下中的一种:mapreduce、ray、spark。
37.(5)根据所述执行建议,在所述平台上运行所述插入所述修饰符后的源程序。
38.本发明所述的作业分解方法,对非分布式的源程序进行处理,通过对源程序的理解和分析,并综合计算平台的可用资源信息,将源程序中能够分布式执行的部分识别出来,再通过对源程序输入进行低侵入的方式,插入类似mapreduce、spark或ray的分布式执行框架。与现有方法相比,本方法可以实现用户不需要自己对源程序做任何修改,即可实现源程序的分布式执行,保障了对源程序分布式修改方案的可重复性。
39.针对此方法,本发明提出三个实施例,在输入同一段源代码的前提下,使用三个实施例都可以完整实现分布式计算的作业分解处理。
40.实施例1如图2所示,对待运行的源程序,通过程序静态分析和程序动态分析方法,再结合运行源程序的平台可用资源信息,确定分布式执行策略。
41.采用程序静态分析对待运行的源程序进行分析,确定所述待运行程序所包含的函数调用图,所述函数调用图用于表征所述源程序所包含的函数间的调用关系;根据所述调用关系,确定所述源程序所包含的函数中函数特征信息,所述函数特征信息用于表征各函数运行时的函数计算相关信息;根据所述函数特征信息、调用关系和源程序待运行的平台的可用资源信息,对所述源程序进行分解,确定所述源程序在所述平台上运行时,所述源程序所包含的各函数间的运行关系和各函数在所述平台上的执行建议,所述运行关系包括所述运行关系包括串行运行和/或并行运行,所述执行建议用于指示所述平台上执行各函数的硬件资源。
42.根据所述函数调用关系和执行建议,在所述源程序中插入基于分布式计算框架的代码的修饰符,使得所述源程序能够在所述平台上进行分布式计算。
43.根据所述执行建议,在所述平台上运行所述插入所述修饰符后的源程序。
44.实施例2如图3所示,对待运行的源程序,通过程序静态分析和程序智能分解算法,再结合运行源程序的平台可用资源信息,确定分布式执行策略。
45.与实施例1的相同点是,采用程序静态分析对待运行源程序进行分析,确定源程序
所包含的函数调用图。
46.与实施例1不同点是,实施例2采用程序智能分解算法确定源程序所包含的函数中函数特征信息,所述函数特征信息用于表征各函数运行时的函数计算相关信息。
47.程序智能分解算法需要预先训练,源程序输入后,根据预先训练的算法模型,确定所述源程序所包含的函数中函数特征信息。
48.程序智能分解算法预先训练的方法为,对不同程序中的各函数,在数据量一致的情况下,分别在单一资源上重复执行至少两次,获得各函数对应的运行时函数特征信息平均值。
49.将不同所述函数的函数特征信息平均值进行分组,基于分组结果,采用机器学习和/或只是图谱模型进行训练,获得程序智能分解算法模型。
50.实施例3如图4所示,对待运行的源程序,进行程序静态分析后,通过程序动态分析和程序智能分解算法,再结合运行源程序的平台可用资源信息,确定分布式执行策略。
51.与实施例1的相同点是,采用程序静态分析对待运行源程序进行分析,确定源程序所包含的函数调用图。
52.与实施例1不同点是,实施例3采用程序智能分解算法和程序动态分析方法结合,确定源程序所包含的函数中函数特征信息,所述函数特征信息用于表征各函数运行时的函数计算相关信息。
53.程序智能分解算法和程序动态分析方法的输出都是对源程序中函数的函数特征信息,两份函数特征信息都会保留。另外会判断源程序待运行的平台的可用资源信息, 如果平台可用资源紧张,则对比两份函数特征信息后,取其中资源消耗量较小的方案,提供函数执行建议,如果平台可用资源充足,则对比两份函数特征信息后,取其中资源消耗量大的方案,提供函数执行建议。
54.对每个函数的执行建议汇总后,对源程序进行分解,确定源程序在平台上运行时,所述源程序所包含的各函数间的运行关系和各函数在所述平台上的执行建议。
55.实施例4如图5所示,对待运行的源程序采用程序静态分析方法,生成函数调用图,其具体实现方法为:对源程序的代码进行扫描,并对源程序进行代码分割与收集,将程序分割成多个包,并对包内依赖关系进行分析与管控,该过程结果为创建节点调用关系图;对源程序中每个函数抽取函数信息,抽取函数信息的方法,可以为根据函数声明和调用方式,构造不同的信息提取结构,来分别提取与参数和参数类型有关的信息,该过程结果为创建函数间关系表。
56.根据节点调用关系图和函数间关系表,生成函数调用图。
57.实施例5如图6所示,对待运行的源程序采用程序动态分析方法,生成函数特征信息,其具体实现方法为:首先使用插桩技术处理待运行的源程序,插桩是一种在程序中插入一些探针的操作技术,在保证程序原有逻辑完整性的基础上,通过探针的执行来获取函数之间的调用关
系和每个函数的特征信息。
58.特别地,为了防止由于探测点过多造成插桩后的代码运行受阻等问题,为减小开销和保证插桩的效率,可以将插桩的探针放置在每个函数第一条执行语句之前,当程序运行到探测点时,会进入到插桩的记录函数中,既可以记录函数内执行路径,也可以探测函数间调用的顺序。
59.插桩操作完成后,程序开始运行,在运行过程中,就可以根据插桩收集到日志记录,获取函数的执行轨迹,从而获取函数的特征信息。
60.实施例6对待运行的源程序采用程序智能分解算法,采用知识图谱和/或深度学习方法,推理出函数特征信息。深度学习技术擅长在各种数据集上执行各种任务(例如分类、生成等),具有较高的精度和召回率,而可解释性较差。另一方面,知识图谱可解释性和可重用性优于深度学习方法,但精度较差。在实施时,两种方法可以单独使用,也可以结合在一起使用。
61.若采用深度学习的方法,实现程序智能分解算法,其具体实施方案可以采用以下的一种或几种方式:(1)相似度度量建模:相似度度量可以建模为回归问题,也可以建模为分类问题或排序问题。
62.(2)回归相似性学习:给定一对输入以及它们的相似性度量值,在三元组训练数据集上学习一个近似函数。
63.(3)分类相似性学习:为每一对训练数据,关联一个二值标签,标签表示输入的两个对象是否相似。
64.(4)排序相似性学习: 排序相似性学习的目标是学习一个相似性度量函数,使得对于一个新的三元组成立。
65.实施例7采用深度学习或/和知识图谱的方法时,其模型训练的过程是,在数据量一致的情况下,分别在单一资源上重复执行至少两次,获得各函数对应的函数特征信息平均值。
66.函数特征的收集类型,如图7所示,可以包括如下类型,收集函数的名称、输入、输出、功能描述、调用关系,在数据特征方面,可以收集数据调用关系和数据类型,在资源特征方面,可以收集gpu、cpu、ram、i/o等信息。
67.对函数的函数特征信息平均值进行分组后,基于分组结果获得程序智能分解算法模型。
68.实施例8本发明实施例还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例中的一种用于分布式计算的作业分解处理方法。
69.所述计算机可读存储介质可以是前述任一实施例所述的任意具备数据处理能力的设备的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是任意具备数据处理能力的设备,例如所述设备上配备的插接式硬盘、智能存储卡(smart media card,smc)、sd卡、闪存卡(flash card)等。进一步的,所述计算机可读存储介质还可以既包括任意具备数据处理能力的设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述任意具备数据处理能力的设备所需的其他程序和数
据,还可以用于暂时地存储已经输出或者将要输出的数据。
70.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
71.以上实施例仅用于说明本发明的设计思想和特点,其目的在于使本领域内的技术人员能够了解本发明的内容并据以实施,本发明的保护范围不限于上述实施例。所以,凡依据本发明所揭示的原理、设计思路所作的等同变化或修饰,均在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1