CN116185378A - 计算图的优化方法、数据处理方法及相关产品 - Google Patents

计算图的优化方法、数据处理方法及相关产品 Download PDF

Info

Publication number
CN116185378A
CN116185378A CN202111433279.9A CN202111433279A CN116185378A CN 116185378 A CN116185378 A CN 116185378A CN 202111433279 A CN202111433279 A CN 202111433279A CN 116185378 A CN116185378 A CN 116185378A
Authority
CN
China
Prior art keywords
operator
data
view
subgraph
memory
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
Application number
CN202111433279.9A
Other languages
English (en)
Inventor
请求不公布姓名
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Cambricon Technologies Corp Ltd
Original Assignee
Cambricon Technologies Corp Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Cambricon Technologies Corp Ltd filed Critical Cambricon Technologies Corp Ltd
Priority to CN202111433279.9A priority Critical patent/CN116185378A/zh
Priority to PCT/CN2022/132745 priority patent/WO2023093623A1/zh
Publication of CN116185378A publication Critical patent/CN116185378A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • General Factory Administration (AREA)
  • Feedback Control In General (AREA)

Abstract

本披露公开了一种计算图的优化方法、数据处理方法、计算装置、计算机可读存储介质及计算机程序产品。执行计算图的优化方法的计算装置可以包括在组合处理装置中,该组合处理装置还可以包括接口装置和其他处理装置。该计算装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与计算装置和其他处理装置连接,用于存储该计算装置和其他处理装置的数据。本披露的方案通过构建view类算子子图,可以优化数据访存,从而提高机器的处理效率。

Description

计算图的优化方法、数据处理方法及相关产品
技术领域
本披露一般地涉及智能计算领域,尤其涉及编译领域。更具体地,本披露涉及一种计算图的优化方法、数据处理方法、计算装置、计算机可读存储介质及计算机程序产品。
背景技术
在智能计算系统中,编程框架为程序员提供了使用硬件和系统的界面,是智能计算系统中非常关键的核心枢纽。一方面,编程框架能够将算法中的常用操作封装成算子,供程序员直接调用,如卷积、池化等;另一方面,作为软硬件之间的界面,编程框架能够将硬件架构封装起来,从而降低深度学习算法编写或应用的复杂度及难度,提高算法的实现效率。
TensorFlow、PyTorch等是当前流行的深度学习框架。在这些编程框架中,通常使用计算图来描述机器学习算法的计算过程,用张量来表示计算图中的所有数据,用算子来表示各种操作。存在这样一类算子,诸如transpose、slice、split等,只改变张量数据的外在表现或看起来的样子,而不改变张量数据在内存中的真实排列,也即不会进行真实内存数据搬运。这类算子可以称为view类算子。
由于view类算子的这种特性,通常会导致张量数据在内存上是不连续的。对不连续数据进行读取运算时,会造成硬件设备访存效率低、耗时高等问题。
发明内容
为了至少部分地解决背景技术中提到的一个或多个技术问题,本披露从多个方面提供了解决方案。一方面,提供了一种计算图的优化方法,其通过构建view类算子子图,以供后续进行内存数据连续性处理。另一方面,提供了一种数据处理方法,其可以基于预先构建的view类算子子图来进行内存数据连续性处理,从而提高数据访存效率。
在第一方面中,本披露公开一种计算图的优化方法,包括:针对计算图中的张量数据,遍历与所述张量数据关联的算子;以及当所述算子为view类算子时,提取所述算子以构建view类算子子图,其中所述view类算子子图用于执行内存数据连续性处理。
在第二方面中,本披露公开一种数据处理方法,包括:响应于待处理的张量数据在内存上是非连续的,获取所述张量数据的view类算子子图,其中所述view类算子子图是根据本披露第一方面的方法构建的;以及根据所述view类算子子图的信息,调用对应的kernel进行数据搬运处理,以将所述张量数据转换为在内存上是连续性的张量数据。
在第三方面中,本披露公开一种计算装置,用于优化计算图或执行数据处理,包括:处理器,其配置用于执行程序指令;以及存储器,其配置用于存储所述程序指令,当所述程序指令由所述处理器加载并执行时,使得所述处理器执行根据本披露第一方面的计算图的优化方法、或根据本披露第二方面的数据处理方法。
在第四方面,本披露公开一种计算机可读存储介质,其中存储有程序指令,当所述程序指令由处理器加载并执行时,使得所述处理器执行根据本披露第一方面的计算图的优化方法、或根据本披露第二方面的数据处理方法。
在第五方面,本披露公开一种计算机程序产品,包括计算机程序或指令,该计算机程序或指令被处理器执行时实现本披露第一方面的计算图的优化方法、或本披露第二方面的数据处理方法。
根据如上提供的计算图的优化方法和数据处理方法,可以针对计算图中的view类算子构建子图,从而可以基于这种view类算子子图来优化数据的内存连续性处理,提高数据访存效率。
附图说明
通过参考附图阅读下文的详细描述,本披露示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本披露的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
图1示例性示出了多维数组的不同形状及其在存储器上的存储顺序;
图2示出了根据本披露实施例的计算图的优化方法的示例性流程图;
图3示出了根据本披露另一实施例的计算图的优化方法的示例性流程图;
图4a-图4c示出几种示例性计算图的结构以及相应构建的view类算子子图的结构;
图5示出了根据本披露实施例的数据处理方法的示例性流程图;
图6示出了可以实施本披露实施例的各种方案的计算装置的硬件配置的框图;
图7示出根据本披露实施例的一种组合处理装置的结构图;以及
图8示出根据本披露实施例的一种板卡的结构示意图。
具体实施方式
下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
应当理解,本披露的权利要求、说明书及附图中可能出现的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。
下面结合附图详细描述本披露的实施例。
在智能计算系统的编程框架中,通常数据被建模成张量(Tensor)。张量可以看作N维数组,而数组的维数就是张量的阶数。因此,0阶张量对应标量数据;1阶张量对应一维数组,也就是向量;2阶张量对应二维数组,也就是矩阵;以此类推,N阶张量对应N维数组。例如,一张RGB图像可以表示为3阶张量,而多种RGB图像构成的数据集可以表示为4阶张量。
每个张量都有一些常用属性,包括数据类型、形状等。张量的形状表示张量各阶的长度。例如,一个0阶张量对应一个标量数据,它的形状为空;一个1阶张量对应一个一维向量,其形状包含一个元素,元素值为向量的长度;一个2阶张量对应一个矩阵,其形状包含两个元素,分别对应行和列的长度;一个3阶张量对应一个三维数据,其形状包含三个元素,分别对应每一阶的长度。
虽然多维数组具有多个维度,但是因为存储器(例如,内存DRAM和缓存RAM)的布局始终是一维的,因此多维数组与存储器上的存储顺序之间存在对应关系。多维数组通常被分配在连续的存储空间中,也即可以将多维数组进行一维展开,按顺序存储在存储器上。
图1示例性示出了多维数组的不同形状及其在存储器上的存储顺序,其中使用一块连续内存的一维数组来实现多维数组的存储。
图1中(a)图示出了第一数据,也即三维数组X,其具有三个维度,分别是维度0(dim0)、维度1(dim1)和维度2(dim2)。维度0的尺寸为2,维度1的尺寸为2,维度2的尺寸为3。因此其形状(size)可以表示为:X3=(2,2,3)。
图1中(c)图示出了三维数组X在存储器上的存储顺序,图中背景相同的数据表示位于同一维度。在进行存储时,假设按照低维度优先方式(例如形状表示中从左到右对应高维度到低维度)的顺序存储,则将第一数据进行一维展开,可以得到:
X=[1,2,3,4,5,6,7,8,9,10,11,12]。
更具体地,最低维度(同一行)的数据是连续的,更高维度的数据则间隔不同的距离。例如,在(c)图所示的存储方式下,访问维度dim2上相邻元素物理结构需要偏移1个位置(例如,从数据1到数据2,数据5到数据6,等等);访问维度dim1上相邻元素物理结构需要偏移3个位置(例如,从数据1到数据4,数据2到数据5,…,数据9到数据12,等等);而访问维度dim0上相邻元素物理结构则需要偏移6个位置(例如,从数据1到数据7,数据2到数据8,…,数据6到数据12,等等)。这个偏移量称为步长(stride)。三维数组X的各个维度的步长可以表示为SX=(6,3,1)。
在智能计算系统的编程框架中,存在对张量的外在表现进行操作的view类算子,诸如transpose(转置)、slice(切片)、split(分割)等。以transpose为例,其根据某种维度转换规则permN=(p1,p2,…,pi,…,pN),得到维度转换后的数据排列,其中pi(i∈1,2,…,N)的取值代表数组的原始维度,pi在permN中的位置代表转换的目标维度。例如,给定维度转换规则perm3=(0,2,1),表示要将维度1与维度2进行交换,也即原始维度1要转换成新数组的维度2,原始维度2要转换成新数组的维度1。
图1中(b)图示出了对(a)图所示的三维数组X执行转置transpose算子后得到的转换后的数组Y。在此示例中,应用上述示例性维度转换规则perm3=(0,2,1)。从图中可以看出,相比于数组X,数组Y的维度1和维度2发生了交换。此时,三维数组Y的维度信息可以表示为:Y3=(2,3,2)。
然而,由于view类算子不改变数据在内存上的存储位置,因此转置操作后得到的数组Y在存储器上的存储顺序仍然如图1中(c)所示。此时,根据(c)中的存储顺序,数组Y的各个维度的步长变为SY=(6,1,3)。可以看出,如果以低维度优先的原则顺序存储各数据时称为连续性,则数组Y当前的存储顺序是不连续的。也即,经过transpose算子之后,由于改变了数组的维度顺序,但是没有改变存储器上的存储位置,因此数组在内存上的存储顺序变为不连续的。
若希望数组Y在存储器上是连续的,则按照低维度优先的原则,其一维展开应该为图1中(d)图所示:
Y=[1,4,2,5,3,6,7,10,8,11,9,12]。
张量的形状可以帮助程序员形成对张量的直观感受。在诸如Pytorch的编程框架中,View类算子可以改变张量的形状(size)、步长(stride,张量的相邻维度间第一个索引的跨度)、存储偏移量(storage_offset,张量第一个元素相对存储起始位置的偏移量)等属性,但是不改变张量的真实存储位置。此时,张量通过size、stride和storage_offset来计算数据在设备端的内存位置。
假设张量的size为(s0,s1,s2,…,si),stride为(y0,y1,y2,…,yi),storage_offset为b,则张量在点(x0,x1,x2,…,xi)处对应的内存位置计算的基本公式为:
Figure BDA0003380963360000061
其中dptr为张量对应内存存储的起始位置,dtype为张量的数据类型。
从前面结合图1的描述可以看出,计算图中的张量经过view类算子处理后,产生不连续的对应数据。当对这些张量进行访问时,传统的CPU和GPU需要按照上述公式进行不连续数据访问读取,这会导致硬件设备访存效率低、耗时高等问题。另外一种方式是调用contiguous()算子,先按照上述公式将数据逐个搬运成连续存储后,在进行后续的访问和运算。然而这种方式非常耗时,在数据量大时,逐个的数据搬运将带来极大的时间消耗。
鉴于此,考虑到在诸如神经网络一类的计算图的运算中,内存数据不连续的产生往往都是由于view类算子造成的,因此,本披露提出一种针对计算图中的view类算子构造view类算子子图的方案,此view类算子子图继而可以支持后续高效完成内存数据从不连续到连续的搬运过程。
关于在本披露中提到的术语“节点”和“算子”,需要说明的是,术语“算子”是从计算机的计算层面来说的(或者从软件层面或算法层面来说的);而术语“节点”是一个更形象的说法(从图形层面或者更加直观的层面来说的)。从所指代的内容上来讲,术语“算子”和“节点”实际上指代相同。也即,在本披露中,可以认为术语“算子”和“节点”具有相同的含义,可互换使用,只是从不同的侧面进行描述。
图2示出了根据本披露实施例的计算图的优化方法的示例性流程图。在此优化方法中,通过构建view类算子子图来支持后续的内存数据连续性处理。
如图所示,在步骤210中,针对计算图中的张量数据,遍历与该张量数据关联的算子。
计算图是一种包括节点和边的有向图,张量在计算图的节点之间传递。计算图的执行依照有向图的顺序,张量每通过一个节点时,就会作为该节点运算操作的输入被计算,计算的结果则顺着该节点的输出边流向后面的节点。因此,在构建view类算子子图时,可以针对张量数据,依照有向图的顺序,遍历要对该张量数据进行处理的节点或算子。
接着,在步骤220中,当遍历时遇到的算子为view类算子时,提取该算子以构建view类算子子图。
在一些实施例中,提取view类算子以构建view类算子子图可以包括:关联地缓存该算子的算子信息和算子序号;以及将算子序号添加到view类算子子图中。在这些实施例中,通过将算子信息与view类算子子图分开存储,并通过算子序号建立二者之间的联系,可以简化view类算子子图的结构,方便后续的内存数据连续性处理。
每个算子都有属性,用以标识操作执行时的相关信息。常用属性包括:算子名称、算子类型、算子输入数据、算子输出数据以及运算参数等。在一些实施例中,上述缓存的算子信息可以包括以下至少一项:算子的输入数据的描述信息、输出数据的描述信息和运算参数。可以理解,算子的输入输出数据均为张量数据,而张量数据的描述信息主要包括前面提到的形状、步长、存储偏移量等。
算子的运算参数与算子所实现的功能相关联。例如,以transpose算子为例,其运算参数可以包括要交换的两个维度(dim0,dim1)。又例如,对于chunk(切分)算子,其功能是将张量按维度dim进行平均切分,对应的运算参数可以包括要切分的份数(chunks),要切分的维度(dim)等。
上面描述了提取导致内存数据不连续的view类算子来构建view类算子子图,以支持随后的内存数据连续性处理。可以理解,可以针对每个张量数据,构建该张量数据的view类算子子图。进一步地,还可以理解,每个张量数据,可以根据计算图中的view类算子的连续性而包括多段view类算子子图。
图3示出了根据本披露另一实施例的计算图的优化方法的示例性流程图。在此实施例中,可以进一步优化view类算子子图的构建,以简化信息的存储。
如图所示,在提取算子进行view类算子子图构建时,针对所遇到的view类算子,首先在步骤310中,查看该算子的算子信息是否已缓存在内存中。算子信息例如可以包括上面提到的算子的输入数据的描述信息、输出数据的描述信息和运算参数。
若算子信息未缓存,则说明该算子相对内存中的算子来说是一个新算子,流程前进到步骤320,在此为该算子生成算子序号并执行前面描述的关联地缓存算子信息和算子序号。进而,在步骤330中,将该算子序号添加到view类算子子图中。
若算子信息已缓存,则无需重复缓存相同的信息。代替地,流程直接前进到步骤330,仅将该已缓存的算子的算子序号添加到view类算子子图中。
通过上述处理方式,可以有效减少缓存的信息量,并简化view类算子子图的构建。
图4a-图4c示出了几种示例性计算图的结构以及相应构建的view类算子子图的结构。
图4a示出了一种单向结构的计算图,其中输入的张量A 410按照计算图的流向将顺次通过如下节点:transpose算子411、slice算子412、slice算子413和Matmul(矩阵乘)算子414。这些算子中,transpose算子411、slice算子412和slice算子413均属于view类算子,Matmul(矩阵乘)算子414是计算类算子。
根据本披露实施例的view类算子子图构建方案,将这些view类算子提取出来,形成view类算子子图。如图4a中右边所示,针对输入张量A,view类算子子图顺次包括transpose算子411、slice算子412和slice算子413。
在一些实施例中,假设为transpose算子411生成的算子序号为1,slice算子412的算子序号为2,slice算子413的算子序号为3,则所构建的view类算子子图可以使用这些算子序号表示为1->2->3。通过算子序号,可以从已缓存的信息中提取对应算子的算子信息。
在另一些实施例中,假设slice算子412和slice算子413的算子信息相同,则二者可以只存储一份算子信息,共享同一算子序号。在这种实施例中,当处理到slice算子413时,发现slice算子413的算子信息与针对前面的slice算子412而缓存的算子信息相同,则无需执行缓存步骤,而是直接将该已缓存的slice算子412的算子序号2赋予slice算子413,并添加到view类算子子图中。此时,所构建的view类算子使用算子序号表示为1->2->2。
图4b示出了一种残差结构的计算图,其中输入的张量B 420按照计算图的流向将通过如下节点:view算子421、Conv(卷积)算子422、Act(激活)算子423和Add(相加)算子424,其中view算子421的输出还输入到Add算子424,作为其另一加数。这些算子中,只有view算子421属于view类算子,其余均为计算类算子。
根据本披露实施例的view类算子子图构建方案,将计算图中包括的view类算子提取出来,形成view类算子子图。如图4b中右边所示,针对输入张量B,view类算子子图只包括view算子421。
图4c示出了一种多分支结构的计算图,其中输入的张量C 430按照计算图的流向将通过如下节点:split算子431、分别位于三条分支上的transpose1算子432、transpose2算子433、transpose3算子434、对第一分支和第二分支的输出进行运算的BMM1算子435、Softmax算子436、以及对前两分支的结果和第三分支的输出进行运算的BMM2算子437。这些算子中,split算子431和三个transpose算子432~434属于view类算子,其余均为计算类算子。
根据本披露实施例的view类算子子图构建方案,将计算图中包括的view类算子提取出来,形成view类算子子图。如图4c中右边所示,针对输入张量C,view类算子子图根据split算子431的运算参数,例如分割成的数据块数量,可以分成三条支路,每条支路包括split算子431和对应的transpose算子432~434之一。可以看出,当view类算子是多分支算子时,可以基于该多分支算子构建包括对应数量的支路的view类算子子图。
以上结合几个示例描述了本披露实施例提供的view类算子子图的构建方案。
如前面所提到的,当张量数据经过view类算子而变成内存不连续时,传统的CPU和GPU需要通过前面描述的公式进行不连续数据访问读取,这会导致硬件设备访存效率低、耗时高等问题。在神经网络计算库中,大部分算子需要输入张量在内存上是连续性的,否则将出错。在这种情况下,需要调用诸如contiguous()一类的算子。这种算子也是按照上述公式将数据逐个搬运成连续存储。这种数据逐个搬运的方式非常耗时,为整个计算图的计算带来极大时间开销。
在本披露实施例中,当构建好view类算子子图后,在后续遇到要求张量数据在内存上是连续的算子(诸如计算类算子)时,可以基于这些预先构建的view类算子子图来执行内存数据连续性处理,从而减少数据搬运的时间,提高计算效率。
图5示出了根据本披露一些实施例的数据处理方法的示例性流程图。
如图所示,在步骤510中,响应于待处理的张量数据在内存上是非连续的,获取该张量数据的view类算子子图。张量数据的view类算子子图例如是根据前文描述的方法构建的。
在一些实施例中,可以利用is_contiguous函数来判断张量数据在内存上是否是连续的。如果张量数据是连续的,则无需进行额外处理。如果张量数据是不连续的,则可以获取与该张量数据关联的view类算子子图。
可以理解,如果不存在与该张量数据关联的view类算子子图,则只能按照现有的方式,例如调用contiguous函数,逐个数据进行搬运来使得张量数据变成连续的。
接着,在步骤520中,根据所获取的view类算子子图的信息,调用对应的kernel进行数据搬运处理,以将张量数据转换为在内存上是连续性的张量数据。
具体地,为了避免逐个数据搬运带来的时间开销,可以分析view类算子子图中的算子类型,调用与算子类型匹配的kernel来进行数据搬运处理,其中,这些kernel根据算子类型,对数据按块进行搬运处理。
在诸如Pytorch一类的编程框架中,存在各式各样的view类算子,以实现不同的功能。这些算子例如包括但不限于:transpose(转置)、permute(重排)、select(选择)、chunk(分块)、narrow(缩小)、slice(切片)、expand(扩展)、view(变形),等等。
这些算子实现的具体功能虽然各式各样,但是也可以分类。在一些实施例中,可以根据算子所实现的功能对数据的规模影响而划分为:规模缩小、规模扩展和规模不变三类功能。例如,就上面列举的算子而言,transpose(转置)、permute(重排)、view(变形)等不改变张量数据的规模,属于规模不变类算子;select(选择)、chunk(分块)、narrow(缩小)、slice(切片)等会缩小张量数据的规模,属于规模缩小类算子;而expand(扩展)等会扩展张量数据的规模,属于规模扩展类算子。
针对每一类别的功能,可以从高性能计算库中选择一个合适的kernel来进行对应的数据搬运处理。该kernel可以实现对应功能类别下所有算子的功能。例如,对于规模不变这种重排类型的view类算子,可以调用高性能计算库(例如CNNL)中的transpose kernel来实现数据重排功能。又例如,对于规模扩展类型的view类算子,可以调用CNNL中的expandkenel来实现数据扩展功能。
由此,按照view类算子子图顺序,遍历每个view类算子进行kernel的调用,就可以将张量数据从内存不连续状态转变成内存连续状态。
上面结合附图描述了本披露实施例的view类算子子图的构建方法、以及基于view类算子子图的内存数据连续性处理方法。本披露还提供了一种计算装置,其可以用于构建view类算子子图、或执行内存数据连续性处理。
图6示出可以实施本披露实施例的各种方案的计算装置600的硬件配置的框图。如图所示,计算装置600可以包括处理器610和存储器620。在图6的计算装置600中,仅示出了与本实施例有关的组成元素。因此,对于本领域普通技术人员而言显而易见的是:计算装置600还可以包括与图6中所示的组成元素不同的常见组成元素,比如:显示器。
计算装置600可以对应于具有各种处理功能的计算设备,例如,用于编译计算图的计算设备。例如,计算装置600可以被实现为各种类型的设备,例如个人计算机(PC)、服务器设备、移动设备等。
处理器610,其配置用于执行程序指令以控制计算装置600的所有功能。例如,处理器610通过执行计算装置600上的存储器620中存储的程序,来控制计算装置600的所有功能。处理器610可以由计算装置600中提供的中央处理单元(CPU)、图形处理单元(GPU)、应用处理器(AP)、人工智能处理器芯片(IPU)等来实现。然而,本披露不限于此。
存储器620是用于存储计算装置600中处理的各种数据的硬件。例如,存储器620可以存储计算装置600中的处理过的数据和待处理的数据。存储器620可存储处理器610已处理或要处理的数据,例如编译前的计算图、编译后的计算图等。此外,存储器620可以存储要由计算装置600驱动的应用、驱动程序等程序指令。例如:存储器620可以存储与将由处理器610执行的计算图的优化算法等有关的各种程序。存储器620可以是DRAM,但是本披露不限于此。存储器620可以包括易失性存储器或非易失性存储器中的至少一种。非易失性存储器可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、闪存、相变RAM(PRAM)、磁性RAM(MRAM)、电阻RAM(RRAM)、铁电RAM(FRAM)等。易失性存储器可以包括动态RAM(DRAM)、静态RAM(SRAM)、同步DRAM(SDRAM)、PRAM、MRAM、RRAM、铁电RAM(FeRAM)等。在实施例中,存储器620可以包括硬盘驱动器(HDD)、固态驱动器(SSD)、高密度闪存(CF)、安全数字(SD)卡、微安全数字(Micro-SD)卡、迷你安全数字(Mini-SD)卡、极限数字(xD)卡、高速缓存(caches)或记忆棒中的至少一项。
综上,本说明书实施方式提供的计算装置600的存储器620和处理器610实现的具体功能,可以与本说明书中的前述实施方式相对照解释,并能够达到前述实施方式的技术效果,这里便不再赘述。
在本披露实施例中,还提供一种计算机可读存储介质,其中存储有程序指令,当该程序指令由处理器加载并执行时,使得处理器执行本披露实施例中描述的计算图的优化方法或数据处理方法。
在本披露实施例中,还提供一种计算机程序产品,包括计算机程序或指令,该计算机程序或指令被处理器执行时,实现根据本披露实施例中描述的计算图的优化方法或数据处理方法。
图7是示出根据本披露实施例的一种组合处理装置700的结构图。如图所示,该组合处理装置700包括计算装置702、接口装置704、其他处理装置706和存储装置708。根据不同的应用场景,计算处理装置中可以包括一个或多个计算装置710,该计算装置可以配置成图6所示的计算装置600,用于执行本文结合附图所描述的操作。
在不同的实施例中,本披露的计算处理装置可以配置成执行用户指定的操作。在示例性的应用中,该计算处理装置可以实现为单核人工智能处理器或者多核人工智能处理器。类似地,包括在计算处理装置内的一个或多个计算装置可以实现为人工智能处理器核或者人工智能处理器核的部分硬件结构。当多个计算装置实现为人工智能处理器核或人工智能处理器核的部分硬件结构时,就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。
在示例性的操作中,本披露的计算处理装置可以通过接口装置与其他处理装置进行交互,以共同完成用户指定的操作。根据实现方式的不同,本披露的其他处理装置可以包括中央处理器(Central Processing Unit,CPU)、图形处理器(Graphics ProcessingUnit,GPU)、人工智能处理器等通用和/或专用处理器中的一种或多种类型的处理器。这些处理器可以包括但不限于数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算处理装置而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算处理装置和其他处理装置共同考虑时,二者可以视为形成异构多核结构。
在一个或多个实施例中,该其他处理装置可以作为本披露的计算处理装置(其可以具体化为人工智能例如神经网络运算的相关运算装置)与外部数据和控制的接口,执行包括但不限于数据搬运、对计算装置的开启和/或停止等基本控制。在另外的实施例中,其他处理装置也可以和该计算处理装置协作以共同完成运算任务。
在一个或多个实施例中,该接口装置可以用于在计算处理装置与其他处理装置间传输数据和控制指令。例如,该计算处理装置可以经由所述接口装置从其他处理装置中获取输入数据,写入该计算处理装置片上的存储装置(或称存储器)。进一步,该计算处理装置可以经由所述接口装置从其他处理装置中获取控制指令,写入计算处理装置片上的控制缓存中。替代地或可选地,接口装置也可以读取计算处理装置的存储装置中的数据并传输给其他处理装置。
附加地或可选地,本披露的组合处理装置还可以包括存储装置。如图中所示,该存储装置分别与所述计算处理装置和所述其他处理装置连接。在一个或多个实施例中,存储装置可以用于保存所述计算处理装置和/或所述其他处理装置的数据。例如,该数据可以是在计算处理装置或其他处理装置的内部或片上存储装置中无法全部保存的数据。
在一些实施例里,本披露还公开了一种芯片(例如图8中示出的芯片802)。在一种实现中,该芯片是一种系统级芯片(System on Chip,SoC),并且集成有一个或多个如图7中所示的组合处理装置。该芯片可以通过对外接口装置(如图8中示出的对外接口装置806)与其他相关部件相连接。该相关部件可以例如是摄像头、显示器、鼠标、键盘、网卡或wifi接口。在一些应用场景中,该芯片上可以集成有其他处理单元(例如视频编解码器)和/或接口模块(例如DRAM接口)等。在一些实施例中,本披露还公开了一种芯片封装结构,其包括了上述芯片。在一些实施例里,本披露还公开了一种板卡,其包括上述的芯片封装结构。下面将结合图8对该板卡进行详细地描述。
图8是示出根据本披露实施例的一种板卡800的结构示意图。如图所示,该板卡包括用于存储数据的存储器件804,其包括一个或多个存储单元810。该存储器件可以通过例如总线等方式与控制器件808和上文所述的芯片802进行连接和数据传输。进一步,该板卡还包括对外接口装置806,其配置用于芯片(或芯片封装结构中的芯片)与外部设备812(例如服务器或计算机等)之间的数据中继或转接功能。例如,待处理的数据可以由外部设备通过对外接口装置传递至芯片。又例如,所述芯片的计算结果可以经由所述对外接口装置传送回外部设备。根据不同的应用场景,所述对外接口装置可以具有不同的接口形式,例如其可以采用标准PCIE接口等。
在一个或多个实施例中,本披露板卡中的控制器件可以配置用于对所述芯片的状态进行调控。为此,在一个应用场景中,该控制器件可以包括单片机(Micro ControllerUnit,MCU),以用于对所述芯片的工作状态进行调控。
根据上述结合图7和图8的描述,本领域技术人员可以理解本披露也公开了一种电子设备或装置,其可以包括一个或多个上述板卡、一个或多个上述芯片和/或一个或多个上述组合处理装置。
根据不同的应用场景,本披露的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、PC设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。本披露的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行划分,而实际实现时也可以有另外的划分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如CPU、GPU、FPGA、DSP和ASIC等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(Resistive Random Access Memory,RRAM)、动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)、静态随机存取存储器(Static Random Access Memory,SRAM)、增强动态随机存取存储器(Enhanced Dynamic Random Access Memory,EDRAM)、高带宽存储器(High Bandwidth Memory,HBM)、混合存储器立方体(Hybrid Memory Cube,HMC)、ROM和RAM等。
依据以下条款可更好地理解前述内容:
条款1、一种计算图的优化方法,包括:
针对计算图中的张量数据,遍历与所述张量数据关联的算子;以及
当所述算子为view类算子时,提取所述算子以构建view类算子子图,其中所述view类算子子图用于执行内存数据连续性处理。
条款2、根据条款1所述的方法,其中,提取所述算子以构建view类算子子图包括:
关联地缓存所述算子的算子信息和算子序号;以及
将所述算子序号添加到view类算子子图中。
条款3、根据条款2所述的方法,其中提取所述算子以构建view类算子子图进一步包括:
查看所述算子的算子信息是否已缓存;
若所述算子的算子信息未缓存,则为所述算子生成算子序号并执行所述缓存和添加;以及
若所述算子的算子信息已缓存,则仅将已缓存的所述算子的算子序号添加到所述view类算子子图中。
条款4、根据条款2-3任一所述的方法,其中,所述算子的算子信息包括以下至少一项:所述算子的输入数据的描述信息、输出数据的描述信息和运算参数。
条款5、根据条款1-4任一所述的方法,其中提取所述算子以构建view类算子子图还包括:
当所述算子是多分支算子时,基于所述多分支算子构建包括对应数量的支路的view类算子子图。
条款6、一种数据处理方法,包括:
响应于待处理的张量数据在内存上是非连续的,获取所述张量数据的view类算子子图,其中所述view类算子子图是根据权利要求1-5任一所述的方法构建的;
根据所述view类算子子图的信息,调用对应的kernel进行数据搬运处理,以将所述张量数据转换为在内存上是连续性的张量数据。
条款7、根据条款6所述的方法,其中调用对应的kernel进行数据搬运处理包括:
分析所述view类算子子图中的算子类型,调用与所述算子类型匹配的kernel进行数据搬运处理,其中所述kernel根据所述算子类型,对数据按块进行搬运处理。
条款8、一种计算装置,用于优化计算图或执行数据处理,包括:
处理器,其配置用于执行程序指令;以及
存储器,其配置用于存储所述程序指令,当所述程序指令由所述处理器加载并执行时,使得所述处理器执行根据条款1-5任一所述的计算图的优化方法、或根据条款6-7任一所述的数据处理方法。
条款9、一种计算机可读存储介质,其中存储有程序指令,当所述程序指令由处理器加载并执行时,使得所述处理器执行根据条款1-5任一所述的计算图的优化方法、或根据条款6-7任一所述的数据处理方法。
条款10、一种计算机程序产品,包括计算机程序或指令,该计算机程序或指令被处理器执行时实现条款1-5任一所述的计算图的优化方法、或根据条款6-7任一所述的数据处理方法。
虽然本文已经示出和描述了本披露的多个实施例,但对于本领域技术人员显而易见的是,这样的实施例只是以示例的方式来提供。本领域技术人员可以在不偏离本披露思想和精神的情况下想到许多更改、改变和替代的方式。应当理解的是在实践本披露的过程中,可以采用对本文所描述的本披露实施例的各种替代方案。所附权利要求书旨在限定本披露的保护范围,并因此覆盖这些权利要求范围内的等同或替代方案。

Claims (10)

1.一种计算图的优化方法,包括:
针对计算图中的张量数据,遍历与所述张量数据关联的算子;以及
当所述算子为view类算子时,提取所述算子以构建view类算子子图,其中所述view类算子子图用于执行内存数据连续性处理。
2.根据权利要求1所述的方法,其中,提取所述算子以构建view类算子子图包括:
关联地缓存所述算子的算子信息和算子序号;以及
将所述算子序号添加到view类算子子图中。
3.根据权利要求2所述的方法,其中提取所述算子以构建view类算子子图进一步包括:
查看所述算子的算子信息是否已缓存;
若所述算子的算子信息未缓存,则为所述算子生成算子序号并执行所述缓存和添加;以及
若所述算子的算子信息已缓存,则仅将已缓存的所述算子的算子序号添加到所述view类算子子图中。
4.根据权利要求2-3任一所述的方法,其中,所述算子的算子信息包括以下至少一项:所述算子的输入数据的描述信息、输出数据的描述信息和运算参数。
5.根据权利要求1-4任一所述的方法,其中提取所述算子以构建view类算子子图还包括:
当所述算子是多分支算子时,基于所述多分支算子构建包括对应数量的支路的view类算子子图。
6.一种数据处理方法,包括:
响应于待处理的张量数据在内存上是非连续的,获取所述张量数据的view类算子子图,其中所述view类算子子图是根据权利要求1-5任一所述的方法构建的;
根据所述view类算子子图的信息,调用对应的kernel进行数据搬运处理,以将所述张量数据转换为在内存上是连续性的张量数据。
7.根据权利要求6所述的方法,其中调用对应的kernel进行数据搬运处理包括:
分析所述view类算子子图中的算子类型,调用与所述算子类型匹配的kernel进行数据搬运处理,其中所述kernel根据所述算子类型,对数据按块进行搬运处理。
8.一种计算装置,用于优化计算图或执行数据处理,包括:
处理器,其配置用于执行程序指令;以及
存储器,其配置用于存储所述程序指令,当所述程序指令由所述处理器加载并执行时,使得所述处理器执行根据权利要求1-5任一所述的计算图的优化方法、或根据权利要求6-7任一所述的数据处理方法。
9.一种计算机可读存储介质,其中存储有程序指令,当所述程序指令由处理器加载并执行时,使得所述处理器执行根据权利要求1-5任一所述的计算图的优化方法、或根据权利要求6-7任一所述的数据处理方法。
10.一种计算机程序产品,包括计算机程序或指令,该计算机程序或指令被处理器执行时实现权利要求1-5任一所述的计算图的优化方法、或根据权利要求6-7任一所述的数据处理方法。
CN202111433279.9A 2021-11-29 2021-11-29 计算图的优化方法、数据处理方法及相关产品 Pending CN116185378A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202111433279.9A CN116185378A (zh) 2021-11-29 2021-11-29 计算图的优化方法、数据处理方法及相关产品
PCT/CN2022/132745 WO2023093623A1 (zh) 2021-11-29 2022-11-18 计算图的优化方法、数据处理方法及相关产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111433279.9A CN116185378A (zh) 2021-11-29 2021-11-29 计算图的优化方法、数据处理方法及相关产品

Publications (1)

Publication Number Publication Date
CN116185378A true CN116185378A (zh) 2023-05-30

Family

ID=86440947

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111433279.9A Pending CN116185378A (zh) 2021-11-29 2021-11-29 计算图的优化方法、数据处理方法及相关产品

Country Status (1)

Country Link
CN (1) CN116185378A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117762588A (zh) * 2023-12-20 2024-03-26 上海寒武纪信息科技有限公司 一种在神经网络中调度Kernel的方法和相关产品

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117762588A (zh) * 2023-12-20 2024-03-26 上海寒武纪信息科技有限公司 一种在神经网络中调度Kernel的方法和相关产品

Similar Documents

Publication Publication Date Title
WO2023093623A1 (zh) 计算图的优化方法、数据处理方法及相关产品
JP2020518042A (ja) 処理装置と処理方法
Du et al. Model parallelism optimization for distributed inference via decoupled CNN structure
KR20110049644A (ko) 영상 처리를 위한 정렬 격자 및 그래프 운행
CN111860807B (zh) 分形计算装置、方法、集成电路及板卡
Zhang et al. In‐memory staging and data‐centric task placement for coupled scientific simulation workflows
CN112070202B (zh) 一种融合图的生成方法、生成装置和计算机可读存储介质
CN114580606A (zh) 数据处理方法、装置、计算机设备和存储介质
CN113469336A (zh) 优化神经网络模型的编译方法、执行方法及相关产品
CN112463159A (zh) 编译方法、装置、电子设备和存储介质
CN112463160A (zh) 编译方法、装置、电子设备和存储介质
CN112799599A (zh) 一种数据存储方法、计算核、芯片和电子设备
CN110458285B (zh) 数据处理方法、装置、计算机设备和存储介质
WO2022134873A1 (zh) 数据处理装置、数据处理方法及相关产品
WO2024149112A1 (zh) 卷积算子的编译方法及相关产品
CN116185378A (zh) 计算图的优化方法、数据处理方法及相关产品
CN116185377A (zh) 计算图的优化方法、计算装置及相关产品
WO2023030507A1 (zh) 编译优化方法、装置、计算机设备以及存储介质
CN116402091A (zh) 面向人工智能芯片的混合引擎智能计算方法和装置
WO2022100345A1 (zh) 处理方法、处理装置及相关产品
CN113469337B (zh) 用于优化神经网络模型的编译方法及其相关产品
CN112817898A (zh) 数据传输方法、处理器、芯片及电子设备
CN116185274A (zh) 数据处理方法、计算装置及相关产品
CN112667227A (zh) 可视化设计流水线的方法及可读存储介质
CN107529638B (zh) 线性求解器的加速方法、存储数据库及gpu系统

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