可左右滑动选省市

神经网络模型的编译方法和装置、电子设备和存储介质

更新时间:2024-07-01
神经网络模型的编译方法和装置、电子设备和存储介质 专利申请类型:实用新型专利;
源自:北京高价值专利检索信息库;

专利名称:神经网络模型的编译方法和装置、电子设备和存储介质

专利类型:实用新型专利

专利申请号:CN202111519387.8

专利申请(专利权)人:北京地平线机器人技术研发有限公司
权利人地址:北京市海淀区丰豪东路9号院2号楼3层1单元302

专利发明(设计)人:李德林,张祎男,李建军,王振江

专利摘要:本公开实施例公开了一种神经网络模型的编译方法和装置、电子设备和存储介质,其中,方法包括:获取待编译神经网络模型对应的第一模型;针对第一模型的至少一个MUL层中的第一MUL层,将第一MUL层的第一输入张量和第二输入张量的元素对应相乘运算变换为深度卷积运算,并将深度卷积运算获得的第一输出张量变换为与第一MUL层的原输出张量数据结构相同的第二输出张量,获得第一MUL层对应的优化后的第二MUL层;基于各优化后的第二MUL层获得第一模型对应的优化模型;将优化模型编译为对应的二进制的目标模型。本公开实施例使得神经网络模型的元素对应相乘运算可以在加速芯片上实现,从而有效提高神经网络模型的推理速度。

主权利要求:
1.一种神经网络模型的编译方法,包括:
获取待编译神经网络模型对应的第一模型,所述第一模型为所述待编译神经网络模型对应的中间表示;
针对所述第一模型的至少一个MUL层中的第一MUL层,将所述第一MUL层的第一输入张量和第二输入张量的元素对应相乘运算变换为深度卷积运算,并将深度卷积运算获得的第一输出张量变换为与所述第一MUL层的原输出张量数据结构相同的第二输出张量,获得所述第一MUL层对应的优化后的第二MUL层;所述MUL层为两输入张量的元素对应相乘的层;
基于各优化后的第二MUL层,获得所述第一模型对应的优化模型;
将所述优化模型编译为所述待编译神经网络模型对应的二进制的目标模型。
2.根据权利要求1所述的方法,其中,所述将所述第一MUL层的第一输入张量和第二输入张量的元素对应相乘运算变换为深度卷积运算,包括:将所述第一输入张量的数据结构变换为预设格式的第一张量,并将所述第二输入张量的数据结构变换为所述预设格式的第二张量;
将所述第二张量按照预设卷积核数据排布方式进行排布,获得所述第二张量对应的第一排布结果,以使所述第一张量能够与所述第一排布结果进行深度卷积运算。
3.根据权利要求2所述的方法,其中,所述第一输入张量和所述第二输入张量的数据结构均为H*W*C,H、W、C均为正整数,分别表示张量的高度、宽度和通道数量;所述将所述第一输入张量的数据结构变换为预设格式的第一张量,并将所述第二输入张量的数据结构变换为所述预设格式的第二张量,包括:将所述第一输入张量的数据结构从H*W*C变换为1*1*C1,获得所述第一张量,并将所述第二输入张量的数据结构从H*W*C变换为1*1*C1,获得所述第二张量,C1表示H、W和C三者的乘积。
4.根据权利要求3所述的方法,其中,所述第一张量与所述第一排布结果的深度卷积运算获得的第一输出张量的数据结构为1*1*C1,所述将深度卷积运算获得的第一输出张量变换为与所述第一MUL层的原输出张量数据结构相同的第二输出张量,包括:将所述第一输出张量的数据结构从1*1*C1变换为H*W*C,获得所述第二输出张量。
5.根据权利要求3所述的方法,其中,所述预设卷积核数据排布方式包括用于深度卷积运算的卷积核在静态随机存取存储器SRAM中的占用规则,所述将所述第二张量按照预设卷积核数据排布方式进行排布,获得所述第二张量对应的第一排布结果,包括:按照所述预设卷积核数据排布方式将所述第二张量排布成卷积核在SRAM中的占用方式,获得所述第一排布结果,使得在与所述第一张量进行深度卷积运算时,所述第一排布结果以卷积核在SRAM中的占用方式占用SRAM。
6.根据权利要求2所述的方法,其中,在将所述第一输入张量的数据结构变换为预设格式的第一张量,并将所述第二输入张量的数据结构变换为所述预设格式的第二张量之后,所述方法还包括:按照预设特征数据排布方式对所述第一张量进行排布,获得所述第一张量对应的第二排布结果,并按照所述预设特征数据排布方式对所述第二张量进行排布,获得所述第二张量对应的第三排布结果;所述预设特征数据排布方式包括用于深度卷积运算的张量的特征数据在SRAM中的占用规则;所述第二排布结果用于与所述第一排布结果进行深度卷积运算;
所述将所述第二张量按照预设卷积核数据排布方式进行排布,获得所述第二张量对应的第一排布结果,包括:将所述第三排布结果按照所述预设卷积核数据排布方式进行排布,获得所述第二张量对应的第一排布结果。
7.根据权利要求1‑6任一所述的方法,其中,所述第一输出张量是按照预设特征数据排布方式进行排布的,所述将深度卷积运算获得的第一输出张量变换为与所述第一MUL层的原输出张量数据结构相同的第二输出张量,包括:将所述第一输出张量的排布方式从所述预设特征数据排布方式变换成与所述原输出张量相同的排布方式,获得所述第二输出张量。
8.一种神经网络模型的编译装置,包括:
第一获取模块,用于获取待编译神经网络模型对应的第一模型,所述第一模型为所述待编译神经网络模型对应的中间表示;
第一处理模块,用于针对所述第一模型的至少一个MUL层中的第一MUL层,将所述第一MUL层的第一输入张量和第二输入张量的元素对应相乘运算变换为深度卷积运算,并将深度卷积运算获得的第一输出张量变换为与所述第一MUL层的原输出张量数据结构相同的第二输出张量,获得所述第一MUL层对应的优化后的第二MUL层;所述MUL层为两输入张量的元素对应相乘的层;
第二处理模块,用于基于各优化后的第二MUL层,获得所述第一模型对应的优化模型;
第三处理模块,用于将所述优化模型编译为所述待编译神经网络模型对应的二进制的目标模型。
9.一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行上述权利要求1‑7任一所述的神经网络模型的编译方法。
10.一种电子设备,所述电子设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现上述权利要求1‑7任一所述的神经网络模型的编译方法。 说明书 : 神经网络模型的编译方法和装置、电子设备和存储介质技术领域[0001] 本公开涉及人工智能技术,尤其是一种神经网络模型的编译方法和装置、电子设备和存储介质。背景技术[0002] 随着人工智能的飞速发展,一系列轻量级深度神经网络逐渐被用在手机、PC(个人计算机)、车载设备等移动终端上,以实现物体检测、分类等机器学习任务。在这些深度神经网络中通常存在MUL(elementWisemultiply,元素对应相乘)层,需要对该层的两个输入张量进行元素对应相乘运算,为了提高深度神经网络的推理速度,通常采用专门加速深度神经网络的芯片来实现深度神经网络的运算,该芯片往往不支持元素对应相乘运算,因此,如何基于芯片实现元素对应相乘运算,以进一步提高神经网络的推理速度,成为一种亟需解决的技术问题。发明内容[0003] 为了解决上述技术问题,提出了本公开。本公开的实施例提供了一种神经网络模型的编译方法和装置、电子设备和存储介质。[0004] 根据本公开实施例的一个方面,提供了一种神经网络模型的编译方法,包括:获取待编译神经网络模型对应的第一模型,所述第一模型为所述待编译神经网络模型对应的中间表示;针对所述第一模型的至少一个MUL层中的第一MUL层,将所述第一MUL层的第一输入张量和第二输入张量的元素对应相乘运算变换为深度卷积运算,并将深度卷积运算获得的第一输出张量变换为与所述第一MUL层的原输出张量数据结构相同的第二输出张量,获得所述第一MUL层对应的优化后的第二MUL层;所述MIL层为两输入张量的元素对应相乘的层;基于各优化后的第二MIL层,获得所述第一模型对应的优化模型;将所述优化模型编译为所述待编译神经网络模型对应的二进制的目标模型。[0005] 根据本公开实施例的另一个方面,提供了一种神经网络模型的编译装置,包括:第一获取模块,用于获取待编译神经网络模型对应的第一模型,所述第一模型为所述待编译神经网络模型对应的中间表示;第一处理模块,用于针对所述第一模型的至少一个MUL层中的第一MUL层,将所述第一MUL层的第一输入张量和第二输入张量的元素对应相乘运算变换为深度卷积运算,并将深度卷积运算获得的第一输出张量变换为与所述第一MUL层的原输出张量数据结构相同的第二输出张量,获得所述第一MUL层对应的优化后的第二MUL层;所述MUL层为两输入张量的元素对应相乘的层;第二处理模块,用于基于各优化后的第二MUL层,获得所述第一模型对应的优化模型;第三处理模块,用于将所述优化模型编译为所述待编译神经网络模型对应的二进制的目标模型。[0006] 根据本公开实施例的再一方面,提供一种计算机可读存储介质,所述存储介质存储有计算机程序,所述计算机程序用于执行本公开上述任一实施例所述的神经网络模型的编译方法。[0007] 根据本公开实施例的又一方面,提供一种电子设备,所述电子设备包括:处理器;用于存储所述处理器可执行指令的存储器;所述处理器,用于从所述存储器中读取所述可执行指令,并执行所述指令以实现本公开上述任一实施例所述的神经网络模型的编译方法。[0008] 基于本公开上述实施例提供的神经网络模型的编译方法和装置、电子设备和存储介质,可以在对神经网络模型进行编译过程中,对神经网络模型进行优化,将神经网络模型中的元素对应相乘运算变换成深度卷积运算,使得神经网络模型的元素对应相乘运算可以在加速芯片上实现,从而有效提高神经网络模型的推理速度,解决了现有技术加速芯片不支持元素对应相乘运算的问题。[0009] 下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。附图说明[0010] 通过结合附图对本公开实施例进行更详细的描述,本公开的上述以及其他目的、特征和优势将变得更加明显。附图用来提供对本公开实施例的进一步理解,并且构成说明书的一部分,与本公开实施例一起用于解释本公开,并不构成对本公开的限制。在附图中,相同的参考标号通常代表相同部件或步骤。[0011] 图1是本公开提供的神经网络模型的编译方法的一个示例性的应用场景;[0012] 图2是本公开一示例性实施例提供的神经网络模型的编译方法的流程示意图;[0013] 图3是本公开一个示例性实施例提供的步骤202的流程示意图;[0014] 图4是本公开一示例性实施例提供的输入张量的一种示意图;[0015] 图5是本公开一示例性实施例提供的数据结构变换示意图;[0016] 图6是本公开一示例性实施例提供的排布原理示意图;[0017] 图7是本公开一示例性实施例提供的排布变换的一种示例性示意图;[0018] 图8是本公开另一示例性实施例提供的步骤202的流程示意图;[0019] 图9是本公开一示例性实施例提供的张量排布变换的一种示例性示意图;[0020] 图10是本公开一示例性实施例提供的SRAM二维编址原理示意图;[0021] 图11是本公开一示例性实施例提供的张量转卷积核的SRAM存储原理示意图;[0022] 图12是本公开一示例性实施例提供的MUL层的优化流程框图;[0023] 图13是本公开一示例性实施例提供的神经网络模型的编译装置的结构示意图;[0024] 图14是本公开一示例性实施例提供的第一处理模块的结构示意图;[0025] 图15是本公开电子设备一个应用实施例的结构示意图。具体实施方式[0026] 下面,将参考附图详细地描述根据本公开的示例实施例。显然,所描述的实施例仅仅是本公开的一部分实施例,而不是本公开的全部实施例,应理解,本公开不受这里描述的示例实施例的限制。[0027] 应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。[0028] 本领域技术人员可以理解,本公开实施例中的“第一”、“第二”等术语仅用于区别不同步骤、设备或模块等,既不代表任何特定技术含义,也不表示它们之间的必然逻辑顺序。[0029] 还应理解,在本公开实施例中,“多个”可以指两个或两个以上,“至少一个”可以指一个、两个或两个以上。[0030] 还应理解,对于本公开实施例中提及的任一部件、数据或结构,在没有明确限定或者在前后文给出相反启示的情况下,一般可以理解为一个或多个。[0031] 另外,本公开中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本公开中字符“/”,一般表示前后关联对象是一种“或”的关系。[0032] 还应理解,本公开对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。[0033] 同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。[0034] 以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。[0035] 对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。[0036] 应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。[0037] 本公开实施例可以应用于终端设备、计算机系统、服务器等电子设备,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与终端设备、计算机系统、服务器等电子设备一起使用的众所周知的终端设备、计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。[0038] 终端设备、计算机系统、服务器等电子设备可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。[0039] 本公开概述[0040] 在实现本公开的过程中,发明人发现,在专门加速神经网络模型的推理速度的芯片中,往往不支持元素对应相乘运算,而在一些轻量级深度神经网络模型中,往往存在元素对应相乘层,这类的深度神经网络模型中的元素对应相乘层则无法通过加速芯片来加速推理过程,导致深度神经网络模型的网络推理速度较低。[0041] 示例性概述[0042] 图1是本公开提供的神经网络模型的编译方法的一个示例性的应用场景。[0043] 针对具有元素对应相乘层的神经网络模型,利用本公开提供的技术方案可以通过在编译阶段对该神经网络模型的中间表示的第一模型进行优化获得优化模型,将第一模型的元素对应相乘运算变换成深度卷积运算,深度卷积运算可以在加速芯片上实现,在获得深度卷积运算的输出结果后,将输出结果变换成与第一模型原输出张量数据结构相同的张量即可,从而有效提高神经网络模型的推理速度,解决了现有技术加速芯片不支持元素对应相乘运算的问题。神经网络模型的编译可以通过编译器实现,编译器可以包括前端、中端和后端,前端、中端和后端分别包括不同的模块化的编译器组件和工具链,其中,前端将待编译神经网络模型从编程语言转换成中间表示的第一模型,中端对第一模型进行优化获得优化模型,后端将中间表示的优化模型转换成机器可识别的二进制的目标模型,目标模型包括加速芯片可识别的二进制的指令序列,加速芯片通过执行这些指令来完成神经网络的实时推理。本公开的方法即是在中端优化过程中实现对第一模型的优化,进而通过后端将优化模型转换成二进制的目标模型,对于前端的具体工作原理不公开不做赘述。[0044] 示例性方法[0045] 图2是本公开一示例性实施例提供的神经网络模型的编译方法的流程示意图。本实施例可应用在电子设备上,该电子设备比如可以为终端设备或服务器,如图2所示,包括如下步骤:[0046] 步骤201,获取待编译神经网络模型对应的第一模型,第一模型为待编译神经网络模型对应的中间表示。[0047] 其中,待编译神经网络模型可以是具有至少一个MUL(elementwisemultiply,元素对应相乘)层的神经网络模型,通过神经网络编译器将待编译神经网络模型从编程语言转换到中间表示,获得待编译神经网络模型对应的中间表示的第一模型,具体从编程语言转换到中间表示的方式可以根据实际需求采用任意可实施的方式,本公开不做赘述。[0048] 步骤202,针对第一模型的至少一个MUL层中的第一MUL层,将第一MUL层的第一输入张量和第二输入张量的元素对应相乘运算变换为深度卷积运算,并将深度卷积运算获得的第一输出张量变换为与第一MUL层的原输出张量数据结构相同的第二输出张量,获得第一MUL层对应的优化后的第二MUL层;MUL层为两输入张量的元素对应相乘的层。[0049] 其中,第一MUL层可以是第一模型中的任一个MUL层,一个MUL层具有两个输入张量,分别称为第一输入张量和第二输入张量,MUL层是要对第一输入张量和第二输入张量进行元素对应相乘运算,获得输出张量(称为原输出张量)。[0050] 为了使第一MUL层能够在加速芯片上实现,将第一输入张量和第二输入张量的元素对应相乘运算变换为深度卷积运算,为了保证优化后的MUL层的输出结果与第一MUL层一致,还需要将深度卷积运算获得的第一输出张量变换为与第一MUL层的原输出张量数据结构相同的第二输出张量,该第二输出张量即可作为优化后的MUL层的输出张量,至此将第一MUL层优化为了第二MUL层,也即第二MUL层仍是包括第一输入张量和第二输入张量,通过对第一输入张量和第二输入张量进行变换,将第一输入张量与第二输入张量的元素对应相乘运算变换成中间张量与卷积核的深度卷积运算,从而可以通过加速芯片实现深度卷积运算,通过将深度卷积运算结果变换成与原输出张量数据结构相同的第二输出张量,即为第一MUL层的原输出张量。[0051] 步骤203,基于各优化后的第二MUL层,获得第一模型对应的优化模型。[0052] 在实际应用中,可以对第一模型中的至少一个MUL层进行优化,为了进一步提高推理速度,可以对第一模型中的所有MUL层都进行优化,具体来说,可以初始化优化模型,遍历第一模型中的层,对于非MUL层的层,可以不做处理,直接加入优化模型,对于MUL层则进行优化,将优化后的第二MUL层加入优化模型,以此类推,直至遍历完第一模型的层,即获得第一模型对应的优化模型。[0053] 步骤204,将优化模型编译为待编译神经网络模型对应的二进制的目标模型。[0054] 具体的,在获得优化模型后,则可通过编译器后端将优化模型编译成待编译神经网络模型对应的二进制的目标模型。具体从优化模型到目标模型的变换方式可以根据实际需求采用任意可实施的方式,本公开不再赘述。[0055] 本实施例提供的神经网络模型的编译方法,通过在对神经网络模型进行编译过程中,对神经网络模型进行优化,将神经网络模型中的元素对应相乘运算变换成深度卷积运算,使得神经网络模型的元素对应相乘运算可以在加速芯片上实现,从而有效提高神经网络模型的推理速度,解决了现有技术加速芯片不支持元素对应相乘运算的问题。[0056] 在一个可选示例中,图3是本公开一个示例性实施例提供的步骤202的流程示意图,在本示例中,步骤202具体可以包括以下步骤:[0057] 步骤2021,将第一输入张量的数据结构变换为预设格式的第一张量,并将第二输入张量的数据结构变换为预设格式的第二张量。[0058] 其中,第一输入张量和第二输入张量的数据结构表示了第一MUL层的两个输入特征图的具体尺寸,由于第一输入张量和第二输入张量是要做元素对应相乘运算的,因此两者数据结构相同,比如第一输入张量和第二输入张量的数据结构均为H*W*C,H、W、C均为正整数,分别表示张量的高度、宽度和通道数量,示例性的,图4是本公开一示例性实施例提供的输入张量的一种示意图,其中H=3、W=3、C=3,表示该输入张量对应3个通道的3*3的特征图,每个3*3的特征图包括长度和宽度均为3的特征矩阵,也即每个特征图包括9个特征元素。预设格式可以根据深度卷积运算的原理进行设置,数据结构变换后,需要保证第一张量与第二张量的特征元素的对应性,即第一输入张量与第二输入张量对应的两个特征元素,在第一张量和第二张量中仍然是对应的两个特征元素。[0059] 第一输入张量和第二输入张量数据结构的变换可以通过循环的数据搬运实现,比如以第一输入张量为例,初始化第一张量,可以根据预设格式,设置循环方式,进行3层循环(通道方向、宽度方向和长度方向),遍历取第一输入张量的每个特征元素,放入第一张量,从而实现数据结构的变换。通道方向、宽度方向和长度方向的具体循环顺序可以根据实际需求设置,比如循环顺序为通道方向‑宽度方向‑长度方向,或者宽度方向‑长度方向‑通道方向,或者长度方向‑宽度方向‑通道方向,具体不做限定,只要保证对第二输入张量的循环和对第一输入张量的循环一致,获得的第一张量和第二张量保证元素对应关系不变即可。[0060] 步骤2022,将第二张量按照预设卷积核数据排布方式进行排布,获得第二张量对应的第一排布结果,以使第一张量能够与第一排布结果进行深度卷积运算。[0061] 其中,预设卷积核数据排布方式可以根据加速芯片的实际需求设置,由于加速芯片进行卷积运算对卷积核有特殊的排列要求,为了使第一MUL层的元素对应相乘运算能够转换成深度卷积运算,本公开将第二张量按照预设卷积核数据排布方式进行排布,获得的第一排布结果使得第二张量的特征元素作为卷积核的权重,用于与第一张量中的对应特征元素相乘,从而实现深度卷积运算,且该深度卷积运算实质保证了第一张量与第二张量对应元素的相乘。[0062] 步骤2023,确定第一张量与第一排布结果进行深度卷积运算的中间表示。[0063] 第一张量与第一排布结果作为深度卷积运算的输入,需要通过加速芯片的乘法器实现深度卷积运算,因此需要有相应的中间表示,在后端需要生成相应的二进制指令,使得加速芯片根据该二进制指令获取第一张量和第一排布结果的相应的特征元素进行深度卷积运算。[0064] 步骤2024,将深度卷积运算获得的第一输出张量变换为与第一MUL层的原输出张量数据结构相同的第二输出张量,获得第一MUL层对应的优化后的第二MUL层。[0065] 深度卷积运算过程实现了第一张量与第二张量中对应元素的相乘,获得的第一输出张量数据结构与第一张量和第二张量相同,为了获得第一输入张量与第二输入张量元素对应相乘的原输出张量,只需将第一输出张量的数据结构变换为与原输出张量数据结构相同即可。数据结构的变换原理与上述第一输入张量变换为第一张量类似,具体循环方式需要根据前述变换的循环方式进行设置,设置原则为第二输出张量中任一特征元素的位置是第一输入张量和第二输入张量中该位置的特征元素的乘积,从而基于深度卷积运算实现了第一输入张量和第二输入张量的元素对应相乘运算。[0066] 在一个可选示例中,第一输入张量和第二输入张量的数据结构均为H*W*C,H、W、C均为正整数,分别表示张量的高度、宽度和通道数量;将第一输入张量的数据结构变换为预设格式的第一张量,并将第二输入张量的数据结构变换为预设格式的第二张量,包括:将第一输入张量的数据结构从H*W*C变换为1*1*C1,获得第一张量,并将第二输入张量的数据结构从H*W*C变换为1*1*C1,获得第二张量,C1表示H、W和C三者的乘积。[0067] 示例性的,图5是本公开一示例性实施例提供的数据结构变换示意图。第一输入张量为3*3*3的张量,即H=W=C=3,变换为1*1*27的第一张量,而对于第一张量中27个1*1的特征图的排列顺序可以根据实际需求设置,比如第一输入张量的特征元素表示为 其中i、j、t分别表示该特征元素在第一输入张量长度方向、宽度方向和通道方向的位置,i=1,2,…,H,j=1,2,…,W,t=1,2,…,C,也即第t通道的3*3的特征图表示为:[0068][0069] 同理可以将第二输入张量的特征元素表示为[0070] 第一输入张量数据结构变换时,按照通道方向‑宽度方向‑长度方向的循环顺序进行变换,获得的第一张量表示为:[0071][0072] 在一个可选示例中,第一张量与第一排布结果的深度卷积运算获得的第一输出张量的数据结构为1*1*C1,将深度卷积运算获得的第一输出张量变换为与第一MUL层的原输出张量数据结构相同的第二输出张量,包括:将第一输出张量的数据结构从1*1*C1变换为H*W*C,获得第二输出张量。[0073] 具体的,将第一输出张量变换为第二输出张量的变换规则需要根据第一输入张量变换为第一张量的第一变换规则设置,相当于第一变换规则对应的逆变换,需要保证第二输出张量中第一位置的特征元素是第一输入张量与第二输入张量在该第一位置的特征元素的乘积。[0074] 仍以上述示例的第一输入张量到第一张量的变换为例,相应的第二输入张量变换为第二张量表示为:[0075][0076] 第二张量按预设卷积核数据排布方式进行排布后,将第二张量的各特征元素作为卷积核的权重分别与第一张量的对应特征元素进行卷积,获得的第一输出张量表示为:[0077][0078] 也即 第一张量为1*1*27的张量,包括27个通道的1*1的特征图,每个特征图即包括一个特征元素 第二张量按照预设卷积核数据排布方式进行排布后,每个卷积核(Kernel)均为1*1*1,即每个卷积核均为深度为1的1*1卷积核,则总共包括27个卷积核,卷积核的权重即为特征元素 根据深度卷积的运算原理,每个通道对应一个卷积核,27个通道与27个卷积核一一对应,只要保证作为卷积核权重的第二张量的特征元素与第一张量的特征元素的对应关系,即可在深度卷积运算时,实现第一张量的第t通道的特征元素 与卷积核权重 相乘,获得该通道对应的输出特征图,27个通道对应获得27个输出特征图,也即获得1*1*27的第一输出张量。将第一输出张量逆变换为3*3*3的第二输出张量,即可获得第一输入张量与第二输入张量元素对应相乘的结果,表示为:[0079][0080] 第一输出张量变换到第二输出张量的过程同样可以通过对第一输出张量的特征元素进行循环数据搬移实现,具体原理不再赘述。[0081] 在一个可选示例中,预设卷积核数据排布方式包括用于深度卷积运算的卷积核在静态随机存取存储器SRAM中的占用规则;相应的,将第二张量按照预设卷积核数据排布方式进行排布,获得第二张量对应的第一排布结果,包括:[0082] 按照预设卷积核数据排布方式将第二张量排布成卷积核在SRAM中的占用方式,获得第一排布结果,使得在与第一张量进行深度卷积运算时,第一排布结果以卷积核在SRAM中的占用方式占用SRAM。[0083] 具体的,将第二张量按照预设卷积核数据排布方式进行排布的目的是方便在深度卷积时获取一定数量的卷积核,实现多通道的并行运算,从而提高加速芯片的有效率利用率及运算效率。加速芯片在运算时按照指令从SRAM获取数据并进行运算,因此,预设卷积核数据排布方式可以根据加速芯片可并行运算的能力进行设置,具体不做限定。[0084] 示例性的,图6是本公开一示例性实施例提供的排布原理示意图,加速芯片的乘法器阵列支持并行8通道的乘法运算,则可以将预设卷积核数据排布方式设置为8K8D模式,8K表示8个卷积核,8D表示深度方向(与被该卷积核卷积的输入图像的通道数量相同)的8个权重值,8K8D模式,表示先循环卷积核的深度方向,再循环卷积核数量方向进行排布,一个地址对应64个权重值,包括8个卷积核的每个卷积核在深度方向的8个权重值。比如需要对8个卷积核进行排布,每个卷积核的尺寸为3*3*16,其中16为卷积核的深度,卷积核的深度与被该卷积核卷积的输入的通道数相同(这里仅以3*3*16的卷积核为例说明排布的原理,本公开中由于深度卷积每个通道对应一个卷积核,因此卷积核的深度为1),则将该8个卷积核作为待排布对象,先对卷积核1的3*3的11位置沿深度方向进行循环,依次获取11位置沿深度方向的前8个权重值对应到SRAM的第一地址,再获取卷积核2的11位置沿深度方向的前8个权重值对应到第一地址,直至获取完卷积核8的11位置沿深度方向的前8个权重值,第一地址对应64个权重值;第二地址对应放入卷积核1的11位置沿深度方向的后8个权重值、卷积核2的11位置沿深度方向的后8个权重值、…、卷积核8的11位置沿深度方向的后8个权重值,若待排布对象的卷积核数量大于8(比如为16),则继续按照上述卷积核1‑8的方式排布第9‑16个卷积核的11位置的权重值,然后循环宽度方向,按照上述过程排布各卷积核12位置的权重值,以此类推,循环完宽度方向的13位置,外部循环长度方向,排布各卷积核21、22、23、31、32、33位置,直至排完所有卷积核的所有权重。排布完成后,在加速芯片中进行运算时,卷积核按照上述预设卷积核数据排布方式占用SRAM,加速芯片从相应地址可以一次读取到多个权重值,实现并行运算,从而提高运算效率。在实际应用中,除规定的8K8D模式的内部的8K和8D的两层嵌套循环外,这两层嵌套循环外部的循环顺序可以根据实际需求设置,不限于上述顺序,只要能保证元素对应关系即可。[0085] 示例性的,以4W4C为例的循环过程如表1所示,其中,H、W、C表示待排布对象的高度、宽度和通道数量。[0086] 表1[0087][0088] 在实际应用中,预设卷积核数据排布方式不限于上述的8K8D模式,还可以为其他任意的模式,比如8W4D(表示一个地址放32个数),具体可以根据实际需求设置,本公开不做限定。[0089] 本公开中是将第二张量作为待排布对象,按照预设卷积核数据排布方式进行排布,第二张量为1*1*C1的数据结构,作为卷积核时,由于被卷积的第一张量为1*1*C1,具有C1个通道,则对应的卷积核为C1个1*1*1的卷积核,在排布时,若按8K8D排布,由于每个卷积核只有一个权重值,不足8D的通过填充对齐到8D,将每8个卷积核的8D权重值对应到SRAM的一个地址,在加速芯片运算时,可以一次从SRAM的一个地址获取8个卷积核的权重值,对输入的第一张量的对应的8个特征元素进行乘法运算,获得对应位置的卷积结果。[0090] 示例性的,图7是本公开一示例性实施例提供的排布变换的一种示例性示意图。本示例中,待排布对象本身具有一定的排布方式,表示为feature_layout.w,将待排布对象按照另一种排布方式进行排布获得的排布结果表示为weight_layout.w,feature_layout.w中在SRAM的一个地址可以放4个数(比如4W模式,即一个地址能放4个宽度方向的特征元素),待排布对象为第二张量时,由于第二张量宽度是1,因此在SRAM的一个地址只能放1个有效的W方向的特征元素(灰色部分),剩余3个数据需要通过填充对齐,预设卷积核数据排布方式weight_layout.w为2W,其在SRAM的一个地址可以放2个权重值,当将第二张量按照该预设卷积核数据排布方式排布时,第一地址只能放一个有效的宽度方向的特征元素(灰色部分)作为权重值,剩余一个数据需要通过填充对齐。[0091] 在一个可选示例中,图8是本公开另一示例性实施例提供的步骤202的流程示意图。本示例中,在步骤2021的将第一输入张量的数据结构变换为预设格式的第一张量,并将第二输入张量的数据结构变换为预设格式的第二张量之后,本公开的方法还包括:[0092] 步骤301,按照预设特征数据排布方式对第一张量进行排布,获得第一张量对应的第二排布结果,并按照预设特征数据排布方式对第二张量进行排布,获得第二张量对应的第三排布结果;预设特征数据排布方式包括用于深度卷积运算的张量的特征数据在SRAM中的占用规则;第二排布结果用于与第一排布结果进行深度卷积运算。[0093] 其中,预设特征数据排布方式可以根据加速芯片的实际需求设置,比如可以设置为8W4C模式,W表示宽度方向,C表示通道方向,具体原理同上述8K8D类似,在此不再赘述。对第一张量进行排布是为了给加速芯片供数方便,便于实现多通道的并行运算,按照预设特征数据排布方式对第二张量进行排布是为了保证与第一张量排布结果的元素对应性,避免深度卷积时作为卷积核权重的特征元素与第二排布结果的元素不对应而造成最终深度卷积结果转换成的第二输出张量与第一输入张量和第二输入张量元素对应相乘的原输出张量不一致的情况发生。[0094] 相应的,步骤2022的将第二张量按照预设卷积核数据排布方式进行排布,获得第二张量对应的第一排布结果,具体包括:[0095] 步骤20221,将第三排布结果按照预设卷积核数据排布方式进行排布,获得第二张量对应的第一排布结果。[0096] 在获得第二张量对应的第三排布结果后,为了将第二张量的特征元素作为卷积核权重,将第三排布结果按照预设卷积核数据排布方式进行排布,获得第一排布结果,具体排布方式参见前述示例,在此不再赘述。[0097] 在一个可选示例中,第一输出张量是按照预设特征数据排布方式进行排布的,将深度卷积运算获得的第一输出张量变换为与第一MUL层的原输出张量数据结构相同的第二输出张量,包括:将第一输出张量的排布方式从预设特征数据排布方式变换成与原输出张量相同的排布方式,获得第二输出张量。[0098] 示例性的,图9是本公开一示例性实施例提供的张量排布变换的一种示例性示意图。feature_layout1.w可以用于表示一种张量排布方式,比如通常一个张量是按照从外层到内层循环顺序H‑W‑C去占用SRAM,feature_layout2.w则表示另一种张量排布方式,比如根据加速芯片需求按照预设特征数据排布方式4W进行排布。不同张量排布方式表示张量的特征数据在SRAM中的不同占用方式,不同张量排布方式之间可以相互变换,具体可以根据实际需求设置,排布原理与卷积核排布类似,在此不再赘述。[0099] 示例性的,图10是本公开一示例性实施例提供的SRAM二维编址原理示意图,数据在SRAM存储是通过offset(地址)和slice(切片)两个维度共同确定数据的存储位置的,每个offset放一个block(块),以4W4C作为一个block为例,每个slice放4个数,则每个地址需要4个slice,可见,一个block的slice数量是由block的大小决定;图11是本公开一示例性实施例提供的张量转卷积核的SRAM存储原理示意图,张量feature和卷积核weight的block大小不同,比如weight的block为2K4C,则每个地址需要2个slice,因此,将feature转weight时,需要将数据搬移,去掉多余的“气泡”slice。图11中灰色箭头方向表示数据访问顺序,灰色部分表示有效数据,黑色部分为因对齐要求产生的padding(填充)区域,比如1*1*C的feature会padding为1*4*C。[0100] 在一个可选示例中,图12是本公开一示例性实施例提供的MUL层的优化流程框图,本示例中,F1表示MUL层的第一输入张量,F2表示第二输入张量,MUL表示元素对应相乘运算,F3为第一张量,F4为第二张量,W表示按照预设卷积核数据排布方式排布(即asweight)获得的第一排布结果DWS表示F3与W的深度卷积运算,F5表示深度卷积运算获得的第一输出张量,F0表示第二输出张量,也即原输出张量,shape表示数据结构,reshape表示数据结构变换。[0101] 本公开通过数据结构变换及数据排布,将元素对应相乘运算变换为深度卷积运算,使得神经网络模型的MUL层能够在加速芯片实现推理运算,并能够基于数据排布实现多通道并行运算,进一步提高运算效率,且本公开的变换过程都是在SRAM进行,无需涉及DDR(双倍速率同步动态随机存储器),因此数据存取速度较快,进一步保证了运算效率。[0102] 本公开实施例提供的任一种神经网络模型的编译方法可以由任意适当的具有数据处理能力的设备执行,包括但不限于:终端设备和服务器等。或者,本公开实施例提供的任一种神经网络模型的编译方法可以由处理器执行,如处理器通过调用存储器存储的相应指令来执行本公开实施例提及的任一种神经网络模型的编译方法。下文不再赘述。[0103] 示例性装置[0104] 图13是本公开一示例性实施例提供的神经网络模型的编译装置的结构示意图。该实施例的装置可用于实现本公开相应的方法实施例,如图13所示的装置包括:第一获取模块501、第一处理模块502、第二处理模块503和第三处理模块504。[0105] 第一获取模块501,用于获取待编译神经网络模型对应的第一模型,第一模型为待编译神经网络模型对应的中间表示。[0106] 第一处理模块502,用于针对第一获取模块501获取的第一模型的至少一个MUL层中的第一MUL层,将第一MUL层的第一输入张量和第二输入张量的元素对应相乘运算变换为深度卷积运算,并将深度卷积运算获得的第一输出张量变换为与第一MUL层的原输出张量数据结构相同的第二输出张量,获得第一MUL层对应的优化后的第二MUL层;MUL层为两输入张量的元素对应相乘的层。[0107] 第二处理模块503,用于基于第一处理模块502获得的各优化后的第二MUL层,获得第一模型对应的优化模型。[0108] 第三处理模块504,用于将第二处理模块503获得的优化模型编译为待编译神经网络模型对应的二进制的目标模型。[0109] 在一个可选示例中,图14是本公开一示例性实施例提供的第一处理模块的结构示意图。本示例中,第一处理模块502包括:第一单元5021和第二单元5022。第一单元5021,用于将第一输入张量的数据结构变换为预设格式的第一张量,并将第二输入张量的数据结构变换为预设格式的第二张量;第二单元5022,用于将第一单元5021获得的第二张量按照预设卷积核数据排布方式进行排布,获得第二张量对应的第一排布结果,以使第一张量能够与第一排布结果进行深度卷积运算。[0110] 在一个可选示例中,第一输入张量和第二输入张量的数据结构均为H*W*C,H、W、C均为正整数,分别表示张量的高度、宽度和通道数量;第一单元5021具体用于将第一输入张量的数据结构从H*W*C变换为1*1*C1,获得第一张量,并将第二输入张量的数据结构从H*W*C变换为1*1*C1,获得第二张量,C1表示H、W和C三者的乘积。[0111] 在一个可选示例中,第一张量与第一排布结果的深度卷积运算获得的第一输出张量的数据结构为1*1*C1,第一处理模块502还包括:第三单元5023和第四单元5024。第三单元5023,用于确定第一张量与第一排布结果进行深度卷积运算的中间表示;第四单元5024,用于将第一输出张量的数据结构从1*1*C1变换为H*W*C,获得第二输出张量。[0112] 在一个可选示例中,预设卷积核数据排布方式包括用于深度卷积运算的卷积核在静态随机存取存储器SRAM中的占用规则,第二单元5022,具体用于:按照预设卷积核数据排布方式将第二张量排布成卷积核在SRAM中的占用方式,获得第一排布结果,使得在与第一张量进行深度卷积运算时,第一排布结果以卷积核在SRAM中的占用方式占用SRAM。[0113] 在一个可选示例中,第一处理模块502还包括:第五单元5025,用于按照预设特征数据排布方式对第一单元5021获得的第一张量进行排布,获得第一张量对应的第二排布结果,并按照预设特征数据排布方式对第一单元5021获得的第二张量进行排布,获得第二张量对应的第三排布结果;预设特征数据排布方式包括用于深度卷积运算的张量的特征数据在SRAM中的占用规则;第二排布结果用于与第一排布结果进行深度卷积运算;相应的,第二单元5022,具体用于将第三排布结果按照预设卷积核数据排布方式进行排布,获得第二张量对应的第一排布结果。[0114] 在一个可选示例中,第一输出张量是按照预设特征数据排布方式进行排布的,第一处理模块502,具体用于:将第一输出张量的排布方式从预设特征数据排布方式变换成与原输出张量相同的排布方式,获得第二输出张量。[0115] 示例性电子设备[0116] 本公开实施例还提供了一种电子设备,包括:存储器,用于存储计算机程序;[0117] 处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,实现本公开上述任一实施例所述的神经网络模型的编译方法。[0118] 图15是本公开电子设备一个应用实施例的结构示意图。本实施例中,该电子设备10包括一个或多个处理器11和存储器12。[0119] 处理器11可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备10中的其他组件以执行期望的功能。[0120] 存储器12可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器11可以运行所述程序指令,以实现上文所述的本公开的各个实施例的神经网络模型的编译方法以及/或者其他期望的功能。在所述计算机可读存储介质中还可以存储诸如输入信号、信号分量、噪声分量等各种内容。[0121] 在一个示例中,电子设备10还可以包括:输入装置13和输出装置14,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。[0122] 例如,该输入装置13可以是上述的麦克风或麦克风阵列,用于捕捉声源的输入信号。[0123] 此外,该输入装置13还可以包括例如键盘、鼠标等等。[0124] 该输出装置14可以向外部输出各种信息,包括确定出的距离信息、方向信息等。该输出装置14可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。[0125] 当然,为了简化,图15中仅示出了该电子设备10中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备10还可以包括任何其他适当的组件。[0126] 示例性计算机程序产品和计算机可读存储介质[0127] 除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本公开各种实施例的神经网络模型的编译方法中的步骤。[0128] 所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。[0129] 此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本公开各种实施例的神经网络模型的编译方法中的步骤。[0130] 所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD‑ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。[0131] 以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。[0132] 本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。[0133] 本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。[0134] 可能以许多方式来实现本公开的方法和装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的神经网络模型的编译方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。[0135] 还需要指出的是,在本公开的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。[0136] 提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本公开。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本公开的范围。因此,本公开不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。[0137] 为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本公开的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。

专利地区:北京

专利申请日期:2021-12-13

专利公开日期:2024-06-18

专利公告号:CN114239803B

电话咨询
读内容
搜本页
回顶部