面向图像识别深度神经网络的算子融合方法及系统

未命名 10-08 阅读:50 评论:0


1.本发明涉及图像识别领域的程序代码优化技术,具体涉及一种面向图像识别深度神经网络的算子融合方法及系统。


背景技术:

2.随着机器学习的不断发展,以深度神经网络(dnn)为代表的网络模型在图像识别的应用上取得显著的进步。为了满足更高准确度的预测性能需求,图像识别的神经网络深度不断增加,有些模型的网络层数甚至达到了上千层。规模的不断增加,对于现有硬件设施带来了更高算力和更大存储压力的挑战。深度学习编译器作为近几年兴起的一种编译优化手段,在面向图像识别的深度神经网络模型的部署和执行上提供了新的优化方向。与传统的手动编译相比,深度学习编译器的输入为统一的计算图表示;深度学习编译器中包含不同种类的计算图优化并具备自动调优手段;深度学习编译器可以连接到不同的后端进行硬件设备的部署。对于深度学习编译器而言,通过算子融合的优化,面向图像识别的神经网络在相关硬件上执行的效率提高,同时减少了硬件缓存紧张的问题。算子融合作为计算图优化中一种主要的优化手段,其主要目的是将多个小算子合并成为一个大算子。在现有的硬件资源不变的情况下,算子融合的优化缓解了深度神经网络模型在执行时的存储压力并提升了效率。
3.目前,基于算子融合的研究主要分为两个方面:算子融合的机制和模型融合的策略。算子融合的机制是确定神经网络中相邻的两个算子是否可以融合和采用哪种融合方法;模型的融合策略是确定整个模型中算子是否进行及如何进行融合。对于大多数的面向图像识别的神经网络而言,网络中包含的算子可分为两类:简单算子和复杂算子。简单算子(element-wise类型算子)是指输入和输出张量具有一对一的映射关系的算子。而复杂算子(非element-wise类型算子)是指输入和输出张量存在层间依赖性,每一个元素不是一对一的映射关系(即映射关系复杂),而是多对一、多对多或一对多的函数映射的的算子,如表1所示。
4.表1:简单算子和复杂算子示例。
[0005][0006]
目前的融合方法的基本思想与传统的通过优化编译器进行的循环融合相同。传统的循环融合方法是合并多个循环计算成一个循环的计算。现有的神经网络编译和执行框架中,只支持两种融合模式:一种是多个连续简单算子的融合模式;另一种是简单算子和复杂算子的融合模式。复杂算子指两个复杂算子之间的融合被认为是算法复杂且没有收益的。
而在现有的图像识别神经网络中,大量存在相邻的复杂算子。这样大大降低了整个神经网络中融合的机会。所以大多数主流的面向图像识别的dnn推理框架只支持将简单算子与其他算子的融合,而复杂算子之间的融合仍然不支持。在算子融合的机制方面,现有的神经网络编译和执行框架中,算子融合的机制受到很多的限制,仅支持特定算子融合模式和特定算子类型的融合模式。因此,现有的融合机制受限导致神经网络中大量相邻的复杂算子不能融合,融合机会的减少限制了图像识别任务执行优化的效率。


技术实现要素:

[0007]
本发明要解决的技术问题:针对现有技术的上述问题,提供一种面向图像识别深度神经网络的算子融合方法及系统,本发明能够解决图像识别深度神经网络中复杂算子不能融合的问题,可通过复杂算子的融合和整个神经网络的融合提高图像识别任务的执行效率,缓解图像识别任务在硬件部署时候的缓存资源紧张的问题。
[0008]
为了解决上述技术问题,本发明采用的技术方案为:
[0009]
一种面向图像识别深度神经网络的算子融合方法,包括:
[0010]
s101,将输入的深度神经网络模型的计算图分块为计算子图;
[0011]
s102,分别为各个计算子图随机构造多种候选融合方案,在硬件上测试候选融合方案以获取执行时间,并选择执行时间最短的候选融合方案作为最佳融合方案;所述候选融合方案中的算子融合类型包括连续两个简单算子的融合、连续两个复杂算子的融合以及连续的简单算子和复杂算子的融合,且连续两个复杂算子的融合为对其中后一个复杂算子循环重组使两个复杂算子的外部循环统一为基于中间结果张量的维度和形状后再对外部循环直接合并实现;
[0012]
s103,将各个计算子图的最佳融合方案组合得到深度神经网络模型的最佳融合执行方案。
[0013]
可选地,所述对其中后一个复杂算子循环重组使两个复杂算子的外部循环统一为基于中间结果张量的维度和形状后再对外部循环直接合并包括:
[0014]
s201,针对待融合的连续的两个复杂算子,保持前一个复杂算子的计算策略为基于输出张量的计算策略不变,通过循环重组将后一个复杂算子的计算策略修改为基于输入张量的计算策略,所述基于输入张量的计算策略中内部的映射关系是单个输入标量对整个输出张量的映射,而外部循环是基于算子的输入张量,从而使得两个复杂算子的计算策略的外部循环统一为基于两个复杂算子的中间结果张量的维度和形状;
[0015]
s202,将计算策略的外部循环统一为基于两个复杂算子的中间结果张量的维度和形状后的两个复杂算子进行外部循环的直接合并,得到融合后的代码。
[0016]
可选地,步骤s202之后还包括针对融合后的代码进行正确性检验:针对同一个前一个复杂算子的输入张量,将融合前的两个复杂算子的计算结果作为基准值,将融合后的代码的计算结果与基准值进行比对,若两者相同,则判定正确性检验通过,否则,判定正确性检验不通过,则重新调整候选融合方案中的算子融合方式再进行正确性检验,直至候选融合方案中的连续两个复杂算子的融合全部通过正确性检验。
[0017]
可选地,所述在硬件上测试候选融合方案时,在测试候选融合方案之前还包括对候选融合方案的基础代码进行融合代码优化,所述融合代码优化包括并行优化、循环展开、
向量化优化中的部分或者全部。
[0018]
可选地,所述在硬件上测试候选融合方案时,在测试候选融合方案之前还包括对候选融合方案中的复杂算子进行稀疏优化:将候选融合方案中位于两个复杂算子中间的激活函数修改为一个控制计算执行的判断条件,通过该控制计算执行的判断条件,使得仅前一个复杂算子部分得到的一个中间数据标量符合激活函数的激活条件时,后一个复杂算子部分才对这个中间数据标量进行函数映射,否则后一个复杂算子部分取消对这个中间数据标量的函数映射。
[0019]
可选地,所述在硬件上测试候选融合方案时,在测试候选融合方案之前还包括对候选融合方案中的复杂算子的子算子融合优化:检测候选融合方案中带有子算子的复杂算子,针对每一个复杂算子的子算子,若该子算子可以与相邻的其他复杂算子的子算子或者简单算子融合,则将该子算子与相邻的其他复杂算子的子算子或者简单算子融合。
[0020]
可选地,步骤s102中分别为各个计算子图随机构造多种候选融合方案,在硬件上测试候选融合方案以获取执行时间,并选择执行时间最短的候选融合方案作为最佳融合方案时,针对每一个计算子图的处理包括:
[0021]
s301,基于预先定义的基础种群数量m,为该计算子图随机生成m个初始的候选融合方案,得到初始的候选融合方案测试集,在硬件上测试初始的候选融合方案测试集中的各个候选融合方案以获取执行时间;
[0022]
s302,更新候选融合方案测试集中的候选融合方案;
[0023]
s303,在硬件上测试更新后的候选融合方案测试集中的候选融合方案以获取执行时间;
[0024]
s304,判断更新后的候选融合方案测试集中执行时间较短的多个候选融合方案是否保持不变,若保持稳定不变则判定候选融合方案测试集已经稳定,从稳定的候选融合方案测试集中选择一个执行时间最短的候选融合方案作为该计算子图的最佳融合方案,进入下一个计算子图的处理或者退出;否则,跳转步骤s302。
[0025]
可选地,步骤s302中更新候选融合方案测试集中的候选融合方案包括:针对候选融合方案测试集中的候选融合方案按执行时间排序,删除执行时间较长的部分候选融合方案;针对候选融合方案测试集中剩余的部分候选融合方案采用遗传算法根据预先定义的突变概率p变异生成新的候选融合方案,并将新的候选融合方案和剩余的部分候选融合方案一起构成更新后的候选融合方案测试集。
[0026]
此外,本发明还提供一种面向图像识别深度神经网络的算子融合系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述面向图像识别深度神经网络的算子融合方法。
[0027]
此外,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述面向图像识别深度神经网络的算子融合方法。
[0028]
和现有技术相比,本发明主要具有下述优点:
[0029]
1、本发明包括针对连续两个复杂算子的融合,利用对其中后一个复杂算子循环重组使两个复杂算子的外部循环统一为基于中间结果张量的维度和形状后再对外部循环直接合并,解决了图像识别深度神经网络中复杂算子不能融合的问题,可通过复杂算子的融
合提高图像识别任务的执行效率,缓解图像识别任务在硬件部署时候的缓存资源紧张的问题。
[0030]
2、本发明包括分别为各个计算子图随机构造多种候选融合方案,在硬件上测试候选融合方案以获取执行时间,并选择执行时间最短的候选融合方案作为最佳融合方案,候选融合方案中的算子融合类型包括连续两个简单算子的融合、连续两个复杂算子的融合以及连续的简单算子和复杂算子的融合,从而能够实现针对深度神经网络模型实现全方位的算子融合来自动生成来找到最佳的神经网络算子融合方案,这样提高了图像识别神经网络的执行效率并减少了开发人员的负担,并可以进一步提高图像识别任务的执行效率,缓解图像识别任务在硬件部署时候的缓存资源紧张的问题。
附图说明
[0031]
图1为本发明实施例一方法的基本流程示意图。
[0032]
图2为本发明实施例一中候选融合方案的复杂算子融合及后续优化、测试流程示意图。
[0033]
图3为本发明实施例一方法的详细流程示意图。
[0034]
图4为本发明实施例二中的多种候选融合方案的生成最佳融合方案的搜索机制流程图。
具体实施方式
[0035]
实施例一:
[0036]
如图1和图3所示,本实施例面向图像识别深度神经网络的算子融合方法包括:
[0037]
s101,将输入的深度神经网络模型的计算图分块为计算子图;
[0038]
s102,分别为各个计算子图随机构造多种候选融合方案,在硬件上测试候选融合方案以获取执行时间,并选择执行时间最短的候选融合方案作为最佳融合方案;候选融合方案中的算子融合类型包括连续两个简单算子的融合、连续两个复杂算子的融合以及连续的简单算子和复杂算子的融合,且连续两个复杂算子的融合为对其中后一个复杂算子循环重组使两个复杂算子的外部循环统一为基于中间结果张量的维度和形状后再对外部循环直接合并实现;
[0039]
s103,将各个计算子图的最佳融合方案组合得到深度神经网络模型的最佳融合执行方案。
[0040]
参见步骤s101~s103可知,本实施例面向图像识别深度神经网络的算子融合方法所采用的算子融合框架包括两个方面:一个为基于循环重组的复杂算子融合机制,另一个为多种候选融合方案的生成最佳融合方案的搜索机制。
[0041]
a:基于循环重组的复杂算子融合机制。
[0042]
在神经网络的执行过程中,由于数据的多维度和神经网络计算中相应的循环算法,每个算子的执行是通过多层循环计算来完成的。而通常算子的计算策略是基于执行算子的输出数据维度决定的,即算子执行策略中多重循环的外部循环是算子输出数据的维度。而由于简单算子中数据之间没有依赖型关系,即输入数据到输出数据的映射是一一对应的,这样导致简单算子输入数据的维度和输出数据的维度是一样的。由于简单算子的没
有层间数据依赖性的特点,简单算子可以和相邻简单算子进行直接的循环合并,即合并外层相同的循环成一个新的算子,这样并不影响数据的正确性同时可以减少数据的搬移提高计算的效率,这种方法称为算子融合。而复杂算子由于算子特殊的计算性质,算子的输入和输出的数据维度是不一样的,同时数据之间具有层间依赖性,这样复杂算子只能和相邻的简单算子进行算子融合,相邻的复杂算子之间由于计算策略的不一致,即外部循环不统一导致不能进行直接融合。复杂算子融合的根本障碍是由于以输出为中心的计算策略而产生的不一致的多维循环。当前面向图像识别的神经网络编译和执行框架将每个复杂算子视为一个单独的生产者-消费者周期,并具有其自己单独的计算策略。在此基础上,本实施例通过从整体上考虑计算策略,来解决两个复杂算子不能融合的问题以提高融合后的执行效率。由于复杂算子内部映射和存储调用关系,在计算连续的输出标量时会调用了一些相同的输入数据;因此,一个输入标量将与多个输出标量有映射关系。在计算过程中,如果找到一个映射函数将单个输入标量映射到与其相关的所有输出数据中,可以避免对输入数据重复调用。关于这种复杂算子的计算策略,是将单个输入数据中的标量对整个输出数据张量的函数映射,而计算策略中的外部循环是基于输入张量的数据维度。这种计算策略可以被描述为一个以输入为中心的计算策略;在这种计算策略中,内部计算函数是每个单个输入标量到整个输出张量的映射函数,而外部循环是基于输入张量的形状和维度。对于相邻的两个复杂算子,保持前一个复杂算子的计算策略(以输出为中心的计算策略),修改后一个复杂算子的计算策略为以输入为中心的计算策略,这样两个相邻复杂算子的计算策略都是基于两个算子之间的中间数据的维度,可以直接进行循环合并。具体地,本实施例中对其中后一个复杂算子循环重组使两个复杂算子的外部循环统一为基于中间结果张量的维度和形状后再对外部循环直接合并包括:
[0043]
s201,针对待融合的连续的两个复杂算子,保持前一个复杂算子的计算策略为基于输出张量的计算策略不变,通过循环重组将后一个复杂算子的计算策略修改为基于输入张量的计算策略,所述基于输入张量的计算策略中内部的映射关系是单个输入标量对整个输出张量的映射,而外部循环是基于算子的输入张量,从而使得两个复杂算子的计算策略的外部循环统一为基于两个复杂算子的中间结果张量的维度和形状;
[0044]
s202,将计算策略的外部循环统一为基于两个复杂算子的中间结果张量的维度和形状后的两个复杂算子进行外部循环的直接合并,得到融合后的代码。
[0045]
示例代码1给出了gemm-relu-gemm算子组通过融合之后的执行代码。
[0046][0047]
示例代码1中左侧的数字为行号,示例代码1输入是张量a(张量维度为m x k),张量b(张量维度为k x n),张量c(张量维度为n x l),通过融合可以看到,通过以输出为中心的计算策略,每计算出一共中间标量m[m][n],通过激活relu(计算方式是通过max函数与0进行比较),然后通过以输入为中心的计算策略将m[m][n]映射到相关的输出标量d[m][l],通过循环输出最终的输出张量d(张量维度为m x l)。
[0048]
正如步骤s201所示,本实施例基于循环重组的复杂算子融合机制中,每个中间结果标量由第一个复杂算子(以输出为中心的计算策略)得到,通过第二个复杂算子(以输入为中心的计算策略),可以将中间结果标量映射到最终相关的输出张量,而不需要反复调用中间结果,这样去除的冗余计算。另一个方面,当修改第二个复杂算子的计算策略时,他的外部循环是基于其输入张量(两个算子的中间数据)的维度。这样,这连续的两个复杂算子就统一了外部循环,它们的可以直接进行循环合并。基于循环重组的算子融合方法通过修改复杂算子的计算策略,统一两个复杂算子的外部循环轴,以达到两个复杂算子的融合的目的,将基于输出张量为中心的计算策略转换为基于输入张量为中心的计算策略,方便使用者进行两个连续复杂算子的融合,具有普适性的优点。
[0049]
b:多种候选融合方案的生成最佳融合方案的搜索机制。
[0050]
本实施例面向图像识别深度神经网络的算子融合方法所采用的算子融合框架中另一个重要部分是针对整个网络的算子融合策略,即决定整个图像识别网络中融合算子哪些融合和怎么融合。由于现有融合方法的融合支持是有限的,其搜索空间是受到限制的。相比之下,本实施例中多种候选融合方案的生成最佳融合方案的搜索机制包括:三个部分:首先是将输入的深度神经网络模型的计算图分块为计算子图;然后是分别为各个计算子图随机构造足够多的多种候选融合方案;接着是通过硬件测试候选融合方案以获取执行时间,并选择执行时间最短的候选融合方案作为最佳融合方案。需要说明的是,选择执行时间最短的候选融合方案作为最佳融合方案的时候,还可以在初始的候选融合方案的基础上,通过遗传算法或者其他优化搜索方法来扩展候选融合方案的搜索空间,以提升最佳融合方案的搜索优化效果。
[0051]
步骤s101将计算图分块为计算子图这样做的主要目的是为了减少搜索最佳方案的时间。本实施例中,步骤s101为将输入的深度神经网络模型的计算图分块为计算子图。其中,深度神经网络模型的计算图可以直接提供,也可以从tvm、onnx或者mnn这些软件从
pytorch、tensorflow等图像识别任务执行框架中转换而来。本实施例中的深度神经网络模型为深度学习神经网络,用于针对输入的图像进行分类获得图像的分类结果,例如可为vgg、alexnet、resnet和mobilenet等。毫无疑问,本实施例方法不依赖于具体的深度神经网络模型结构。
[0052]
作为一种可选的实施方式,为了保证算子融合优化后的正确性,本实施例中通过和未融合的连续复杂算子的计算结果作为基准进行比对,来验证算法优化的正确性,具体地,步骤s202之后还包括针对融合后的代码进行正确性检验:针对同一个前一个复杂算子的输入张量,将融合前的两个复杂算子的计算结果作为基准值,将融合后的代码的计算结果与基准值进行比对,若两者相同,则判定正确性检验通过,否则,判定正确性检验不通过,则重新调整候选融合方案中的算子融合方式再进行正确性检验,直至候选融合方案中的连续两个复杂算子的融合全部通过正确性检验。
[0053]
参见图2,本实施例中在硬件上测试候选融合方案时,在测试候选融合方案之前还包括对候选融合方案的基础代码进行融合代码优化,所述融合代码优化包括并行优化、循环展开、向量化优化中的部分或者全部,使得代码执行更加高效。
[0054]
参见图2,本实施例中在硬件上测试候选融合方案时,在测试候选融合方案之前还包括对候选融合方案中的复杂算子进行稀疏优化:将候选融合方案中位于两个复杂算子中间的激活函数修改为一个控制计算执行的判断条件,通过该控制计算执行的判断条件,使得仅前一个复杂算子部分得到的一个中间数据标量符合激活函数的激活条件时,后一个复杂算子部分才对这个中间数据标量进行函数映射,否则后一个复杂算子部分取消对这个中间数据标量的函数映射。稀疏优化是指通过优化手段减少中间数据稀疏性造成的冗余计算。在神经网络中中间数据的稀疏性是由于relu等激活函数造成,激活函数将数据中不符合激活条件的数据进行置零。而现有的神经网络编译和执行框架都只是将relu等激活函数当作一个普通的简单算子进行融合,却没有利用其激活函数的特性。我们考虑到激活函数的特性,把两个复杂算子中间的激活函数改为一个控制计算执行的判断条件。当前一个算子得到的一个中间数据标量符合激活函数relu激活的条件,后一个算子会对这个中间数据标量进行函数映射;而当这个中间数据标量没有符合激活函数relu激活的条件,后一个算子会取消这个中间数据标量的函数映射。这样可以减少中间数据稀疏性造成的冗余计算,提高了融合之后函数执行的效率。
[0055]
示例代码2给出了gemm-relu-gemm算子组融合之后经过稀疏优化的伪代码。
[0056][0057]
示例代码2中输入是张量a(张量维度为m x k),张量b(张量维度为k x n),张量c(张量维度为n x l),通过融合可以看到,通过以输出为中心的计算策略,每计算出一共中间标量m[m][n],通过激活relu(计算方式是通过max函数与0进行比较)。如果被激活数值m[m][n]大于0,则通过以输入为中心的计算策略将m[m][n]映射到相关的输出标量d[m][l],通过循环输出最终的输出张量d(张量维度为m x l);如果被激活数值m[m][n]小于0,则不进行函数映射跳入下一个标量d[m][l]的计算和判断相应d[m][l]的映射。
[0058]
参见图2,本实施例中在硬件上测试候选融合方案时,在测试候选融合方案之前还包括对候选融合方案中的复杂算子的子算子融合优化:检测候选融合方案中带有子算子的复杂算子,针对每一个复杂算子的子算子,若该子算子可以与相邻的其他复杂算子的子算子或者简单算子融合,则将该子算子与相邻的其他复杂算子的子算子或者简单算子融合。子算子融合优化是针对一些有多个计算步骤的复杂算子,比如softmax算子和batchnorm算子。这些算子中可以分为很多小的算子,我们可以利用这个特点,将这些具有多个计算步骤的复杂算子分为很多个子算子,然后将这些子算子与合算的相邻的算子进行融合,从而达到提高融合后算子执行效率的目的。softmax算子,可分为三个子算子:指数子算子、求和子算子和除法子算子。在dnn计算图中,softmax算子连接到一个gemm算子上,可以将softmax算子的指数子算子和求和和子算子与gemm算子融合。这样的融合可以提高gemm-softmax这个算子组融合之后的整体执行效率。
[0059]
本实施例上述各种融合代码优化、稀疏优化以及子算子融合优化分为两个方面:一方面是代码自生的优化,包括上面提到的计算并行、循环展开、计算向量化等一些列优化手段;另一个方面是利用算子的特性以及算子和算子之间特定所制定的优化。本实施例方法提供一些算子特定优化和算子与算子之间的特性优化,其中包括稀疏优化、子算子优化和算子顺序优化。程序员可以通过连续两个算子的特性来选择相应的优化手段来提高融合后执行的效率。此外本实施例还包括算子顺序优化,即通过调整算子执行的顺序来减少冗余计算来提高执行效率。这种融合模式可用于gemm-dropout-gemm融合模式。在算子执行之前,我们可以将提前拿到被置零的中间数据,并消除从第一个gemm算子计算该数据的计算过程。
[0060]
参见图2,在完成上述各种融合代码优化、稀疏优化以及子算子融合优化之后,就
可以将候选融合方案的代码采用所需的软件后端(llvm、cuda、opencl等)部署到所需的硬件(cpu、gpu、dsp等)进行测试,从而获得候选融合方案的执行时间。
[0061]
本实施例中多种候选融合方案的生成最佳融合方案的搜索机制,可以根据需要采用所需的搜索方法,例如作为一种可选的实施方式,本实施例中采用了遗传算法来优化多种候选融合方案的生成最佳融合方案的搜索机制以促进整个网络更好的融合性能。
[0062]
具体地,步骤s102中分别为各个计算子图随机构造多种候选融合方案,在硬件上测试候选融合方案以获取执行时间,并选择执行时间最短的候选融合方案作为最佳融合方案时,针对每一个计算子图的处理包括:
[0063]
s301,基于预先定义的基础种群数量m,为该计算子图随机生成m个初始的候选融合方案,得到初始的候选融合方案测试集,在硬件上测试初始的候选融合方案测试集中的各个候选融合方案以获取执行时间;
[0064]
s302,更新候选融合方案测试集中的候选融合方案;
[0065]
s303,在硬件上测试更新后的候选融合方案测试集中的候选融合方案以获取执行时间;
[0066]
s304,判断更新后的候选融合方案测试集中执行时间较短的多个候选融合方案是否保持不变,若保持稳定不变则判定候选融合方案测试集已经稳定,从稳定的候选融合方案测试集中选择一个执行时间最短的候选融合方案作为该计算子图的最佳融合方案,进入下一个计算子图的处理或者退出;否则,跳转步骤s302。
[0067]
本实施例中,步骤s302中更新候选融合方案测试集中的候选融合方案包括:针对候选融合方案测试集中的候选融合方案按执行时间排序,删除执行时间较长的部分候选融合方案;针对候选融合方案测试集中剩余的部分候选融合方案采用遗传算法根据预先定义的突变概率p变异生成新的候选融合方案,并将新的候选融合方案和剩余的部分候选融合方案一起构成更新后的候选融合方案测试集。需要说明的是,采用遗传算法根据预先定义的突变概率p变异生成新的候选融合方案是遗传算法的公知方法,故其实现方法再次不再详述。本实施例通过迭代时神经网络子图中所有融合方案的测试结果(执行子图的运行时间)按时间的长短从短到长进行排序,将执行时间排序靠后一半的融合方案候选去掉,然后基于突变概率p生成新的融合方案候选加入执行时间排序在靠前一半的融合方案种群中,形成新的融合方案种群,将更新的数量为m的融合方案种群送入测试测模块,记录所有融合方案候选在实际硬件上的执行效果。通过候选融合方案测试集已经稳定的判断条件,就可以找到这个神经网络子图的最佳融合方案,然后从步骤一中拿到下一个被分块的神经网络子图。这样直到迭代完神经网络的所有子图,就可以拿到这个深度神经网络模型整体的最佳融合方案。
[0068]
综上所述,本实施例面向图像识别深度神经网络的算子融合方法可以取得以下技术效果:第一:本实施例方法采用的神经网络算子融合框架通过输入神经网络的计算图(通过onnx或者tvm转换),输出融合之后的计算图并部署在不同的硬件后端。程序员输入待进行算子融合优化的神经网络计算图,通过定义优化手段和融合方案搜索的相关参数,来得到算子融合优化之后的计算图,并可以选择连接不同的后端,部署在相关的硬件设备。第二:本实施例方法提出的基于循环重组的复杂算子融合方法和相关优化手段,可以解决图像识别的神经网络编译和执行中两个连续复杂算子不能融合的问题。相邻复杂算子的融合
提高了算子执行的效率,并为整个神经网络提供了更多算子融合的机会。神经网络融合方案搜索空间的增大有利于搜索算法,找到最优的神经网络融合方案。通过复杂算子的融合方法和整个网络融合搜索方法提升了图像识别任务的执行效率。第三:本实施例方法提出的基于遗传算法的神经网络融合方案搜索策略,可以有效的在网络融合方案搜索空间中找到最佳的神经网络融合方案。程序员可以设置不同的参数来对搜索算法进行调整,来达到满足不同搜索的需求。
[0069]
此外,本实施例还提供一种面向图像识别深度神经网络的算子融合系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述面向图像识别深度神经网络的算子融合方法。此外,本实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述面向图像识别深度神经网络的算子融合方法。
[0070]
实施例二:
[0071]
本实施例与实施例一基本相同,其主要区别为多种候选融合方案的生成最佳融合方案的搜索机制中,采用的遗传算法的迭代结束条件不同。如图2所示,本实施例中步骤s304也可以采用迭代次数来控制迭代,例如:将迭代次数加1,若迭代次数等于预设次数n+1,则候选融合方案测试集中选择一个执行时间最短的候选融合方案作为该计算子图的最佳融合方案,进入下一个计算子图的处理或者退出;否则,跳转步骤s302。通过n次的迭代的判断条件,就可以找到这个神经网络子图的最佳融合方案,然后从步骤一中拿到下一个被分块的神经网络子图。这样直到迭代完神经网络的所有子图,就可以拿到这个深度神经网络模型整体的最佳融合方案。
[0072]
此外,本实施例还提供一种面向图像识别深度神经网络的算子融合系统,包括相互连接的微处理器和存储器,所述微处理器被编程或配置以执行所述面向图像识别深度神经网络的算子融合方法。此外,本实施例还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序用于被微处理器编程或配置以执行所述面向图像识别深度神经网络的算子融合方法。
[0073]
本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使
得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0074]
以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

技术特征:
1.一种面向图像识别深度神经网络的算子融合方法,其特征在于,包括:s101,将输入的深度神经网络模型的计算图分块为计算子图;s102,分别为各个计算子图随机构造多种候选融合方案,在硬件上测试候选融合方案以获取执行时间,并选择执行时间最短的候选融合方案作为最佳融合方案;所述候选融合方案中的算子融合类型包括连续两个简单算子的融合、连续两个复杂算子的融合以及连续的简单算子和复杂算子的融合,且连续两个复杂算子的融合为对其中后一个复杂算子循环重组使两个复杂算子的外部循环统一为基于中间结果张量的维度和形状后再对外部循环直接合并实现;s103,将各个计算子图的最佳融合方案组合得到深度神经网络模型的最佳融合执行方案。2.根据权利要求1所述的面向图像识别深度神经网络的算子融合方法,其特征在于,所述对其中后一个复杂算子循环重组使两个复杂算子的外部循环统一为基于中间结果张量的维度和形状后再对外部循环直接合并包括:s201,针对待融合的连续的两个复杂算子,保持前一个复杂算子的计算策略为基于输出张量的计算策略不变,通过循环重组将后一个复杂算子的计算策略修改为基于输入张量的计算策略,所述基于输入张量的计算策略中内部的映射关系是单个输入标量对整个输出张量的映射,而外部循环是基于算子的输入张量,从而使得两个复杂算子的计算策略的外部循环统一为基于两个复杂算子的中间结果张量的维度和形状;s202,将计算策略的外部循环统一为基于两个复杂算子的中间结果张量的维度和形状后的两个复杂算子进行外部循环的直接合并,得到融合后的代码。3.根据权利要求2所述的面向图像识别深度神经网络的算子融合方法,其特征在于,步骤s202之后还包括针对融合后的代码进行正确性检验:针对同一个前一个复杂算子的输入张量,将融合前的两个复杂算子的计算结果作为基准值,将融合后的代码的计算结果与基准值进行比对,若两者相同,则判定正确性检验通过,否则,判定正确性检验不通过,则重新调整候选融合方案中的算子融合方式再进行正确性检验,直至候选融合方案中的连续两个复杂算子的融合全部通过正确性检验。4.根据权利要求2所述的面向图像识别深度神经网络的算子融合方法,其特征在于,所述在硬件上测试候选融合方案时,在测试候选融合方案之前还包括对候选融合方案的基础代码进行融合代码优化,所述融合代码优化包括并行优化、循环展开、向量化优化中的部分或者全部。5.根据权利要求2所述的面向图像识别深度神经网络的算子融合方法,其特征在于,所述在硬件上测试候选融合方案时,在测试候选融合方案之前还包括对候选融合方案中的复杂算子进行稀疏优化:将候选融合方案中位于两个复杂算子中间的激活函数修改为一个控制计算执行的判断条件,通过该控制计算执行的判断条件,使得仅前一个复杂算子部分得到的一个中间数据标量符合激活函数的激活条件时,后一个复杂算子部分才对这个中间数据标量进行函数映射,否则后一个复杂算子部分取消对这个中间数据标量的函数映射。6.根据权利要求2所述的面向图像识别深度神经网络的算子融合方法,其特征在于,所述在硬件上测试候选融合方案时,在测试候选融合方案之前还包括对候选融合方案中的复杂算子的子算子融合优化:检测候选融合方案中带有子算子的复杂算子,针对每一个复杂
算子的子算子,若该子算子可以与相邻的其他复杂算子的子算子或者简单算子融合,则将该子算子与相邻的其他复杂算子的子算子或者简单算子融合。7.根据权利要求2所述的面向图像识别深度神经网络的算子融合方法,其特征在于,步骤s102中分别为各个计算子图随机构造多种候选融合方案,在硬件上测试候选融合方案以获取执行时间,并选择执行时间最短的候选融合方案作为最佳融合方案时,针对每一个计算子图的处理包括:s301,基于预先定义的基础种群数量m,为该计算子图随机生成m个初始的候选融合方案,得到初始的候选融合方案测试集,在硬件上测试初始的候选融合方案测试集中的各个候选融合方案以获取执行时间;s302,更新候选融合方案测试集中的候选融合方案;s303,在硬件上测试更新后的候选融合方案测试集中的候选融合方案以获取执行时间;s304,判断更新后的候选融合方案测试集中执行时间较短的多个候选融合方案是否保持不变,若保持稳定不变则判定候选融合方案测试集已经稳定,从稳定的候选融合方案测试集中选择一个执行时间最短的候选融合方案作为该计算子图的最佳融合方案,进入下一个计算子图的处理或者退出;否则,跳转步骤s302。8.根据权利要求7所述的面向图像识别深度神经网络的算子融合方法,其特征在于,步骤s302中更新候选融合方案测试集中的候选融合方案包括:针对候选融合方案测试集中的候选融合方案按执行时间排序,删除执行时间较长的部分候选融合方案;针对候选融合方案测试集中剩余的部分候选融合方案采用遗传算法根据预先定义的突变概率p变异生成新的候选融合方案,并将新的候选融合方案和剩余的部分候选融合方案一起构成更新后的候选融合方案测试集。9.一种面向图像识别深度神经网络的算子融合系统,包括相互连接的微处理器和存储器,其特征在于,所述微处理器被编程或配置以执行权利要求1~8中任意一项所述面向图像识别深度神经网络的算子融合方法。10.一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其特征在于,所述计算机程序用于被微处理器编程或配置以执行权利要求1~8中任意一项所述面向图像识别深度神经网络的算子融合方法。

技术总结
本发明公开了一种面向图像识别深度神经网络的算子融合方法及系统,本发明包括将输入的深度神经网络模型的计算图分块为计算子图;为各个计算子图随机构造多种候选融合方案,在硬件上测试并选择最佳融合方案;候选融合方案中连续两个复杂算子的融合为对其中后一个复杂算子循环重组使两个复杂算子的外部循环统一为基于中间结果张量的维度和形状后再对外部循环直接合并实现;将各个计算子图的最佳融合方案组合得到深度神经网络模型的最佳融合执行方案。本发明能够解决图像识别深度神经网络中复杂算子不能融合的问题,可通过复杂算子的融合和整个神经网络的融合提高图像识别任务的执行效率,缓解图像识别任务在硬件部署时候的缓存资源紧张的问题。候的缓存资源紧张的问题。候的缓存资源紧张的问题。


技术研发人员:时洋 王家男 陈照云 邓灿 赵宵磊 文梅 王耀华 扈啸
受保护的技术使用者:中国人民解放军国防科技大学
技术研发日:2023.05.10
技术公布日:2023/10/6
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐