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

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

文献发布时间:2024-01-17 01:13:28


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

技术领域

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

背景技术

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

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

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

发明内容

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

附图说明

图1为本申请根据一示例性实施例提供的一种平台框架扩展方法流程图;

图2为本申请根据一示例性实施例示出的一种神经网络模型算子组成示意图;

图3为本申请根据一示例性实施例提供的另一种平台框架扩展方法流程图;

图4为本申请根据一示例性实施例提供的另一种平台框架扩展方法流程图;

图5为本申请根据一示例性实施例提供的一种用户交互界面;

图6为本申请根据一示例性实施例提供的一种平台框架扩展装置框图;

图7为本申请根据一示例性实施例提供的一种电子设备示意图。

具体实施方式

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

神经网络(Neural Networks,NN)是由大量的、简单的处理单元广泛地互相连接而形成的复杂网络,一个处理单元相当于一个算子,它是一个高度复杂的非线性动力学习系统。可形象地,可以将神经网络视为一种有向无环的计算图,计算图中包括的各个计算节点对应于神经网络中的各个算子,可以表示出神经网络中各个处理单元所实现的计算。应理解的是,神经网络中的一个或者多个连续的算子对应于计算图中的一个或者多个连续的计算节点,该一个或者多个连续的计算节点对应于完整计算图的一个子图,或者说,可以将该一个或者多个连续的计算节点划分至完整计算图的一个子图。执行神经网络即执行该计算图时,可以将计算图的每一个子图分配至不同的处理单元上进行运算。其中,处理单元可以是任意具备计算能力的电子元件,如中央处理器(Central Processing Unit/Processor,CPU)、图形处理器(Graphics Processing Unit,GPU)等。

基于深度学习框架可生成神经网络模型,本申请涉及的深度学习框架可以为TensorFlow框架、PyTorch框架、快速特征嵌入的卷积结构(Convolutional Architecturefor Fast Feature Embedding,Caffe)框架等。

深度学习框架中包含多种算子,如卷积算子、激活算子、归一化算子等。基于深度学习框架生成神经网络模型,即是基于深度学习框架中的算子构建神经网络模型。因此,基于某种深度学习框架生成的神经网络模型,包括该种深度学习框架中的各种算子。值得注意的是,在构建神经网络模型的过程中,为了实现特定的任务目的,用户还可以在深度学习框架的基础上,在神经网络模型中添加自定义的算子。

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

然而,尤其对于基于动态计算图的神经网络模型,由于模型中算子的表现形式不固定,导致神经网络模型中经常会存在芯片平台不支持的算子,而难以将其识别和抽取,进而导致模型部署困难。需要说明的是,芯片平台不支持的算子,可以理解为芯片平台上部署的平台框架不能支持完成算子中的操作和/或算子参数。除此之外,由于不同的深度学习框架中的算子的表现形式不同,且不同的深度学习框架生成的神经网络模型中的算子也具有不同的表现形式,因此如果芯片平台上的平台框架不支持神经网络模型中的算子的表现形式,也可视为芯片平台不支持神经网络模型中的算子。然而,由于在完整的神经网络模型代码文件中,芯片平台支持与不支持的算子逻辑代码混合在一起,若要从中提取出芯片平台不支持的算子逻辑代码,非常困难。

上述表现形式包括模型的参数格式、属性、数据类型、语言代码等。上述参数格式包括:prototxt、caffemodel、meta、ckpt、py、pth等,上述属性包括:逻辑密集属性算子、计算密集属性算子等,上述数据类型包括:double、float32、float16、int、标量、张量等,上述语言代码包括:Python语言、C/C++语言、cu语言等。

为了让目标平台能够支持部署在其上的神经网络模型中的算子,本申请实施例提供一种平台框架扩展方法,通过该方法,可以通过对神经网络模型中的非支持算子进行识别,并根据非支持算子的算法逻辑,生成目标平台支持的逻辑代码,利用生成的逻辑代码对目标平台的平台框架进行扩展,当将神经网络模型部署在目标平台上后,目标平台支持神经网络模型中的每一个算子,进而解决模型部署困难的问题。应理解的是,平台框架为可扩展框架,即能将不支持算子融入并完成完整推理的框架,包括开源(如TVM框架)和非开源的框架(如HIKFlow框架)。

图1为本申请根据示例性实施例示出的一种平台框架扩展方法流程图,该方法可以应用于电子设备,如终端设备、服务器。如图1所示,该方法可以包括:

S101,获取神经网络模型。

应理解的是,可以将神经网络模型中的算子分为预定义的算子和自定义的算子,其中,预定义的算子可以是,来源于神经网络模型所依赖的深度学习框架中的算子。例如,在基于深度学习框架构建神经网络模型的过程中,一方面,可以直接利用深度学习框架中的算子作为神经网络模型的算子,另一方面,还可以在神经网络模型中引入自定义算子。也就是说,自定义算子是指在构建神经网络模型时,用户添加到神经网络模型中的用户自定义的算子。换言之,自定义算子并非来源于深度学习框架。

图2为本申请示例性示出的一种深度学习框架和神经网络模型的算子组成示意图,如图2所示,深度学习框架中的算子包括目标平台支持的算子,即支持算子,如算子1、算子2等,还包括目标平台不支持的算子,即非支持算子,如算子3、算子4等。为便于说明,本申请将神经网络模型中预定义的非支持算子称为第一类算子,如算子3、算子4等。换言之,神经网络模型中来源于深度学习框架且目标平台不支持的算子,即为第一类算子。将神经网络模型中的自定义算子称为第二类算子,如图2中的算子5、算子6等。换言之,神经网络模型中并非来源于深度学习框架的算子即为第二类算子。此外,神经网络模型中还包括目标平台支持的算子,即支持算子。前述目标平台是指用于部署该神经网络模型的芯片平台。

以深度学习框架Pytorch和TensorFlow2,以及芯片平台上部署的平台框架HIKFlow和TVM为例:深度学习框架Pytorch和TensorFlow2中包括卷积算子、池化算子、全连接算子、HardSigmod算子、HardSwish算子、Mish算子等。其中,卷积算子、池化算子、全连接算子为平台框架HIKFlow和TVM的支持算子。HardSigmod算子、HardSwish算子、Mish算子为平台框架HIKFlow和TVM的非支持算子,即第一类算子。应理解的是,根据神经网络模型的任务需求的不同,其中包含的自定义算子多种多样。例如,一些神经网络模型的DetectOut层中python切片的切片赋值算子、地板除算子、乘方算子和采用代码直接描述的算子(如y[...,2:4]=(y[...,2:4]*2)**2*self.anchor_grid[i]#wh)等,都属于自定义算子,即平台框架HIKFlow和TVM的非支持算子中的第二类算子。

需要说明的是,以上列举的支持算子和非支持算子仅为示例性举例,其还可以包括其他多种支持算子和非支持算子,本公开实施例对此并不限定。

S102,确定该神经网络模型中的非支持算子,非支持算子包括第一类算子和/或第二类算子,第一类算子是指预定义的,且目标平台不支持的算子,第二类算子是指自定义的算子。

在一些实施例中,在基于某一深度学习框架生成神经网络模型之前,统一为深度学习框架中的每一个算子添加装饰器,该装饰器用于获取算子的算子类型和算子参数。进而,实现为基于该深度学习框架生成神经网络模型中,来源于深度学习框架的算子,统一添加装饰操作。其中,算子类型可以是算子包括的计算操作的类型,算子参数包括算子的输入参数、预置参数和输出参数。

这样,前向运行神经网络模型的过程中,模型中预定义算子(即来源于深度学习框架的算子)的装饰器,将能获取到该算子的算子类型和算子参数,再通过与目标平台所支持的算子的算子类型和算子参数进行对比,即可确定出第一类算子。另一方面,基于该深度学习框架生成的神经网络模型中,具有装饰器的算子即是包含在深度学习框架中的算子,不具有装饰器的算子即为未包含在该深度学习框架中的算子,即自定义算子,也即第二类算子。进而,可以根据神经网络模型中的算子是否添加了装饰操作,来确定出神经网络模型中的第二类算子。

基于此,一种可能的确定神经网络模型中的第一类算子的实现方式包括:前向运行上述神经网络模型;在前向运行所述神经网络模型的过程中,通过来源于深度学习框架的算子的装饰器,获取算子的算子类型和算子参数;将获取的算子的算子类型和算子参数,与预先获取的目标平台支持的算子的算子类型和算子参数进行对比,从来源于所述深度学习框架的算子中确定目标平台不支持的算子,得到神经网络模型中的第一类算子。该实现方式可以自动识别出神经网络模型中的第一类算子,无需用户理解神经网络模型中的算法逻辑和目标平台规则,解决了用户手动标注、抽取代码这一开发痛点。

如图3所示,一种可能的确定神经网络模型中的第二类算子的实现方式包括:S301,前向运行上述神经网络模型。S302,在前向运行神经网络模型的过程中,基于数据处理流向,建立神经网络模型对应的数据结构,数据结构包括数据节点,数据结构中的数据节点与神经网络模型中的算子一一对应,从而与神经网络模型对应的计算图中的计算节点一一对应。本申请实施例中,数据节点之间的连接关系可以体现出模型中各个算子的执行顺序,各个数据节点还可以用于存储与对应算子有关的数据。S303,在与来源于深度学习框架的算子对应的数据节点中,存储其装饰器获取的算子的算子类型和算子参数。S304,根据数据结构中目标数据节点对应的算子,确定神经网络模型中的第二类算子,目标数据节点是指存储内容为空的数据节点。具体实现中,在模型前向运行过程中,如果出现未被装饰的算子(即未添加装饰器的算子),则说明该算子为第二类算子,此时,由于无法提取出该算子的算子类型和参数,因此,不在该算子对应的存储数据内容,直到出现下一个非第二类算子,非第二类算子即为添加有装饰的算子,也即包含在深度学习框架中的算子。将两个非第二类算子之间的算子确定为第二类算子。

上述神经网络模型对应的数据结构可以是双向链表、数据字典或者节点树。在数据结构为双向链表的实施方式中,上述数据节点则为双向链表中的数据结点。在数据结构为数据字典的实施方式中,上述数据节点则为数据字典中的数据元素(或称为数据对象)。在数据结构为节点树的实施方式中,上述数据节点则为节点树中的节点。

可以理解的是,如果神经网络模型中的一个或者多个算子不具有装饰器,那么在模型前向运行过程中,便无法提取出该一个或者多个算子的算子类型和算子参数,进而该一个或者多个算子对应的数据节点中将没有存储任何内容。

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

在一些实施例中,以一定数量的神经网络模型作为训练样本,用于训练初始的非支持算子识别模型。利用训练好的非支持算子识别模型,识别待处理的神经网络模型中的第一类算子和第二类算子。具体的,首先根据神经网络模型的代码工程文件中包含的前向调用关系,获取神经网络模型的完整的抽象语法树。例如,在前向运行神经网络模型的过程中,在代码工程文件中标记每一个执行函数,抽取执行函数所对应的文本,基于代码工程文件和抽取的文本,得到完整的抽象语法树。针对神经网络模型的完整抽象语法树,对其中的第一类算子和第二类算子进行标注,得到训练数据。此外,也可以利用上述“可能的确定神经网络模型中的第一类算子的实现方式”和“可能的确定神经网络模型中的第二类算子的实现方式”,对用作训练数据的神经网络模型中的第一类算子和第二类算子进行标注,得到训练数据。再使用训练数据训练初始的非支持算子识别模型。最后,对于待处理的神经网络模型,即S101中的神经网络模型,获取其完整代码数据,输入到训练好的非支持算子识别模型中,以利用所述非支持算子识别模型预测模型中算子是第一类算子或者第二类算子的概率,进而根据非支持算子识别模型的输出结果,确定神经网络模型中的非支持算子。

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

S103,根据所述非支持算子的算法逻辑,生成与所述非支持算子对应且目标平台支持的逻辑代码。

领域特定语言(Domain Specific Language,DSL),能采用特定的语法规则和描述,完成适用于不同芯片平台的逻辑代码的生成及优化。实际应用中,需要开发人员对神经网络模型中的算法逻辑理解完整后,再使用DSL重新描述,学习成本高,难度大,效率低,因此是神经网络模型部署过程中的一个痛点问题。

针对以上问题,在非支持算子包括第一类算子的情况下,对于每个第一类算子,由于其是包含在深度学习框架中的算子,即预定义的算子,而非用户自定义算子,算法逻辑稳定,因此可以从预先建立的算子与逻辑代码的映射关系,获取与每个第一类算子的算法逻辑对应的逻辑代码。其中,算子与逻辑代码的映射关系中可以保存与每种深度学习框中的每个算子的算法逻辑,对应的多种逻辑代码,每一种逻辑代码可以是开发人员预先基于DSL语法规则描述的适用于一种目标平台的代码。这样,当给定,某一个第一类算子后,即可从前述映射关系中,直接查找到与该第一类算子对应且适用于目标平台的逻辑代码。

而在非支持算子包括第二类算子的情况下,对于每个第二类算子,如图4所示,在一种可能的实现方式中:S401,从神经网络模型的完整代码数据中,抽取该第二类算子的原始逻辑代码。S402,根据该第二类算子的原始逻辑代码生成第二类算子的语法树。S403,遍历语法树,以生成第二类算子对应的子图。S404,将每个第二类算子对应的子图转译成目标平台支持的逻辑代码。其中,如果某种预先生成的映射关系数据中,存在与某个第二类算子对应的子图对应且目标平台支持的逻辑代码,则直接从该映射关系数据中获取待第二类算子对应的逻辑代码即可。此外,还可以预先训练好转译模型,利用转译模型,根据第二类算子对应的子图,生成目标平台支持的逻辑代码。

在上述实现方式的基础上,在将每个第二类算子对应的子图转译成目标平台支持的逻辑代码之前,对于每个第二类算子,判断S102确定的第一类算子中,是否存在与该第二类算子连续的第一类算子。其中,两个算子连续,是指在模型前向运行时,两个算子连续依次执行,或者说,其中一个算子的输出,是与其连续的算子的输入。接着,若存在与该第二类算子连续的第一类算子,则获取与该第二类算子连续的第一类算子对应的子图;将该第二类算子和与其连续的第一类算子对应的子图合并,得到该第二类算子对应的第一合并子图。基于此,上述将每个第二类算子对应的子图转译成目标平台支持的逻辑代码,即为:将每个第二类算子对应的子图或者第一合并子图转译成目标平台支持的逻辑代码。

在上述实现方式的基础上,在将每个第二类算子对应的子图转译成目标平台支持的逻辑代码之前,判断相邻的两个非支持算子之间存在的支持算子的数量是否小于预设数量,预设数量可以为2。其中,相邻的两个非支持算子是指执行次序相邻的两个非支持算子。举例来说,相邻的两个非支持算子可以是一个第一类算子和与该第一类算子执行次序相邻的另一个第一类算子,也可以是一个第一类算子和与该第一类算子执行次序相邻的一个第二类算子,还可以是一个第二类算子和与该第二类算子执行次序相邻的另一个第二类算子。支持算子则为神经网络模型中的目标平台支持的算子。接着,若相邻的两个非支持算子之间存在的支持算子的数量小于预设数量,则确定相邻的两个非支持算子及支持算子是否满足预设的合并条件;若相邻的两个非支持算子及支持算子满足预设的合并条件,则获取支持算子对应的子图;将相邻的两个非支持算子对应的子图与支持算子对应的子图合并,得到与相邻的两个非支持算子中的第二类算子对应的第二合并子图。基于此,上述将每个第二类算子对应的子图转译成目标平台支持的逻辑代码,包括:上述将每个第二类算子对应的子图转译成目标平台支持的逻辑代码,即为:将每个第二类算子对应的子图、第一合并子图或者第二合并子图转译成目标平台支持的逻辑代码。

如前所述,神经网络中的一个或者多个连续的算子对应于计算图中的一个或者多个连续的计算节点,该一个或者多个连续的计算节点对应于完整计算图的一个子图,或者说,可以将该一个或者多个连续的计算节点划分至完整计算图的一个子图。执行神经网络即执行该计算图时,可以将计算图的每一个子图分配至不同的处理单元上进行运算。如果不同的处理单元的架构完全相同,那么无论如何划分子图,对计算图的执行效率及资源占用率都没有影响。然而,如果不同的处理单元的架构不同,则在理论上,对于同一个子图,将其分配至不同的处理单元执行,对应的执行效率和/资源占用率会不同。因此如何划分子图,可对目标平台执行计算图的效率及资源占用率产生影响。此外,异构核切换也将为计算图的执行效率和资源带来损失。

结合上述实现方式而言,若相邻的两个非支持算子之间存在的支持算子的数量小于预设数量,那么是否需要将该支持算子的子图与相邻的两个非支持算子的子图合并,需考虑执行效率和资源占用率,也即需考虑是否能够提高执行对应算子的效率,或者降低资源占用率,以及是否可以减少异构核切换带来的损失。具体来说,如果将相邻的两个非支持算子对应的子图与支持算子对应的子图合并,即将相邻的两个非支持算子及二者之间的支持算子划分到一个子图中,可以提高目标平台执行该两个非支持算子及该支持算子的总效率,或者降低资源占用率,那么认为满足上述预设的合并条件;如果将相邻的两个非支持算子及二者之间的支持算子划分到不同的子图当中,可以提高目标平台执行该两个非支持算子及该支持算子的总效率,或者降低资源占用率,那么认为不满足上述预设的合并条件。容易理解的是,以执行效率为评价标准,还是以资源占用率为评价标准,需要结合具体应用环境及需求进行设定。比如,如果需要模型能全帧率运行,那么可以以执行效率为评价标准;如果设备内存很小,那要以内存最省来进行决策。

另外,在一些实施例中,可以将用于执行完整计算图的所有处理单元分为两类:第一类为专用处理单元,或者称为专用核,是指专门用于执行支持算子的处理单元;第二类为通用处理单元,或者称为通用核,是指可编码的处理单元,进一步可以理解为,是指在平台框架被扩展后,用于执行原本非支持算子的处理单元。应理解的是,在这些实施例中,将相邻的两个非支持算子的子图与二者之间的支持算子的子图合并,相当于将该支持算子由专用核切换到通用核上执行。

在一种具体实现方式中,可以利用预先训练好的效率评价模型,来判断相邻的两个非支持算子及二者之间的支持算子,是否满足预设的合并条件。其中,效率评价模型可以被设计为根据可能的子图划分方式和每种子图划分方式所对应的子图执行效率,来确定最佳的子图划分方式,即产生最大执行效率的子图划分方式。更为具体的,用于训练该效率评价模型的样本可以是:根据某种子图划分方式对某一个计算图进行划分而得到的多个子图(该多个子图被分配到不同的计算单元上执行),以及每个子图在其被分配到的计算单元上的执行效率。使用这样的样本数据训练得到的效率评价模型,可以学习到不同子图划分方式所得到的子图在相应计算单元上的执行效率。因此,利用该效率评价模型,当给定某一个子图,可以预测出该子图在特定计算单元上的执行效率。

在另一种具体实现方式中,还可以利用预先生成的基于先验条件的决策树,来判断相邻的两个非支持算子及二者之间的支持算子,是否满足预设的合并条件。其中,先验条件可以包括不同处理单元之间切换的资源占用消耗和时间消耗,如上述通用核和专用核之间切换所产生的资源占用消耗和时间消耗。先验条件还包括支持算子在不同处理单元上的运行耗时,如在上述通用核和专用核上的运行耗时。先验条件还包括支持算子在不同处理单元上运行时的资源占用,如在上述通用核和专用核上运行时的内存占用。

在一些实施例中,上述将每个第二类算子对应的子图转译成所述目标平台支持的逻辑代码之前,还包括:对每个第二类算子对应的子图进行优化处理,以调整每个第二类算子对应的子图之间的连接关系和/或对满足替换条件的一个或者多个第二类算子对应的子图进行替换。具体实现时,可以先对第二类算子对应的子图进行可视化,并在可视化子图的显示界面中提供用户交互接口,一方面,用户可以通过可视化的子图,对子图进行校验,另一方面用户可以通过显示界面中提供的用户交互接口,调整子图之间的连接关系,或者替换某个子图。最后,确认优化后的子图。

图5为本申请实施例示例性示出的一种用户交互界面,如图5所示,该用户交互界面中展示有某个第二类算子对应的子图,该子图包括3个计算节点,分别为计算节点1、计算节点2以及计算节点3,其中,计算节点1、计算节点2以及计算节点3依次连接。应理解的是,该3个计算节点分别对应于3个非支持算子。在该用户交互界面中,每个计算节点对应一个图形化图标,用户可以通过选中某个计算节点对应的图形化图标,对该计算节点进行操作,例如,在选中计算节点1对应的图标后,通过操作删除按钮、修改按钮或者替换按钮,对该计算节点进行删除操作、修改操作或者替换操作。此外,两个计算节点之间的连线具体可以是可操作的图形化用户交互接口,用户可以通过操作某两个计算节点之间的连线,修改计算节点之间的连接关系。值得注意的是,经用户优化处理后的子图,可以实时显示在该用户界面中。最后,用户可以通过该用户交互界面中的确认按钮,确认优化后的子图。需要说明的是,用于展示及优化子图的用户交互界面,不限于图5所示示例所示出的形式。

由上述S103及其可能的实现方式可以看出,本申请实施例提供的平台框架扩展方法,可以自动化地完成非支持算子算法逻辑的提取,生成对应的子图,并基于DSL语法规则将子图转译成目标平台支持的逻辑代码。无需开发人员理解神经网络模型中的算法逻辑,也无需开发人员学习DSL语法规则,解决了神经网络模型部署过程中的一个痛点问题。

S104,利用生成的逻辑代码扩展平台框架,以使目标平台支持与所述逻辑代码对应的算子。

结合图2可知,将神经网络模型中的非支持算子转换成对应的逻辑代码后,将这些逻辑代码植入到目标平台的平台框架代码中,可以实现对平台框架的扩展。需要说明的是,扩展框架的具体实现过程,本质是将逻辑代码植入到平台框架原有的代码当中。由于目标平台是在平台框架中运行神经网络模型,因此,在平台框架得到扩展后,目标平台即可支持运行第一类算子和第二类算子,即使第一类算子和第二类算子成为目标平台的支持算子。

值得注意的是,对于第二类算子,由于其是自定义算子,算法逻辑不稳定,生成的逻辑代码可能存在错误,因此将利用第二类算子对应的逻辑代码扩展平台框架时,先验证逻辑代码的正确性,在在验证正确的情况下,再扩展平台框架。基于此,在可能的实现方式中,S104可以进一步包括:在前向运行所述神经网络模型过程中,获取第二类算子的原始输入数据和原始输出数据;将原始输入数据作为第二类算子对应的逻辑代码的输入,运行第二类算子对应的逻辑代码,以获得第二类算子对应的所述逻辑代码的输出数据;通过对比原始输出数据与第二类算子对应的逻辑代码的输出数据,验证第二类算子对应的逻辑代码的正确性;利用验证正确的逻辑代码扩展平台框架。

需要说明的是,对于第一类算子,由于其算子逻辑稳定,因此认为对应的逻辑代码大概率是正确的。因此,不必要验证其对应的逻辑代码的正确性。当然,也可以利用上述实现方式对第一类算子对应的逻辑代码的正确性进行验证,此处不予赘述。

由以上实施例可知,本申请提供一种平台框架扩展方法,该方法首先获取神经网络模型;然后确定该神经网络模型中的非支持算子,非支持算子包括第一类算子和/或第二类算子,其中,第一类算子是指包含预定义的且目标平台不支持的算子,该第二类算子是指自定义的算子;再根据非支持算子的算法逻辑,生成与非支持算子对应且目标平台支持的逻辑代码;最后利用逻辑代码扩展平台框架,以当将扩展后的平台框架部署在目标平台上后,目标平台支持神经网络模型中的每一个算子。通过该方法,可以基于某一类或者多类神经网络模型中的一个或者多个特定的神经网络模型,对某种平台框架的扩展,当将扩展后的平台框架部署在目标平台上后,目标平台支持该特定神经网络模型中的每一个算子。

相应地,本申请实施例提供一种平台框架扩展装置,该平台框架扩展装置用于执行上述平台框架扩展方法中各个步骤,本申请实施例可以根据上述方法示例对该平台框架扩展装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。

在采用对应各个功能划分各个功能模块的情况下,图5示出上述实施例中所涉及的平台框架扩展装置的一种可能的结构示意图。

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

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

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

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

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

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

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

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

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

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

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

本申请提供的平台框架扩展装置,可以基于某一类或者多类神经网络模型中的一个或者多个特定的神经网络模型,对某种平台框架的扩展,当将扩展后的平台框架部署在目标平台上后,目标平台支持该特定神经网络模型中的每一个算子。

上述装置的各个模块还可以用于执行上述方法实施例中的其他动作,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。

如图7所示,为本公开实施例提供的技术方案所适用的一种电子设备的结构示意图。图7中电子设备70包括但不限于:处理器701、存储器702、输入单元703、接口单元704、电源705及显示单元706。

处理器701是电子设备的控制中心,利用各种接口和线路连接整个电子设备的各个部分,通过运行或执行存储在存储器702内的软件程序和/或模块,以及调用存储在存储器702内的数据,执行电子设备的各种功能和处理数据,从而对电子设备进行整体监控。处理器701可包括一个或多个处理单元;可选的,处理器701可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器701中。

存储器702可用于存储软件程序以及各种数据。存储器702可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能单元所需的应用程序等。此外,存储器702可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。可选地,存储器702可以是非临时性计算机可读存储介质,例如,非临时性计算机可读存储介质可以是只读存储器(read-only memory,ROM)、随机存取存储器(random access memory,RAM)、CD-ROM、磁带、软盘和光数据存储设备等。

输入单元703可以为键盘、触摸屏等器件。

接口单元704为外部装置与电子设备60连接的接口。例如,外部装置可以包括有线或无线头戴式耳机端口、外部电源(或电池充电器)端口、有线或无线数据端口、存储卡端口、用于连接具有识别模块的装置的端口、音频输入/输出(I/O)端口、视频I/O端口、耳机端口等等。接口单元704可以用于接收来自外部装置的输入(例如,数据信息等)并且将接收到的输入传输到电子设备70内的一个或多个元件或者可以用于在电子设备70和外部装置之间传输数据。

电源705(比如:电池)可以用于为各个部件供电。可选的,电源705可以通过电源管理系统与处理器701逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。

显示单元706用于显示用户界面(user interface,UI)。该用户界面可以包括图形、文本、图标、视频及其它们的任意组合。当显示单元706是显示屏的情况下,显示单元706还具有采集在显示单元706的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器701进行处理。此时,显示单元706还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。

在一些实施例中,显示单元706可以为终端设备的前面板;显示单元706可以采用液晶显示屏(liquid crystal display,LCD)、有机发光二极管(organic light-emittingdiode,OLED)等材质制备。在电子设备70为终端设备的情况下,该终端设备包括显示单元706。

可选的,本公开实施例中的计算机指令也可以称之为应用程序代码或系统,本公开实施例对此不作具体限定。

需要说明的是,图7所示的电子设备仅为示例,其不对本公开实施例可适用的电子设备构成限定。实际实现时,电子设备可以包括比图7中所示的更多或更少的设备或器件。

其中,上述平台框架扩展装置中的各个模块可以是处理器或控制器,例如图6中的处理器601。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例、电子设备实施例、计算机可读存储介质实施例、计算机程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本申请的较佳实施例,并非用于限定本申请的保护范围。凡在本申请的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本申请的保护范围内。

相关技术
  • 数据库动态扩展方法、系统、装置和存储介质
  • 模型扩展方法及装置、电子设备和存储介质
  • 性能测试平台脚本存储方法、装置、设备及存储介质
  • 一种多框架模板的模板独立方法、装置及存储介质
  • 平台应用管理方法、装置、存储介质及终端设备
  • 一种编解码框架扩展方法、装置、设备及存储介质
  • 一种图形视图框架的扩展方法、装置、设备及存储介质
技术分类

06120116068651