一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

模型的推理优化方法、系统、电子设备和存储介质与流程

2022-02-22 18:20:45 来源:中国专利 TAG:


1.本技术实施例涉及深度学习技术领域,特别涉及一种模型的推理优化方法、系统、电子设备和存储介质。


背景技术:

2.随着深度学习技术的飞速发展,越来越多的技术可以由模型来实现,比如人脸识别模型、语音识别模型等,服务提供商将训练好的模型进行部署,以提供人脸识别、语音识别等推理服务,深度学习模型可以基于图形处理单元(graphics processing unit,简称:gpu)进行推理服务的部署,可以满足推理服务的高吞吐量需求和低时延需求,但gpu的价格非常昂贵,基于gpu进行部署推理成本很高、耗电量也很大,而基于中央处理单元(central processing unit,简称:cpu)进行推理服务的部署价格较低,推理成本也比较低,当cpu推理能够满足吞吐量与时延的要求时,基于cpu进行部署是服务提供商的首选,并且,在某些没有配置gpu的设备上,只能基于cpu进行推理服务的部署。
3.然而,技术人员将深度学习模型部署在cpu进行推理服务部署时,通常会将模型直接编译为目标文件格式,并在计算时调用与训练过程相同的通用计算方法以获取最终的推理结果,虽然能够满足推理的正确性需求,但推理速度比较慢,无法对不同的模型进行有针对性的优化,也不能充分发挥cpu的计算能力。


技术实现要素:

4.本技术实施例的主要目的在于提出一种模型的推理优化方法、系统、电子设备和存储介质,可以充分利用cpu的计算能力,大幅提升模型推理的速度和效率,实现对模型进行有针对性的优化。
5.为实现上述目的,本技术实施例提供了一种模型的推理优化方法,该方法包括:获取模型的算子信息和中央处理单元cpu的硬件信息;根据所述模型的算子信息、所述cpu的硬件信息和预设的策略生成算法,确定代码生成策略;其中,所述代码生成策略包括调度代码生成策略和计算代码生成策略;根据所述代码生成策略,生成调度代码和计算代码;将所述调度代码和所述计算代码进行编译和链接,获得编译完成的模型文件。
6.为实现上述目的,本技术实施例还提供了一种模型的推理优化系统,包括模型分析模块、硬件分析模块、策略生成模块、代码生成模块和编译器模块;所述模型分析模块用于获取模型的算子信息,并将所述模型的算子信息发送至所述策略生成模块;所述硬件分析模块用于获取中央处理单元cpu的硬件信息,并将所述cpu的硬件信息发送至所述策略生成模块;所述策略生成模块用于根据所述模型的算子信息、所述cpu的硬件信息和预设的策略生成算法,确定代码生成策略,并将所述代码生成策略发送至所述代码生成模块;其中,所述代码生成策略包括调度代码生成策略和计算代码生成策略;所述代码生成模块用于根据所述代码生成策略,生成调度代码和计算代码,并将所述调度代码和所述计算代码发送至所述编译器模块;所述编译器模块用于将所述调度代码和所述计算代码进行编译和链
接,获得编译完成的模型文件。
7.为实现上述目的,本技术实施例还提供了一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行上述的模型的推理优化方法。
8.为实现上述目的,本技术实施例还提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现上述的模型的推理优化方法。
9.本技术提出的模型的推理优化方法、系统、电子设备和存储介质,先获取模型的算子信息和cpu的硬件信息,根据获取到的模型的算子信息、cpu的硬件信息以及预设的策略生成算法,确定包括调度代码生成策略和计算代码生成策略在内的代码生成策略,然后根据所述代码生成策略,生成调度代码和计算代码,并将调度代码和计算代码进行编译和链接,获得编译完成的模型文件,考虑到不同模型的算子信息存在不同,即使同一模型的算子在不同参数形势下也存在不同,且不同的cpu提供的计算环境和算力也不同,对所有模型和cpu使用通用的计算方法严重影响模型的推理效率,不能发挥cpu的计算能力,本实施例综合考虑模型的算子信息和cpu的硬件信息的实际情况,对不同的模型、不同的cpu针对性地制定代码生成策略,从而生成最适合模型、最适合cpu的调度代码和计算代码,可以充分利用cpu的计算能力,显著降低推理时延、提升推理吞吐量、降低推理的成本,从而大幅提升模型推理的速度和效率,实现对模型进行有针对性的优化。
附图说明
10.图1是根据本技术一个实施例的模型的推理优化方法的流程图一;
11.图2是根据本技术一个实施例中,根据模型的算子信息、cpu的硬件信息和预设的策略生成算法,确定代码生成策略的流程图;
12.图3是根据本技术一个实施例中,根据输入维度大小、输出维度大小和cpu的可用线程数,确定并行线程数和并行分块策略的流程图;
13.图4是根据本技术一个实施例中,根据并行线程数确定并行分块策略的流程图;
14.图5是根据本技术另一个实施例的模型的推理优化方法的流程图二;
15.图6是根据本技术另一个实施例的模型的推理优化方法的流程图三;
16.图7是根据本技术一个实施例中,获取模型的算子信息的流程图;
17.图8是根据本技术一个实施例中,确定使用的卷积并行策略的流程图;
18.图9是根据本技术另一个实施例中提供的一种模型的推理优化系统的示意图;
19.图10是根据本技术另一个实施例的电子设备的结构示意图。
具体实施方式
20.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合附图对本技术的各实施例进行详细的阐述。然而,本领域的普通技术人员可以理解,在本技术各实施例中,为了使读者更好地理解本技术而提出了许多技术细节。但是,即使没有这些技术细节和基于以下各实施例的种种变化和修改,也可以实现本技术所要求保护的技术方案。以下各个实施例的划分是为了描述方便,不应对本技术的具体实现方式构成任何限定,各个实施
例在不矛盾的前提下可以相互结合相互引用。
21.随着深度学习技术的发展,包括人脸识别服务、语音识别服务等在内的推理服务具有很好的发展前景和广大的市场,推理服务提供商可以通过多种方式将训练好的推理模型进行部署向客户提供推理服务,比如部署在gpu、部署在cpu等。推理服务提供商将深度学习模型部署在cpu进行推理服务部署时,通常将模型直接编译为目标文件格式,并在计算时调用与训练过程相同的通用计算方法以获取最终的推理结果。
22.虽然在计算时调用与训练过程相同的通用计算方法能够满足推理的正确性需求,但本技术的发明人发现,上述技术方案中至少存在以下问题:
23.(1)不同种类、不同用途的深度学习模型的神经网络算子存在不同,在推理过程中调用通用计算方法无法对不同的算子进行针对性的优化,算子的计算效率较低,模型的推理效率也就较低。
24.(2)即使是同一神经网络算子,其在不同参数形式下也存在不同,若在推理过程中使用通用计算方法,算子在不同参数形式下的计算流程相同,无法对在不同参数形式下的算子进行针对性的优化。
25.(3)不同的cpu的计算能力不同,简单地使用通用计算方法不能充分发挥cpu的计算能力。
26.为了解决上述“模型的推理速度比较慢,无法对不同的模型进行有针对性的优化,也不能充分发挥cpu的计算能力”的技术问题,本技术的一个实施例提供了一种模型的推理优化方法,应用于电子设备,其中,电子设备可以是终端或者服务器,本实施例以及以下各实施例均以服务器为例进行描述,下面对本实施例的模型的推理优化方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须。
27.本实施例的模型的推理优化方法的具体流程可以如图1所示,包括:
28.步骤101,获取模型的算子信息和cpu的硬件信息。
29.示例性地,服务器在进行模型的推理优化时,可以先获取模型的算子信息和cpu的硬件信息,其中,模型的算子信息包括但不限于:输入维度大小、输出维度大小和batch-size维度大小等;cpu的硬件信息包括但不限于:cpu支持的指令集集合、cpu的可用线程数、cpu的单指令多数据寄存器个数、单指令多数据寄存器一次能够处理的浮点数个数、操作系统位数和缓存大小等。
30.在一个例子中,服务器从模型处获取到模型的算子信息后,可以对模型的算子信息进行重新组合,即进行标准化处理,生成标准化的模型的算子信息,考虑到不同的模型的属性、格式等可能存在不同,本实施例对获取到的模型的算子信息进行标准化处理,可以提升模型的推理优化方法的鲁棒性和普适性。
31.步骤102,根据模型的算子信息、cpu的硬件信息和预设的策略生成算法,确定代码生成策略。
32.示例性地,服务器在获取到模型的算子信息和cpu的硬件信息后,可以根据模型的算子信息、cpu的硬件信息和预设的策略生成算法,确定代码生成策略,其中,代码生成策略包括调度代码生成策略和计算代码生成策略,预设的策略生成算法可以由本领域的技术人员根据实际需要进行设置。
33.示例性地,调度代码生成策略主要描述算子计算线程数的调整、算子各维度的线
程数分布、多线程并行的线程调度策略、多线程位置的确定策略、多线程并行的分块策略和每一个线程下的算子调度与分块策略等;计算代码生成策略主要描述单指令多输入策略的实施方式、在各维度上进行循环计算的顺序、计算核大小和计算核策略等。
34.在一个例子中,服务器内部预存有模型的算子信息、cpu的硬件信息与策略生成算法的对应关系,服务器在获取到模型的算子信息和cpu的硬件信息后,可以调用服务器内部预存的对应关系确定策略生成算法,以确定代码生成策略。
35.步骤103,根据代码生成策略,生成调度代码和计算代码。
36.示例性地,服务器确定调度代码生成策略、计算代码生成策略后,可以根据调度代码生成策略生成调度代码、根据计算代码生成策略生成计算代码。
37.在一个例子中,服务器生成的调度代码为c 代码,生成的计算代码为汇编代码,使用这样的代码形式可以进一步提升模型推理速度和效率。
38.步骤104,将调度代码和计算代码进行编译和链接,获得编译完成的模型文件。
39.示例性地,服务器生成调度代码和计算代码后,可以分别编译调度代码和计算代码,并将编译后得到的结果进行链接,以获得编译完成的模型文件。
40.本实施例,相较于直接将模型编译成模型文件,并在算子计算时使用与训练过程相同的通用计算方法来实现推理服务的技术方案而言,服务器先获取模型的算子信息和cpu的硬件信息,根据获取到的模型的算子信息、cpu的硬件信息以及预设的策略生成算法,确定包括调度代码生成策略和计算代码生成策略在内的代码生成策略,然后根据所述代码生成策略,生成调度代码和计算代码,并将调度代码和计算代码进行编译和链接,获得编译完成的模型文件,考虑到不同模型的算子信息存在不同,即使同一模型的算子在不同参数形势下也存在不同,且不同的cpu提供的计算环境和算力也不同,对所有模型和cpu使用通用的计算方法严重影响模型的推理效率,不能发挥cpu的计算能力,本实施例综合考虑模型的算子信息和cpu的硬件信息的实际情况,对不同的模型、不同的cpu针对性地制定代码生成策略,从而生成最适合模型、最适合cpu的调度代码和计算代码,可以充分利用cpu的计算能力,显著降低推理时延、提升推理吞吐量、降低推理的成本,从而大幅提升模型推理的速度和效率,实现对模型进行有针对性的优化。
41.在一个实施例中,模型的算子信息包括输入维度大小和输出维度大小,cpu的硬件信息包括cpu支持的指令集集合、cpu的可用线程数、cpu的单指令多数据寄存器个数和单指令多数据寄存器一次能够处理的浮点数个数,根据模型的算子信息、cpu的硬件信息和预设的策略生成算法,确定代码生成策略,可以通过如图2所示的各步骤实现,具体包括:
42.步骤201,根据输入维度大小、输出维度大小和cpu的可用线程数,确定并行线程数和并行分块策略。
43.示例性地,服务器在确定调度代码生成策略时,可以先根据模型的算子信息中的维度大小和输出维度大小,以及cpu的硬件信息中的cpu的可用线程数,确定并行线程数和并行分块策略,并行线程数可以表征该模型是否需要多线程并行、需要使用几个线程进行多线程并行等,并行分块策略可以表征哪些线程需要参与多线程并行、参与多线程并行的每个线程需要处理的各维度的大小等。
44.步骤202,根据并行线程数、并行分块策略和cpu支持的指令集集合,确定调度代码生成策略。
45.示例性地,服务器确定并行线程数和并行分块策略后,可以基于并行线程数和并行分块策略,结合cpu的硬件信息中的cpu支持的指令集集合,确定调度代码生成策略,若服务器确定不需要进行多线程并行,则可以调用预设的单线程调度模板确定调度代码生成策略,若服务器确定需要进行多线程并行,则可以根据并行线程数和并行分块策略,调用预设的多线程调度模板,确定调度代码生成策略,其中,预设的单线程调度模板和预设的多线程调度模板可以由本领域的技术人员根据实际需要进行设置,本技术的实施例对此不做具体限定。
46.步骤203,根据cpu的单指令多数据寄存器个数和单指令多数据寄存器一次能够处理的浮点数个数,确定计算核大小和循环策略。
47.示例性地,服务器在确定计算代码生成策略时,可以根据cpu的硬件信息中的cpu的单指令多数据寄存器个数和单指令多数据寄存器一次能够处理的浮点数个数,确定计算核大小和循环策略,其中,计算核大小包括各维度的计算核大小,循环策略包括各维度的循环策略,以及循环计算的顺序。
48.在一个例子中,模型的算子信息中包括batch-size维度大小,若batch-size维度大小等于1,计算核大小包括输入维度的计算核大小和输出维度的计算核大小,服务器可以通过以下公式确定计算核大小:
[0049][0050]
式中,m为输入维度的计算核大小,n为输出维度的计算核大小,l为单指令多数据寄存器一次能够处理的浮点数个数,r为cpu的单指令多数据寄存器个数。
[0051]
在一个例子中,模型的算子信息中包括batch-size维度大小,若batch-size维度大小等于1,循环策略包括输入维度的循环策略和输出维度的循环策略,服务器确定的循环策略可以如表1所示:
[0052]
表1:循环策略示意表(一)
[0053]
cpu的单指令多数据寄存器个数输入维度循环策略输出维度循环策略16(2l,l,l/2,

,1)(4,2,1)8(l,l/2,

,1)(3,2,1)4(l,l/2,

,1)1
[0054]
表1中,l为单指令多数据寄存器一次能够处理的浮点数个数,以l等于8,cpu的单指令多数据寄存器个数为8为例,输入维度循环策略为(8,4,2,1),输入维度大小为55,服务器首先按照8进行循环,循环6次后,输入维度大小还剩余7,服务器再按照4进行循环,循环1次,输入维度大小还剩余3,服务器再按照2进行循环,循环1次,输入维度大小还剩余1,服务器再按照1进行循环,循环1次,输入维度大小剩余为0,服务器可以结束循环。
[0055]
步骤204,根据计算核大小、循环策略和cpu支持的指令集集合,确定计算代码生成策略。
[0056]
在一个例子中,模型的算子信息中包括batch-size维度大小,若batch-size维度大小等于1,服务器确定计算核大小和循环策略后,可以基于计算核大小和循环策略,结合cpu的硬件信息中的cpu支持的指令集集合,确定调度代码生成策略,即确定外层循环框架、
内层循环框架、矩阵与向量乘积的计算方式、以及结果累加和存储方式等。
[0057]
本实施例,服务器在确定调度代码生成策略时,先确定并行线程数以及并行分块策略,在确定计算代码生成策略时,先确定计算核大小和循环策略,即在推理过程中进行分块、多线程并行和循环,从而进一步提升模型推理的速度和效率,提升用户的使用体验。
[0058]
在一个实施例中,服务器根据输入维度大小、输出维度大小和cpu的可用线程数,确定并行线程数和并行分块策略,可以通过如图3所示的各步骤实现,具体包括:
[0059]
步骤301,判断输出维度大小是否大于第一预设阈值且小于第二预设阈值,如果是,执行步骤302,否则,执行步骤303。
[0060]
步骤302,确定并行线程数为cpu的可用线程数,并根据并行线程数确定并行分块策略。
[0061]
示例性地,服务器根据输入维度大小、输出维度大小和cpu的可用线程数,确定并行线程数和并行分块策略时,先判断输出维度大小是否大于第一预设阈值且小于第二预设阈值,若输出维度大小大于第一预设阈值且小于第二预设阈值,服务器确定并行线程数为cpu的可用线程数,并根据并行线程数确定并行分块策略,即cpu可用的所有线程均参与到多线程并行中,其中,第一预设阈值和第二预设阈值可以由本领域的技术人员根据实际需要进行设置,本技术的实施例对此不做具体限定。
[0062]
步骤303,判断输入维度大小与输出维度大小的乘积是否小于第三预设阈值,如果是,执行步骤304,否则,执行步骤305。
[0063]
步骤304,确定并行线程数为1。
[0064]
示例性地,若输出维度大小不大于第一预设阈值,或不小于第二预设阈值,服务器继续判断输入维度大小与输出维度大小的乘积是否小于第三预设阈值,若服务器确定输入维度大小与输出维度大小的乘积小于第三预设阈值,则无需进行多线程并行,服务器确定并行线程数为1,即单线程运行,其中,第三预设阈值可以由本领域的技术人员根据实际需要进行设置。
[0065]
步骤305,计算输出维度大小与cpu的可用线程数的比值。
[0066]
步骤306,根据输出维度大小与cpu的可用线程数的比值确定并行线程数,并根据并行线程数确定并行分块策略。
[0067]
示例性地,若服务器确定输入维度大小与输出维度大小的乘积大于或等于第三预设阈值,服务器可以计算输出维度大小与cpu的可用线程数的比值,根据输出维度大小与cpu的可用线程数的比值和预设公式确定并行线程数,并根据并行线程数确定并行分块策略。
[0068]
本实施例,服务器根据输入维度大小、输出维度大小以及cpu的可用线程数来决定并行线程数和并行分块策略,可以充分发挥cpu的计算能力,更加贴合模型的实际需要,从而进一步提升模型的推理效率。
[0069]
在一个实施例中,服务器根据并行线程数确定并行分块策略,可以通过如图4所示的各步骤实现,具体包括:
[0070]
步骤401,判断输出维度大小p是否可以被并行线程数q整除,如果是,执行步骤402,否则,执行步骤403。
[0071]
步骤402,确定每个线程需要处理的输出维度大小为p/q。
[0072]
步骤403,确定q-1个线程中的每个线程需要处理的输出维度大小为1 p/q,剩余的一个线程需要处理的输出维度大小为p-(q-1)
×
(1 p/q)。
[0073]
示例性地,q为大于1的整数,p为大于或等于q的整数,服务器确定并行线程数q后,判断输出维度大小p是否可以被并行线程数q整除,若p可以被p整除,服务器确定参与多线程并行的q个线程中每个线程需要处理的输出维度大小为p/q;若p不可以被q整除,服务器确定参与多线程并行的q个线程中的q-1个线程中的每个线程需要处理的输出维度大小为1 p/q,剩余的一个线程需要处理的输出维度大小为p-(q-1)
×
(1 p/q)。
[0074]
本技术的另一个实施例提供了一种模型的推理优化方法,本实施例中模型的算子信息包括batch-size维度大小,本实施例中,batch-size维度大小等于1,下面对本实施例的模型的推理优化方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须,本实施例的模型的推理优化方法的具体流程可以如图5所示,包括:
[0075]
步骤501,获取模型的算子信息和cpu的硬件信息。
[0076]
步骤502,根据输入维度大小、输出维度大小和cpu的可用线程数,确定并行线程数和并行分块策略。
[0077]
步骤503,根据并行线程数、并行分块策略和cpu支持的指令集集合,确定调度代码生成策略。
[0078]
步骤504,根据cpu的单指令多数据寄存器个数和单指令多数据寄存器一次能够处理的浮点数个数,确定计算核大小和循环策略。
[0079]
步骤505,根据计算核大小、循环策略和cpu支持的指令集集合,确定计算代码生成策略。
[0080]
步骤506,根据调度代码生成策略和计算代码生成策略,生成调度代码和计算代码。
[0081]
步骤507,将调度代码和计算代码进行编译和链接,获得编译完成的模型文件。
[0082]
本技术的另一个实施例提供了一种模型的推理优化方法,本实施例中模型的算子信息包括batch-size维度大小,本实施例中,batch-size维度大小大于1,下面对本实施例的模型的推理优化方法的实现细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本方案的必须,本实施例的模型的推理优化方法的具体流程可以如图6所示,包括:
[0083]
步骤601,获取模型的算子信息和cpu的硬件信息。
[0084]
其中,步骤601与步骤101大致相同,此处不再赘述。
[0085]
步骤602,根据输入维度大小、输出维度大小、batch-size维度大小和cpu的可用线程数,确定并行线程数和并行分块策略。
[0086]
在一个例子中,并行分块策略包括输出维度的并行分块策略和batch-size维度的并行分块策略。
[0087]
步骤603,根据并行线程数、并行分块策略和cpu支持的指令集集合,确定调度代码生成策略。
[0088]
其中,步骤步骤603与步骤202大致相同,此处不再赘述。
[0089]
步骤604,根据cpu的单指令多数据寄存器个数和单指令多数据寄存器一次能够处
理的浮点数个数,确定计算核大小和循环策略。
[0090]
在一个例子中,在batch-size维度大小大于1的情况下,计算核大小包括输出维度的计算核大小、输出维度的计算核大小和batch-size维度的计算核大小,服务器可以通过以下公式确定计算核大小:
[0091][0092]
式中,m为输入维度的计算核大小,k为batch-size维度的计算核大小,n为输出维度的计算核大小,l为单指令多数据寄存器一次能够处理的浮点数个数,r为cpu的单指令多数据寄存器个数。
[0093]
在一个例子中,若batch-size维度大小大于1,循环策略包括输入维度的循环策略、输出维度的循环策略和batch-size维度的循环策略,服务器确定的循环策略可以如表2所示:
[0094]
表2:循环策略示意表(二)
[0095][0096]
表2中,l为单指令多数据寄存器一次能够处理的浮点数个数,在输出维度剩余大小不足2l或l的情况下,服务器可以进行补0等处理。
[0097]
步骤605,获取模型的权重矩阵的内存排布形式,并判断输入维度是否为主导维度。
[0098]
步骤606,在输入维度为主导维度的情况下,确定权重矩阵重排策略。
[0099]
示例性地,服务器在确定计算代码生成策略时,先获取模型的权重矩阵的内存排布形式,判断模型的权重矩阵的内存排布形式是否是输入维度为主导维度,若模型的权重矩阵的内存排布形式是输入维度为主导维度,则服务器需要对模型的权重矩阵进行重排,确定权重矩阵重排策略。
[0100]
步骤607,根据计算核大小、循环策略、cpu支持的指令集集合和权重矩阵重排策略,确定计算代码生成策略。
[0101]
示例性地,服务器确定计算核大小、循环策略和权重矩阵重排策略后,可以基于计算核大小、循环策略和权重矩阵重排策略,结合cpu的硬件信息中的cpu支持的指令集集合,确定调度代码生成策略,即确定外层循环框架、中层循环框架、内层循环框架、矩阵与向量乘积的计算方式、以及结果累加和存储方式等。
[0102]
步骤608,根据代码生成策略,生成调度代码和计算代码。
[0103]
步骤609,将调度代码和计算代码进行编译和链接,获得编译完成的模型文件。
[0104]
其中,步骤608至步骤609与步骤103至步骤104大致相同,此处不再赘述。
[0105]
本实施例,所述模型的算子信息还包括所述batch-size维度大小,若所述batch-size维度大小大于1,则在所述根据所述计算核大小、所述循环策略和所述cpu支持的指令
集集合,确定计算代码生成策略之前,包括:获取所述模型的权重矩阵的内存排布形式,并判断所述输入维度是否为主导维度;在所述输入维度为主导维度的情况下,确定权重矩阵重排策略;所述根据所述计算核大小、所述循环策略和所述cpu支持的指令集集合,确定计算代码生成策略,包括:根据所述计算核大小、所述循环策略、所述cpu支持的指令集集合和所述权重矩阵重排策略,确定计算代码生成策略,当权重矩阵的内存排布形式是输入维度为主导维度时,模型的数据读取比较缓慢,本技术的实施例对权重矩阵的内存排布形式进行重排,可以提升数据读取的速度,从而进一步提升模型的推理速度和效率。
[0106]
在一个实施例中,模型的算子为二维卷积算子,服务器获取模型的算子信息,可以通过如图7所示的各步骤实现,具体包括:
[0107]
步骤701,获取二维卷积算子的信息。
[0108]
示例性地,二维卷积算子的信息包括但不限于二维卷积算子的高度方向上的卷积核大小、宽度方向上的卷积核大小、高度方向上的步长大小、宽度方向上的步长大小和padding值等。
[0109]
步骤702,在二维卷积算子的高度方向上的卷积核大小、宽度方向上的卷积核大小、高度方向上的步长大小、宽度方向上的步长大小和padding值中至少一项不等于1的情况下,确定对二维卷积算子的图像重排策略。
[0110]
步骤703,根据图像重排策略,将二维卷积算子转化为全连接算子,并获取全连接算子的信息。
[0111]
示例性地,服务器获取到二维卷积算子的信息后,可以判断二维卷积算子的高度方向上的卷积核大小、宽度方向上的卷积核大小、高度方向上的步长大小、宽度方向上的步长大小和padding值是否均等于1,若二维卷积算子的高度方向上的卷积核大小、宽度方向上的卷积核大小、高度方向上的步长大小、宽度方向上的步长大小和padding值中至少一项不等于1,则服务器需要对该算子进行图像重排,并使用预置的图像重排策略将二维卷积算子排成普通的全连接算子,以便服务器后续使用重排后的全连接算子的信息进行计算。
[0112]
本实施例,当确定模型的算子为二维卷积算子时,可以确定对二维卷积算子的图像重排策略,将二维卷积算子重排成普通的全连接算子,从而大幅提升模型的推理优化方法鲁棒性和普适性,更好地满足用户的实际需求。
[0113]
在一个实施例中,二维卷积算子的信息包括batch-size维度大小、输出维度的高度、输出维度的宽度、输出维度的通道数和输入维度的通道数,服务器在获取二维卷积算子的信息之后,可以通过如图8所示的各步骤确定使用的卷积并行策略,具体包括:
[0114]
步骤801,判断batch-size维度大小是否等于1,如果是,执行步骤802,否则,执行步骤803。
[0115]
步骤802,使用第一卷积并行策略。
[0116]
示例性地,二维卷积算子的多线程并行与普通的全连接算子的多线程并行有所不同,服务器先判断batch-size维度大小是否等于1,若batch-size维度大小等于1,该二维卷积算子在图像重排、输入矩阵计算和权重矩阵计算时需要耗费大量时间,服务器确定对该算子使用第一卷积并行策略,其中,第一卷积并行策略用于在图像重排、输入矩阵计算和权重矩阵计算时进行多线程并行。
[0117]
步骤803,判断二维卷积算子的信息是否满足预设的第二卷积并行策略使用条件,
如果是,执行步骤804,否则,执行步骤802。
[0118]
步骤804,使用第二卷积并行策略。
[0119]
示例性地,服务器若确定二维卷积算子的batch-size维度大小大于1,则继续判断二维卷积算子的信息是否满足预设的第二卷积并行策略使用条件,其中,预设的第二卷积并行策略使用条件可以通过如下公式表示:
[0120]
oh
×
ow
×
oc《mb∪oh
×
ow
×
oc
×
ic《threshold
[0121]
式中,oh为输出维度的高度,ow为输出维度的宽度,oc为输出维度的通道数,mb为batch-size维度大小,ic为输入维度的通道数,threshold为第四预设阈值,第四预设阈值可以由本领域的技术人员根据实际需要进行设置,若二维卷积算子的信息满足预设的第二卷积并行策略使用条件,说明该算子在循环和卷积计算时需要耗费大量时间,服务器对该算子使用第二卷积并行策略,第二卷积并行策略用于在循环和卷积计算时进行多线程并行。
[0122]
本实施例,在进行二维卷积算子计算时,服务器会评估该算子在图像重排、输入矩阵计算和权重矩阵计算时进行多线程并行(即第一卷积并行策略)与算子在循环和卷积计算时进行多线程并行(即第二卷积并行策略)的大致时间消耗,并根据以上判断流程选择计算时间较少的卷积并行策略,以加速二维卷积算子计算,提升速度。
[0123]
上面各种方法的步骤划分,只是为了描述清楚,实现时可以合并为一个步骤或者对某些步骤进行拆分,分解为多个步骤,只要包括相同的逻辑关系,都在本专利的保护范围内;对算法中或者流程中添加无关紧要的修改或者引入无关紧要的设计,但不改变其算法和流程的核心设计都在该专利的保护范围内。
[0124]
本技术的另一个实施例涉及一种模型的推理优化系统,下面对本实施例的模型的推理优化系统的细节进行具体的说明,以下内容仅为方便理解提供的实现细节,并非实施本例的必须,图9是本实施例所述的模型的推理优化系统的示意图,包括:模型分析模块901、硬件分析模块902、策略生成模块903、代码生成模块904和编译器模块905。
[0125]
模型分析模块901用于获取模型的算子信息,并将模型的算子信息发送至策略生成模块903。
[0126]
硬件分析模块902用于获取cpu的硬件信息,并将cpu的硬件信息发送至策略生成模块903。
[0127]
策略生成模块903用于根据模型的算子信息、cpu的硬件信息和预设的策略生成算法,确定代码生成策略,并将代码生成策略发送至代码生成模块904;其中,代码生成策略包括调度代码生成策略和计算代码生成策略。
[0128]
代码生成模块904用于根据代码生成策略,生成调度代码和计算代码,并将调度代码和计算代码发送至编译器模块905。
[0129]
编译器模块905用于将调度代码和计算代码进行编译和链接,获得编译完成的模型文件。
[0130]
不难发现,本实施例为与上述方法实施例对应的系统实施例,本实施例可以与上述方法实施例互相配合实施。上述实施例中提到的相关技术细节和技术效果在本实施例中依然有效,为了减少重复,这里不再赘述。相应地,本实施例中提到的相关技术细节也可应用在上述实施例中。
[0131]
值得一提的是,本实施例中所涉及到的各模块均为逻辑模块,在实际应用中,一个逻辑单元可以是一个物理单元,也可以是一个物理单元的一部分,还可以以多个物理单元的组合实现。此外,为了突出本技术的创新部分,本实施例中并没有将与解决本技术所提出的技术问题关系不太密切的单元引入,但这并不表明本实施例中不存在其它的单元。
[0132]
本技术的另一个实施例涉及一种电子设备,如图10所示,包括:至少一个处理器1001;以及,与所述至少一个处理器1001通信连接的存储器1002;其中,所述存储器1002存储有可被所述至少一个处理器1001执行的指令,所述指令被所述至少一个处理器1001执行,以使所述至少一个处理器1001能够执行上述各实施例中的模型的推理优化方法。
[0133]
其中,存储器和处理器采用总线方式连接,总线可以包括任意数量的互联的总线和桥,总线将一个或多个处理器和存储器的各种电路连接在一起。总线还可以将诸如外围设备、稳压器和功率管理电路等之类的各种其他电路连接在一起,这些都是本领域所公知的,因此,本文不再对其进行进一步描述。总线接口在总线和收发机之间提供接口。收发机可以是一个元件,也可以是多个元件,比如多个接收器和发送器,提供用于在传输介质上与各种其他装置通信的单元。经处理器处理的数据通过天线在无线介质上进行传输,进一步,天线还接收数据并将数据传送给处理器。
[0134]
处理器负责管理总线和通常的处理,还可以提供各种功能,包括定时,外围接口,电压调节、电源管理以及其他控制功能。而存储器可以被用于存储处理器在执行操作时所使用的数据。
[0135]
本技术的另一个实施例涉及一种计算机可读存储介质,存储有计算机程序。计算机程序被处理器执行时实现上述方法实施例。
[0136]
即,本领域技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-only memory,简称:rom)、随机存取存储器(random access memory,简称:ram)、磁碟或者光盘等各种可以存储程序代码的介质。
[0137]
本领域的普通技术人员可以理解,上述各实施方式是实现本技术的具体实施例,而在实际应用中,可以在形式上和细节上对其作各种改变,而不偏离本技术的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献