CN115730647A - Npu数据排布的图优化方法、装置、电子设备及存储介质 - Google Patents
Npu数据排布的图优化方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115730647A CN115730647A CN202211448488.5A CN202211448488A CN115730647A CN 115730647 A CN115730647 A CN 115730647A CN 202211448488 A CN202211448488 A CN 202211448488A CN 115730647 A CN115730647 A CN 115730647A
- Authority
- CN
- China
- Prior art keywords
- data arrangement
- operator
- deep learning
- learning model
- format
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
本发明的实施方式提供了一种NPU数据排布的图优化方法、装置、电子设备及存储介质。该方法包括:在获取到维度数为P的原始数据排布之后,为了与神经网络处理器NPU中算子支持的维度数Q相适配,按照指定转换方案对所述原始数据排布的维度数进行格式转换和适配,得到与NPU匹配的目标数据排布,从而可以解决现有技术中数据排布的转换方式与NPU不适配的技术问题,通过提供一种与NPU适配的数据排布优化方案,可以提高NPU的推理速度。
Description
技术领域
本发明的实施方式涉及计算机技术领域,更具体地,本发明的实施方式涉及一种NPU数据排布的图优化方法、装置、电子设备及存储介质。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
在相关技术中,仅针对CPU(全称为central processing unit,即中央处理器)、GPU(全称为graphics processing unit,即图形处理器)的通用神经网络加速器,有适配的数据排布格式,通常为NCHW或NHWC等。
如图1所示,NCHW中的N代表数量number,C代表通道channel,H代表高度height,W代表宽度width。NCHW其实代表的是[W H C N],第一个元素是000,第二个元素是沿着w方向的,即001,这样下去002、003,再接着就是沿着H方向,即004、005、006、007,这样到019后,沿C方向,轮到了020,之后021、022,一直到319,然后再沿N方向。NHWC与上述NCHW类似,代表的是[C W H N],第一个元素是000,第二个沿C方向,即020、040、060,一直到300,之后沿W方向,001、021、041、061...301,到了303后,沿H方向,即004、024...304,最后到了319,变成N方向。
在相关技术中,为了在CPU或GPU上做高效的计算处理,已经做了一些优化工作,通常是把计算的数据排布预先转成CPU或GPU支持的高效排布方式。然而,NPU(全称为neural-network processing unit,即嵌入式神经网络处理器)的数据排布,与CPU和GPU均不同,通常是五维(如NCHWC),甚至是更高维度的,因此在CPU或GPU上的数据排布的转换方式不能在NPU上直接使用。
发明内容
针对相关技术中数据排布的转换方式与NPU不适配的技术问题,在本上下文中,本发明的实施方式期望提供一种NPU数据排布的图优化方法、装置、电子设备及存储介质,以解决上述问题。
在本发明实施方式的第一方面中,提供了一种NPU数据排布的图优化方法,包括:获取深度学习模型中算子的原始数据排布,其中,深度学习模型运行在神经网络处理器NPU上,原始数据排布采用第一数据排布格式,第一数据排布格式的维度数为P,P为正整数;按照指定转换方案对原始数据排布进行转换,得到与神经网络处理器适配的目标数据排布,其中,目标数据排布采用第二数据排布格式,第二数据排布格式的维度数为Q,Q为大于P的正整数,指定转换方案用于将数据排布格式的维度数由P转换为Q、并消除转换过程对计算结果的影响。
在本发明的一个实施例中,按照指定转换方案对原始数据排布进行转换,得到与神经网络处理器NPU适配的目标数据排布,包括:将原始数据排布中的C维度对齐到S,得到中间数据排布,其中,S为2n,n为预设的正整数;将中间数据排布,从第一数据排布格式转换为第二数据排布格式,得到目标数据排布。
在本发明的又一个实施例中,在按照指定转换方案对原始数据排布进行转换,得到与神经网络处理器NPU适配的目标数据排布的同时会之后,方法还包括:按照深度学习模型中算子的计算结果是否受转换的影响,将深度学习模型中的算子分为多种类型;根据所属类型为深度学习模型的每个算子配置第一属性信息,以使算子的计算结果不受转换的影响。
在本发明的又一个实施例中,按照深度学习模型中算子的计算结果是否受转换的影响,将深度学习模型中的算子分为多种类型,包括:按照深度学习模型中算子的计算结果是否受转换的影响,将深度学习模型中的算子分为三类:第一类算子、第二类算子以及第三类算子,其中:第一类算子是不需要对数据排布中的C维度进行操作且结果不受影响的算子;第二类算子需要对数据排布中的C维度进行操作且结果受影响的算子;第三类算子是用于处理指定数据排布格式且结果受影响的算子。
在本发明的又一个实施例中,根据所属类型为深度学习模型的每个算子配置第一属性信息,以使算子的计算结果不受转换的影响,包括:对深度学习模型中第i个算子的第一属性信息进行配置,i的取值为小于等于深度学习模型中算子总数K的正整数:在第i个算子属于第一类算子的情况下,将第i个算子的输出张量的pad_info置为与输入张量的pad_info相同,pad_info用于下一算子确定是否进行数据还原;在第i个算子属于第二类算子的情况下,将第i个算子的输出张量的pad_info置为[];在第i个算子属于第三类算子的情况下,将第i个算子的输出张量的pad_info置为[C,C2 n],[C,C2 n]中的C表示张量的原始长度、C2 n表示转换后的长度;在i的当前取值小于算子总数K的情况下,将i的取值加1,并按照取值变更后的i继续执行对深度学习模型中第i个算子的属性信息进行配置的步骤;在i的当前取值等于算子总数K的情况下,结束对深度学习模型中算子的属性信息的配置。
在本发明的又一个实施例中,将中间数据排布,从第一数据排布格式转换为第二数据排布格式,得到目标数据排布,包括:按照第一数据排布格式对中间数据排布进行解析,得到中间数据排布中各个维度的数据;将中间数据排布中各个维度的数据按照第二数据排布格式进行排序,得到目标数据排布,其中,中间数据排布中C维度的数据等于目标数据排布中各个C维度的数据的乘积。
在本发明的又一个实施例中,在将中间数据排布,从第一数据排布格式转换为第二数据排布格式,得到目标数据排布之前,方法还包括:为深度学习模型的每个算子配置第二属性信息,以减少对输入或输出的数据排布的转换节点的加入。
在本发明的又一个实施例中,为深度学习模型的每个算子配置第二属性信息,以减少对输入或输出的数据排布的转换节点的加入,包括:建立深度学习模型中每个算子的映射表op_map和张量映射表tensor_map,其中,映射表中包括有算子的输入张量中各位置与神经网络处理器的各输入位置之间的映射关系,张量映射表用于指示第一数据排布格式与第二数据排布格式之间的映射关系;根据深度学习模型中算子的特性、映射表以及张量映射表tensor_map,从插入tranform节点、修改第二属性信息以及维持第二属性信息不变中选择至少一个来执行。
在本发明实施方式的第二方面中,提供了一种NPU数据排布的图优化装置,包括:获取单元,用于获取深度学习模型中算子的原始数据排布,其中,深度学习模型运行在神经网络处理器NPU上,原始数据排布采用第一数据排布格式,第一数据排布格式的维度数为P,P为正整数;优化单元,用于按照指定转换方案对原始数据排布进行转换,得到与神经网络处理器适配的目标数据排布,其中,目标数据排布采用第二数据排布格式,第二数据排布格式的维度数为Q,Q为大于P的正整数,指定转换方案用于将数据排布格式的维度数由P转换为Q、并消除转换过程对计算结果的影响。
在本发明的一个实施例中,优化单元还用于:将原始数据排布中的C维度对齐到S,得到中间数据排布,其中,S为2n,n为预设的正整数;将中间数据排布,从第一数据排布格式转换为第二数据排布格式,得到目标数据排布。
在本发明的又一个实施例中,优化单元还用于:在按照指定转换方案对原始数据排布进行转换,得到与神经网络处理器NPU适配的目标数据排布的同时会之后,按照深度学习模型中算子的计算结果是否受转换的影响,将深度学习模型中的算子分为多种类型;根据所属类型为深度学习模型的每个算子配置第一属性信息,以使算子的计算结果不受转换的影响。
在本发明的又一个实施例中,优化单元还用于:按照深度学习模型中算子的计算结果是否受转换的影响,将深度学习模型中的算子分为三类:第一类算子、第二类算子以及第三类算子,其中:第一类算子是不需要对数据排布中的C维度进行操作且结果不受影响的算子;第二类算子需要对数据排布中的C维度进行操作且结果受影响的算子;第三类算子是用于处理指定数据排布格式且结果受影响的算子。
在本发明的又一个实施例中,优化单元还用于:对深度学习模型中第i个算子的第一属性信息进行配置,i的取值为小于等于深度学习模型中算子总数K的正整数:在第i个算子属于第一类算子的情况下,将第i个算子的输出张量的pad_info置为与输入张量的pad_info相同,pad_info用于下一算子确定是否进行数据还原;在第i个算子属于第二类算子的情况下,将第i个算子的输出张量的pad_info置为[];在第i个算子属于第三类算子的情况下,将第i个算子的输出张量的pad_info置为[C,C2 n],[C,C2 n]中的C表示张量的原始长度、C2 n表示转换后的长度;在i的当前取值小于算子总数K的情况下,将i的取值加1,并按照取值变更后的i继续执行对深度学习模型中第i个算子的属性信息进行配置的步骤;在i的当前取值等于算子总数K的情况下,结束对深度学习模型中算子的属性信息的配置。
在本发明的又一个实施例中,优化单元还用于:按照第一数据排布格式对中间数据排布进行解析,得到中间数据排布中各个维度的数据;将中间数据排布中各个维度的数据按照第二数据排布格式进行排序,得到目标数据排布,其中,中间数据排布中C维度的数据等于目标数据排布中各个C维度的数据的乘积。
在本发明的又一个实施例中,优化单元还用于:在将中间数据排布,从第一数据排布格式转换为第二数据排布格式,得到目标数据排布之前,为深度学习模型的每个算子配置第二属性信息,以减少对输入或输出的数据排布的转换节点的加入。
在本发明的又一个实施例中,优化单元还用于:建立深度学习模型中每个算子的映射表op_map和张量映射表tensor_map,其中,映射表中包括有算子的输入张量中各位置与神经网络处理器的各输入位置之间的映射关系,张量映射表用于指示第一数据排布格式与第二数据排布格式之间的映射关系;根据深度学习模型中算子的特性、映射表以及张量映射表tensor_map,从插入tranform节点、修改第二属性信息以及维持第二属性信息不变中选择至少一个来执行。
在本发明实施方式的第三方面中,提供了一种电子设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述方法实施例中的步骤。
在本发明实施方式的第四方面中,提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述装置实施例中的步骤。
在相关技术方案中,深度学习编译器的模型转换通常是将已有的pytorch、onnx、tensorflow等深度学习框架模型,转换为特定的中间模型IR,再加入数据排布的优化pass,如将NCHW转为CPU或GPU高效支持的数据格式,但这些转换通常都是维度相同的转换。而在NPU中,不仅有数据排布的转换,还要求有4维到5维甚至更高维度的转变,通过本申请的技术方案,在获取到维度数为P的原始数据排布之后,为了与神经网络处理器NPU中算子支持的维度数Q相适配,按照指定转换方案对所述原始数据排布的维度数进行格式转换和适配,得到与NPU匹配的目标数据排布,从而可以解决现有技术中数据排布的转换方式与NPU不适配的技术问题,通过提供一种与NPU适配的数据排布优化方案,可以提高NPU的推理速度。
附图说明
通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:
图1示意性地示出了根据本发明实施方式的数据排布格式;
图2示意性地示出了根据本发明实施方式的应用场景;
图3示意性地示出了根据本发明一实施例的NPU数据排布的图优化方法;
图4示意性地示出了根据本发明又一实施例的模型转换方式;
图5示意性地示出了根据本发明又一实施例的图优化方式;
图6是示意性地示出了根据本发明示例性实施方式的NPU数据排布的图优化装置;
图7示意性地示出了根据本发明再一实施例的电子设备的结构示意图;
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
发明概述
发明人经过对相关技术的分析认识到,随着深度学习在图像、语音识别、自然语言翻译的广泛应用,深度学习的算法在各类计算平台(如CPU、GPU、NPU等)也不断落地。
在落地过程中,会实现从onnx(全称为Open Neural Network Exchange,即开放神经网络交换,是一种针对机器学习所设计的开放式的文件格式,无论使用何种训练框架训练模型,如TensorFlow、Pytorch、OneFlow、Paddle等,在训练完毕后都可以将这些框架的模型统一转换为onnx这种统一的格式进行存储)、pytorch(基于Python的可续计算包,具有强大的GPU加速的张量计算,如NumPy,包含自动求导系统的深度神经网络)等到可部署的模型,数据排布的转换是同等长度的尾端转换,即从NCHW到NHWC,或从NHWC到NCHW。
针对CPU或GPU的数据排布转换方式,在一些开源的框架,比如MNN(是一款轻量级高性能推理引擎,它加载模型并在设备上进行推理)、NCNN(是一个为手机端优化的高性能神经网络前向计算框架)等开源框架,有可行的解决方案。即在模型的开头和结尾插入数据排布转换节点,而中间的计算节点,根据其特点,对节点的属性值进行修改即可。
在通用CPU或GPU中,通常卷积的数据排布格式为NCHW或NHCW。而NPU作为专用加速器的边缘端设备,因其具有低功耗、低延时等特点,在智能学习产品、交通等实时性要求较高的场景中得到了广泛应用,NPU作为一个专用的神经网络加速器,需要高效的处理卷积运算以及矩阵乘计算,为此NPU内部有特定的专用硬件电路,这需要相适配的特定数据排布格式,因此需要深度学习编译器给出可适配的深度学习模型。
NPU为了充分利用带宽以及PE单元(Processing Element,一般每个PE中会包括一个乘加单元、少量寄存器以及少量控制逻辑),通常会设定NHCWC16(C16代表以16个通道为一个group,即C*C16等于NCHW中的C)、NCHC4WC4(C4代表以4个通道为一个group,C*C4*C4等于NCHW中的C)等定制化的数据排布格式。为了减少模型的计算节点,以及一些数据转换,需要深度学习的图优化功能,本申请的方案即对NPU的数据排布进行图优化适配:
1)在通用方案中,变换仅针对卷积conv和张量Tensor相乘matmul(通用矩阵乘gemm)的计算,是针对此类计算而变换权重,但是其它计算节点的数据排布依然是NCHW,本方案是将数据排布的转换从同等维度转换,扩展到不同维度的转换,例如,维度由4维变成5维,或者3维变成4维等,另外,这里原始数据排布(如NCHW)中的C不一定是16(可以为其他2的n次方)的倍数,但转换后的维度(如NCHWC)必须是16的(或其他2的n次方)的倍数;
2)本方案解决了数据排布转换转为神经网络的前向传输(每个节点的计算都是依赖于上一个计算节点的计算结果,数据排布的转换,也是依赖于计算图而存在,也是下一个计算的数据排布依赖于上一个计算节点的数据排布)的问题,与计算节点的类型无关(此处是相对于计算而言,不同的计算节点有不同的计算方式,但是对于数据排布而言,可以用相同的公式去表达),同时可在最大程度上,减少了冗余节点的插入,即根据当前节点的计算类型、属性以及输入数据的数据排布,只需调整当前节点的属性,而不需要插入其它算子来还原原始的数据排布,以适应当前节点的计算。
在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。
应用场景总览
首先,参考图2,图2示意性地示出了根据本发明实施方式的应用场景,首先参考图2,其示出了本发明的实施方式可以在其中实施的应用场景。图2中所示的场景包括终端200和服务器100。终端200可以是移动终端,例如手机、平板电脑、笔记本电脑、个人数字助理等移动电子设备,也可以是台式电脑等。服务器100可以是软件运营商服务器等。终端200与服务器100之间例如可以通过移动互联网等进行通信连接。
在需要对NPU的数据排布进行图优化时,可以由服务器100来执行下述步骤:获取深度学习模型中算子的原始数据排布,深度学习模型运行在神经网络处理器NPU上,原始数据排布采用第一数据排布格式,第一数据排布格式的维度数为P,P为正整数;按照指定转换方案对原始数据排布进行转换,得到与神经网络处理器适配的目标数据排布,其中,目标数据排布采用第二数据排布格式,第二数据排布格式的维度数为Q,Q为大于P的正整数,指定转换方案用于将数据排布格式的维度数由P转换为Q、并消除转换过程对计算结果的影响。
当然,上述步骤也可以由终端200来执行,或者由服务器100和终端200共同执行(如服务器100和终端200中的一个执行一部分步骤,而另一个执行剩余步骤)。
示例性方法
下面结合图2的应用场景,参考图3对本发明示例性实施方式的NPU数据排布的图优化方法进行介绍。
需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。
例如,参见图3所示,为本发明一实施方式的NPU数据排布的图优化方法的流程图。如图3所示,该NPU数据排布的图优化方法可以包括以下步骤:
步骤S1,获取深度学习模型中算子的原始数据排布,深度学习模型运行在神经网络处理器NPU上。
本实施例中,原始数据排布即优化前的数据排布,采用维度数为正整数P的第一数据排布格式,第一数据排布格式可以为NCHW、NHWC等格式,例如为NCHW、NHWC时,则对应P的取值为8。
步骤S2,按照指定转换方案对原始数据排布进行转换,得到与神经网络处理器适配的目标数据排布,目标数据排布即优化后的数据排布,采用维度数为正整数Q的第二数据排布格式。
本实施例中,指定转换方案的作用主要包括两个部分,其一是格式转换,即将数据排布格式的维度数由P转换为Q并对各维度的顺序进行适应性调整;其二是消除转换过程对计算结果的影响,如根据算子中节点的计算类型、属性以及输入数据的数据排布,调整节点的属性,以适应节点的计算(即不会因为以上转换而影响计算结果的准确性)。
在相关技术方案中,深度学习编译器的模型转换流程如图4所示,通常是将已有的pytorch、onnx、tensorflow等深度学习框架模型,转换为特定的中间模型IR,再加入数据排布的优化pass(可以理解为将图从A转换为B,这个转换过程通常称为pass,通过pass可以实现常量折叠、消除死节点等操作),如将NCHW转为CPU或GPU高效支持的数据格式(如GPU高效支持NHWC),但这些转换通常都是维度相同的转换。而在NPU中,不仅有数据排布的转换,还要求有4维到5维甚至更高维度的转变,通过本申请的上述步骤,在获取到维度数为P的原始数据排布之后,为了与神经网络处理器NPU中算子支持的维度数Q相适配,按照指定转换方案对原始数据排布的维度数进行格式转换和适配,得到与NPU匹配的目标数据排布,从而可以解决现有技术中数据排布的转换方式与NPU不适配的技术问题,通过提供一种与NPU适配的数据排布优化方案,可以提高NPU的推理速度。
在本发明实施例中,提供了一个通用的数据格式流转换方式,有效的减少了因数据排布转换带来的计算节点增加,从而增加了模型的推理速度。作为一个可选的实施例,下文结合具体实施方式进一步详述本申请的技术方案:
步骤S1,获取深度学习模型中算子的原始数据排布,以便于转换为与算子匹配的目标数据排布。
这里以onnx原始的数据流为NCHW,需要转换为NPU适配的数据流NHCWC16为例,此时第一数据排布格式为NCHW,维度数为4,第二数据排布格式为NHCWC16,数据维度为5。
当然,此处的第一数据排布格式和第二数据排布格式也可以为其他格式,本实施例仅仅用于示意性说明,仅需满足第二数据排布格式的维度数大于第一数据排布格式的维度数即可。
步骤S2,按照指定转换方案对原始数据排布进行转换,得到与神经网络处理器适配的目标数据排布。
本申请实施例的NCHW到NHCWC16之间的转换,可以抽象为A数据排布到B数据排布的转换,且限制为A数据排布中C维度的向上取整Ceiling(C/align)*align等于B数据排布中所有带有C的维度的乘积(即C2 n,如C16),其中align是硬件支持的最小的计算通道数,且这里需要变换的就是tensor_map,tensor_map是一个映射关系,可表示为tensor_map=[A_index,reflact],其中,A_index=A的每个元素的索引,reflact=B的每个元素在A中的位置,其中B中所有带有C的位置与A中C的位置一致。
上述的将NCHW转为NHCWC16的数据排布转换,该数据排布格式一般对卷积算子有约束。主要分为以下步骤S21-S22:
步骤S21,将原始数据排布中的C维度对齐到S(即2n,n为预设的正整数),得到中间数据排布。
承接上例,还是以将NCHW转为NHCWC16为例,在步骤S21中,可以先将NCHW中的C维度的数据排布对齐到16的整数倍,即将NCHW转为NCalign16HW(即中间数据排布)。
深度学习推理过程是一个前向计算过程,当前节点(或称算子)的计算依赖于上一个的计算结果,深度学习中目前常用的算子种类约有40种,可以按照算子的计算结果是否受转换的影响,将算子分为多种类型,进而根据所属类型为算子配置相应的属性信息,以使算子的计算结果不受转换的影响。
比如卷积算子,对输入进行16对齐,不会影响计算结果,因此,无需插入pad或depad算子(pad算子用于按照指定宽度对原始数据进行填充扩充,可以是在队首、对尾或者指定位置填充“0”,depad算子与pad算子相反,用于对数据进行删除缩减);而对softmax、reduce类的算子,如果对C维进行16对齐的操作后会对计算结果产生影响,因此需要插入depad算子以避免对C维进行16对齐后产生的影响,如果对其它维度进行操作,则不需要插入depad算子。
可见,对于每个算子,是否插入pad或depad节点,依赖于上一个节点的计算结果以及当前计算节点的属性。其具体实现方式如下:
首先,从计算结果是否受影响,将算子分为三类。
第一类算子为计算结果不受影响的算子(数据排布不受限于NCHWC16),比如conv算子、relu算子以及不对C维进行操作的reduce类算子、softmax算子以及split算子等;
第二类算子为计算结果受影响的节点(算子的数据排布不受限于NCHWC16),比如需要对C维进行操作的reduce算子、softmax算子以及adds算子等;
第三类算子是数据排布一定为NCHWC16(即指定数据排布格式)、且计算结果受影响的算子,比如conv算子、pool算子。
其次,遍历深度学习模型的有向无环拓补图,网络的输入张量tensor(是基础运算单位,表示的是一个多维矩阵)的pad_info为空。
可遍历深度学习模型中的每个算子,以对其第一属性信息(即pad_info,用于下一算子确定是否进行数据还原,从而消除转换带来的影响)进行配置:若是第一类算子,则将其输出张量的pad_info置为与输入张量的pad_info相同;若是第二类算子,则将其输出张量的pad_info置为[];若是第三类算子,则将其输出张量的pad_info置为[C,C2 n],[C,C2 n]中的C表示张量的原始长度、C2 n表示转换后的长度。
如当前节点node为conv算子,若输入C不是16对齐,则加入pad算子(pad算子的作用是将C变成16的倍数Calign16=Ceiling(C/16)*16),若输出C不是16对齐(输出书否16对齐取决于conv算子的权重weight中的C维度,这是网络本身的特性之一),则将输出张量tensor的pad_info置为[C,Calign16],pad_info的作用是计算当前数据的padding方式,若遇到有影响的计算节点,且该数据是此计算节点的输入时,需要进行还原操作,即插入depad算子或gather(一般用来取shape的某一个维度)算子进行相应的操作。
若当前节点为无影响算子,则:out_tensor_pad_info=input_tensor_pad_info,out_tensor_pad_info即输出张量的pad_info,input_tensor_pad_in fo即输入张量的pad_info。
若当前算子为有影响算子,则将算子的输出利用depad算子或gather算子进行相应的操作,此时,out_tensor_pad_info=[dim,dim]。
需要说明的是,标准的out_tensor_pad_info=[dim,pad_dim],其中dim是out_tensor中原始的数据中的数据大小,而pad_dim是发生pad后的数据大小,此值的计算方法,根据当前tensor是否发生pad或此节点的输入tesnor的情况决定。
如图5所示,按照上述方式循环遍历完成所有的算子。
步骤S22,将中间数据排布,从第一数据排布格式转换为第二数据排布格式,得到目标数据排布。
在本申请的实施例中,可以为深度学习模型的每个算子配置第二属性信息(例如,节点的轴信息),以减少对输入或输出的数据排布的转换节点的加入:建立算子的映射表op_map(即算子的输入张量中各位置与神经网络处理器的各输入位置之间的映射关系)和张量映射表tensor_map(即第一数据排布格式与第二数据排布格式之间的映射关系),进而根据深度学习模型中算子的特性、映射表以及张量映射表tensor_map,从插入tranform节点、修改第二属性信息以及维持第二属性信息不变中选择至少一个来执行。
承接上例,步骤S22可理解为将NCalign16HW转为NHCWC16,其中,C*C16=Calign16。
相关技术中是在conv前后加入transoform节点,这样会增加多个计算节点,而本申请是基于神经网络计算特性,将tensor的数据排布进行前向传输(前向传播Forwardpropagation是将上一层输出作为下一层的输入,并计算下一层的输出,一直到运算到输出层为止),并根据具体算子的特点(包括:数据排布必须是NCHWC16的节点,比如conv和pool算子;计算节点的计算结果是否受影响),修改算子的属性或插入节点。
上述的修改属性通常是指修改当前节点的轴信息,目的是减少对输入或输出的数据排布的转换节点的加入。比如concat的node,如果原来的数据排布是NCHW,轴信息axis=1,即对c轴进行操作。但是现在的数据排布是NHCWC16,这里只需修改axis(轴)=2,因为concat不是计算节点,不会进行计算,因此,只需对属性进行修改即可。
上述的插入节点是针对计算结果受影响的节点,需把数据格式还原为原始的数据格式,或者必须插入depad或者gather算子,通过在图上插入一个计算节点,并保证原图的拓补顺序不变,从而适应硬件的数据流要求。比如conv卷积算子,插入数据排布的节点变换(NCHW->NHCWC16)。
实现的具体过程如步骤S221-步骤S223:
步骤S221,建立每个算子的映射表op_map。
将网络的输入张量tensor的onnx_layout(layout是指内存中布局形式)和npu_layout置为[0,1,2...n-1],n为张量tensor的shape长度(shape是指张量tensor的形状)。
根据每个算子的特性,计算其op_map,并推断输出张量tensor的lay out,对不改变tensor长度的算子,如conv算子、relu算子,根据算子类型(此处的算子类型指神经网络中的常用算子类型)计算out_onnx_layou t(由in_onnx_layout和算子类型而决定,具体是指算子中是否有perm这个属性,如果有则对in_onnx_layout进行转置处理transpose,得到out_on nx_layout,否则,out_onnx_layout=in_onnx_layout),op_map=[in_onnx_layout,out_onnx_layout],对改变tensor长度的算子,则out_onnx_layout进行维度增加或删除(这里的增删是对数据维度进行增删,是根据计算节点的类型以及当前计算节点的值而确定,可根据实际的应用而提前确定好),并对op_map做相应的维度索引计算。如reshape算子,比如输入shape为[3,2,6],输出为[3,2,2,3],则op_map=[[0,1,2],[0,1,2,2]],若in_onnx_layout=[0,1,2],则out_onnx_layout=[0,1,2,3]。
上述维度索引计算的目的是要记录输入和输出之间每一维的索引关系,上述的shape表示一个tensor的每一个维度的大小,比如输入tesor的输入shape=[dim_a,dim_b,dim_c],输出shape=[dim_a,dim_b1,dim_b2,di m_c],其中dim_b=dim_b1*dim_b2。其中in_onnx_layout则为输入tens or的shape的下标,即in_onnx_layout=[0,1,2],同理out_onnx_layout=[0,1,2,3]。
上述映射关系op_map的目的之一是通过op_map记录输入shape和输出shape的每个dim的对应关系,比如dim_b=dim_b1*dim_b2,dim_a=dim_a,dim_c=dim_c,op_map=[a,reflact_a],其中a是in_onnx_la yout,reflact_a是获得的。具体是遍历输入shape的每个dim,按顺序在输出shape中找到与当前dim相等或输出shape中连续几个dim相乘结果与当前dim相等。若是相等:则reflact_a=[dim],若是n个相等,则reflact_a=[dim,dim,dim],reflact_a的元素个数为n,直到把输入shape的每个di m遍历完成。
步骤S222,初始化tensor_map。
conv算子的输入tensor_map=[[0,1,2,3],[0,2,1,3,1]],其它tensor_map=[]。tensor_map是指从原始的数据流到NPU的数据流的变换方式,即(N,C,H,W)到(N,H,C,W,C16),对应(0,1,2,3)->(0,2,1,3,1)。
步骤S223,根据每个算子特性、op_map,以及tensor_map,进行插入tranform节点或算子属性修改或不做任何修改。
计算infer_npu_layout(相当于npu_layout的推断的值)=tensor_map[in_onnx_layout],若infer_in_npu_layout与in_npu_layout(即npu_layout的实际值)不相等,则插入transform,且将in_npu_layout置为infer_in_npu_layout,若infer_in_npu_layout与in_npu_layout相等、tensor_map为空,则不做任何操作。tensor_map不为空,若op_map[0]=op_map[1](公式中的0和1代表数组的下标),则计算new_axis=tensor_map[axis]。若op_map[0]与op_map[1]不相等,则需要插入transform节点,将in_npu_layout还原为in_onnx_layout,输入tensor_map=[]。最后计算out_npu_layout=op_map[in_npu_layout]。将out_tensor_map置为in_tensor_map。
示例性设备
在介绍了本发明示例性实施方式的方法之后,接下来,参考图6对本发明示例性实施方式的NPU数据排布的图优化装置进行介绍。
NPU数据排布的图优化装置的实施可以参见上述方法的实施,重复之处不再赘述。以下所使用的术语“单元”或者“模块”,可以是实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图6示意性地示出了根据本发明又一实施例的NPU数据排布的图优化装置,该装置包括:
获取单元601,用于获取深度学习模型中算子的原始数据排布,其中,深度学习模型运行在神经网络处理器NPU上,原始数据排布采用第一数据排布格式,第一数据排布格式的维度数为P,P为正整数;
优化单元603,用于按照指定转换方案对原始数据排布进行转换,得到与神经网络处理器适配的目标数据排布,其中,目标数据排布采用第二数据排布格式,第二数据排布格式的维度数为Q,Q为大于P的正整数,指定转换方案用于将数据排布格式的维度数由P转换为Q、并消除转换过程对计算结果的影响。
可选地,优化单元还用于:将原始数据排布中的C维度对齐到S,得到中间数据排布,其中,S为2n,n为预设的正整数;将中间数据排布,从第一数据排布格式转换为第二数据排布格式,得到目标数据排布。
可选地,优化单元还用于:在按照指定转换方案对原始数据排布进行转换,得到与神经网络处理器NPU适配的目标数据排布的同时会之后,按照深度学习模型中算子的计算结果是否受转换的影响,将深度学习模型中的算子分为多种类型;根据所属类型为深度学习模型的每个算子配置第一属性信息,以使算子的计算结果不受转换的影响。
可选地,优化单元还用于:按照深度学习模型中算子的计算结果是否受转换的影响,将深度学习模型中的算子分为三类:第一类算子、第二类算子以及第三类算子,其中:第一类算子是不需要对数据排布中的C维度进行操作且结果不受影响的算子;第二类算子需要对数据排布中的C维度进行操作且结果受影响的算子;第三类算子是用于处理指定数据排布格式且结果受影响的算子。
可选地,优化单元还用于:对深度学习模型中第i个算子的第一属性信息进行配置,i的取值为小于等于深度学习模型中算子总数K的正整数:在第i个算子属于第一类算子的情况下,将第i个算子的输出张量的pad_info置为与输入张量的pad_info相同,pad_info用于下一算子确定是否进行数据还原;在第i个算子属于第二类算子的情况下,将第i个算子的输出张量的pad_info置为[];在第i个算子属于第三类算子的情况下,将第i个算子的输出张量的pad_info置为[C,C2 n],[C,C2 n]中的C表示张量的原始长度、C2 n表示转换后的长度;在i的当前取值小于算子总数K的情况下,将i的取值加1,并按照取值变更后的i继续执行对深度学习模型中第i个算子的属性信息进行配置的步骤;在i的当前取值等于算子总数K的情况下,结束对深度学习模型中算子的属性信息的配置。
可选地,优化单元还用于:按照第一数据排布格式对中间数据排布进行解析,得到中间数据排布中各个维度的数据;将中间数据排布中各个维度的数据按照第二数据排布格式进行排序,得到目标数据排布,其中,中间数据排布中C维度的数据等于目标数据排布中各个C维度的数据的乘积。
可选地,优化单元还用于:在将中间数据排布,从第一数据排布格式转换为第二数据排布格式,得到目标数据排布之前,为深度学习模型的每个算子配置第二属性信息,以减少对输入或输出的数据排布的转换节点的加入。
可选地,优化单元还用于:建立深度学习模型中每个算子的映射表op_map和张量映射表tensor_map,其中,映射表中包括有算子的输入张量中各位置与神经网络处理器的各输入位置之间的映射关系,张量映射表用于指示第一数据排布格式与第二数据排布格式之间的映射关系;根据深度学习模型中算子的特性、映射表以及张量映射表tensor_map,从插入tranform节点、修改第二属性信息以及维持第二属性信息不变中选择至少一个来执行。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
本发明的实施例还提供了一种存储介质,该存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
可选地,在本实施例中,上述存储介质可以被设置为存储用于执行以下步骤的计算机程序:
S1,获取深度学习模型中算子的原始数据排布,其中,深度学习模型运行在神经网络处理器NPU上,原始数据排布采用第一数据排布格式,第一数据排布格式的维度数为P,P为正整数;
S2,按照指定转换方案对原始数据排布进行转换,得到与神经网络处理器适配的目标数据排布,目标数据排布采用第二数据排布格式,第二数据排布格式的维度数为Q,Q为大于P的正整数,指定转换方案用于将数据排布格式的维度数由P转换为Q、并消除转换过程对计算结果的影响。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
基于上述图3所示方法和图6所示装置的实施例,为了实现上述目的,本发明实施例还提供了一种电子设备,如图7所示,包括存储器52和处理器51,其中存储器52和处理器51均设置在总线53上存储器52存储有计算机程序,处理器51执行计算机程序时实现图3所示的NPU数据排布的图优化方法。
基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个存储器(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台电子设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施场景的方法。
可选地,该设备还可以连接用户接口、网络接口、摄像头、射频(Radio Frequency,RF)电路,传感器、音频电路、WI-FI模块等等。用户接口可以包括显示屏(Display)、输入单元比如键盘(Keyboard)等,可选用户接口还可以包括USB接口、读卡器接口等。网络接口可选的可以包括标准的有线接口、无线接口(如蓝牙接口、WI-FI接口)等。
本领域技术人员可以理解,本实施例提供的一种电子设备的结构并不构成对该实体设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置。
可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。相反,流程图中描绘的步骤可以改变执行顺序。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置的产品。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
申请文件中提及的动词“包括”、“包含”及其词形变化的使用不排除除了申请文件中记载的那些元素或步骤之外的元素或步骤的存在。元素前的冠词“一”或“一个”不排除多个这种元素的存在。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。所附权利要求的范围符合最宽泛的解释,从而包含所有这样的修改及等同结构和功能。
Claims (11)
1.一种NPU数据排布的图优化方法,其特征在于,所述方法包括:
获取深度学习模型中算子的原始数据排布,其中,所述深度学习模型运行在神经网络处理器NPU上,所述原始数据排布采用第一数据排布格式,所述第一数据排布格式的维度数为P,P为正整数;
按照指定转换方案对所述原始数据排布进行转换,得到与所述神经网络处理器适配的目标数据排布,其中,所述目标数据排布采用第二数据排布格式,所述第二数据排布格式的维度数为Q,Q为大于P的正整数,所述指定转换方案用于将数据排布格式的维度数由P转换为Q、并消除转换过程对计算结果的影响。
2.根据权利要求1所述的方法,其特征在于,按照指定转换方案对所述原始数据排布进行转换,得到与神经网络处理器NPU适配的目标数据排布,包括:
将所述原始数据排布中的C维度对齐到S,得到中间数据排布,其中,S为2n,n为预设的正整数;
将所述中间数据排布,从所述第一数据排布格式转换为所述第二数据排布格式,得到所述目标数据排布。
3.根据权利要求2所述的方法,其特征在于,在按照指定转换方案对所述原始数据排布进行转换,得到与神经网络处理器NPU适配的目标数据排布的同时会之后,所述方法还包括:
按照所述深度学习模型中算子的计算结果是否受转换的影响,将所述深度学习模型中的算子分为多种类型;
根据所属类型为所述深度学习模型的每个算子配置第一属性信息,以使算子的计算结果不受转换的影响。
4.根据权利要求3所述的方法,其特征在于,按照所述深度学习模型中算子的计算结果是否受转换的影响,将所述深度学习模型中的算子分为多种类型,包括:
按照所述深度学习模型中算子的计算结果是否受转换的影响,将所述深度学习模型中的算子分为三类:第一类算子、第二类算子以及第三类算子,其中:
所述第一类算子是不需要对数据排布中的C维度进行操作且结果不受影响的算子;
所述第二类算子需要对数据排布中的C维度进行操作且结果受影响的算子;
所述第三类算子是用于处理指定数据排布格式且结果受影响的算子。
5.根据权利要求4所述的方法,其特征在于,根据所属类型为所述深度学习模型的每个算子配置第一属性信息,以使算子的计算结果不受转换的影响,包括:
对所述深度学习模型中第i个算子的第一属性信息进行配置,i的取值为小于等于所述深度学习模型中算子总数K的正整数:在所述第i个算子属于所述第一类算子的情况下,将所述第i个算子的输出张量的pad_info置为与输入张量的pad_info相同,pad_info用于下一算子确定是否进行数据还原;在所述第i个算子属于所述第二类算子的情况下,将所述第i个算子的输出张量的pad_info置为[];在所述第i个算子属于所述第三类算子的情况下,将所述第i个算子的输出张量的pad_info置为[C,C2 n],[C,C2 n]中的C表示张量的原始长度、C2 n表示转换后的长度;
在i的当前取值小于所述算子总数K的情况下,将i的取值加1,并按照取值变更后的i继续执行对所述深度学习模型中第i个算子的属性信息进行配置的步骤;
在i的当前取值等于所述算子总数K的情况下,结束对所述深度学习模型中算子的属性信息的配置。
6.根据权利要求2所述的方法,其特征在于,将所述中间数据排布,从所述第一数据排布格式转换为所述第二数据排布格式,得到所述目标数据排布,包括:
按照所述第一数据排布格式对所述中间数据排布进行解析,得到所述中间数据排布中各个维度的数据;
将所述中间数据排布中各个维度的数据按照所述第二数据排布格式进行排序,得到所述目标数据排布,其中,所述中间数据排布中C维度的数据等于所述目标数据排布中各个C维度的数据的乘积。
7.根据权利要求2至6中任意一项所述的方法,其特征在于,在将所述中间数据排布,从所述第一数据排布格式转换为所述第二数据排布格式,得到所述目标数据排布之前,所述方法还包括:
为所述深度学习模型的每个算子配置第二属性信息,以减少对输入或输出的数据排布的转换节点的加入。
8.根据权利要求7所述的方法,其特征在于,为所述深度学习模型的每个算子配置第二属性信息,以减少对输入或输出的数据排布的转换节点的加入,包括:
建立所述深度学习模型中每个算子的映射表op_map和张量映射表tensor_map,其中,所述算子的映射表中包括有算子的输入张量中各位置与所述神经网络处理器的各输入位置之间的映射关系,所述张量映射表用于指示所述第一数据排布格式与所述第二数据排布格式之间的映射关系;
根据所述深度学习模型中算子的特性、所述映射表以及所述张量映射表tensor_map,从插入tranform节点、修改第二属性信息以及维持第二属性信息不变中选择至少一个来执行。
9.一种NPU数据排布的图优化装置,其特征在于,所述装置包括:
获取单元,用于获取深度学习模型中算子的原始数据排布,其中,所述深度学习模型运行在神经网络处理器NPU上,所述原始数据排布采用第一数据排布格式,所述第一数据排布格式的维度数为P,P为正整数;
优化单元,用于按照指定转换方案对所述原始数据排布进行转换,得到与所述神经网络处理器适配的目标数据排布,其中,所述目标数据排布采用第二数据排布格式,所述第二数据排布格式的维度数为Q,Q为大于P的正整数,所述指定转换方案用于将数据排布格式的维度数由P转换为Q、并消除转换过程对计算结果的影响。
10.一种电子设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至8中任一项所述方法的步骤。
11.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至8中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211448488.5A CN115730647A (zh) | 2022-11-18 | 2022-11-18 | Npu数据排布的图优化方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211448488.5A CN115730647A (zh) | 2022-11-18 | 2022-11-18 | Npu数据排布的图优化方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115730647A true CN115730647A (zh) | 2023-03-03 |
Family
ID=85296628
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211448488.5A Pending CN115730647A (zh) | 2022-11-18 | 2022-11-18 | Npu数据排布的图优化方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115730647A (zh) |
-
2022
- 2022-11-18 CN CN202211448488.5A patent/CN115730647A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20220391678A1 (en) | Neural network model processing method and apparatus, computer device, and storage medium | |
US20190340499A1 (en) | Quantization for dnn accelerators | |
WO2020131390A1 (en) | Training neural network accelerators using mixed precision data formats | |
EP3906616B1 (en) | Neural network activation compression with outlier block floating-point | |
US20200210838A1 (en) | Neural network activation compression with narrow block floating-point | |
WO2020073211A1 (zh) | 运算加速器、处理方法及相关设备 | |
CN110659728A (zh) | 神经网络优化方法、装置、计算机设备及存储介质 | |
CN107292352B (zh) | 基于卷积神经网络的图像分类方法和装置 | |
US20220335304A1 (en) | System and Method for Automated Design Space Determination for Deep Neural Networks | |
CN111401510A (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
KR102655950B1 (ko) | 뉴럴 네트워크의 고속 처리 방법 및 그 방법을 이용한 장치 | |
CN111401538A (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
CN111401539A (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
US20220164663A1 (en) | Activation Compression Method for Deep Learning Acceleration | |
CN115017178A (zh) | 数据到文本生成模型的训练方法和装置 | |
CN116881641A (zh) | 预训练模型调整方法及装置、存储介质、计算设备 | |
CN111401537A (zh) | 一种数据处理方法、装置、计算机设备及存储介质 | |
CN115730647A (zh) | Npu数据排布的图优化方法、装置、电子设备及存储介质 | |
WO2021238734A1 (zh) | 一种神经网络的训练方法及相关设备 | |
JP2022165395A (ja) | ニューラルネットワークモデルの最適化方法及びニューラルネットワークモデルに関するグラフィックユーザインターフェースを提供する方法 | |
CN116128019A (zh) | Transformer模型的并行训练方法及装置 | |
Wang et al. | Balancing memory-accessing and computing over sparse DNN accelerator via efficient data packaging | |
CN107247944A (zh) | 基于深度学习的人脸检测速度优化方法及装置 | |
WO2021120036A1 (zh) | 数据处理装置和数据处理方法 | |
CN112541438A (zh) | 文本识别方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |