算子处理方法及算子处理装置、电子设备和可读存储介质与流程

文档序号:33944749发布日期:2023-04-26 07:01阅读:34来源:国知局
算子处理方法及算子处理装置、电子设备和可读存储介质与流程

本公开的实施例涉及一种算子处理方法、算子处理装置、电子设备和计算机可读存储介质。


背景技术:

1、在人工智能芯片上运行神经网络需要大量算子的支撑,神经网络可用于语音识别、图像识别、自然语言识别等领域,这些算子可以是预定义的底层算子,也可以是用户自定义的算子。算子之间的数据交互往往通过访存的方式实现,导致代码的执行效率较为低下。通常的做法是将若干个算子根据一定的模式组合在一起形成融合算子,融合算子内部可以通过寄存器交换数据,从而提高运行效率。


技术实现思路

1、本公开至少一个实施例提供一种算子处理方法,包括:获取用于描述计算过程的计算图,其中,所述计算图包含m个算子节点以及所述m个算子节点之间的连接关系,所述m个算子节点中的每个对应至少一个算子;对所述计算图进行拆分,得到n个子图,其中,所述n个子图中的每个包含所述m个算子节点中的至少一个算子节点,所述n个子图包括第一子图,所述第一子图对应k个第一融合算子,所述k个第一融合算子为将所述第一子图包括的多个算子节点对应的多个算子进行融合而得到的算子;确定所述n个子图分别对应的算子代码,其中,所述n个子图分别对应的算子代码包括所述第一子图对应的所述k个第一融合算子的算子代码;基于所述n个子图分别对应的算子代码,得到用于执行所述计算过程的代码,其中,m、n和k均为不小于1的整数。

2、例如,在本公开一实施例提供的算子处理方法中,所述第一子图包括的多个算子节点为p个算子节点,其中,p为大于1的整数;确定所述n个子图分别对应的算子代码,包括:针对所述第一子图,确定所述p个算子节点分别对应的算子的代码;基于所述p个算子节点分别对应的算子的代码,得到所述第一子图对应的所述k个第一融合算子的算子代码。

3、例如,在本公开一实施例提供的算子处理方法中,针对所述第一子图,确定所述p个算子节点分别对应的算子的代码,包括:针对所述p个算子节点中的每个算子节点,执行如下操作:在所述算子节点对应的算子为预定义算子的情况下,针对所述预定义算子,获取与所述预定义算子对应的配置参数和代码模块,并基于所述配置参数和代码模块,得到所述预定义算子的代码;在所述算子节点对应的算子为自定义算子的情况下,针对所述自定义算子,对所述自定义算子进行编译,以得到所述自定义算子的代码。

4、例如,在本公开一实施例提供的算子处理方法中,基于所述p个算子节点分别对应的算子的代码,得到所述第一子图对应的所述k个第一融合算子的代码,包括:将所述p个算子节点分别对应的算子的代码进行组合,得到所述k个第一融合算子的算子代码。

5、例如,在本公开一实施例提供的算子处理方法中,对所述计算图进行拆分,得到n个子图,包括:若q个算子节点对应的算子的目标属性相同,则将所述q个算子节点划分为一个子图,其中,所述目标属性包括类型属性、计算属性和数据传输属性中的至少一种,其中,q为大于1的整数。

6、例如,在本公开一实施例提供的算子处理方法中,对所述计算图进行拆分,得到n个子图,包括:若所述q个算子节点对应的算子均为相同类型的算子,则将所述q个算子节点划分为一个子图。

7、例如,在本公开一实施例提供的算子处理方法中,对所述计算图进行拆分,得到n个子图,包括:若所述q个算子节点对应的算子配置为通过寄存器传输数据,则将所述q个算子节点划分为一个子图。

8、例如,在本公开一实施例提供的算子处理方法中,对所述计算图进行拆分,得到n个子图,包括:若所述q个算子节点对应的算子配置为在同一个计算单元上运行,则将所述q个算子节点划分为一个子图。

9、例如,在本公开一实施例提供的算子处理方法中,对所述计算图进行拆分,得到n个子图,包括:若q个算子节点对应的算子的类型和执行顺序与预定融合算子包含的算子的类型和执行顺序一致,则将所述q个算子节点划分为一个子图。

10、例如,在本公开一实施例提供的算子处理方法中,所述q个算子节点在根据所述计算图确定的执行顺序上为彼此连续的或彼此并列的。

11、例如,在本公开一实施例提供的算子处理方法中,所述k个第一融合算子中的至少一个包括多个算子,所述多个算子依次连接并且顺次执行;对于所述多个算子中的相邻两个算子,在执行顺序上的前一个算子的计算结果数据作为后一个算子的输入数据。

12、例如,在本公开一实施例提供的算子处理方法中,所述n个子图还包括第二子图,所述第二子图对应r个第二融合算子,所述r个第二融合算子为将所述第二子图包括的多个算子节点对应的多个算子进行融合而得到的算子,其中,r为不小于1的整数;所述n个子图分别对应的算子代码还包括所述第二子图对应的所述r个第二融合算子的算子代码;所述方法还包括:在确定所述n个子图分别对应的算子代码之前,对所述k个第一融合算子和所述r个第二融合算子进行优化处理,以得到分别针对所述k个第一融合算子和所述r个第二融合算子的配置信息。

13、例如,在本公开一实施例提供的算子处理方法中,对所述k个第一融合算子和所述r个第二融合算子进行优化处理,以得到针对所述k个第一融合算子和所述r个第二融合算子的配置信息,包括:对所述k个第一融合算子和所述r个第二融合算子进行资源配置优化,以得到针对每个所述第一融合算子和每个所述第二融合算子的优化后的资源配置信息,其中,所述资源包括计算资源和/或存储资源。

14、例如,在本公开一实施例提供的算子处理方法中,对所述k个第一融合算子和所述r个第二融合算子进行优化处理,以得到针对所述k个第一融合算子和所述r个第二融合算子的配置信息,包括:基于所述计算图的计算过程,针对所述k个第一融合算子和所述r个第二融合算子制定同步策略,以得到针对所述k个第一融合算子和所述r个第二融合算子的同步配置信息。

15、例如,在本公开一实施例提供的算子处理方法中,基于所述计算图的计算过程,针对所述k个第一融合算子和所述r个第二融合算子制定同步策略,以得到针对所述k个第一融合算子和所述r个第二融合算子的同步配置信息,包括:至少针对所述k个第一融合算子和所述r个第二融合算子中的两个融合算子执行如下操作:若所述两个融合算子存在数据依赖关系,并且数据接收方的调度单元标识与数据产生方的调度单元标识以及所述数据产生方至所述数据接受方之间的调度单元标识均不相同,则将所述两个融合算子配置为进行数据同步处理,其中,所述数据产生方为所述两个融合算子中的一者,所述数据产生方为另一者。

16、例如,在本公开一实施例提供的算子处理方法中,所述第一融合算子包括所述第一子图包括的多个算子节点对应的多个算子;所述方法还包括:针对所述第一融合算子,在所述第一融合算子包含的所述多个算子之间进行优化处理,以得到针对所述多个算子的配置信息,其中,所述优化处理包括资源配置优化和/或制定同步策略。

17、例如,在本公开一实施例提供的算子处理方法中,基于所述n个子图分别对应的算子代码,得到所述计算图的代码,包括:将所述n个子图分别对应的算子代码进行组合,得到所述计算图的代码。

18、本公开至少一个实施例提供一种算子处理装置,包括获取模块、拆分模块、确定模块和代码模块,获取模块配置为获取用于描述计算过程的计算图,其中,所述计算图包含m个算子节点以及所述m个算子节点之间的连接关系,所述m个算子节点中的每个对应至少一个算子;拆分模块配置为对所述计算图进行拆分,得到n个子图,其中,所述n个子图中的每个包含所述m个算子节点中的至少一个算子节点,所述n个子图包括第一子图,所述第一子图对应k个第一融合算子,所述k个第一融合算子为将所述第一子图包括的多个算子节点对应的多个算子进行融合而得到的算子;确定模块配置为确定所述n个子图分别对应的算子代码,其中,所述n个子图分别对应的算子代码包括所述第一子图对应的所述k个第一融合算子的算子代码;代码模块配置为基于所述n个子图分别对应的算子代码,得到用于执行所述计算过程的代码;其中,m、n和k均为不小于1的整数。

19、本公开至少一个实施例提供一种电子设备,包括处理器和存储器,存储器存储有一个或多个计算机程序模块,其中,所述一个或多个计算机程序模块被配置为由所述处理器执行,用于实现本公开任一实施例提供的算子处理方法。

20、本公开至少一个实施例提供一种计算机可读存储介质,存储有非暂时性计算机可读指令,当所述非暂时性计算机可读指令由计算机执行时实现本公开任一实施例提供的算子处理方法。

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