CN111915016B - 一种基于tvm编译器的异构平台的部署方法及装置 - Google Patents
一种基于tvm编译器的异构平台的部署方法及装置 Download PDFInfo
- Publication number
- CN111915016B CN111915016B CN202010654954.XA CN202010654954A CN111915016B CN 111915016 B CN111915016 B CN 111915016B CN 202010654954 A CN202010654954 A CN 202010654954A CN 111915016 B CN111915016 B CN 111915016B
- Authority
- CN
- China
- Prior art keywords
- node
- target
- space
- output
- block
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 73
- 230000006870 function Effects 0.000 claims abstract description 83
- 238000010586 diagram Methods 0.000 claims abstract description 48
- 238000013135 deep learning Methods 0.000 claims abstract description 47
- 238000004590 computer program Methods 0.000 claims description 18
- 101100134058 Caenorhabditis elegans nth-1 gene Proteins 0.000 claims description 3
- 238000012163 sequencing technique Methods 0.000 claims description 2
- 238000012545 processing Methods 0.000 abstract description 7
- 230000008569 process Effects 0.000 description 18
- 238000004364 calculation method Methods 0.000 description 5
- 230000004044 response Effects 0.000 description 5
- 238000000638 solvent extraction Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000013528 artificial neural network Methods 0.000 description 2
- 230000001174 ascending effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000002123 temporal effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Medical Informatics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Stored Programmes (AREA)
Abstract
本申请适用于数据处理技术领域,提供了一种基于TVM编译器的异构平台的部署方法及装置,方法包括:获取TVM编译器生成的深度学习网络的拓扑结构图、网络参数和各个函数的函数信息;基于所述拓扑结构图中节点的信息和异构平台的设备类型,将所述拓扑结构图中的节点分成与所述设备类型对应的目标设备块;对所述目标设备块进行空间分配,得到所述目标设备块的空间信息;基于所述拓扑结构图、所述网络参数、所述函数信息、所述目标设备块和所述目标设备块的空间信息,将所述深度学习网络部署到所述异构平台上。本申请通过将节点划分成不同设备类型的目标设备块,通过不同类型的目标设备块完成异构平台中不同设备的部署。
Description
技术领域
本申请属于数据处理技术领域,尤其涉及一种基于TVM编译器的异构平台的部署方法及装置。
背景技术
异构平台指有不同类型指令集和体系架构计算单元的操作平台,异构平台支持不同系统的架构,它可以由CPU,GPU,DSP,ASIC,FPGA等其他处理器构成。
目前对硬件平台的部署大多是针对具有一个指令集和一种类型的体系架构计算单元的单一硬件平台,缺乏对异构平台的部署方法。
发明内容
本申请实施例提供了一种基于TVM编译器的异构平台的部署方法及装置,可以实现对深度学习网络在异构平台的部署。
第一方面,本申请实施例提供了一种基于TVM编译器的异构平台的部署方法,包括:
获取TVM编译器生成的深度学习网络的拓扑结构图、网络参数和各个函数的函数信息;
基于所述拓扑结构图中节点的信息和异构平台的设备类型,将所述拓扑结构图中的节点分成与所述设备类型对应的目标设备块;
对所述目标设备块进行空间分配,得到所述目标设备块的空间信息;
基于所述拓扑结构图、所述网络参数、所述函数信息、所述目标设备块和所述目标设备块的空间信息,将所述深度学习网络部署到所述异构平台上。
第二方面,本申请实施例提供了一种基于TVM编译器的异构平台的部署装置,包括:
数据获取模块,用于获取TVM编译器生成的深度学习网络的拓扑结构图、网络参数和各个函数的函数信息;
节点划分模块,用于基于所述拓扑结构图中节点的信息和异构平台的设备类型,将所述拓扑结构图中的节点分成与所述设备类型对应的目标设备块;
空间分配模块,用于对所述目标设备块进行空间分配,得到所述目标设备块的空间信息;
网络部署模块,用于基于所述拓扑结构图、所述网络参数、所述函数信息、所述目标设备块和所述目标设备块的空间信息,将所述深度学习网络部署到所述异构平台上。
第三方面,本申请实施例提供了一种终端设备,包括:存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述第一方面中任一项所述的基于TVM编译器的异构平台的部署方法。
第四方面,本申请实施例提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述第一方面中任一项所述的基于TVM编译器的异构平台的部署方法。
第五方面,本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述第一方面中任一项所述的基于TVM编译器的异构平台的部署方法。
可以理解的是,上述第二方面至第五方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。
本申请实施例与现有技术相比存在的有益效果是:本申请通过获取到的TVM编译器生成的拓扑结构图中节点的信息,将拓扑结构图中的节点分成与异构平台的设备类型对应的目标设备块,然后对目标设备块进行空间分配,得到各个目标设备块的空间信息,最后基于获取到的TVM编译器生成的网络参数、各个函数的函数信息、拓扑结构图、目标设备块和目标设备块的空间信息,将各个目标设备块中的信息部署到异构平台的设备上,完成对异构平台的部署;本申请通过将节点划分成不同设备类型的目标设备块,通过不同类型的目标设备块完成异构平台中不同设备的部署,相比于现有技术中只能对单一的设备平台进行部署,本申请保证了深度学习网络的完整性,而且本申请是基于TVM编译器进行深度学习网络的部署,支持不同的深度学习框架得到的深度学习网络。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请一实施例提供的基于TVM编译器的异构平台的部署方法的应用场景示意图;
图2是本申请一实施例提供的基于TVM编译器的异构平台的部署方法的流程示意图;
图3是本申请一实施例提供的图2中目标设备块划分的方法流程示意图;
图4是本申请一实施例提供的具体的节点划分方法的流程示意图一;
图5是本申请一实施例提供的具体的节点划分方法的流程示意图二;
图6是本申请一实施例提供的节点空间分配方法的流程示意图;
图7是本申请一实施例提供的具体的空间分配方法的流程示意图;
图8是本申请一实施例提供的平台部署方法的流程示意图;
图9是本申请一实施例提供的基于TVM编译器的异构平台的部署装置的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本申请说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
图1为本申请实施例提供的基于TVM(Tensor Virtual Machine)编译器的异构平台的部署方法的应用场景示意图,上述基于TVM编译器的异构平台的部署方法可以用于对异构平台进行深度学习网络的部署。其中,TVM编译器10用于生成需要部署的深度学习网络的数据,终端设备20用于获取TVM编译器10生成的数据,并对获取到的数据进行节点的设备块分类,最后基于获取得到的数据和分成的设备块将深度学习网络部署到异构平台上,达到对异构平台的部署。
在具体应用中,异构平台可以包括多种处理器,本申请主要针对NPU(Neural-network Processing Units,神经网络处理器加速单元)和DSP(Digital SignalProcessing,数字信号处理器)组成的异构平台进行说明,且NPU具体采用NNP处理器(Neural Network Processor,神经网络处理器),以下具体实施例中的举例说明均以上述异构平台为例进行说明,需要说明的是,上述异构平台只是一个举例说明,不应对本申请的方法构成任何限定。
以下结合图1对本申请实施例的基于TVM编译器的异构平台的部署方法进行详细说明。
图2示出了本申请提供的基于TVM编译器的异构平台的部署方法的示意性流程图,参照图2,对该部署方法的详述如下:
S101,获取TVM编译器生成的深度学习网络的拓扑结构图、网络参数和各个函数的函数信息。
在本实施例中,使用TVM编译器可以编译不同深度学习网络框架生成的深度学习网络,经过TVM编译器编译后的深度学习网络可以生成拓扑结构图、网络参数和各个函数的函数信息。
其中,拓扑结构图中包括节点的信息,拓扑结构图中节点是一层一层排列的,且一个节点对应唯一的一个索引码,其中,节点指的是深度学习网络在运行过程中需要存储数据或数据处理的模块。
节点的信息可以包括节点的设备类型、节点的节点类型、节点的输出数据的信息、节点的输入数据的信息、节点的结构信息以及节点的数据类型等。其中,节点的节点类型可以包括函数类型和数据类型,函数类型(TVM OP(Tensor Virtual Machine Operator-TVM操作)的节点指的是节点指的是经过TVM编译后的函数类型的节点,可以是一个函数,可以对数据进行处理;数据类型的节点指的是节点只是存放数据,不对数据进行处理。节点的输出数据的信息包括一个或多个输出tensor,一个输出tensor是一个多维数组;节点的输入数据的信息包括一个或多个输入tensor,一个输入tensor是一个多维数组。节点的结构信息可以包括节点的尺度信息,例如:通道信息、宽度信息和高度信息等。节点的数据类型可以包括整型(int)、短整型(short)和单精度浮点(float32或者float16)等。
节点的设备类型与异构平台的设备类型相对应,异构平台有哪些设备类型,节点的设备类型就包括哪些,其中,节点的设备类型在进行TVM编译器生成拓扑结构的时候已经根据异构平台的设备类型设置完成,节点的设备类型的种类与需要部署的异构平台的设备类型的种类对应,例如,异构平台可以是NNP和DSP的平台,则异构平台的设备类型包括NNP和DSP,节点的设备类型也包括NNP类型的节点和DSP类型的节点。
网络参数指的是深度学习网络的加权(weight)数据。函数的函数信息是以lib文件形式存在的,指的是函数的汇编代码或功能函数所需的信息。
S102,基于所述拓扑结构图中节点的信息和异构平台的设备类型,将所述拓扑结构图中的节点分成与所述设备类型对应的目标设备块。
在本实施例中,对目标设备块的划分主要是根据节点信息中的节点类型、设备类型、节点的输入数据和节点的输出数据划分的,其中,主要是将拓扑结构图中是函数类型的节点划分成不同的目标设备块。
如图3所示,在一种可能的实现方式中,步骤S102的实现过程可以包括:
S1021,基于所述节点的信息,将节点划分到每个设备类型对应的候选设备块中,得到各个所述候选设备块包含的目标节点,其中,每个设备类型下包含至少一个候选设备块。
在本实施例中,一个设备类型可以包括一个候选设备块,也可以包括至少两个候选设备块,具体有多少个候选设备块主要是基于节点的分类情况确定的。
作为举例,NNP设备类型可以包括一个NNP候选设备块,也可以包括两个或多个NNP候选设备块。
如图4所示,在一种可能的实现方式中,步骤S1021的实现过程可以包括:
S10211,判断所述拓扑结构图中的每一个节点是否满足分类条件。
在本实施例中,一个节点对应唯一的一个索引码,可以根据节点的索引码索引节点。
S10212,若第i个节点满足节点的分类条件,则将所述第i个节点按照所述第i个节点的设备类型划分到所述第i个节点的设备类型对应的第j个候选设备块中,i和j大于或等于1,其中,当i=1时,第一个节点的分类条件为节点类型为函数类型,,当i>1时,第i个节点的分类条件为所述第i个节点的节点类型为函数类型、且所述第i个节点的输入数据为所述第j个候选设备块中节点的输出数据或为所述第j个候选设备块的上一层节点的输出数据,其中,所述拓扑结构图中的节点是由上而下一层一层分布的,所述第j个候选设备块的上一层节点指的是分布在所述第j个候选设备块之外,且在所述第j个候选设备块之上距离所述第j个候选设备块最近的一层节点。
在本实施例中,如果是第一个节点,且第一个节点的设备类型为DSP,则第一个节点只需要满足节点类型为函数类型就可以放入一个DSP候选设备块中,因为是第一个节点,所有的DSP候选设备块均是空的,第一个节点可以放入任意一个DSP候选设备块中。如果是第三个节点,则需要先判断是不是函数类型的节点,如果不是,则不需要再进行后续判断,直接舍去;如果是函数类型的节点,且是DSP类型的,则要看第三个节点的输入数据,如果第三个节点的输入数据是第一个DSP候选设备块的一个节点的输出数据,则将第三个节点纳入第一个DSP候选设备块;如果第三个节点是函数类型的节点,且是DSP类型的,第三个节点的输入数据是第一个DSP候选设备块之外,且在第一个DSP候选设备块纸上距离第一个DSP候选设备块最近的一层节点中一个节点的输出数据,则将第三个节点纳入第一个DSP候选设备块中。
在本实施例中,候选设备块可以是预先设置好的空的设备块,也可以是随着节点的判断而建立的设备块。
作为举例,第一个节点的设备类型为NNP,如果有预先创建好的NNP的候选设备块,则将第一个节点纳入NNP候选设备块中,如果没有预先创建好的NNP候选设备块,则可以新建一个NNP候选设备块,将第一个节点纳入新建的NNP候选设备块。
S10213,若所述第i个节点不满足分类条件,则将所述第i个节点按照所述第i个节点的设备类型划分到所述第i个节点的设备类型对应的第j+1个候选设备块中,其中,所述第j+1个候选设备块中不存在节点。
在本实施例中,如果第i个节点不满足分类条件,也就是第i个节点不能放入任意一个已经存在节点的候选设备块中,则需要将第i个节点存放在一个空的候选设备块中,第j+1个候选设备块可以是预先存在的一个空的候选设备块,也可以是在第i个节点不满足分类条件时新建的一个空的候选设备块,例如,已经有三个NNP候选设备块中存放有NNP设备类型的节点,第六个节点是函数类型的节点,且是NNP类型的节点,第六个节点的输入数据不是上述三个NNP候选设备块中节点的输出数据,且第六个节点的输入数据不是上述三个NNP候选设备块的任何一个的上一层节点的输出数据,则将第六个节点放入第四个NNP候选设备块。
作为举例,如图5所示,如果包括两种设备类型的节点,分别为NNP和DSP类型的,当一个节点进来之后,先判断该节点是否为NNP函数类型的节点;
如果该节点属于NNP函数类型,则查找是否存在一个NNP候选设备块A可以将该节点纳入,如果该节点的输入数据来自于NNP候选设备块A中的节点或者来自于NNP候选设备块A的上一层节点,则可以将该节点放入NNP候选设备块A中;否则,将该节点纳入一个不存在任何节点的空的NNP候选设备块,或者新建一个NNP候选设备块,将该节点纳入新建的NNP候选设备块;
如果该节点不是NNP函数类型的节点,则判断该节点是否为DSP函数类型的节点;
如果该节点属于DSP函数类型,则查找是否存在一个DSP候选设备块B可以将该节点纳入,如果该节点的输入数据来自于DSP候选设备块B中的节点或者来自于DSP候选设备块B的上一层节点,则可以将该节点放入DSP候选设备块B中;否则,将该节点纳入一个不存在任何节点的空的DSP候选设备块,或者新建一个DSP候选设备块,将该节点纳入新建的DSP候选设备块;
如果该节点不是NNP函数类型的节点,也不是DSP函数类型的节点,则无需处理。
需要说明的是,如果当前节点有至少两个输入数据,且输入数据来自至少两个候选设备块,则也需要将当前节点按照当前节点的设备类型划分到所述当前节点的设备类型对应的第j+1个候选设备块中。
作为举例,如果一个节点是函数类型的节点,且节点是DSP类型的节点,输入数据一个来自于第三个DSP候选设备块中一个节点,另一个输入数据来自于第二个NNP候选设备块中一个节点,则需要将该节点放入一个空的DSP候选设备块中,如果没有空的DSP候选设备块,则可以新建一个DSP候选设备块。
本申请实施例中,因为函数类型的节点是需要进行计算或其他处理的节点,而数据类型的节点只是存放数据,不对数据做处理,是依附于函数节点存在的,所以只需要将函数类型的节点进行分类,进而可以得到每个数据节点对应的候选设备块。在进行节点分类时设置了分类规则,既能将有输入输出关系的节点分到一块,同时也能将没有任何关联的节点分到一个候选设备块中,使不关联的节点在候选设备块中可以并行运算。采用本申请的方法,可以将所有函数类型的节点准确,快速的分类,同时可以将不同设备类型的节点分类,方便后续对异构平台中不同设备进行部署,采用设备块来进行异构平台部署,可以将不同设备类型的设备需要的数据分开,在部署时避免因节点太多或节点设备类型不同引起的部署错误。
S1022,将所述候选设备块按预设规则排列,合并属于相同设备类型且连续的候选设备块,得到目标设备块。
在本实施例中,每个节点均有一个索引码,对候选设备块进行排列时,可以按照候选设备块中第一个目标节点的索引码的大小,将所有的候选设备块依次从小到大进行排列,排列后如果有相同设备类型的候选设备块是连续的,则将连续的且相同设备类型的候选设备块合并成一个,得到合并后的目标设备块,当然,不需要合并的每个候选设备块均为一个目标设备块,一个目标设备块对应唯一的一个索引码。
具体的,判断相同设备类型的候选设备块是否是连续的方法可以为首先通过查找得到相邻且相同设备类型的候选设备块,然后基于候选设备块的索引码判断相邻且相同设备类型的候选设备块是否是连续的,如果索引码是连续的则说明相邻且相同设备类型的候选设备块是连续的,如果索引码不是连续的则说明相邻且相同设备类型的候选设备块不是连续的。
作为举例,候选设备块a为NNP类型的,且候选设备块a中第一个目标节点的索引码为3;候选设备块b为NNP类型的,且候选设备块b中第一个目标节点的索引码为2;候选设备块c为NNP类型的,且候选设备块c中第一个目标节点的索引码为5;候选设备块d为DSP类型的,且候选设备块d中第一个目标节点的索引码为4;候选设备块e为DSP类型的,且候选设备块e中第一个目标节点的索引码为1;
则按索引码从小到大的顺序进行排列的顺序为e、b、a、d、c,由于b和a为连续的且都为NNP类型,可以将b和a合并成一个f,得到按顺序排列的e、f、d、c,其中,e、f、d、c均为一个目标设备块,且每个目标设备块对应一个索引码。
S1023,根据所述目标设备块中的目标节点的信息确定每个目标设备块的输入节点和输出节点。
在本实施例中,在对目标设备块进行硬件部署时,需要知道目标设备块的输入和输出才能进行部署,一个目标设备块中包括多个目标节点,在确定目标设备块的输入节点和输出节点时,可以根据目标设备块的索引码一个一个索引目标设备块,并且对目标设备块中的每个目标节点的输入节点和输出节点进行搜索,最终将每个的目标设备块中所有的目标节点都索引完,确定每个目标设备块的输入节点和输出节点。
输入节点只包括目标设备块外部的输入数据对应的节点,不包括内部节点与节点之间输入输出传输的输入节点。输出节点只是目标设备块最终需要输出目标设备块的输出数据对应的节点,不包括内部节点与节点之间的输入输出传输的节点。
在一种可能的实现方式中,步骤S1023的实现过程可以包括:
S10231,若所述目标设备块中的目标节点的输入节点满足输入节点纳入条件,则所述目标节点的输入节点纳入当前目标设备块中并将所述输入节点作为所述目标设备块的输入节点,其中,所述输入节点纳入条件包括所述目标节点的输入节点为数据类型的节点时,对应的数据为所述深度学习网络的输入数据,或所述目标节点的输入节点为函数类型的节点且不包含在当前目标设备块中。
在本实施例中,由于只需要确定目标设备块中的外部输入的节点,所以只需要查找目标节点的输入数据是来自于目标设备块的外部节点的输出数据即可。如果目标节点的输入数据是数据类型的节点,且是深度学习网络的输入数据,则该节点时目标设备块的输入节点,将该节点纳入目标设备块中的输入节点集合中,其中,深度学习网络的输入数据是用户输入的数据,是已知数据。如果目标节点的输入数据是函数类型的节点,但是该节点不在目标节点所在的目标设备块中,也就是该节点是其他目标设备块中的节点,也要将该节点纳入到目标节点所在的目标设备块的输入节点集合中。
S10232,所述目标设备块中满足输出节点纳入条件的目标节点为所述当前目标设备块的输出节点,其中,所述输出节点纳入条件包括所述目标节点在所述深度学习网络的输出列表中,或所述目标节点的输出数据是当前目标设备块之外的目标设备块中目标节点的输入数据。
在本实施例中,由于目标节点均是函数类型的节点,目标节点均是需要进行数据处理后输出数据的节点,所以一个目标节点就是一个输出节点,一个目标节点对应一个输出数据,因此,在确定目标设备块的输出节点时,只要确定目标设备块中的目标节点是不是符合输出节点纳入条件即可。如果目标节点在深度学习网络的输出列表中,也就是输出列表中包含了当前目标节点,则当前目标节点就是目标设备块的输出节点,如果当前目标节点不在输出列表中,但是当前目标节点的输出数据是其他目标设备块的输入数据,则当前目标节点也要作为目标设备块的输出节点。
需要说明的是,目标设备块中存储的目标节点、输入节点和输出节点均以节点的索引码存储,也就是在确定目标节点、输入节点和输出节点时只需要记录节点的索引码即可,目标设备块中存储节点在拓扑结构图中的索引码,通过索引码在目标设备块调度时就可以获取相关节点的参数和数据信息。
本申请实施例中,在确定目标设备块的输入节点和输出节点时,设置了节点纳入条件,根据节点纳入条件可以快速确定节点是否是输入节点或输出节点,输入节点和输出节点的确定为后续空间分配和硬件部署打下基础。
在本申请实施例中,先将候选设备块按顺序排列并合并后再确定目标设备块的输入节点和输出节点,如果先确定候选设备块的输入节点和输出节点,则在候选设备块合并后,候选设备块之间的输入输出节点则需要去除,增加了输出节点和输出节点的筛选过程,比较繁琐,先合并再确定输出节点和输出节点,不会存在将内部传输的节点纳入到了输入节点和输出节点的问题,方法更简单。
作为举例,目标设备块包括一个NNP目标设备块和一个DSP目标设备块,NNP目标设备块中包括目标节点A和B,DSP目标设备块中包括目标节点C和D,确定所有的目标设备块的输入节点和输出节点。
判断当前目标设备块是NNP目标设备块还是DSP目标设备块,如果当前目标设备块是NNP目标设备块,搜索目标节点A的输入节点包括节点E和节点F,节点E和F均为数据类型节点,且E和F的输出数据为深度学习网络的输入数据,则节点E和F均为NNP目标设备块的输入节点,搜索目标节点B的输入节点只包括目标节点A,则目标节点A不满足输入节点纳入条件,则A不属于NNP目标设备块的输入节点;目标节点A不在深度学习网络的输出列表中,且DSP目标设备块中没有以A的输出数据作为输入数据的节点,所以A不是目标设备块的输出节点,目标节点B不在深度学习网络的输出列表中,但是目标节点B的输出数据是DSP目标设备块中目标节点C的输入数据,则B是NNP目标设备块的输出节点。
如果当前目标设备块是DSP目标设备块,搜索目标节点C的输入节点包括节点B和节点G,那么目标节点C的输入节点就是节点B和节点G,作为一个输入节点数组纳入当前目标设备块的输入节点列表当中;节点C自身作为输出节点数组纳入当前目标设备块的输出节点列表当中。搜索目标节点D的输入节点只包括目标节点C,那么节点C作为目标节点D的输入节点数组,纳入当前目标设备块的输入节点列表中;节点D自身作为输出节点数组纳入当前目标设备块的输出节点列表中。
由此,NNP目标设备块的输入节点列表为[E,F],输出节点列表为[B];DSP目标设备块的输入节点列表为[[B,G],[C]],输出节点列表为[[C],[D]]。
需要说明的是,NNP目标设备块和DSP目标设备块的结构不同,NNP目标设备块只有一层进行计算,所以输出是一组输出数据,而DSP目标设备块中每个单节点均可以作为一层进行计算,输出是多组输出数据,每一层的输出节点和输入节点均需要确定。
S103,对所述目标设备块进行空间分配,得到所述目标设备块的空间信息。
在本实施例中,目标设备块的输入节点的输出数据如果是深度学习网络的输入数据,则是用户输入的数据,不需要进行空间分配,如果输入节点的输入数据是其他目标设备块的目标节点的输出数据,则输入节点为其他目标设备块的输出节点,因此,在空间分配时,只需要对目标设备块中的输出节点进行空间分配,空间分配中包括存储地址分配,而本申请中存储地址分配是基于一个基地址进行分配的,只分配偏移地址。
在一种可能的实现方式中,步骤S103的实现过程可以包括:
S1031,基于所述目标设备块中每个输出节点的尺度信息和每个输出节点的数据类型,计算每个输出节点的空间大小。
在本实施例中,空间大小的计算为尺度信息与数据类型的乘积。有了空间大小,才能知道输出节点具体应占多少空间,也就是占据多少地址。
S1032,基于每个输出节点的空间大小,获得所有输出节点需要占用的最大存储空间,将所述最大存储空间作为所述目标设备块的空间信息。
在本实施例中,如果一个目标设备块中只有一个输出节点,则只对该输出节点的输出数据分配节点空间即可,如果一个目标设备块中有多个输出节点,需要对每一个输出节点均进行节点空间分配,对目标设备块中所有的输出节点进行节点空间分配之后,可以得到所有输出节点需要占用的最大存储空间。
本申请实施例中,通过输出节点的空间大小对输出节点进行空间分配,可以准确得到输出节点所占地址空间,同时只对目标设备块中的输出节点进行空间分配,可以减少所占用的节点空间,加快分配进程。
如图6所示,在一种可能的实现方式中,步骤S1032的实现过程可以包括:
S10321,将a个输出节点按照输入输出的顺序进行排序,获得排序后的输出节点队列。
在本实施例中,对输出节点进行空间分配时,是通过目标设备块的索引码一个个索引目标设备块,并通过节点的索引码索引节点,先索引索引码在前的节点,所以也就是按照输入输出的顺序进行索引的,即,是将所有输出节点按照输入输出的顺序进行排序。
作为举例,目标设备块A中的输出节点为a,目标设备块B中的输出节点为b,目标设备块A在B之前,所以先索引输出节点a,再索引输出节点b,且输出节点a、b的排序为输出节点a在前,输出节点b在后。
S10322,基于第1个输出节点的空间大小,在第一存储空间为所述第1个输出节点分配第1节点空间。
在本实施例中,由于是第1个输出节点,第一存储空间中可以分配的空间均没有被占用,所以第1个输出节点可以直接进行空间分配,得到一个节点空间。第1节点空间中包括存储第1个输出节点的首地址和末地址。
在本实施例中,空间可以包括数据空间和全局空间,数据空间是可以被重复使用的空间,也就是相同的节点空间可以在不同的时间被不同的输出节点使用,本申请中第一存储空间指的是数据空间;全局空间是不可以被重复使用的空间,在一个输出节点占用该节点空间之后,该节点空间不可以再被其他输出节点使用,本申请中第二存储空间指的是全局空间。
S10323,根据第n个输出节点的空间大小,在已分配的节点空间中查找目标节点空间,其中,所述目标节点空间为当前为空闲状态、且大于第n个输出节点的空间大小的节点空间,2≤n≤a-1。
在本实施例中,对第n个输出节点进行节点空间分配时,由于已经有分配过的输出节点占用了一部分节点空间,所以先需要在释放的节点空间中,也就是处于空闲状态的节点空间中寻找第n个输出节点可以使用的节点空间,第n个输出节点可以使用的节点空间必须大于第n个输出节点的空间大小。
S10324,若已分配的节点空间中存在目标节点空间,根据第n个输出节点的空间大小,在所述目标节点空间中为所述第n个输出节点分配第n节点空间。
在本实施例中,如果有空闲状态,且大于第n个输出节点的空间大小的节点空间,则可以在该节点空间中为第n个输出节点分配第n节点空间,实现节点空间的复用。
S10325,若已分配的节点空间中不存在目标节点空间,根据第n个输出节点的空间大小,在第n-1节点空间之后为所述第n个输出节点分配第n节点空间。
在本实施例中,如果不存在目标节点空间,则可以在第一存储空间中为第n个输出节点分配对应的节点空间,如果第一存储空间中没有满足第n个输出节点的空间大小的空间。
S10326,在为所述第n个输出节点分配第n节点空间之后,确定当前所有节点空间中是否存在满足释放条件的输出节点。在本实施例中,满足释放条件包括不属于第n个输出节点之后的输出节点的输入节点、且不为第n个输出节点的输入节点。
S10327,若存在,则将满足释放条件的输出节点的节点空间释放,其中,释放后的节点空间为空闲状态。
在本实施例中,在对第n个输出节点分配完成后,将分配的节点空间按照升序排列,然后检查当前存在的节点空间中是不是有可以需要释放的节点空间,如果有则释放,使当前节点空间中只保存第n个输出节点计算所需要的输出节点的节点空间。
在本实施例中,当前节点空间中保存了第n个输出节点计算所需要的节点空间,包括第n个输出节点的输出数据的节点空间,如果输入数据是由一个输出节点提供的也要保存该输出节点的节点空间,如果第n个输出节点的输入数据不是输出节点提供的,则只需要保留第n个输出节点的输出数据的节点空间。
当前节点空间中还需要保留未分配节点空间的输出节点的输入节点对应的节点空间,因为该输出节点是后边未分配节点空间的输出节点计算需要使用的,所以需要先保留下来为后续使用带来方便,如果释放掉,后续使用时便找不到可以使用的数据,将其他后续不会使用的输出节点的节点空间均释放。
在本实施中,如果不存在满足释放条件的输出节点,则没有可以释放的节点空间。
S10328,根据第a个输出节点的空间大小,在第二存储空间为所述第a个输出节点分配第a节点空间。
在本实施例中,如果是最后一个输出节点,则需要为该输出节点分配一个全局空间,而不是在分配第1个至第a-1个输出节点的动态空间中分配节点空间。
在本实施例中,第1节点空间至第a节点空间组成目标设备块的空间信息。
需要说明的是,在为最后一个输出节点分配节点空间之后,还可以将当前节点空间中满足释放条件的输出节点对应的节点空间释放,如果没有满足释放的条件的输出节点对应的节点空间则不进行释放。
S10329,基于所述第1节点空间至第a节点空间,确定a个输出节点共占用的最大存储空间。
在本实施例中,在为每个输出节点分配了节点空间之后,可以得到所有输出节点一共需要占用的总的存储空间的最大值,由于有的输出节点占用的存储空间是相同的,所以最大存储空间要小于所有输出节点的节点空间之和。
作为举例,如果第一个输出节点占用了5个字节的空间,第二个输出节点占用了8个字节的空间,第三个输出节点占用的是第一个输出节点释放空间,且第三个输出节点占用了3个字节的空间,因此,3个输出节点占用的最大存储空间为5+8=13个字节的空间。
需要说明的是,由于第a个输出节点分配的是第二存储空间中的节点空间,而其他输出节点均分配的是第一存储空间中的节点空间,因此,最大存储空间包括前a-1个输出节点共占用的第一最大存储空间,以及第a个输出节点所占用的第二最大存储空间,其中,第二最大存储空间为第a节点空间。
本申请实施例中,为目标设备块分配空间,一方面可以得到设备块中的输出节点的节点空间,方便调用,另一方面还可以获得每个设备类型对应的所有目标设备块的总的空间大小,在进行异构平台部署时方便异构平台为深度学习网络分配空间。本申请采用节点空间分配后释放不使用的数据,使存储节点空间的模块中只保留当前需要使用的数据,使深度学习网络在运行时数据更干净,不会被污染,保证了深度学习网络的正常运行,还可以使节点空间可以重复使用,有利于空间复用。
作为举例,NNP目标设备块A和DSP目标设备块B,其中A连接B,A在B前边。
对A进行空间分配,A是NNP目标设备块,由NNP目标设备块的功能实现方式决定只有一层运算,所以A中只有一组输出数据,对上述A中输出数据对应的输出节点进行节点空间分配,分配完成后目标设备块的索引码加1,进行下一个目标设备块的空间分配。
对B进行空间分配,B是DSP目标设备块,由DSP目标设备块的功能实现方式决定有多层计算,所以B中有多组输出数据,对上述B中的每一层输出数据对应的输出节点均进行节点空间分配,分配完成后目标设备块的索引码加1,进行下一个目标设备块的空间分配。
作为举例,节点空间分配的具体方法如图7所示:
如果一个目标设备块中一共有6个输出节点需要进行节点空间分配,则:
第一次、为第一个输出节点分配节点空间,直接生长出1(缓冲空间)大小的空间即可,得到第1节点空间。
第二次、为第二个输出节点分配节点空间,第二个输出节点有两个输出数据,则两个输出数据均需要分配,生长出2和3大小的空间,则2和3组成第2节点空间,由于第二个输出节点的输入节点包括第一个输出节点,则1不需要释放。
第三次、为第三个输出节点分配节点空间,第三个输出节点有一个输出数据,生长出4大小的空间,则4为第3节点空间,由于第三个输出节点的输入节点包括第二个输出节点,则2和3均不需要释放,第一个输出节点均不是未分配空间的输出节点的输入节点,所以1释放。
第四次、为第四个输出节点分配节点空间,第四个输出节点有一个输出数据,生长出5大小的空间,释放的1空间可以满足5的使用需求,所以5可以占用释放的1的空间,则5为第4节点空间,由于第四个输出节点的输入节点包括第三个输出节点,则4不需要释放,2后续不再使用可以释放,3后续还要使用所以需要保留。
第五次、为第五个输出节点分配节点空间,第五个输出节点有一个输出数据,生长出6大小的空间,则6为第5节点空间,由于第五个输出节点的输入节点包括第四个输出节点,则5不需要释放,4后续不再使用,可以释放。
第六次、第六个输出节点是最后一个输出节点,需要分配的是全局空间,由于本图中只显示动态分配的节点空间,因此在本图中不再分配,也不再显示,为第六个输出节点分配空间得到第6节点空间;另外,本步骤中还可以把不再使用的输出节点的节点空间释放即可,3不再使用,可以释放。
基于以上的节点空间的分配,从图7中可以得到,第4节点空间和第5节点空间均是占用的之前输出节点释放的空间,因此,第一个输出节点至第六个输出节点一共占用的最大存储空间为第1节点空间、第2节点空间、第3节点空间和第6节点空间之和。
S104,基于所述拓扑结构图、所述网络参数、所述函数信息、所述目标设备块和所述空间信息,将所述深度学习网络部署到所述异构平台上。
在本实施例中,在对节点划分完成目标设备块,并对目标设备块配置好节点空间后,即可按照目标设备块排列好的顺序将各个目标设备块部署到异构平台上,在对目标设备块进行部署时也是通过目标设备块的索引码进行一个个部署的。
如图8所示,在一种可能的实现方式中,步骤S104的实现过程可以包括:
S1041,基于按预设规则排列的第m个目标设备块中的输入节点的输入数据、所述输出节点的输出数据、所述空间信息、所述函数信息和所述网络参数,得到第m个目标设备块的部署信息。
在本实施例中,不同设备类型需要的部署信息不同,但是都需要收集目标设备块中目标节点的输入数据和输出数据才能进行部署,输入数据包括数据的结构信息、数据的空间信息以及节点的信息中包括的输入数据的信息,输出数据与输入数据收集的信息相同,然后将输入数据和输出节点数据组成结构化的输入数据和输出数据。
部署信息包括结构化的输入数据、输出数据、函数信息、网络参数以及异构平台上对应的设备的设备配置信息,设备配置信息是预先存储的,根据设备类型设置的,设备配置信息可以包括图像处理个数、代码长度、代码如何启动等信息。
作为举例,如果是NNP目标设备块,函数信息是TVM编译后的汇编代码,NNP目标设备块需要将结构化的输入数据、输出数据、TVM编译后的汇编代码、网络参数放入NNP编译工具中进行编译,生成二进制代码,部署信息包括二进制代码、结构化的输出数据、结构化的输出数据和设备配置信息。
如果是DSP目标设备块,函数信息是DSP目标设备块中每一层的函数的功能信息,部署信息包括DSP目标设备块中每层函数的功能信息、每层的结构化的输入数据、每层函数结构化的输出数据和设备配置信息。
需要说明的是,如果是在线部署,在收集完成部署信息后,需要给部署信息加上开销信息,开销信息需要根据设备调度进行设置,可以包括目标设备块的层数、目标设备块的输入数据和输出数据等。
S1042,判断所述第m个目标设备块的部署信息是否满足部署条件,其中,所述部署条件为所述第m个目标设备块不需要等待第m-1个目标设备块的输出数据作为输入数据。
在本实施例中,由于目标设备块是按照顺序进行部署的,当前目标设备块可能需要用到前边的目标设备块的输出数据作为输入数据,如果前边的目标设备块没有得到输出数据,则当前目标设备块也就得不到输入数据,所以不能部署,需要等待获取到数据后再继续部署。
S1043,若满足部署条件,将所述第m个目标设备块的部署信息发送至所述异构平台中与所述第m个目标设备块的目标设备块的设备类型相同的设备上。
在本实施例中,满足部署条件,第m个目标设备块的输入数据已经全部搜集到,不需要等待第m-1个目标设备块的输出数据,则可以直接将部署信息组装成相应的节后或消息发送至对应的设备上。
S1044,若不满足部署条件,则获取到第m-1个目标设备块的输出数据后将所述第m个目标设备块的部署信息发送至所述异构平台中与所述第m个目标设备块的目标设备块的设备类型相同的设备上。
在本实施例中,不满足部署条件,第m个目标设备块需要等待第m-1个目标设备块的输出数据作为输入数据,则需要中断部署,等待第m-1个目标设备块计算完成,得到第m-1个目标设备块的输出数据后,将部署信息组装成相应的节后或消息发送至对应的设备上。
本申请实施例中,通过获取到的TVM编译器生成的拓扑结构图中节点的信息,将拓扑结构图中的节点分成与异构平台的设备类型对应的目标设备块,然后对目标设备块进行空间分配,得到各个目标设备块的空间信息,最后基于获取到的TVM编译器生成的网络参数、各个函数的函数信息、拓扑结构图、目标设备块和空间信息,将各个目标设备块中的信息部署到异构平台的设备上,完成对异构平台的部署;本申请通过将节点划分成不同设备类型的目标设备块,通过不同类型的目标设备块完成异构平台中不同设备的部署,相比于现有技术中只能对单一的设备平台进行部署,本申请保证了深度学习网络的完整性,而且本申请是基于TVM编译器进行深度学习网络的部署,支持不同的深度学习框架得到的深度学习网络。
需要说明的是,本申请不仅适用于在线部署,还适用于离线部署,离线部署时只需要将部署信息存储在响应的bin文件中,一般包括网络结构bin文件和网络参数bin文件,然后在异构平台上开发解析上述bin文件,并按照目标设备块的结构进行调度部署。
在一种可能的实现方式中,步骤S102的实现过程还可以包括:
基于所述节点的信息和所述设备类型,将节点划分到每个设备类型对应的候选设备块中,得到各个所述候选设备块包含的目标节点,其中,每个设备类型下包含至少一个候选设备块;
根据所述候选设备块中的目标节点的信息确定每个候选设备块的输入节点和输出节点;
将所述候选设备块按预设规则排列,合并属于相同设备类型且连续的候选设备块,得到目标设备块。
在本实施例中,在候选设备块合并时,如果候选设备块是NNP,需要将需要合并的候选设备块中用于内部传输的输入节点和输出节点去除,只留下最终目标设备块的输入节点和输出节点,如果是DSP的,那么只要将输入节点和输出节点合并即可。
作为举例,以候选设备块是NNP为例,候选设备块A的输入节点为a、b,输出节点为c,c为候选设备块A中的目标节点;候选设备块B的输入节点为c、d,输出节点为e,e为候选设备块B中的目标节点;候选设备块A和候选设备块B合并成目标设备块C,则目标设备块C的输入节点为a、b、d,输出节点为e。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
对应于上文实施例所述的基于TVM编译器的异构平台的部署方法,图9示出了本申请实施例提供的基于TVM编译器的异构平台的部署装置的结构框图,为了便于说明,仅示出了与本申请实施例相关的部分。
参照图9,该装置300可以包括:数据获取模块310、节点划分模块320、空间分配模块330和网络部署模块340。
其中,数据获取模块310,用于获取TVM编译器生成的深度学习网络的拓扑结构图、网络参数和各个函数的函数信息;
节点划分模块320,用于基于所述拓扑结构图中节点的信息和异构平台的设备类型,将所述拓扑结构图中的节点分成与所述设备类型对应的目标设备块;
空间分配模块330,用于对所述目标设备块进行空间分配,得到所述目标设备块的空间信息;
网络部署模块340,用于基于所述拓扑结构图、所述网络参数、所述函数信息、所述目标设备块和所述目标设备块的空间信息,将所述深度学习网络部署到所述异构平台上。
在一种可能的实现方式中,节点划分模块320具体可以包括:
模块划分单元,用于基于所述节点的信息和所述设备类型,将节点划分到每个设备类型对应的候选设备块中,得到各个所述候选设备块包含的目标节点,其中,每个设备类型下包含至少一个候选设备块;
模块排序单元,用于将所述候选设备块按预设规则排列,合并属于相同设备类型且连续的候选设备块,得到目标设备块;
输入输出节点确定单元,用于根据所述目标设备块中的目标节点的信息确定每个目标设备块的输入节点和输出节点。
在一种可能的实现方式中,所述节点的信息包括节点的节点类型、节点的设备类型、节点的输入数据和节点的输出数据;
模块划分单元具体可以用于:
判断所述拓扑结构图中的每一个节点是否满足分类条件;
若第i个节点满足节点的分类条件,则将所述第i个节点按照所述第i个节点的设备类型划分到所述第i个节点的设备类型对应的第j个候选设备块中,i和j大于或等于1,其中,当i=1时,第一个节点的分类条件为节点类型为函数类型,,当i>1时,第i个节点的分类条件为所述第i个节点的节点类型为函数类型、且所述第i个节点的输入数据为所述第j个候选设备块中节点的输出数据或为所述第j个候选设备块的上一层节点的输出数据,其中,所述拓扑结构图中的节点是由上而下一层一层分布的,所述第j个候选设备块的上一层节点指的是分布在所述第j个候选设备块之外,且在所述第j个候选设备块之上距离所述第j个候选设备块最近的一层节点。
在一种可能的实现方式中,模块划分单元具体还可以用于:
若所述第i个节点不满足分类条件,则将所述第i个节点按照所述第i个节点的设备类型划分到所述第i个节点的设备类型对应的第j+1个候选设备块中,其中,所述第j+1个候选设备块中不存在节点。
在一种可能的实现方式中,输入输出节点确定单元具体可以用于:
若所述目标设备块中的目标节点的输入节点满足输入节点纳入条件,则所述目标节点的输入节点纳入当前目标设备块中并将所述输入节点作为所述目标设备块的输入节点,其中,所述输入节点纳入条件包括所述目标节点的输入节点为数据类型的节点时,对应的数据为所述深度学习网络的输入数据,或所述目标节点的输入节点为函数类型的节点且不包含在当前目标设备块中;
所述目标设备块中满足输出节点纳入条件的目标节点为所述当前目标设备块的输出节点,其中,所述输出节点纳入条件包括所述目标节点在所述深度学习网络的输出列表中,或所述目标节点的输出数据是当前目标设备块之外的目标设备块中目标节点的输入数据。
在一种可能的实现方式中,空间分配模块330具体可以包括:
空间计算单元,用于基于所述目标设备块中每个输出节点的尺度信息和每个输出节点的数据类型,计算每个输出节点的空间大小;
空间分配单元,用于基于每个输出节点的空间大小,获得所有输出节点需要占用的最大存储空间,将所述最大存储空间作为所述目标设备块的空间信息。
在一种可能的实现方式中,空间分配单元具体可以用于:
将a个输出节点按照输入输出的顺序进行排序,获得排序后的输出节点队列;
基于第1个输出节点的空间大小,在第一存储空间为所述第1个输出节点分配第1节点空间;
根据第n个输出节点的空间大小,在已分配的节点空间中查找目标节点空间,其中,所述目标节点空间为当前为空闲状态、且大于第n个输出节点的空间大小的节点空间,2≤n≤a-1;
若已分配的节点空间中存在目标节点空间,根据第n个输出节点的空间大小,在所述目标节点空间中为所述第n个输出节点分配第n节点空间;
若已分配的节点空间中不存在目标节点空间,根据第n个输出节点的空间大小,在第n-1节点空间之后为所述第n个输出节点分配第n节点空间;
在为所述第n个输出节点分配第n节点空间之后,确定当前所有节点空间中是否存在满足释放条件的输出节点;
若存在,则将满足释放条件的输出节点的节点空间释放,其中,释放后的节点空间为空闲状态;
根据第a个输出节点的空间大小,在第二存储空间为所述第a个输出节点分配第a节点空间;
基于所述第1节点空间至第a节点空间,确定a个输出节点共占用的最大存储空间。
在一种可能的实现方式中,网络部署模块340具体可以用于:
基于按预设规则排列的第m个目标设备块中的输入节点的输入数据、所述输出节点的输出数据、空间信息、函数信息和网络参数,得到第m个目标设备块的部署信息;
判断所述第m个目标设备块的部署信息是否满足部署条件,其中,所述部署条件为所述第m个目标设备块不需要等待第m-1个目标设备块的输出数据作为输入数据;
若满足部署条件,将所述第m个目标设备块的部署信息发送至所述异构平台中与所述第m个目标设备块的目标设备块的设备类型相同的设备上。
在一种可能的实现方式中,网络部署模块340具体还可以用于:
若不满足部署条件,则获取到第m-1个目标设备块的输出数据后将所述第m个目标设备块的部署信息发送至所述异构平台中与所述第m个目标设备块的目标设备块的设备类型相同的设备上。
需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现可实现上述基于TVM编译器的异构平台的部署方法各个实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在移动终端上运行时,使得移动终端执行时实现可实现上述基于TVM编译器的异构平台的部署方法各个实施例中的步骤。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质至少可以包括:能够将计算机程序代码携带到拍照装置/终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/网络设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/网络设备实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
以上所述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种基于TVM编译器的异构平台的部署方法,其特征在于,包括:
获取TVM编译器生成的深度学习网络的拓扑结构图、网络参数和各个函数的函数信息;
基于所述拓扑结构图中节点的信息和异构平台的设备类型,将所述拓扑结构图中的节点分成与所述设备类型对应的目标设备块;其中,所述节点的信息包括节点的节点类型、节点的设备类型、节点的输入数据和节点的输出数据;
对所述目标设备块进行空间分配,得到所述目标设备块的空间信息;
基于所述拓扑结构图、所述网络参数、所述函数信息、所述目标设备块和所述目标设备块的空间信息,将所述深度学习网络部署到所述异构平台上;
所述基于所述拓扑结构图中节点的信息和异构平台的设备类型,将所述拓扑结构图中的节点分成与所述设备类型对应的目标设备块,包括:
基于所述节点的信息和所述设备类型,将节点划分到每个设备类型对应的候选设备块中,得到各个所述候选设备块包含的目标节点,其中,每个设备类型下包含至少一个候选设备块;
将所述候选设备块按预设规则排列,合并属于相同设备类型且连续的候选设备块,得到目标设备块;所述按预设规则排列的方式为:按照所述候选设备块中第一个目标节点的索引码的大小,将所有的候选设备块依次从小到大进行排列,其中,每个节点均有一个索引码;
根据所述目标设备块中的目标节点的信息确定每个目标设备块的输入节点和输出节点;
所述基于所述节点的信息和所述设备类型,将节点划分到每个设备类型对应的候选设备块中,得到各个所述候选设备块包含的目标节点,包括:
判断所述拓扑结构图中的每一个节点是否满足分类条件;
若第i个节点满足节点的分类条件,则将所述第i个节点按照所述第i个节点的设备类型划分到所述第i个节点的设备类型对应的第j个候选设备块中,i和j大于或等于1,其中,当i=1时,第一个节点的分类条件为节点类型为函数类型,当i>1时,第i个节点的分类条件为所述第i个节点的节点类型为函数类型、且所述第i个节点的输入数据为所述第j个候选设备块中节点的输出数据或为所述第j个候选设备块的上一层节点的输出数据,其中,所述拓扑结构图中的节点是由上而下一层一层分布的,所述第j个候选设备块的上一层节点指的是分布在所述第j个候选设备块之外,且在所述第j个候选设备块之上距离所述第j个候选设备块最近的一层节点。
2.如权利要求1所述的基于TVM编译器的异构平台的部署方法,其特征在于,在所述判断所述拓扑结构图中的每一个节点是否满足分类条件之后,还包括:
若所述第i个节点不满足分类条件,则将所述第i个节点按照所述第i个节点的设备类型划分到所述第i个节点的设备类型对应的第j+1个候选设备块中,其中,所述第j+1个候选设备块中不存在节点。
3.如权利要求1所述的基于TVM编译器的异构平台的部署方法,其特征在于,所述根据所述目标设备块中的目标节点的信息确定每个目标设备块的输入节点和输出节点,包括:
若所述目标设备块中的目标节点的输入节点满足输入节点纳入条件,则所述目标节点的输入节点存入当前目标设备块中并将所述输入节点作为所述目标设备块的输入节点,其中,所述输入节点纳入条件包括所述目标节点的输入节点为数据类型的节点时,对应的数据为所述深度学习网络的输入数据,或所述目标节点的输入节点为函数类型的节点且不包含在当前目标设备块中;
所述目标设备块中满足输出节点纳入条件的目标节点为所述当前目标设备块的输出节点,其中,所述输出节点纳入条件包括所述目标节点在所述深度学习网络的输出列表中,或所述目标节点的输出数据是当前目标设备块之外的目标设备块中目标节点的输入数据。
4.如权利要求1至3任一项所述的基于TVM编译器的异构平台的部署方法,其特征在于,所述对所述目标设备块进行空间分配,得到所述目标设备块的空间信息,包括:
基于所述目标设备块中每个输出节点的尺度信息和每个输出节点的数据类型,计算每个输出节点的空间大小;
基于每个输出节点的空间大小,获得所有输出节点需要占用的最大存储空间,将所述最大存储空间作为所述目标设备块的空间信息。
5.如权利要求4所述的基于TVM编译器的异构平台的部署方法,其特征在于,所述基于每个输出节点的空间大小,获得所有输出节点的需要占用的最大存储空间,包括:
将a个输出节点按照输入输出的顺序进行排序,获得排序后的输出节点队列;
基于第1个输出节点的空间大小,在第一存储空间为所述第1个输出节点分配第1节点空间;
根据第n个输出节点的空间大小,在已分配的节点空间中查找目标节点空间,其中,所述目标节点空间为当前为空闲状态、且大于第n个输出节点的空间大小的节点空间,2≤n≤a-1;
若已分配的节点空间中存在目标节点空间,根据第n个输出节点的空间大小,在所述目标节点空间中为所述第n个输出节点分配第n节点空间;
若已分配的节点空间中不存在目标节点空间,根据第n个输出节点的空间大小,在第n-1节点空间之后为所述第n个输出节点分配第n节点空间;
在为所述第n个输出节点分配第n节点空间之后,确定当前所有节点空间中是否存在满足释放条件的输出节点;
若存在,则将满足释放条件的输出节点的节点空间释放,其中,释放后的节点空间为空闲状态;
根据第a个输出节点的空间大小,在第二存储空间为所述第a个输出节点分配第a节点空间;
基于所述第1节点空间至第a节点空间,确定a个输出节点共占用的最大存储空间。
6.如权利要求1所述的基于TVM编译器的异构平台的部署方法,其特征在于,所述基于所述拓扑结构图、所述网络参数、所述函数信息、所述目标设备块和所述目标设备块的空间信息,将所述深度学习网络部署到所述异构平台上,包括:
基于按预设规则排列的第m个目标设备块中的输入节点的输入数据、输出节点的输出数据、空间信息、函数信息和网络参数,得到第m个目标设备块的部署信息;
判断所述第m个目标设备块的部署信息是否满足部署条件,其中,所述部署条件为所述第m个目标设备块不需要等待第m-1个目标设备块的输出数据作为输入数据;
若满足部署条件,将所述第m个目标设备块的部署信息发送至所述异构平台中与所述第m个目标设备块的设备类型相同的设备上。
7.如权利要求6所述的基于TVM编译器的异构平台的部署方法,其特征在于,在所述判断所述第m个目标设备块的部署信息是否满足部署条件之后,还包括:
若不满足部署条件,则获取到第m-1个目标设备块的输出数据后将所述第m个目标设备块的部署信息发送至所述异构平台中与所述第m个目标设备块的目标设备块的设备类型相同的设备上。
8.一种基于TVM编译器的异构平台的部署装置,其特征在于,包括:
数据获取模块,用于获取TVM编译器生成的深度学习网络的拓扑结构图、网络参数和各个函数的函数信息;
节点划分模块,用于基于所述拓扑结构图中节点的信息和异构平台的设备类型,将所述拓扑结构图中的节点分成与所述设备类型对应的目标设备块;其中,所述节点的信息包括节点的节点类型、节点的设备类型、节点的输入数据和节点的输出数据;
空间分配模块,用于对所述目标设备块进行空间分配,得到所述目标设备块的空间信息;
网络部署模块,用于基于所述拓扑结构图、所述网络参数、所述函数信息、所述目标设备块和所述目标设备块的空间信息,将所述深度学习网络部署到所述异构平台上;
所述节点划分模块,具体包括:
模块划分单元,用于基于所述节点的信息和所述设备类型,将节点划分到每个设备类型对应的候选设备块中,得到各个所述候选设备块包含的目标节点,其中,每个设备类型下包含至少一个候选设备块;
模块排序单元,用于将所述候选设备块按预设规则排列,合并属于相同设备类型且连续的候选设备块,得到目标设备块;所述按预设规则排列的方式为:按照所述候选设备块中第一个目标节点的索引码的大小,将所有的候选设备块依次从小到大进行排列,其中,每个节点均有一个索引码;
输入输出节点确定单元,用于根据所述目标设备块中的目标节点的信息确定每个目标设备块的输入节点和输出节点;
所述模块划分具体用于:
判断所述拓扑结构图中的每一个节点是否满足分类条件;
若第i个节点满足节点的分类条件,则将所述第i个节点按照所述第i个节点的设备类型划分到所述第i个节点的设备类型对应的第j个候选设备块中,i和j大于或等于1,其中,当i=1时,第一个节点的分类条件为节点类型为函数类型,当i>1时,第i个节点的分类条件为所述第i个节点的节点类型为函数类型、且所述第i个节点的输入数据为所述第j个候选设备块中节点的输出数据或为所述第j个候选设备块的上一层节点的输出数据,其中,所述拓扑结构图中的节点是由上而下一层一层分布的,所述第j个候选设备块的上一层节点指的是分布在所述第j个候选设备块之外,且在所述第j个候选设备块之上距离所述第j个候选设备块最近的一层节点。
9.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的基于TVM编译器的异构平台的部署方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机计算机程序被处理器执行时实现如权利要求1至7任一项所述的基于TVM编译器的异构平台的部署方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010654954.XA CN111915016B (zh) | 2020-07-10 | 2020-07-10 | 一种基于tvm编译器的异构平台的部署方法及装置 |
PCT/CN2021/088594 WO2022007468A1 (zh) | 2020-07-10 | 2021-04-21 | 一种基于 tvm 编译器的异构平台的部署方法、装置及终端设备 |
US17/623,902 US20240036844A1 (en) | 2020-07-10 | 2021-04-21 | Deployment method and deployment device of heterogeneous platform based on tvm compiler |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010654954.XA CN111915016B (zh) | 2020-07-10 | 2020-07-10 | 一种基于tvm编译器的异构平台的部署方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111915016A CN111915016A (zh) | 2020-11-10 |
CN111915016B true CN111915016B (zh) | 2022-03-25 |
Family
ID=73228010
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010654954.XA Active CN111915016B (zh) | 2020-07-10 | 2020-07-10 | 一种基于tvm编译器的异构平台的部署方法及装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20240036844A1 (zh) |
CN (1) | CN111915016B (zh) |
WO (1) | WO2022007468A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111915016B (zh) * | 2020-07-10 | 2022-03-25 | 深圳云天励飞技术股份有限公司 | 一种基于tvm编译器的异构平台的部署方法及装置 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105678379A (zh) * | 2016-01-12 | 2016-06-15 | 腾讯科技(深圳)有限公司 | 一种cnn的处理方法和装置 |
CN107678752A (zh) * | 2017-08-31 | 2018-02-09 | 北京百度网讯科技有限公司 | 一种面向异构集群的任务处理方法及装置 |
CN108734275A (zh) * | 2017-04-24 | 2018-11-02 | 英特尔公司 | 硬件ip优化卷积神经网络 |
CN108764487A (zh) * | 2018-05-29 | 2018-11-06 | 北京百度网讯科技有限公司 | 用于生成模型的方法和装置、用于识别信息的方法和装置 |
AU2017348382A1 (en) * | 2016-10-28 | 2019-06-20 | Illumina, Inc. | Bioinformatics systems, apparatuses, and methods for performing secondary and/or tertiary processing |
CN110503195A (zh) * | 2019-08-14 | 2019-11-26 | 北京中科寒武纪科技有限公司 | 利用人工智能处理器执行任务的方法及其相关产品 |
CN110764744A (zh) * | 2018-07-25 | 2020-02-07 | 赛灵思公司 | 用于神经网络计算的中间表示生成方法和装置 |
CN111104120A (zh) * | 2018-10-29 | 2020-05-05 | 赛灵思公司 | 神经网络编译方法、系统及相应异构计算平台 |
CN111258744A (zh) * | 2018-11-30 | 2020-06-09 | 中兴通讯股份有限公司 | 一种基于异构计算的任务处理方法及软硬件框架系统 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107239315B (zh) * | 2017-04-11 | 2019-11-15 | 赛灵思公司 | 面向神经网络异构计算平台的编程模型 |
CN110766147B (zh) * | 2018-07-25 | 2022-10-11 | 赛灵思公司 | 神经网络编译器架构及编译方法 |
US10834024B2 (en) * | 2018-09-28 | 2020-11-10 | International Business Machines Corporation | Selective multicast delivery on a bus-based interconnect |
US20190391796A1 (en) * | 2019-06-28 | 2019-12-26 | Intel Corporation | Control of scheduling dependencies by a neural network compiler |
CN111290762B (zh) * | 2020-01-19 | 2023-05-12 | 深圳云天励飞技术有限公司 | 一种深度学习网络的部署方法、装置及终端设备 |
CN111915016B (zh) * | 2020-07-10 | 2022-03-25 | 深圳云天励飞技术股份有限公司 | 一种基于tvm编译器的异构平台的部署方法及装置 |
-
2020
- 2020-07-10 CN CN202010654954.XA patent/CN111915016B/zh active Active
-
2021
- 2021-04-21 US US17/623,902 patent/US20240036844A1/en active Pending
- 2021-04-21 WO PCT/CN2021/088594 patent/WO2022007468A1/zh active Application Filing
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105678379A (zh) * | 2016-01-12 | 2016-06-15 | 腾讯科技(深圳)有限公司 | 一种cnn的处理方法和装置 |
AU2017348382A1 (en) * | 2016-10-28 | 2019-06-20 | Illumina, Inc. | Bioinformatics systems, apparatuses, and methods for performing secondary and/or tertiary processing |
CN108734275A (zh) * | 2017-04-24 | 2018-11-02 | 英特尔公司 | 硬件ip优化卷积神经网络 |
CN107678752A (zh) * | 2017-08-31 | 2018-02-09 | 北京百度网讯科技有限公司 | 一种面向异构集群的任务处理方法及装置 |
CN108764487A (zh) * | 2018-05-29 | 2018-11-06 | 北京百度网讯科技有限公司 | 用于生成模型的方法和装置、用于识别信息的方法和装置 |
CN110764744A (zh) * | 2018-07-25 | 2020-02-07 | 赛灵思公司 | 用于神经网络计算的中间表示生成方法和装置 |
CN111104120A (zh) * | 2018-10-29 | 2020-05-05 | 赛灵思公司 | 神经网络编译方法、系统及相应异构计算平台 |
CN111258744A (zh) * | 2018-11-30 | 2020-06-09 | 中兴通讯股份有限公司 | 一种基于异构计算的任务处理方法及软硬件框架系统 |
CN110503195A (zh) * | 2019-08-14 | 2019-11-26 | 北京中科寒武纪科技有限公司 | 利用人工智能处理器执行任务的方法及其相关产品 |
Non-Patent Citations (3)
Title |
---|
"A unified optimization approach for cnn model inference on integrated GPUs";Leyuan Wang;《ICPP2019》;20190831;全文 * |
"面向深度学习的FPGA硬件加速平台的研究";洪启飞;《中国优秀硕博士学位论文全文数据库 信息科技辑》;20190115;全文 * |
A survey of neural network accelerator with software development environments;Jin Song等;《Journal of Semiconductors》;20200215(第02期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
US20240036844A1 (en) | 2024-02-01 |
CN111915016A (zh) | 2020-11-10 |
WO2022007468A1 (zh) | 2022-01-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105900064B (zh) | 调度数据流任务的方法和装置 | |
JP5425541B2 (ja) | マルチプロセッサ・システム上でデータ・セットを区分化およびソートするための方法および装置 | |
US20100031008A1 (en) | Parallel sorting apparatus, method, and program | |
CN112711422A (zh) | 一种神经网络编译的优化方法及系统 | |
CN111768006A (zh) | 一种人工智能模型的训练方法、装置、设备及存储介质 | |
US8756309B2 (en) | Resource information collecting device, resource information collecting method, program, and collection schedule generating device | |
CN107682417B (zh) | 一种数据节点的任务分配方法和装置 | |
JP5121936B2 (ja) | リソース割り当て装置及びリソース割り当てプログラム及び記録媒体及びリソース割り当て方法 | |
CN111915016B (zh) | 一种基于tvm编译器的异构平台的部署方法及装置 | |
CN112395293B (zh) | 分库分表方法、分库分表装置、分库分表设备及存储介质 | |
CN109033274A (zh) | 一种数据清洗方法及装置 | |
CN112765094B (zh) | 一种基于数据划分和任务分配的稀疏张量典范分解方法 | |
CN105874426B (zh) | 一种系统调用命令的批处理方法及装置 | |
CN108958941B (zh) | 图像处理方法和装置 | |
CN109933430A (zh) | 分配图形处理器的方法和装置 | |
CN116339934A (zh) | 任务执行方法、装置、电子设备及介质 | |
JPH11259433A (ja) | 並列実行システム | |
CN112199407B (zh) | 一种数据分组排序方法、装置、设备及存储介质 | |
EP1524599B1 (en) | A method of reassigning objects to processing units | |
CN115080240A (zh) | 语音处理模型的部署方法、电子设备及存储介质 | |
US20170090820A1 (en) | Method and device for operating a many-core system | |
CN109344119B (zh) | 文件合并处理方法、装置、计算设备及计算机存储介质 | |
CN112015554B (zh) | 任务处理方法和装置 | |
CN114663701A (zh) | 一种智能分组方法及分组系统 | |
CN111338776A (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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 518000 1/F, 17 Building, Shenzhen Dayun Software Town, 8288 Longgang Avenue, Henggang Street, Longgang District, Shenzhen City, Guangdong Province Applicant after: Shenzhen Yuntian lifeI Technology Co., Ltd Address before: 518000 1/F, 17 Building, Shenzhen Dayun Software Town, 8288 Longgang Avenue, Henggang Street, Longgang District, Shenzhen City, Guangdong Province Applicant before: SHENZHEN INTELLIFUSION TECHNOLOGIES Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |