掌桥专利:专业的专利平台
掌桥专利
首页

AI模型的代码编译方法、装置、计算机设备及存储介质

文献发布时间:2023-06-19 19:35:22


AI模型的代码编译方法、装置、计算机设备及存储介质

技术领域

本发明实施例涉及计算机软件技术,尤其涉及一种AI模型的代码编译方法、装置、计算机设备及存储介质。

背景技术

随着AI(Artificial Intelligence,人工智能)模型在各个领域的广泛应用,工业界对AI模型的快速部署的需求越来越高,为了实现AI模型的快速部署,可以利用AI编译器自动生成AI模型的代码。

在工程项目中实际应用AI编译器自动生成AI模型的代码时,需要CPU(CentralProcessing Unit,中央处理器)与GPU(Graphics Processing Unit,图形处理器)协同工作,在进行多次迭代后获取性能较优的代码,但由于CPU生成代码耗费时间较长,且在现有技术中,CPU与GPU之间缺乏异步协调机制,因此会导致AI模型的代码编译时间较长,进而可能会影响工程项目的开发进程。

发明内容

本发明提供了一种AI模型的代码编译方法、装置、计算机设备及存储介质,能够提高CPU与GPU的资源利用率,进而提高AI模型的代码编译效率。

根据本发明的一方面,提供了一种AI模型的代码编译方法,包括:

获取与待编译的AI模型匹配的多个待编译的计算子图;

规划与各计算子图对应的最小迭代次数和编译顺序,并根据最小迭代次数和编译顺序,确定最小子图编译总次数和每个子图编译轮次下所需处理的计算子图;

获取与当前子图编译轮次匹配的当前计算子图,并采用服务器中的CPU资源,生成与当前计算子图匹配的多个待测试程序;

根据服务器中的GPU资源的利用率,采用CPU资源分批次生成与各待测试程序匹配的编译代码,并将各编译代码提供给GPU资源执行,以完成当前子图编译轮次下当前计算子图的代码编译过程。

根据本发明的另一方面,提供了一种AI模型的代码编译装置,包括:

待编译计算子图获取模块,用于获取与待编译的AI模型匹配的多个待编译的计算子图;

编译信息规划模块,用于规划与各计算子图对应的最小迭代次数和编译顺序,并根据最小迭代次数和编译顺序,确定最小子图编译总次数和每个子图编译轮次下所需处理的计算子图;

待测试程序生成模块,用于获取与当前子图编译轮次匹配的当前计算子图,并采用服务器中的CPU资源,生成与当前计算子图匹配的多个待测试程序;

编译代码生成模块,用于根据服务器中的GPU资源的利用率,采用CPU资源分批次生成与各待测试程序匹配的编译代码,并将各编译代码提供给GPU资源执行,以完成当前子图编译轮次下当前计算子图的代码编译过程。

根据本发明的另一方面,提供了一种计算机设备,所述计算机设备包括:

至少一个处理器;以及

与所述至少一个处理器通信连接的存储器;其中,

所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明任一实施例所述的AI模型的代码编译方法。

根据本发明的另一方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现本发明任一实施例所述的AI模型的代码编译方法。

本发明实施例的技术方案,通过根据计算子图的最小迭代次数和编译顺序,确定最小子图编译总次数和每个子图编译轮次下所需处理的计算子图,采用服务器中的CPU资源生成与当前计算子图匹配的多个待测试程序,根据服务器中的GPU资源的利用率,分批次生成与各待测试程序匹配的编译代码,并将各编译代码提供给GPU资源执行的方式,能够在AI模型的代码编译过程中充分利用硬件资源,有效提高CPU与GPU的资源利用率,进而提高AI模型的代码编译效率。

应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。

附图说明

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

图1是根据本发明实施例一提供的一种AI模型的代码编译方法的流程图;

图2是根据本发明实施例一提供的一种AI模型的代码编译系统架构图;

图3是根据本发明实施例二提供的另一种AI模型的代码编译方法的流程图;

图4是本发明实施例提供的一种硬件资源使用率对比图;

图5是根据本发明实施例三提供的一种AI模型的代码编译装置的结构示意图;

图6是实现本发明实施例的AI模型的代码编译方法的计算机设备的结构示意图。

具体实施方式

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

需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

实施例一

图1为本发明实施例一提供的一种AI模型的代码编译方法的流程图,本实施例可适用于充分利用服务器中的CPU资源和GPU资源,对一个AI模型进行代码编译的情况,该方法可以由AI模型的代码编译装置来执行,该AI模型的代码编译装置可以采用硬件和/或软件的形式实现,该AI模型的代码编译装置可配置于具备充足CPU和GPU资源的服务器中,其中,该服务器可以由一个或者多个计算芯片构成。如图1所示,该方法包括:

S110、获取与待编译的AI模型匹配的多个待编译的计算子图。

一般的,AI模型的底层架构可以为神经网络模型,神经网络模型是一个由大量神经元广泛的互相连接形成的复杂网络系统,因此,AI模型可通过计算图进行描述,计算图可由多个顶点和边构成。每个顶点对应一个计算算子。

可选的,用于描述AI模型的计算图可由多个计算子图构成,也即一个计算图可按一定的拆分规律拆分成多个计算子图。

可以理解的是,在AI模型的代码编译过程中,需要对每个计算子图进行编译,更具体的,需要利用CPU资源对每个计算子图生成多个待测试程序,并生成与上述多个待测试程序分别对应的编译代码后,利用GPU资源执行计算子图的多个待测试程序的编译代码,并相应返回对多个编译代码的运行结果数据,CPU资源可根据接收到的运行结果数据,对各个待测试程序进行性能评估,并根据评估结果,以前序多个待测试程序为新的起点状态,继续迭代得到新的待测试程序,直至迭代出该计算子图最优(或者局部最优)的待测试程序。一般的,对于一个计算子图,需要根据评估结果进行多轮迭代测试,以获取计算子图的最终编译结果,也即,与最优的待测试程序对应的编译代码。

图2为一个可选的AI模型的代码编译系统架构图,如图2所示,CPU侧可以用于确定当前轮次编译的计算子图,并生成该计算子图的多个编译代码,以供GPU侧获取并执行。

在现有技术中,对于计算子图的每个代码编译轮次,图2中的CPU资源会在生成该计算子图的多个待测试程序对应的全部编译代码之后,将全部编译代码发送至GPU资源逐条执行,然而在实际工程应用中,对于每个计算子图都需要生成大量的编译代码,且代码生成过程时间较长,这就会导致在CPU资源生成编译代码时,GPU资源处于空闲的等待状态,进而降低了AI模型的代码编译效率。

本发明为了解决上述技术问题,提出了一种分批次生成编译代码的方式,能够在代码编译过程中提高CPU资源与GPU资源的资源利用率,从而提高AI模型的代码编译效率。

S120、规划与各计算子图对应的最小迭代次数和编译顺序,并根据最小迭代次数和编译顺序,确定最小子图编译总次数和每个子图编译轮次下所需处理的计算子图。

可选的,计算子图的最小迭代次数和编译顺序可基于预设的规则进行规划。

在一般情况下,计算子图进行最小迭代次数后获取的代码编译结果具有一定的可靠性,但对于部分计算子图,可能进行最小迭代次数的代码编译之后,仍有一定的优化空间。

最小子图编译总次数为每个待编译的计算子图的最小迭代次数之和,每个子图编译轮次下所需处理的计算子图与计算子图的最小迭代次数和编译顺序相关。

在一个具体的例子中,当待编译的AI模型存在待编译的计算子图1、2、3、4,且计算子图1与计算子图3的最小迭代次数为3次,计算子图2与计算子图4的最小迭代次数为2次,编译顺序为计算子图1、计算子图2、计算子图3、计算子图4顺序编译时,最小子图编译总次数为10次,子图编译分为三个轮次,每个轮次下所需处理的计算子图分别为:轮次(1)计算子图1、计算子图2、计算子图3、计算子图4;轮次(2)计算子图1、计算子图2、计算子图3、计算子图4;轮次(3)计算子图1、计算子图3。本例仅作示例性说明,不对计算子图的最小迭代次数以及编译顺序进行限制。

S130、获取与当前子图编译轮次匹配的当前计算子图,并采用服务器中的CPU资源,生成与当前计算子图匹配的多个待测试程序。

可选的,根据每个子图编译轮次下所需处理的计算子图、当前轮次以及本轮已经编译的计算子图,能够确定当前计算子图。

具体的,以当前计算子图为例,编译器通过调用CPU资源会首先提供一个逻辑正确的基本实现,并准备一系列优化规则和一个评估模型,这些优化规则的组合就构成了一个非常大的搜索空间,而基本实现则是在搜索空间中搜索的起点。基于该基本实现,编译器会尝试应用各种优化规则,因此得到了与该当前计算子图对应的大量的优化后的程序,这些程序会首先输入到评估模型中,评估模型将会输出对应程序的相对预期性能数据,并从中选出前K个程序,作为与当前计算子图匹配的多个待测试程序,其中,K的数值可以根据实际情况进行预设。

可以理解的是,计算子图的待测试程序为高层程序,GPU资源一般不能够直接执行待测试程序,需要将待测试程序转换为编译代码后提供给GPU资源执行。

S140、根据服务器中的GPU资源的利用率,采用CPU资源分批次生成与各待测试程序匹配的编译代码,并将各编译代码提供给GPU资源执行,以完成当前子图编译轮次下当前计算子图的代码编译过程。

一般的,CPU资源在生成编译代码之后,可以将编译代码暂存在执行队列中,以供GPU资源从执行队列中调用并执行。

可选的,GPU资源的利用率可根据暂存编译代码的执行队列存储情况确定,例如,当执行队列存储数据较少时,可代表GPU资源的利用率较低,当执行队列存储数据较多时,可代表GPU资源的利用率较高。

本发明考虑到,若要提高CPU资源以及GPU资源的利用率,可以分批次生成与计算子图的各待测试程序匹配的编译代码,在每一批次的编译代码全部生成后,发送至GPU资源执行,以减少GPU资源的等待时间。同时,本发明还考虑到,不同待测试程序的编译代码生成时间存在差异,且不同编译代码在GPU资源中的执行时间也存在差异,因此,本发明还提出了一种动态调整每批次编译代码数量的方式,以实现在最大程度上提高CPU资源以及GPU资源的利用率。

进一步的,当GPU资源利用率较低时,可减少CPU资源本批次生成的编译代码数量,尽快生成出少量的编译代码提供给GPU执行,以最大程度减少GPU的空等待时间,当GPU资源利用率较高时,可增加CPU资源本批次生成的编译代码数量,一次性生成多个编译代码,以减少在分批次编译代码生成过程中,所引入的固定计算或者时间损耗(例如,数据的读写损耗等),且可以根据一定的规则控制每批次的编译代码数量变化。

本发明实施例的技术方案,通过根据计算子图的最小迭代次数和编译顺序,确定最小子图编译总次数和每个子图编译轮次下所需处理的计算子图,采用服务器中的CPU资源生成与当前计算子图匹配的多个待测试程序,根据服务器中的GPU资源的利用率,分批次生成与各待测试程序匹配的编译代码,并将各编译代码提供给GPU资源执行的方式,能够在AI模型的代码编译过程中充分利用硬件资源,有效提高CPU与GPU的资源利用率,进而提高AI模型的代码编译效率。

实施例二

图2为本发明实施例二提供的一种AI模型的代码编译方法的流程图,本实施例在上述实施例的基础上,具体说明了AI模型的代码编译方法。如图2所示,该方法包括:

S210、响应于与AI模型匹配的代码编译启动指令,从用户指定的编译配置信息中提取配置迭代次数。

可选的,在响应于与AI模型匹配的代码编译启动指令之后,可进行对该AI模型的代码编译过程。

一般的,配置迭代次数由用户预先配置,配置迭代次数为AI模型的代码编译过程中可使用的最大迭代次数。

S220、获取与待编译的AI模型匹配的多个待编译的计算子图。

S230、根据每个计算子图的描述参数,确定与每个计算子图分别对应的最小迭代次数,并将各所述最小迭代次数的总和,确定为最小子图编译总次数。

其中,计算子图的描述参数可以包括:计算子图中包括的计算算子的数量,或者,包括的计算算子的类型等。其中,计算算子的类型可以包括:复杂计算算子,例如卷积或者矩阵除法,或者简单计算算子例如,加法或者减法等。一般来说,一个计算子图中包括的计算算子的数量越多,或者复杂计算算子的数量越多,其所需要的最小迭代次数越大。在本实施例中,可以通过各种预设的最小迭代次数估计算法,基于一个计算子图的描述参数,估计出该计算子图的最小迭代次数。

S240、按照预设的轮询算法,对各计算子图进行排序处理,得到各计算子图的编译顺序。

可选的,本发明实施例一中示出的,为一种可选的计算子图排序方法,其根据最基本的顺序轮询算法进行排序,得到轮询编译顺序。但本发明并不对轮询算法的具体内容进行限制。

S250、根据与每个计算子图分别对应的最小迭代次数、编译顺序和最小子图编译总次数,确定每个子图编译轮次下所需处理的计算子图。

在一个具体的例子中,一个AI模型中包括了计算子图1,计算子图2以及计算子图3,每个计算子图都计算得到最小迭代次数,所谓轮询算法,是指该服务器能够按照计算子图1,计算子图2以及计算子图3的轮询编译顺序,分别确定出上述各计算子图的一次GPU执行结果后,再次按照计算子图1,计算子图2以及计算子图3的顺序,再次确定出上述各计算子图的又一次GPU执行结果,依次类推。当某一个计算子图的最小迭代次数耗尽后,则不会再在新一轮的轮询编译顺序中引入该计算子图,直至所有计算子图的轮询编译次数均被耗尽。

相区别的,除了通过轮询算法计算各计算子图的编译顺序,并根据与每个计算子图分别对应的最小迭代次数、编译顺序和最小子图编译总次数,确定每个子图编译轮次下所需处理的计算子图方式之外,还可以使用集中算法的方式,确定出各计算子图的集中编译顺序,例如,计算子图1、计算子图2以及计算子图3,之后可以先针对计算子图1进行最小迭代次数下的编译代码的生成过程后,再针对计算子图2进行最小迭代次数下的编译代码的生成过程,最后再针对计算子图3进行最小迭代次数下的编译代码的生成过程。如果是通过这种集中算法,在确定出集中编译顺序后,同样可以确定出每个子图编译轮次下所需处理的计算子图。

S260、获取与当前子图编译轮次匹配的当前计算子图,并采用服务器中的CPU资源,生成与当前计算子图匹配的多个待测试程序。

S270、在GPU资源执行当前子图编译轮次下当前计算子图的代码编译过程中,如果检测到服务器中存在空闲的CPU资源,则获取与下一图编译轮次匹配的下一计算子图。

可以理解的是,在CPU资源存在空闲的情况下,若当前计算子图仍有未生成的待测试程序,CPU资源可以继续生成新一批的待测试程序,但若当前计算子图本轮所需的待测试程序已全部生成,CPU资源可能保持等待状态,等待GPU资源将当前子图编译轮次下未执行的编译程序全部执行之后,再生成下一计算子图的待测试程序,这种情况也会在一定程度上降低CPU资源的资源利用率。

为了克服上述情况可能导致的问题,本发明还提出了,如果检测到服务器中存在空闲的CPU资源,则获取与下一图编译轮次匹配的下一计算子图,生成与下一计算子图匹配的待测试程序,从而避免CPU资源的浪费。

S280、采用空闲的CPU资源,继续生成与下一计算子图匹配的多个待测试程序。

S290、在执行当前批次的编译代码生成操作之前,检测所述服务器中是否存在空闲的GPU资源;若是,执行S2100;若否,执行S2110。

其中,检测服务器中是否存在空闲的GPU资源,可以具体包括:

如果检测到所述执行队列为空,则确定检测到所述服务器中存在空闲的GPU资源。

S2100、从各待测试程序中获取最小批次数量的目标待测试程序;执行S2120。

可选的,每一批次的数量可根据预设的数量设置规则确定,例如,最小批次数量可以为1,即当服务器中存在空闲的GPU资源时,为了向空闲的GPU资源快速提供目标待测试程序,可根据最小批次数量获取1个目标待测试程序,并生成1个目标待测试程序的编译代码,从而以最快速度向空闲的GPU资源提供编译代码,减小GPU资源的空闲时间。

S2110、根据上一批次的编译代码生成过程所获取的上一批次数量,确定当前批次数量,并获取当前批次数量的目标待测试程序;执行S2120。

其中,根据上一批次的编译代码生成过程所获取的上一批次数量,确定当前批次数量,可以包括:

在预先构建的批次数量递增表中,沿批次数量递增趋势获取与所述上一批次数量相邻的批次数量,作为当前批次数量。

可以理解的是,当GPU资源为非空闲状态时,代表CPU资源即使向GPU资源提供了编译代码,GPU资源也无法立即执行,因此,此时CPU资源可以增加获取目标待测试程序的数量,从而增加本批次所获取的目标待测试程序的编译代码数量,在这批编译代码生成之后,GPU资源可能进入空闲状态,也可能即将进入空闲状态,即GPU资源能够在这批编译代码生成之后,快速执行这批编译代码。

可选的,批次数量递增表中的数量递增关系可根据实际需求制定。在一个具体的例子中,数量递增关系可以为1、2、4、8、16……,即在此批次数量递增表中,最小批次数量为1,若上一批次数量为4,且当前批次数量需要在上一批次的基础上递增的情况下,当前批次数量可以为8,此处仅作示例性说明,并不对批次数量递增表中的数量递增关系进行限定。

S2120、生成与各目标待测试程序匹配的编译代码,并将各编译代码提供给GPU资源执行。

其中,将各编译代码提供给GPU资源执行,可以具体包括:

将各编译代码存储至预先构建的执行队列中,以供GPU资源从执行队列依次获取各编译代码执行。

S2130、在确定完成最小子图编译总次数下的全部代码编译过程时,根据配置迭代次数和最小子图编译总次数,检测是否存在剩余迭代总次数。

可以理解的是,在执行最小子图编译总次数之后,能够获取一个较为优秀的AI模型的代码编译结果,但一般情况下,AI模型的代码编译结果还有一定的优化空间,若增加计算子图的编译次数,能够在一定程度上提高AI模型的代码编译结果性能。

当完成最小子图编译总次数下的全部代码编译过程之后,若最小子图编译总次数小于配置迭代次数,即代表还有剩余的迭代次数可供计算子图代码编译使用。此时,为了提高AI模型的代码编译结果性能,可利用剩余的迭代总次数继续进行部分或全部计算子图的代码编译迭代过程。

S2140、当存在剩余迭代总次数时,则获取每个计算子图在执行所适配的最小迭代次数的代码编译过程后的梯度下降指数。

可以理解的是,计算子图的梯度下降指数可反映计算子图的代码编译结果的性能,其可以理解为梯度下降的斜率。若梯度下降指数较大,则代表该计算子图的编译代码仍有较大的优化空间,若梯度下降指数较小,则代表该计算子图的编译代码性能较好,即使继续进行代码编译的迭代过程,该计算子图的编译代码的性能变化也可能较小。

因此,若存在剩余迭代总次数时,可根据各计算子图在执行所适配的最小迭代次数的代码编译过程后的梯度下降指数选取追加迭代次数的计算子图,并对这些计算子图规划新的代码编译过程。

S2150、根据各计算子图的梯度下降指数和剩余迭代总次数,规划与各计算子图对应的迭代追加次数,并继续执行与剩余迭代总次数对应的代码编译过程。

在一个具体的例子中,若待编译的AI模型存在待编译的计算子图1、2、3、4,剩余迭代总次数为10次,可以进一步判断各计算子图的梯度下降指数,对于梯度下降指数较大的计算子图,分配较多的迭代次数,对于梯度下降指数较小的计算子图,分配较少的迭代次数,假设计算子图1、2、3、4的梯度下降指数为计算子图1最大,计算子图4最小的递减趋势,可为计算子图1分配4次迭代次数,为计算子图2分配3次迭代次数,为计算子图3分配2次迭代次数,为计算子图4分配1次迭代次数。在实际的代码编译迭代过程中,迭代次数可能为几百次或几千次,此处仅作示例性说明,仅供理解本发明技术方案。

本发明实施例的技术方案,通过预先构建的批次数量递增表,并根据GPU资源的空闲情况确定当前批次目标待测试程序的数量的方式,能够协调CPU资源与GPU资源的执行,提高CPU资源与GPU资源的利用率,提高代码编译效率,通过根据计算子图在执行所适配的最小迭代次数的代码编译过程后的梯度下降指数以及剩余迭代次数,规划与各计算子图对应的迭代追加次数,并继续执行与剩余迭代总次数对应的代码编译过程的方式,能够充分利用硬件资源,最大程度上执行计算子图的代码编译迭代过程,从而能够优化AI模型的编译代码性能。

具体应用场景

本具体应用场景旨在说明,利用本发明提出的AI模型的代码编译方法搭建的编译框架相比于传统的开源AI编译器,能够有效提高CPU资源与GPU资源的使用率以及AI模型的代码编译效率。

为了保证利用本发明提出的AI模型的代码编译方法搭建的编译框架与传统的开源AI编译器采用相同的硬件配置和软件配置,可将系统硬件配置为:(1)平台:戴尔R740服务器;(2)CPU:Intel(R) Xeon(R) Gold 6230 CPU@2.10GHz 80核心;(3)内存RAM:64GB;(4)存储:机械硬盘容量2TB;(5)GPU:NVIDIA Tesla P100 12GB。并将系统软件配置为:(1)主机平台:Ubuntu 18.04.3 LTS;(2)内核:5.4.0-89-generic;(3)GPU驱动:515.65.01;(4)CUDA版本:CUDA 11.5.119;(5)TVM版本:0.90。采用上述相同的硬件配置与软件配置,使用利用本发明提出的AI模型的代码编译方法搭建的编译框架与传统的开源AI编译器分别对相同的AI模型进行代码编译。

图4是本发明实施例提供的一种硬件资源使用率对比图,本具体应用场景通过对比编译过程中异构计算资源的硬件使用率,从而判断本发明提出的AI模型的代码编译方法是否能够有效提高CPU资源与GPU资源的使用率以及AI模型的代码编译效率。

如图4所示,在相同时间段内(如240s-450s内)GPU平均使用率显著高于原有技术方案,且在部分时间段内(如200s-240s内)CPU平均使用率也显著高于原有技术方案。从而可以看出,本发明提出的AI模型的代码编译方法能够有效提高CPU资源与GPU资源的使用率以及AI模型的代码编译效率。

实施例三

图5为本发明实施例三提供的一种AI模型的代码编译装置的结构示意图。如图5所示,该装置包括:待编译计算子图获取模块310、编译信息规划模块320、待测试程序生成模块330以及编译代码生成模块340。

待编译计算子图获取模块310,用于获取与待编译的AI模型匹配的多个待编译的计算子图。

编译信息规划模块320,用于规划与各计算子图对应的最小迭代次数和编译顺序,并根据最小迭代次数和编译顺序,确定最小子图编译总次数和每个子图编译轮次下所需处理的计算子图。

待测试程序生成模块330,用于获取与当前子图编译轮次匹配的当前计算子图,并采用服务器中的CPU资源,生成与当前计算子图匹配的多个待测试程序。

编译代码生成模块340,用于根据服务器中的GPU资源的利用率,采用CPU资源分批次生成与各待测试程序匹配的编译代码,并将各编译代码提供给GPU资源执行,以完成当前子图编译轮次下当前计算子图的代码编译过程。

本发明实施例的技术方案,通过根据计算子图的最小迭代次数和编译顺序,确定最小子图编译总次数和每个子图编译轮次下所需处理的计算子图,采用服务器中的CPU资源生成与当前计算子图匹配的多个待测试程序,根据服务器中的GPU资源的利用率,分批次生成与各待测试程序匹配的编译代码,并将各编译代码提供给GPU资源执行的方式,能够在AI模型的代码编译过程中充分利用硬件资源,有效提高CPU与GPU的资源利用率,进而提高AI模型的代码编译效率。

在上述各实施例的基础上,编译信息规划模块320,可以具体用于:

根据每个计算子图的描述参数,确定与每个计算子图分别对应的最小迭代次数,并将各所述最小迭代次数的总和,确定为最小子图编译总次数;

按照预设的轮询算法,对各计算子图进行排序处理,得到各计算子图的编译顺序;

根据与每个计算子图分别对应的最小迭代次数、所述编译顺序和最小子图编译总次数,确定每个子图编译轮次下所需处理的计算子图。

在上述各实施例的基础上,还可以包括配置迭代次数提取模块,用于响应于与所述AI模型匹配的代码编译启动指令,从用户指定的编译配置信息中提取配置迭代次数。

在上述各实施例的基础上,还可以包括迭代追加次数规划模块,具体用于:

在确定完成最小子图编译总次数下的全部代码编译过程时,根据所述配置迭代次数和所述最小子图编译总次数,检测是否存在剩余迭代总次数;

若是,则获取每个计算子图在执行所适配的最小迭代次数的代码编译过程后的梯度下降指数;

根据各计算子图的梯度下降指数和剩余迭代总次数,规划与各计算子图对应的迭代追加次数,并继续执行与剩余迭代总次数对应的代码编译过程。

在上述各实施例的基础上,还可以包括下一计算子图获取模块,具体用于:

在所述GPU资源执行当前子图编译轮次下当前计算子图的代码编译过程中,如果检测到服务器中存在空闲的CPU资源,则获取与下一图编译轮次匹配的下一计算子图;

采用所述空闲的CPU资源,继续生成与下一计算子图匹配的多个待测试程序。

在上述各实施例的基础上,编译代码生成模块340,可以包括:

目标待测试程序获取单元,用于在执行当前批次的编译代码生成操作之前,检测所述服务器中是否存在空闲的GPU资源;

若是,则从各待测试程序中获取最小批次数量的目标待测试程序;

若否,则根据上一批次的编译代码生成过程所获取的上一批次数量,确定当前批次数量,并获取当前批次数量的目标待测试程序;

编译代码提供单元,用于生成与各目标待测试程序匹配的编译代码,并将各编译代码提供给GPU资源执行。

在上述各实施例的基础上,目标待测试程序获取单元,可以具体用于:

在预先构建的批次数量递增表中,沿批次数量递增趋势获取与所述上一批次数量相邻的批次数量,作为当前批次数量。

在上述各实施例的基础上,编译代码提供单元,可以具体用于:

将各编译代码存储至预先构建的执行队列中,以供所述GPU资源从所述执行队列依次获取各编译代码执行。

在上述各实施例的基础上,目标待测试程序获取单元,还可以具体用于:

如果检测到所述执行队列为空,则确定检测到所述服务器中存在空闲的GPU资源。

本发明实施例所提供的AI模型的代码编译装置可执行本发明任意实施例所提供的AI模型的代码编译方法,具备执行方法相应的功能模块和有益效果。

实施例四

图6示出了可以用来实施本发明的实施例的计算机设备10的结构示意图。计算机设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。计算机设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备(如头盔、眼镜、手表等)和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。

如图6所示,计算机设备10包括至少一个处理器11,以及与至少一个处理器11通信连接的存储器,如只读存储器(ROM)12、随机访问存储器(RAM)13等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器11可以根据存储在只读存储器(ROM)12中的计算机程序或者从存储单元18加载到随机访问存储器(RAM)13中的计算机程序,来执行各种适当的动作和处理。在RAM 13中,还可存储计算机设备10操作所需的各种程序和数据。处理器11、ROM 12以及RAM 13通过总线14彼此相连。输入/输出(I/O)接口15也连接至总线14。

计算机设备10中的多个部件连接至I/O接口15,包括:输入单元16,例如键盘、鼠标等;输出单元17,例如各种类型的显示器、扬声器等;存储单元18,例如磁盘、光盘等;以及通信单元19,例如网卡、调制解调器、无线通信收发机等。通信单元19允许计算机设备10通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。

处理器11可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器11的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。处理器11执行上文所描述的各个方法和处理,例如如本发明实施例所述的AI模型的代码编译方法。也即:

获取与待编译的AI模型匹配的多个待编译的计算子图;

规划与各计算子图对应的最小迭代次数和编译顺序,并根据最小迭代次数和编译顺序,确定最小子图编译总次数和每个子图编译轮次下所需处理的计算子图;

获取与当前子图编译轮次匹配的当前计算子图,并采用服务器中的CPU资源,生成与当前计算子图匹配的多个待测试程序;

根据服务器中的GPU资源的利用率,采用CPU资源分批次生成与各待测试程序匹配的编译代码,并将各编译代码提供给GPU资源执行,以完成当前子图编译轮次下当前计算子图的代码编译过程。

在一些实施例中,AI模型的代码编译方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元18。在一些实施例中,计算机程序的部分或者全部可以经由ROM 12和/或通信单元19而被载入和/或安装到计算机设备10上。当计算机程序加载到RAM 13并由处理器11执行时,可以执行上文描述的AI模型的代码编译方法的一个或多个步骤。备选地,在其他实施例中,处理器11可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行AI模型的代码编译方法。

本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。

用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。

在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。

为了提供与用户的交互,可以在计算机设备上实施此处描述的系统和技术,该计算机设备具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。

可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、区块链网络和互联网。

计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS服务中,存在的管理难度大,业务扩展性弱的缺陷。

应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。

上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。

相关技术
  • 一种代码编译方法、计算机装置及计算机可读存储介质
  • 脚本代码检测方法、装置、计算机设备及存储介质
  • 理赔数据代码匹配方法、装置、计算机设备和存储介质
  • 代码自动发布方法、装置、计算机设备及存储介质
  • 代码文件生成方法、装置、计算机设备和存储介质
  • 代码编译、代码运行方法、装置、计算机设备及存储介质
  • 适配AI模型的编译方法、装置、存储介质及电子设备
技术分类

06120115968569