平台框架扩展方法、装置及存储介质与流程

文档序号:34679588发布日期:2023-07-05 19:57阅读:19来源:国知局
平台框架扩展方法、装置及存储介质与流程

本技术涉及人工智能领域,尤其涉及一种平台框架扩展方法、装置及存储介质。


背景技术:

1、相关技术中,基于深度学习框架可生成神经网络模型,将神经网络模型部署在芯片平台上,基于芯片平台上预先嵌入的平台框架,可以完成神经网络模型完整的逻辑推理。实际上,可以将神经网络视为一种有向无环的计算图,图中包括的各个计算节点对应于神经网络中的各个算子,可以表示出神经网络所实现的各种计算。

2、相对于静态计算图而言的动态计算图,是指计算图的构建和计算同时发生的一类计算图。目前,支持动态计算图的深度学习框架,由于其调试灵活性而常用于生成神经网络模型,这类神经网络模型中,各个算子对应的代码灵活性高,代码的表现形式不固定。

3、然而,尤其对于基于动态计算图的神经网络模型,由于模型中算子的表现形式不固定,导致神经网络模型中经常会存在芯片平台不支持的算子,而难以将其识别和抽取,进而导致模型部署困难。


技术实现思路

1、本技术提供一种平台框架扩展方法、装置及存储介质,以解决基于深度学习框架的神经网络模型在芯片平台上部署困难的问题。

2、第一方面,本技术提供一种平台框架扩展方法,所述方法包括:获取神经网络模型;确定所述神经网络模型中的非支持算子,所述非支持算子包括第一类算子和/或第二类算子,所述第一类算子是指预定义的,且目标平台不支持的算子,所述目标平台是指用于部署所述神经网络模型的芯片平台,所述第二类算子是指自定义的算子;根据所述非支持算子的算法逻辑,生成与所述非支持算子对应且所述目标平台支持的逻辑代码;利用所述逻辑代码扩展所述目标平台的平台框架,以使所述目标平台支持所述逻辑代码对应的算子。基于本技术提供的平台框架扩展方法,可以通过对神经网络模型中的第一类算子和第二类算子进行识别,并根据第一类算子和第二类算子的算法逻辑,生成目标平台支持的逻辑代码,利用生成的逻辑代码对目标平台的平台框架进行扩展,当将神经网络模型部署在目标平台上后,目标平台支持神经网络模型中的每一个算子,进而解决模型部署困难的问题。

3、结合第一方面,在第一方面可能的实现方式中,所述神经网络模型是基于深度学习框架生成的,所述深度学习框架中的算子具有预先添加的装饰器;所述预定义的算子是指来源于所述深度学习框架的算子;在所述非支持算子包括所述第一类算子的情况下,所述确定所述神经网络模型中的非支持算子,包括:在运行所述神经网络模型的过程中,通过来源于所述深度学习框架的算子的装饰器,获取所述算子的算子类型和算子参数;将获取的所述算子的算子类型和算子参数,与预先获取的所述目标平台支持的算子的算子类型和算子参数进行对比,从所述来源于所述深度学习框架的算子中确定目标平台不支持的算子,得到所述第一类算子。

4、上述实现方式中,在基于某一深度学习框架生成神经网络模型之前,为深度学习框架中的每一个算子添加装饰器,该装饰器用于获取算子的算子类型和算子参数。进而,实现为基于该深度学习框架生成神经网络模型中,来源于深度学习框架的算子,统一添加装饰操作。这样,运行神经网络模型的过程中,即可通过来源于深度学习框架的算子的装饰器,获取到该算子的算子类型和算子参数,再通过与目标平台所支持的算子的算子类型和算子参数进行对比,即可确定出第一类算子。该实现方式可以自动识别出神经网络模型中的第一类算子,无需用户理解神经网络模型中的算法逻辑和目标平台规则,解决了用户手动标注、抽取代码这一开发痛点。

5、结合第一方面,在第一方面可能的实现方式中,在所述非支持算子包括第二类算子的情况下,所述确定所述神经网络模型中的非支持算子,包括:在运行所述神经网络模型的过程中,基于数据处理流向,建立所述神经网络模型对应的数据结构,所述数据结构包括与所述神经网络模型中的算子一一对应的数据节点;在与所述来源于所述深度学习框架的算子对应的数据节点中,存储所述装饰器获取的所述算子的算子类型和算子参数;根据目标数据节点对应的算子确定所述第二类算子,所述目标数据节点是指存储内容为空的数据节点。

6、在上述实现方式中,在基于某一深度学习框架生成神经网络模型之前,为深度学习框架中的每一个算子添加装饰器,该装饰器用于获取算子的算子类型和算子参数。进而,神经网络模型中来源于深度学习框架的算子具有装饰器。在此基础上,通过在运行神经网络模型的过程中,建立与数据流向对应的数据结构,使得数据结构中的数据节点顺序与模型中算子执行顺序一致,那么基于某个数据节点即可对应到一个算子,当执行到具有装饰器的算子时,将通过装饰器获取的算子类型和算子参数存储到对应的数据节点中,可以准确记录到哪些数据节点对应的算子具有装饰器,哪些数据节点对应的算子不具有装饰器,进而从不具有装饰器的算子中确定出第二类算子。通过该实现方式,可以自动识别出神经网络模型中的第二类算子,无需用户理解神经网络模型中的算法逻辑和目标平台规则,解决了用户手动标注、抽取代码这一开发痛点。

7、结合第一方面,在第一方面可能的实现方式中,所述根据目标数据节点对应的算子确定所述神经网络模型中的第二类算子,包括:若在前向运行所述神经网络模型的过程中,所述目标数据节点对应的算子被执行,则确定所述目标数据节点对应的算子为所述神经网络模型中的第二类算子。

8、上述实现方式中,考虑到一些第二类算子可以是常数化的预置参数,这样的第二类算子可无需经过转化处理,即可被目标平台支持。因此,若在前向运行神经网络模型的过程中,如果某一目标数据节点对应的算子被执行,则确定该目标数据节点对应的算子为神经网络模型中的第二类算子;否则,认为该目标数据节点对应的算子不是第二类算子。该实现方式可以提高识别第二类算子的精确度。

9、结合第一方面,在第一方面可能的实现方式中,所述确定所述神经网络模型中的非支持算子,包括:获取所述神经网络模型的完整代码数据;将所述完整代码数据输入至预先训练好的非支持算子识别模型中,所述非支持算子识别模型用于从输入的代码数据提取算子对应的代码,并根据提取出的算子的代码,预测所述算子为所述第一类算子或者所述第二类算子的概率;根据所述非支持算子识别模型的输出结果,确定神经网络模型中的所述非支持算子。

10、由上述实现方式可以看出,本技术实施例提供的平台框架扩展方法,可以自动化地识别出神经网络模型中的目标平台不支持的算子,进而提取出神经网络模型的代码中目标平台不支持的部分,而无需用户理解神经网络模型中的算法逻辑和目标平台规则,解决了用户手动标注、抽取代码这一开发痛点。

11、结合第一方面,在第一方面可能的实现方式中,所述根据所述非支持算子的算法逻辑,生成与所述非支持算子对应且所述目标平台支持的逻辑代码,包括:对于每个所述第一类算子,根据预先建立的算子与逻辑代码的映射关系,获取与所述第一类算子的算法逻辑对应且所述目标平台支持的逻辑代码。

12、上述实现方式中,对于每个第一类算子,由于其是包含在深度学习框架中的算子,而非用户自定义算子,算法逻辑稳定,因此可以从预先建立的算子与逻辑代码的映射关系,获取与每个第一类算子的算法逻辑对应的逻辑代码。其中,算子与逻辑代码的映射关系中可以保存与每种深度学习框中的每个算子的算法逻辑,对应的多种逻辑代码,每一种逻辑代码可以是开发人员预先基于dsl语法规则描述的适用于某一种目标平台的代码。这样,当给定某一个第一类算子后,即可从前述映射关系中,直接查找到与该第一类算子对应且适用于目标平台的逻辑代码。该实现方式可以自动化地生成与第一类算子对应且适用于目标平台的逻辑代码,无需开发人员理解神经网络模型中的算法逻辑,也无需开发人员学习dsl语法规则,解决了神经网络模型部署过程中的一个痛点问题。

13、结合第一方面,在第一方面可能的实现方式中,根据所述非支持算子的算法逻辑,生成与所述非支持算子对应且所述目标平台支持的逻辑代码,包括:对于每个所述第二类算子,从所述神经网络模型的完整代码数据中,抽取所述第二类算子的原始逻辑代码;根据所述第二类算子的原始逻辑代码生成所述第二类算子的语法树;遍历所述语法树,以生成所述第二类算子对应的子图;将每个所述第二类算子对应的子图转译成所述目标平台支持的逻辑代码。

14、其中,如果某种预先生成的映射关系数据中,存在与某个第二类算子对应的子图对应且目标平台支持的逻辑代码,则直接从该映射关系数据中获取待第二类算子对应的逻辑代码即可。此外,还可以预先训练好基于深度学习神经网络的转译模型,利用转译模型,根据第二类算子对应的子图,生成目标平台支持的逻辑代码。

15、在上述实现方式中,可以自动化地完成第二类算子算法逻辑的提取,生成对应的子图,并基于dsl语法规则将子图转译成目标平台支持的逻辑代码,无需开发人员理解神经网络模型中的算法逻辑,也无需开发人员学习dsl语法规则,进而解决神经网络模型部署过程中的一个痛点问题。

16、结合第一方面,在第一方面可能的实现方式中,所述将每个所述第二类算子对应的子图转译成所述目标平台支持的逻辑代码之前,还包括:若存在与所述第二类算子连续的所述第一类算子,则获取与所述第二类算子连续的所述第一类算子对应的子图;将连续的所述第一类算子和所述第二类算子对应的子图合并,得到所述第二类算子对应的合并子图;所述将每个所述第二类算子对应的子图转译成所述目标平台支持的逻辑代码,包括:将每个所述第二类算子对应的子图或者合并子图转译成所述目标平台支持的逻辑代码。

17、结合第一方面,在第一方面可能的实现方式中,所述将每个所述第二类算子对应的子图转译成所述目标平台支持的逻辑代码之前,还包括:若相邻的两个非支持算子之间存在的支持算子的数量小于预设数量,则确定所述相邻的两个非支持算子及所述支持算子是否满足预设的合并条件,其中,所述相邻的两个非支持算子是指执行次序相邻的两个非支持算子,所述支持算子为所述神经网络模型中的且所述目标平台支持的算子;若所述相邻的两个非支持算子及所述支持算子满足所述预设的合并条件,则获取所述支持算子对应的子图;将所述相邻的两个非支持算子对应的子图与所述支持算子对应的子图合并,得到与所述相邻的两个非支持算子中的第二类算子对应的合并子图;所述将每个所述第二类算子对应的子图转译成所述目标平台支持的逻辑代码,包括:将每个所述第二类算子对应的子图或者合并子图转译成所述目标平台支持的逻辑代码。

18、在上述实现方式中,通过对相邻的两个非支持算子,及相邻的两个非支持算子之间存在的支持算子,是否满足合并条件进行判定,保证子图执行效率和/或优化平台资源占用率、减少异构核切换所带来的效率损失及资源损失。

19、结合第一方面,在第一方面可能的实现方式中,所述将每个所述第二类算子对应的子图转译成所述目标平台支持的逻辑代码之前,还包括:对每个所述第二类算子对应的子图进行优化处理,以调整每个所述第二类算子对应的子图之间的连接关系,和/或,对满足替换条件的一个或者多个所述第二类算子对应的子图进行替换。

20、结合第一方面,在第一方面可能的实现方式中,在所述非支持算子包括所述第二类算子的情况下,所述利用所述逻辑代码扩展所述目标平台的平台框架,包括:在运行所述神经网络模型过程中,获取所述第二类算子的原始输入数据和原始输出数据;将所述原始输入数据作为所述第二类算子对应的所述逻辑代码的输入,运行所述第二类算子对应的所述逻辑代码,以获得所述第二类算子对应的所述逻辑代码的输出数据;通过对比所述原始输出数据与所述第二类算子对应的所述逻辑代码的输出数据,验证所述第二类算子对应的所述逻辑代码的正确性;利用验证正确的所述第二类算子对应的所述逻辑代码,扩展所述平台框架。

21、在上述实现方式中,通过对生成的第二类算子的逻辑代码进行正确性验证,进而保证扩展到平台框架中的逻辑代码是正确的。

22、第二方面,本技术还提供一种平台框架扩展装置,所述装置包括:模型获取模块,用于获取神经网络模型;非支持算子识别模块,用于确定所述神经网络模型中的非支持算子,所述非支持算子包括第一类算子和/或第二类算子,所述第一类算子是指预定义的,且目标平台不支持的算子,所述目标平台是指用于部署所述神经网络模型的芯片平台,所述第二类算子是指自定义的算子;代码生成模块,用于根据所述非支持算子的算法逻辑,生成与所述非支持算子对应且所述目标平台支持的逻辑代码;框架扩展模块,用于利用所述逻辑代码扩展所述目标平台的平台框架,以使所述目标平台支持所述逻辑代码所对应的算子。

23、结合第二方面,在第二方面可能的实现方式中,所述神经网络模型是基于深度学习框架生成的,所述深度学习框架中的算子具有预先添加的装饰器;所述预定义的算子是指来源于所述深度学习框架的算子,在所述非支持算子包括所述第一类算子的情况下,所述非支持算子识别模块,具体用于:在运行所述深度学习模型的过程中,通过所述来源于所述深度学习框架的算子的装饰器,获取所述算子的算子类型和算子参数;将获取的所述算子的算子类型和算子参数,与预先获取的所述目标平台支持的算子的算子类型和算子参数进行对比,从所述来源于所述深度学习框架的算子中确定目标平台不支持的算子,得到所述第一类算子。

24、结合第二方面,在第二方面可能的实现方式中,在所述非支持算子包括所述第二类算子的情况下,所述非支持算子识别模块,具体用于:在运行所述神经网络模型的过程中,基于数据处理流向,建立所述神经网络模型对应的数据结构,所述数据结构包括与所述神经网络模型中的算子一一对应的数据节点;在与所述来源于所述深度学习框架的算子对应的数据节点中,存储所述装饰器获取的所述算子的算子类型和算子参数;根据目标数据节点对应的算子确定所述神经网络模型中的第二类算子,所述目标数据节点是指存储内容为空的数据节点。

25、结合第二方面,在第二方面可能的实现方式中,所述非支持算子识别模块,具体用于:若在运行所述神经网络模型的过程中,所述目标数据节点对应的算子被执行,则确定所述目标数据节点对应的算子为所述第二类算子。

26、结合第二方面,在第二方面可能的实现方式中,所述非支持算子识别模块,具体用于:获取所述神经网络模型的完整代码数据;将所述完整代码数据输入至预先训练好的非支持算子识别模型中,所述非支持算子识别模型用于从输入的代码数据提取算子对应的代码,并根据提取出的算子的代码,输出所述算子为所述第一类算子或者所述第二类算子的概率;根据所述非支持算子识别模型的输出结果,确定所述神经网络模型中的所述非支持算子。

27、结合第二方面,在第二方面可能的实现方式中,所述代码生成模块,具体用于:对于每个所述第一类算子,根据预先建立的算子与逻辑代码的映射关系,获取与所述第一类算子的算法逻辑对应且所述目标平台支持的逻辑代码。

28、结合第二方面,在第二方面可能的实现方式中,所述代码生成模块,具体用于:对于每个所述第二类算子,从所述神经网络模型的完整代码数据中,抽取所述第二类算子的原始逻辑代码;根据所述第二类算子的原始逻辑代码生成所述第二类算子的语法树;遍历所述语法树,以生成所述第二类算子对应的子图;将每个所述第二类算子对应的子图转译成所述目标平台支持的逻辑代码。

29、结合第二方面,在第二方面可能的实现方式中,所述代码生成模块,还用于:在将每个所述第二类算子对应的子图转译成所述目标平台支持的逻辑代码之前,若存在与所述第二类算子连续的所述第一类算子,则获取与所述第二类算子连续的所述第一类算子对应的子图;将连续的所述第一类算子和所述第二类算子对应的子图合并,得到所述第二类算子对应的合并子图;所述代码生成模块,具体用于:将每个所述第二类算子对应的子图或者合并子图转译成所述目标平台支持的逻辑代码。

30、结合第二方面,在第二方面可能的实现方式中,代码生成模块,还用于:在将每个所述第二类算子对应的子图转译成所述目标平台支持的逻辑代码之前,若相邻的两个所述非支持算子之间存在的支持算子的数量小于预设数量,则确定所述相邻的两个非支持算子及所述支持算子是否满足预设的合并条件,其中,所述相邻的两个非支持算子是指执行次序相邻的两个非支持算子,所述支持算子为所述神经网络模型中的且所述目标平台支持的算子;若所述相邻的两个非支持算子及所述支持算子满足所述预设的合并条件,则获取所述支持算子对应的子图;将所述相邻的两个非支持算子对应的子图与所述支持算子对应的子图合并,得到与所述相邻的两个非支持算子中的第二类算子对应的合并子图;所述代码生成模块,具体用于:将每个所述第二类算子对应的子图或者合并子图转译成所述目标平台支持的逻辑代码。

31、结合第二方面,在第二方面可能的实现方式中,所述代码生成模块,还用于:对每个所述第二类算子对应的子图进行优化处理,以调整每个所述第二类算子对应的子图之间的连接关系,和/或,对满足替换条件的一个或者多个所述第二类算子对应的子图进行替换。

32、结合第二方面,在第二方面可能的实现方式中,在所述非支持算子包括所述第二类算子的情况下,所述框架扩展模块具体用于:在运行所述神经网络模型过程中,获取所述第二类算子的原始输入数据和原始输出数据;将所述原始输入数据作为所述第二类算子对应的所述逻辑代码的输入,运行所述第二类算子对应的所述逻辑代码,以获得所述第二类算子对应的所述逻辑代码的输出数据;通过对比所述原始输出数据与所述第二类算子对应的所述逻辑代码的输出数据,验证所述第二类算子对应的所述逻辑代码的正确性;利用验证正确的所述第二类算子对应的所述逻辑代码,扩展所述平台框架。

33、第三方面,本技术还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,当所述计算机程序在电子设备上运行时,使得所述电子设备执行第一方面中任意一种实现方式所述的方法。

34、可以理解地,上述提供的任一种装置或服务器或计算机可读存储介质或计算机程序产品等均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考对应的方法中的有益效果,此处不再赘述。

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