CN115409678A - 一种对神经网络的算子进行融合的方法和相关产品 - Google Patents

一种对神经网络的算子进行融合的方法和相关产品 Download PDF

Info

Publication number
CN115409678A
CN115409678A CN202110578471.0A CN202110578471A CN115409678A CN 115409678 A CN115409678 A CN 115409678A CN 202110578471 A CN202110578471 A CN 202110578471A CN 115409678 A CN115409678 A CN 115409678A
Authority
CN
China
Prior art keywords
node
sub
tensor
data
storage space
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
CN202110578471.0A
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 CN202110578471.0A priority Critical patent/CN115409678A/zh
Publication of CN115409678A publication Critical patent/CN115409678A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Biophysics (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本公开提供一种对神经网络的算子进行融合的方法和系统,其中该系统和方法可以包括在组合处理装置中,该组合处理装置还可以包括通用互联接口和其他处理装置。所述计算装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与设备和其他处理装置连接,用于存储该设备和其他处理装置的数据。本披露的方案可以提升包括例如人工智能领域在内的各类数据处理领域运算的运行效率,从而降低运算的整体开销和成本。

Description

一种对神经网络的算子进行融合的方法和相关产品
技术领域
本公开涉及计算机领域,更具体地,涉及神经网络的算子融合。
背景技术
图像超采样是指将低分辨率图像中恢复成为高分辨率图像的过程,在计算机视觉和图像处理领域里是一类非常重要的技术。在医学图像、监控和安全等领域有着广泛的应用。迄今为止,学术与实际应用领域已提出了大量经典的超采样方法,包括基于预测的方法,基于边缘的方法,统计方法,基于块的方法和稀疏表示的方法等。
随着近年来深度学习技术的快速发展,基于深度学习的超采样技术取得了非常好的效果。不同的深度学习方法被应用到图像超采样问题中,比如卷积神经网络和生成对抗网络。卷积运算是深度学习神经网络的基础,虽然深度学习超采样网络之间的差异非常大,但他们本质上是一组包含了大量卷积计算的运算组件的组合。超采样深度学习网络输出通常都是数据量较大的高分辨率图像,这使得运算过程中所需的空间和计算量都很大。
由于深度学习神经网络的计算密集性,目前通常使用带有多级片上存储的GPU或深度学习专用处理器进行加速,包括基于深度学习的超采样网络。但是基于深度学习的超采样网络的输入输出以及中间计算结果都非常大,一般无法在处理器的多级高速片上存储中驻留,因此导致多级高速片上存储的利用率低,加速效果不明显。
发明内容
本公开的一个目的在解决现有技术中神经网络的运行过程时多级高速片上存储的利用率低,加速效果不明显的问题。
根据本公开的第一方面,提供一种将张量数据切分为子张量数据以在神经网络中运算所述子张量数据的方法,包括:确定张量数据的切分方案,所述切分方案包括以子张量维度变量来表示的子张量函数;根据所述切分方案和预设存储空间来确定所述子张量维度变量;根据确定的子张量维度变量对所述张量数据进行切分以形成子张量数据。
根据本公开的第二方面,提供一种电子设备,包括:一个或多个处理器;以及存储器,所述存储器中存储有计算机可执行指令,当所述计算机可执行指令由所述一个或多个处理器运行时,使得所述电子设备执行如上所述的方法。
根据本公开第三方面,提供一种计算机可读存储介质,包括计算机可执行指令,当所述计算机可执行指令由一个或多个处理器运行时,执行如上所述的方法。
本公开的至少一个有益效果在于,能够将神经网络中符合条件的算子进行融合,从而节约神经网络运行的整体时间。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分其中:
图1示出了根据本公开一个实施方式的对神经网络的算子进行融合的方法流程图;
图2示出了根据本公开的一个实施方式的根据神经网络的算子来构建有向计算图的示意图;
图3示出了根据本公开一个实施方式的建立优化搜索序列的流程图;
图4示了根据本公开的一个实施方式的将输出边数量为0的节点加入到第一队列中作为候选节点,以建立优化搜索序列的流程示意图;
图5示出了根据本公开一个实施方式的遍历所述多个节点,以确定遍历到的节点是否满足预设条件的方法流程图;
图6示出了根据本公开一个实施方式的判断候选节点是否满足预设条件的方法流程图;
图7a和图7b示出了根据本公开的一个实施方式的将节点(算子)进行融合的示意图;
图8示出了根据本公开的一个实施方式的对张量数据进行切分的示例性流程图;
图9示出了根据本公开的一个实施方式的确定待融合算子的张量数据的切分方案的方法流程图;
图10示出了根据本公开一个实施方式的根据所述切分方案和预设存储空间来确定所述子张量维度变量的方法流程图;
图11示出了根据本公开一个实施方式的对神经网络的算子进行融合的方法的流程图;
图12示出了一种组合处理装置;
图13示出了一种示例性板卡;
图14示出了根据本公开一个实施方式的对张量数据进行切分的示例性流程图。
具体实施方式
下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
应当理解,本披露的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在此本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
图1示出了根据本公开一个实施方式的对神经网络的算子进行融合的方法流程图。
如图1所示,本公开的方法包括:在操作S110,构建所述神经网络的有向计算图,所述有向计算图包括以有向边连接的多个节点;在操作S120,遍历所述多个节点,以确定遍历到的节点是否满足预设条件;以及在操作S130,将满足预设条件的节点对应的算子作为待融合算子以进行融合,以生成融合算子。
为了帮助更好地理解本公开的技术方案,首先介绍本公开中涉及的一些概念和方法。
图2示出了根据本公开的一个实施方式的根据神经网络的算子来构建有向计算图的示意图。
以TensorFlow为例,其用包含了一组节点和边的有向图来描述计算过程,这个有向图也可以称为有向计算图。计算图的本质是节点和边的关系。其中,节点可以表示数据的输入起点、输出终点、模型参数等等。边则表示节点之间的输入/输出关系。边有两种类型,一类是传递具体数据的边,传递的数据即为张量;还有一类是表示节点之间控制依赖关系的边,这一类边不传递数据,只是表示节点之间执行的顺序,前序节点完成计算,后序节点才能开始计算。
图2中的有向计算图包括多个算子,每个算子在该有向计算图中可以表示为一个节点,节点之间以有向边连接。例如,节点Conv_first节点的输出节点为Conv1和Add1,节点Conv1的输入节点为Conv_first,其输出节点为Relu1,Add2的输入节点为节点Conv4和Add1。在本公开中,输入节点也可以称为父节点,例如Add2的父节点为节点Conv4和Add1;同理,某个节点的输入节点可以称为子节点或者下级节点,例如节点Conv4的子节点为Add2。
在建立了有向计算图之后,可以遍历计算图中的每个节点,以确定节点本身的特性以及节点与其他节点之间的关系,从而确定遍历到的节点是否满足进行融合的预设条件。如果遍历到的节点满足预设条件,则可以将与该节点对应的算子进行融合。需要理解的是,在本文中,术语算子和节点本质上是相同的,节点只是算子的一种符号化表示,因此二者可以互换地使用。
根据本公开的一个实施方式,为了方便进行算子的融合,可以根据所述多个节点建立优化搜索序列;以及,遍历所述优化搜索序列中的多个节点,以确定遍历到的节点是否满足预设条件。
在判断算子是否可融合时,需要将图2的节点形成一个有顺序而非随机的队列,这在本文中称为优化搜索序列。在该序列中,节点按照特定的规则进行排序,可以遍历这些有序排列的节点,以便于找到能够进行融合的节点或算子。
根据本公开的一个实施方式,可以逆向遍历该有向计算图,以建立优化搜索序列。其中,根据所述多个节点建立优化搜索序列包括:确定所述节点的有向边中的输出边数量;将输出边数量为0的节点加入到第一队列中作为候选节点,以建立优化搜索序列。逆向遍历该有向计算图是指从计算图最终的输出节点开始,从下游向上游遍历每个节点。
仍然以图2为例来进行说明。图2中的节点例如表示为集合E0,其包括{add2,conv4,relu2,conv3,add1,conv2,relu1,conv1,conv_first}。根据图2所示的有向计算图,可以得到每个节点的输出边的数量,例如,节点Conv1的输出边数量为1,节点Add1的输出边数量为2,节点add2的输出边的数量为0等等。由此,上述9个节点的输出边的数量可以表示为{0,1,1,1,2,1,1,1,2}。对于输出边为0的节点而言,其占用的空间本质上取决于输入数据,因此,如果该输出边为0的节点的输入节点占用的存储空间不大于该输出边为0的节点占用的空间,则二者理论上可以融合。
因此,在建立优化搜索序列时,可以首先将该输出边为0的节点作为初始节点加入到该优化搜索序列中,并逐步搜索集合E0中的哪些节点能够与该初始节点进行融合。
图3示出了根据本公开一个实施方式的建立优化搜索序列的流程图。
如图3所示,如图3所示,将输出边数量为0的节点加入到第一队列中作为候选节点,以建立优化搜索序列可以包括:在操作S310,将初始输出边数量为0的节点加入到第一队列中作为初始候选节点;在操作S320,将所述初始候选节点的输入节点的输出边数量减去1,以得到具有更新后输出边数量的更新后节点;以及在操作S330,将更新后输出边数量为0的更新后节点加入到第一队列中作为候选节点,直到所有节点被加入到第一队列中,从而建立优化搜索序列。
假设优化搜索序列以序列Qi来表示,其中i为序号。如上文所述,该序列Qi初始为空,表示为Q0。由于节点Add2的输出边为0,因此可以首先将节点Add2加入到序列Q0中,从而形成序列Q1={Add2}。
接下来,可将该节点Add2从集合E0中删除,因此集合E0更新为E1={conv4,relu2,conv3,add1,conv2,relu1,conv1,conv_first}。将该初始节点Add2的输入节点的输出边的数量减去1。节点Add2的输入节点为节点Add1和节点Conv4,因此这两个节点Add1和节点Conv4的输出边的数量减去1,更新后节点Add1和Conv4的输出边更新为分别为1和0。从而集合E1中所有节点的输出边的数量分别为{0,1,1,1,1,1,1,2}。
此时,节点Conv4的输出边的数量为0,因此可以将该节点Conv4加入到序列Q1中,从而形成序列Q2={Add2,Conv4}。
接下来,可将该节点Conv4从集合E1中删除,因此集合E1更新为E2={relu2,conv3,add1,conv2,relu1,conv1,conv_first}。将该节点Conv4的输入节点的输出边的数量减去1。节点Conv4的输入节点为节点Relu2,因此节点Relu2的输出边的数量减去1。从而集合E2中所有节点的输出边的数量分别为{0,1,1,1,1,1,2}。
此时,节点relu2的输出边的数量为0,因此可以将该节点relu2加入到序列Q2中,从而形成序列Q3={Add2,Conv4,Relu2}。
接下来,可将该节点Relu2从集合E2中删除,因此集合E2更新为E3={conv3,add1,conv2,relu1,conv1,conv_first}。将该节点Relu2的输入节点的输出边的数量减去1。节点Relu2的输入节点为节点Conv3,因此节点Conv3的输出边的数量减去1。从而集合E3中所有节点的输出边的数量分别为{0,1,1,1,1,2}。
此时,节点Conv3的输出边的数量为0,因此可以将该节点Conv3加入到序列Q3中,从而形成序列Q4={Add2,Conv4,Relu2,Conv3}。
以此方式,可以将有向计算图中的所有节点加入到序列Qi中,从而形成优化搜索序列。可以理解的是,优化搜索序列最终为Q9={add2,conv4,relu2,conv3,add1,conv2,relu1,conv1,conv_first}。
上面仅仅是结合图2进行的示例性解释,对于不同结构的神经网络,可以形成不同的优化搜索序列。通过这样的方式,可以将每个节点进行排序,以便于在后续操作中判断是否是可融合的节点。
图4示了根据本公开的一个实施方式的将输出边数量为0的节点加入到第一队列中作为候选节点,以建立优化搜索序列的流程示意图。根据本公开的一个实施方式,将输出边数量为0的节点加入到第一队列中作为候选节点,以建立优化搜索序列可以进一步包括:在操作S410,建立第一堆栈,用于存储所述多个节点中的至少一个;在操作S420,响应于所述节点的输出边数量或更新后输出边数量为0,将所述节点从所述第一堆栈中弹出;以及在操作S430,将弹出的节点加入所述第一队列的队尾作为候选节点,以建立优化搜索序列。
仍然以图2所示的有向计算图为例。可以建立一个堆栈,将节点放入到该堆栈中;如果节点的输出边(包括更新后的输出边)为0,则将输出边为0的节点从堆栈中弹出到上文中所述的优化搜索队列的队尾,从而逐渐形成完整的优化搜索队列。
例如,节点Add2首先入栈,接下来是节点Conv4,节点Relu2和节点Conv3等等。从而当某个节点的输出边数量为零,或者当某个节点的输出边数量被更新为零时,从该堆栈中弹出。需要理解的是,建立堆栈仅仅是一种便捷的操作方式,而并不必然需要建立堆栈。
当所有节点按照上述方法有序地设置到优化搜索序列中后,接下来可以确定优化搜索序列中的哪些节点是可以融合的。
图5示出了根据本公开一个实施方式的遍历所述多个节点,以确定遍历到的节点是否满足预设条件的方法流程图。
如图5所示,该方法包括:在操作S510,建立第二队列;在操作S520,将第一队列的初始候选节点加入到第二队列中作为待融合节点;在操作S530,遍历所述第一队列中的候选节点,以确定遍历到的候选节点是否满足预设条件;以及,在操作S540,如果遍历到的候选节点满足预设条件,则将满足预设条件的候选节点加入到第二队列中,作为待融合节点。
首先,可以建立一个空的第二队列,然后,可以将优化搜索序列中的首个节点(例如节点Add2)加入到该第二队列中,作为首个待融合节点。
接下来,从优化搜索序列(第一队列)的第二个节点开始遍历所有节点,并确定遍历到的节点是否满足预设的条件,如果满足预设条件,则将该遍历到的节点加入到第二队列中,从而能够与第二队列中的首个节点进行融合;而如果遍历到的节点不满足预设条件,则认为该遍历到的节点无法与第二队列中的节点进行融合。
需要理解的是,建立第二队列仅仅是一种较为直观的方式,而并不是必要要求建立一个第二队列来容纳可以融合的节点。
接下来,将详细描述上文中的预设条件的多种情形。
根据本公开的一个实施方式,如果遍历到的候选节点所占用的第一存储空间小于或等于该候选节点的子候选节点所占用的第二存储空间,则遍历到的候选节点满足预设条件。
仍然以优化搜索序列Q9={add2,conv4,relu2,conv3,add1,conv2,relu1,conv1,conv_first}为例来进行说明。
首先,将节点add2加入到第二队列中,接下来从节点conv4开始遍历所有其他节点。节点add2为相加节点,其输出数据的大小通常并不会大于输入数据的大小。
之后,遍历到节点conv4,该节点conv4为卷积运算节点。根据卷积运算的特点,该卷积运算节点conv4的输出数据的大小通常会大于其输入数据的大小,因此,该节点conv4需要占用的存储空间的大小应当不小于该节点conv4的输出数据占用的存储空间的大小。可以看出,在此情况下,节点conv4占用的存储空间的大小不大于(小于或等于)其子节点add2所占用的存储空间的大小,因此,可以将节点conv4加入到第二队列中,以便于与节点add2进行融合。
接下来,遍历到节点relu2,该节点relu2为原位(in place)运算节点。原位运算是指运算发生在参与运算的数据原先所处的存储位置处,这样的运算也不会引起数据的膨胀或缩小。因此,节点relu2占用的存储空间的大小不大于(小于或等于)其子节点conv4所占用的存储空间的大小,从而,可以将节点relu2加入到第二队列中,以便于与节点add2、conv4进行融合。
接下来,遍历到节点conv3,该节点conv3为卷积运算节点。根据卷积运算的特点,该卷积运算节点conv3的输出数据的大小通常会大于其输入数据的大小,因此,该节点conv3需要占用的存储空间的大小应当不小于该节点conv3的输出数据占用的存储空间的大小。可以看出,在此情况下,节点conv3占用的存储空间的大小不大于(小于或等于)其子节点relu2所占用的存储空间的大小,因此,可以将节点conv3加入到第二队列中,以便于与节点add2、conv4以及relu2进行融合。
接下来,遍历到节点add1,节点add1为加法节点。如图2所示,add1的输入包括来自节点conv2的输出和节点conv_first的输出,因此,节点add1占用的空间为节点conv2的输出数据和节点conv_first的输出数据占用的存储空间之和与节点add1的输出数据占用的存储空间之间的大者。通常,节点conv2的输出数据和节点conv_first的输出数据占用的存储空间之和大于节点add1的输出数据占用的存储空间,所以节点add1占用的出处空间超出了其子节点conv1占用的存储空间。因此,节点add1不能与节点add2、conv4、relu2以及conv3进行融合。
需要理解的是,每个节点占用的存储空间可以根据节点的特性评估出来,也可以根据每个节点实际运行中占用的存储空间来确定。
根据以上原则,可以确定节点add1、conv2、relu1以及conv1也是可以融合的节点,这里将不再赘述。
上面以每个节点占用的存储空间作为标准来确定是否可以将节点进行融合,这是一种基本的判断标准。根据本公开的另一个实施方式,如果遍历到的候选节点为第二队列中待融合节点的输入节点,并且为原位运算节点,则确定所述第一存储空间小于或等于所述第二存储空间。
可以采用更简单和直接的方式来判断节点是否可以与第二队列中的节点进行融合。在该实施方式中,如果遍历到的节点为第二队列中某个节点的输入节点并且该遍历到的节点为原位运算节点,则可以直接判断该遍历到的节点满足预设条件。这是因为原位运算节点的输出数据占用的存储空间并不大于该原位运算节点的输入数据占用的存储空间,因此该原位运算节点占用的存储空间并不大于其子节点所占用的存储空间。
还可以通过如下方式来确定遍历到的节点是否满足预设条件。根据本公开的一个实施方式,如果遍历到的候选节点为第二队列中待融合节点的输入节点并且为非原位运算节点,但第二队列中的所有待融合节点为原位运算节点,则确定所述第一存储空间小于或等于所述第二存储空间。
在该实施方式中,当遍历到优化搜索序列中的一个节点时,如果该节点不是原位运算节点,则可以首先确定该节点的子节点是否是已经加入到第二队列中的待融合节点,并且该第二队列中的所有节点是否为原位运算节点。如果满足该条件,则意味着遍历到的节点之后的所有节点不会扩大存储空间的占用,从而能够将该遍历到的节点与第二队列中的所有原位运算节点进行融合。
以上实施方式均是通过判断节点占用的存储空间来判断节点是否可以融合,根据本公开的另一个实施方式,也可以基于每个算子(节点)的运行时间来判断节点是否可以融合。
根据本公开的一个实施方式,如果将遍历到的候选节点与所述第二队列中的待融合节点融合之后的融合运行时间小于或等于第一运行时间,则遍历到的候选节点满足预设条件,其中所述第一运行时间是遍历到的候选节点与所述第二队列中的待融合节点未经融合时的运行时间。
仍然以图2所示的有向计算图来解释上述的实施方式。
首先,将节点add2加入到第二队列中,并从节点conv4开始遍历优化搜索队列中的节点。
可以看出,节点conv4是节点add2的父节点。经过测试,得到节点add2和conv4运行时间为5ms,而节点add2和conv4进行融合后的运行时间为3ms,经融合后时间减少,因此这两个节点可以融合。由此,继续向后遍历relu2。
节点relu2是节点conv4的父节点,因此可以与节点add2和conv4进行融合。由此,继续向后遍历conv3。
节点conv3是节点relu2节点的父节点。测试得到节点add2,conv4和relu2进行融合后和conv3运行时间为6ms,而节点add2,conv4,relu2和conv3进行融合后的运行时间为5ms,经融合后时间减少,因此节点add2,conv4,relu2和conv3。由此,继续向后遍历。
节点add1是节点add2和conv3的父节点。测试得到节点add2,conv4,relu2和conv3进行融合后和节点add1运行时间为6ms,而节点add2,conv4,relu2,conv3和add1进行融合后的运行时间为7ms,融合后时间增加,因此节点add1不能与add2,conv4,relu2和conv3进行融合。
在上文中,只关注节点单独的运行时间与节点融合之后的运行时间,根据本公开的另一个实施方式,可以将节点占用的存储空间以及节点的运行时间结合起来判断节点是否可以融合。
图6示出了根据本公开一个实施方式的判断候选节点是否满足预设条件的方法流程图。
如图6所示,在操作S610,判断遍历到的候选节点是否为第二队列中待融合节点的输入节点,如果是,则进行到操作S620;如果否,那么该节点不能与第二队列中的节点进行融合。
接下来,在操作S620中判断遍历到的候选节点为非原位运算节点,如果是,则进行到操作S630;如果否,即如果遍历到的候选节点为原位运算节点,那么可以将该原位运算节点加入到第二队列中以便于进行融合。
接下来,在操作S630中判断第二队列中的待融合节点是否并非全部为原位运算节点,如果是,则进行到操作S640;如果否,即如果判断第二队列中的待融合节点全部为原位运算节点,那么可以将遍历到的节点加入到第二队列中以便于进行融合。
接下来,在操作S640,如果将遍历到的候选节点与所述第二队列中的待融合节点融合之后的融合运行时间小于或等于第一运行时间,则遍历到的候选节点满足预设条件,其中所述第一运行时间是遍历到的候选节点与所述第二队列中的带融合节点未经融合时的运行时间。在此情况下,可以将遍历到的节点加入到第二队列中以便于进行融合。
接下来,仍然以图2所示的有向计算图为例来说明图6所示的实施方式。
首先,将节点add2加入到第二队列中,并从节点conv4开始遍历优化搜索队列中的节点。
可以看出,节点conv4是节点add2的父节点(遍历到的候选节点为第二队列中待融合节点的输入节点),节点conv4和add2不是原位运算节点(遍历到的候选节点为非原位运算节点),加入到第二队列中的节点(节点add2)并非原位运算节点(即第二队列中的待融合节点并非全部为原位运算节点)。经过测试,得到节点add2和conv4运行时间为5ms,而节点add2和conv4进行融合后的运行完成时间为3ms,经融合后时间减少,因此这两个节点可以融合。由此,继续向后遍历relu2。
节点relu2是节点conv4的父节点,并且是原位运算节点,因此可以与节点add2和conv4进行融合。由此,继续向后遍历conv3。
节点conv3是节点relu2节点的父节点,conv3和conv4不是原位运算节点,并且第二队列中并非所有节点均为原位运算节点。经过测试,节点add2,conv4和relu2进行融合后和conv3运行时间为6ms,而节点add2,conv4,relu2和conv3进行融合后的运行完成时间为5ms,经融合后时间减少,因此节点add2,conv4,relu2和conv3。由此,继续向后遍历。
节点add1是节点add2和conv3的父节点,节点add1和conv3不是原位运算节点,并且第二队列中并非所有节点均为原位运算节点。经过测试,节点add2,conv4,relu2和conv3进行融合后和节点add1运行时间为6ms,而节点add2,conv4,relu2,conv3和add1进行融合后的运行完成时间为7ms,融合后时间增加,因此节点add1不能与add2,conv4,relu2和conv3进行融合。
需要理解的是,节点的运算时间可以通过实际测量来得到,也可以通过建立算子的运算模型来估算得到。本领域可以采用任何已知或未知的方式来得到算子节点的运算时间。
还需要理解的是,对于操作S610-S630,虽然上文中示出了现有顺序,但这样的判断操作并不必然按照如图6所示的顺序进行,而是,操作S610-S630可以有任意的顺序。
图7a和图7b示出了根据本公开的一个实施方式的将节点(算子)进行融合的示意图。
如图7a所示,节点(算子)融合之后,可以用新的节点来代替。例如,可融合的节点add2,conv4,relu2以及conv3可以由融合节点块1来代替,而可融合节点conv1,relu2,conv2以及add1可以由融合节点块2来代替,从而经过节点融合之后,图2所示的神经网络成为如图7a所示的神经网络,包括节点conv_first,融合节点块1和融合节点块2。
更进一步地,如图7b所示,经过融合的节点和节点块还可以进行进一步的融合。假设节点conv_first,融合节点块1和融合节点块2也是可融合的节点(节点块),那么也可以基于以上的规则来确定他们是否可以融合。在这些节点(节点块)可融合的情况下,可以将他们融合成为融合节点块3。
上文中描述了如何判断可融合节点的方法以及相应的操作。对于大型的张量数据,如何高效地对数据进行切分以匹配融合的节点也是一个值得关注的问题。
图8示出了根据本公开的一个实施方式的对张量数据进行切分的示例性流程图。
如图8所示,本公开的方法可以单独地或者可以进一步包括:在操作S810,确定待融合算子的张量数据的切分方案,所述切分方案包括以子张量维度变量来表示的子张量函数;在操作S820,根据所述切分方案和预设存储空间来确定所述子张量维度变量;以及在操作S830,根据确定的子张量维度变量对所述张量数据进行切分以形成子张量数据。
在上文中,术语“子张量”是指张量数据被切分之后形成的子张量,例如一张图片被切分之后形成的小型图片。子张量维度变量是指表示该子张量的维度的各种变量,通过这些变量,可以形成子张量函数。
需要理解的是,上面的操作可以独立地存在,即可以不依赖于上文中所描述的节点的融合,而仅仅是对张量数据进行切分;也可以依赖于上文中描述的节点的融合。
可以理解的是,张量数据可以以多个维度来表示,例如某张量数据的形状为(720,1080,3),这表示该张量数据的高度h为720,宽度w为1080,通道数量c为3。张量数据的通道数量通常不因算子的不同而发生改变,因此可以将通道数量c视为常量,而对于张量数据的高度h和宽度w而言,每个算子所针对的数据可能有所不同,因此对于每个算子而言,可以将高度h和宽度w视为变量。
由此,每个算子的输入数据和输出数据可以通过h和w的函数来表示。每个算子所占用的存储空间,也可以通过变量h和w来表示。对于能够融合的多个算子而言,由于每个算子的函数可能不同,但他们所占用的最大存储空间却是定值,因此,需要根据每个算子的张量数据的切分方案以及预设的存储空间的大小来确定具体的变量h和w。当h和w确定了之后,则可以对张量数据进行切分。其中,该预设的存储空间可以是硬件的片上存储空间。
图9示出了根据本公开的一个实施方式的确定待融合算子的张量数据的切分方案的方法流程图。
如图9所示,确定待融合算子的张量数据的切分方案可以包括:在操作S8110,将第二队列中的待融合算子形成有向计算子图,所述有向计算子图包括以有向边连接的多个待融合子节点;在操作S8120,确定首个待融合子节点的输出张量的子张量函数,其中所述首个待融合子节点为输出节点为0的待融合子节点;以及在操作S8130,根据所述有向计算子图反向推导出其他每个待融合子节点的子张量函数。
对于操作S8110而言,仅是针对需要进行融合的算子来形成有向计算子图,这与上文中结合图2介绍的形成有向计算图的方式是相同的,因此这里将不再赘述。
接下来,确定首个待融合子节点的输出张量的子张量函数。以待融合子算子(节点)add2,conv4,relu2以及conv3为例,可以首先确定节点add2(该节点的输出节点为0)的输出张量的子张量函数,例如为F(h,w,32)。
当确定了第一个待融合子节点的子张量函数之后,可以以深度优先(depth-first)的方式,根据每个算子反向推导出该算子的输入数据的子张量函数。例如,可以推导出节点add2的输入数据的子张量函数为(F(h,w,32),F(h,w,32)),推导出节点conv4的输入数据的子张量函数为(h+2,w+2,32),推导出节点relu2的输入数据的子张量函数为F(h+2,w+2,32),以及推导出节点conv3输入数据的子张量函数为F(h+4,w+4,32)。因此,所有节点的输入数据和输出数据的张量的形状均可以为基于变量h和w的表达式。
需要理解的是,在上下文中,以符号“F”来表示各种子张量函数,但函数符号F仅仅是一种对函数的统称,并不意味着每个函数必须是相同的。
在一种特定的实施方式中,根据所述有向计算子图反向推导出其他每个待融合子节点的子张量函数可以包括:当所述待融合子节点的输出为多个时,反向推导出其他每个待融合子节点的最大子张量函数。
一个节点可能存在多个输出,在此情况下,并不能简单地按照某一个输出以深度优先的方式来反向推导其输入,而是应当基于该多个输出来反向推导出待融合节点的最大子张量函数,并由此推导出所有其他待融合节点的最大张量函数。确定最大张量函数将有助于获得每个节点所占用的最大存储空间。
图10示出了根据本公开一个实施方式的根据所述切分方案和预设存储空间来确定所述子张量维度变量的方法流程图。
如图10所示,根据所述切分方案和预设存储空间来确定所述子张量维度变量可以包括:在操作S8310,根据每个待融合子节点的子张量函数来计算该子张量函数表示的子张量数据占用的存储空间;在操作S8320,确定子张量数据占用的存储空间小于或等于预设存储空间时最大的子张量维度变量;其中,子张量函数表示的子张量数据包括:待融合子节点的输出子张量数据;待融合子节点在运行时产生的中间子张量数据;以及待融合子节点的输入子张量数据。
当确定了每个待融合子节点的子张量函数之后,则可以确定该子张量函数表示的数据所占用的存储空间。例如,节点add2的输出数据的子张量函数为(h,w,32),那么输出数据占用的存储空间可以表示为h*w*32。需要理解的是,这里计算存储空间的表达式仅仅是一种示例性表示,其与实际中计算所占用的存储空间的方式并不一定完全相同,例如该表达方式可能省略了某些常量等等。例如,每个像素的大小为2个字节,因此节点add2的输出数据占用的存储空间实际可以表示为h*w*32*2B。这里为了方便描述,省略了2B这样一个常量。
当获得了每个子张量函数之后,则可以通过该子张量函数和存储空间的大小来确定子张量函数中每个变量最佳的数值。考虑到一些临时的标量和函数调用栈对存储空间的使用,可以从某个值开始遍历w,这里从1开始。对于每个w,可以找到最大且满足h*w*32<=预设存储空间的h,直到不存在满足约束的h,停止遍历。在实际中,可以选择实际测试运行时间最少的(h,w)。
需要理解的是,上文中的子张量函数不但包括了某个节点的输出数据的子张量函数,还包括了该节点的输入数据的子张量函数以及运行过程中产生的中间数据的子张量函数。为了方便理解,本文中主要对输出数据的子张量函数以及输入数据的子张量函数进行示例性描述。
根据本公开的一个实施方式,确定子张量数据占用的存储空间小于或等于预设存储空间时对应的最大的子张量维度变量可以包括:确定所述输出子张量数据、中间子张量数据以及输入子张量数据占用的最大存储空间;以及,在所述最大存储空间不大于预设存储空间时,将该最大存储空间对应的子张量数据的张量维度变量确定为最大的子张量维度变量。
进一步地,为了计算某个节点所需要占用的最大存储空间,则需要计算该节点的所有输入数据,输出数据以及中间数据所占用的最大存储空间。
这里,设某个节点所需占用的最大存储空间为m,那么节点add2的输出数据占用的存储空间为h*w*32;节点add2与两个节点连接,分别为节点conv4和节点conv3,他们占用的最大存储空间分别表示为mconv4和mconv3,因此节点add2占用的最大存储空间为madd2=max{mconv4+mconv3,h*w*32}。
设所有卷积算子的输入输出通道数为32,卷积核大小为(3,3),高宽填补为(1,1)。根据卷积的数学定义可知,节点add2的一个输入数据的子张量函数为F(h+2,w+2,32),相应地,节点conv4的输出数据的子张量函数为F(h+2,w+2,32),因此节点conv4的输出数据占用的存储空间为F((h+2)*(w+2)*32);节点conv4的输入数据占用的存储空间表示为mrelu2,因此,节点conv4占用的最大存储空间为mconv4=max{mrelu2,(h+2)*(w+2)*32}。
节点conv4的输入数据的子张量函数为(h+2,w+2,32),相应地,节点relu2的输出数据的子张量函数为(h+2,w+2,32),因此节点relu2的输出数据占用的存储空间为(h+2)*(w+2)*32;节点relu2的输入数据占用的存储空间表示为mconv3,因此,节点relu2占用的最大存储空间为mrelu2=max{mconv3,(h+2)*(w+2)*32}。
节点conv3的输出数据的子张量函数为F(h+4,w+4,32),因此节点conv3的输出数据占用的存储空间为(h+4)*(w+4)*32;节点conv3的输入数据占用的存储空间表示为madd1,因此,节点conv3占用的最大存储空间为mconv3=max{madd1,(h+4)*(w+4)*32}。
以此类推,将可以得到所有节点所占用的最大存储空间。
对于待融合的算子(节点)而言,期望所有节点占用的存储空间不大于一个预设的存储空间。可以选择最大的子张量函数,使得该子张量函数所对应的存储空间不大于该预设的存储空间。从而,通过上面所述的方法,可以遍历到h和w的最佳值。
根据本公开的一个实施方式,当待融合子节点的输入为多个时,确定所述输出子张量数据、中间子张量数据,以及多个输入子张量数据之和占用的最大存储空间。
如上文所示,节点add2的输入数据包括来自于节点conv4的输出数据和来自于节点add1的输出数据,因此,在本公开的技术方案中,需要计算多个输入子张量数据之和作为输入数据所占用的总空间,例如,如上所示的公式madd2=max{mconv4+madd1,h*w*32}。
图11示出了根据本公开一个实施方式的对神经网络的算子进行融合的方法的流程图。
如图11所示,当确定了可以融合的算子(节点),并且确定了张量数据的划分方案之后,根据本公开的一个实施方式,进一步包括:在操作S1110,将所述待融合子节点对应的待融合算子进行融合以得到融合算子;以及,在操作S1120,通过所述融合算子切分而形成的子张量数据以得到运行时间;或者,在操作S1130,评估切分而形成的子张量数据在所述融合算子中的运行时间。
对于操作S1110而言,可以参考图7a和图7b,节点(算子)融合之后,可以用新的节点(即融合节点或融合算子)来代替。例如,可融合的节点add2,conv4,relu2以及conv3可以由融合节点块1来代替,而可融合节点conv1,relu2,conv2以及add1可以由融合节点块2来代替,从而经过节点融合之后,图2所示的神经网络成为如图7a所示的神经网络,包括节点conv_first,融合节点块1和融合节点块2。
经过融合之后,可以实际运行切分后的数据,从而能够得到切分后的数据的实际运行时间,这方便于评估数据的切分效果或者评估神经网络算子的融合效果。在另一个实施方式中,代替对神经网络进行实际运行,可以通过神经网络的模型来估算切分后的数据在融合算子中的运行时间。
在本公开的另一个实施方式中,在确定了张量数据的划分方案之后,还可以将切分后的张量数据在算子融合后的神经网络以及未融合后的神经网络中进行运行,以比较算子融合与未融合之间的性能差异。
仍然以优化搜索序列Q9={add2,conv4,relu2,conv3,add1,conv2,relu1,conv1,conv_first}为例来进行说明。例如,可以将节点add2与conv4进行融合,将节点add2,conv4与relu2进行融合,将节点add2,conv4,relu2与conv3进行融合,以及将add2,conv4,relu2,conv3与add1等节点进行融合,以评估每种融合方案的对于特定子张量的运行时间,从而得到最优的融合方案。进一步地,该每种融合方案对于特定子张量的运行时间可以用于确定候选节点与第二队列中的算子融合后的运行时间,以判断候选节点是否算子融合的预设条件。
更进一步地,根据本公开的一个实施方式,其中生成融合算子包括生成所述融合算子的代码。
在未经融合时,可以对每个算子单独形成代码,例如,在融合之前,add2,conv4,relu2,conv3这四个算子的执行方式为:
Figure BDA0003085328530000161
Figure BDA0003085328530000171
其中conv,relu,add2和slice_padding函数中省略部分参数不影响本实施方式的说明。
而在融合之后,可以生成所述融合算子的代码。融合后得到新的融合算子块的执行方式可以为:
Figure BDA0003085328530000172
以上的代码仅仅是本公开的一个示例性描述,根据不同的算子以及神经网络结构,每个单独算子以及融合算子块的表达形式会有所不同。
本公开还提供了一种电子设备,包括:一个或多个处理器;以及存储器,所述存储器中存储有计算机可执行指令,当所述计算机可执行指令由所述一个或多个处理器运行时,使得所述电子设备执行如上所述的方法。
本公开还提供了一种计算机可读存储介质,包括计算机可执行指令,当所述计算机可执行指令由一个或多个处理器运行时,执行如上所述的方法。
本公开的技术方案进行了测试,测试环境为:基于人工智能芯片,在Linux操作系统的计算机上,采用SRResNet超采样网络。测试表明,本公开的方法整个网络的运行时间为31ms,是未使用本方法时的运行时间的1/2,而现有的其他方法的运行时间均大于31ms。可见,本公开的方案显著地提升了神经网络的运行效率。
本公开的方案是一种面向深度学习超采样网络的数据局部性优化方法,通过算子融合和数据切分的方法来减少图像超采样网络在多级片上存储处理器,尤其是GPU或深度学习专用处理器上的运行时间。本公开的方法可以应用于GPU以及其他带有多级高速片上存储的深度学习专用处理器。
需要理解的是,图8所示的对张量数据进行切分的方案不仅仅适用于上文所述的待融合的算子,也适用于通用的神经网络中的算子,而无论算子是否可以融合。
图14示出了根据本公开一个实施方式的对张量数据进行切分的示例性流程图。
如图14所示,该方法包括:在操作S1410,确定张量数据的切分方案,所述切分方案包括以子张量维度变量来表示的子张量函数;在操作S1420,根据所述切分方案和预设存储空间来确定所述子张量维度变量;以及,在操作S1430,根据确定的子张量维度变量对所述张量数据进行切分以形成子张量数据。
需要理解的是,图14和图8所示的实施方式的区别在于,图14的方案并不需要算子必须能够进行融合,在任何神经网络中对张量数据进行切分的时候,均可以采用图14所示的方案来对张量数据进行切分。
根据本公开的一个实施方式,确定张量数据的切分方案可以包括:将所述神经网络的算子形成有向计算子图,所述有向计算子图包括以有向边连接的多个子节点;确定首个子节点的输出张量的子张量函数,其中所述首个子节点为输出节点为0的子节点;根据所述有向计算子图反向推导出其他每个子节点的子张量函数。
根据本公开的一个实施方式,根据所述有向计算子图反向推导出其他每个待融合子节点的子张量函数包括:当算子的输出为多个时,反向推导出其他每个算子的最大子张量函数。
根据本公开的一个实施方式,其中,根据所述切分方案和预设存储空间来确定所述子张量维度变量包括:根据每个子节点的子张量函数来计算该子张量函数表示的子张量数据占用的存储空间;确定子张量数据占用的存储空间小于或等于预设存储空间时最大的子张量维度变量;其中,子张量函数表示的子张量数据包括:子节点的输出子张量数据;子节点在运行时产生的中间子张量数据;以及子节点的输入子张量数据。
根据本公开的一个实施方式,其中,确定子张量数据占用的存储空间小于或等于预设存储空间时最大的子张量维度变量包括:确定所述输出子张量数据、中间子张量数据以及输入子张量数据占用的最大存储空间;在所述最大存储空间不大于预设存储空间时,将该最大存储空间对应的子张量数据的张量维度变量作为最大的子张量维度变量。
根据本公开的一个实施方式,其中,当子节点的输入为多个时,确定所述输出子张量数据、中间子张量数据,以及多个输入子张量数据之和占用的最大存储空间。
根据本公开的一个实施方式,其中,所述神经网络包括能够融合的算子。
根据本公开的一个实施方式,进一步包括:将所述子节点对应的算子进行融合以得到融合算子;以及通过所述融合算子运行切分而形成的子张量数据以得到运行时间;或者评估切分而形成的子张量数据在所述算子中的运行时间。
本公开的技术方案可应用于人工智能领域,实现为或者实现在人工智能芯片中。该芯片可以单独存在,也可以包含在计算装置中。
图12示出了一种组合处理装置1200,其包括上述的计算装置1202,通用互联接口1204,和其他处理装置1206。根据本公开的计算装置与其他处理装置进行交互,共同完成用户指定的操作。图12为组合处理装置的示意图。
其他处理装置,包括中央处理器CPU、图形处理器GPU、神经网络处理器等通用/专用处理器中的一种或以上的处理器类型。其他处理装置所包括的处理器数量不做限制。其他处理装置作为机器学习运算装置与外部数据和控制的接口,包括数据搬运,完成对本机器学习运算装置的开启、停止等基本控制;其他处理装置也可以和机器学习运算装置协作共同完成运算任务。
通用互联接口,用于在计算装置(包括例如机器学习运算装置)与其他处理装置间传输数据和控制指令。该计算装置从其他处理装置中获取所需的输入数据,写入该计算装置片上的存储装置;可以从其他处理装置中获取控制指令,写入计算装置片上的控制缓存;也可以读取计算装置的存储模块中的数据并传输给其他处理装置。
可选的,该结构还可以包括存储装置1208,存储装置分别与所述计算装置和所述其他处理装置连接。存储装置用于保存在所述计算装置和所述其他处理装置的数据,尤其适用于所需要运算的数据在本计算装置或其他处理装置的内部存储中无法全部保存的数据。
该组合处理装置可以作为手机、机器人、无人机、视频监控设备等设备的SOC片上系统,有效降低控制部分的核心面积,提高处理速度,降低整体功耗。此情况时,该组合处理装置的通用互联接口与设备的某些部件相连接。某些部件譬如摄像头,显示器,鼠标,键盘,网卡,wifi接口。
在一些实施例里,本披露还公开了一种芯片封装结构,其包括了上述芯片。
在一些实施例里,本披露还公开了一种板卡,其包括了上述芯片封装结构。参阅图13,其提供了一种示例性的板卡,上述板卡除了包括上述芯片1302以外,还可以包括其他的配套部件,该配套部件包括但不限于:存储器件1304、接口装置1306和控制器件1308。
所述存储器件与所述芯片封装结构内的芯片通过总线连接,用于存储数据。所述存储器件可以包括多组存储单元1310。每一组所述存储单元与所述芯片通过总线连接。可以理解,每一组所述存储单元可以是DDR SDRAM(英文:Double Data Rate SDRAM,双倍速率同步动态随机存储器)。
DDR不需要提高时钟频率就能加倍提高SDRAM的速度。DDR允许在时钟脉冲的上升沿和下降沿读出数据。DDR的速度是标准SDRAM的两倍。在一个实施例中,所述存储装置可以包括4组所述存储单元。每一组所述存储单元可以包括多个DDR4颗粒(芯片)。在一个实施例中,所述芯片内部可以包括4个72位DDR4控制器,上述72位DDR4控制器中64bit用于传输数据,8bit用于ECC校验。在一个实施例中,每一组所述存储单元包括多个并联设置的双倍速率同步动态随机存储器。DDR在一个时钟周期内可以传输两次数据。在所述芯片中设置控制DDR的控制器,用于对每个所述存储单元的数据传输与数据存储的控制。
所述接口装置与所述芯片封装结构内的芯片电连接。所述接口装置用于实现所述芯片与外部设备1312(例如服务器或计算机)之间的数据传输。例如在一个实施例中,所述接口装置可以为标准PCIE接口。比如,待处理的数据由服务器通过标准PCIE接口传递至所述芯片,实现数据转移。在另一个实施例中,所述接口装置还可以是其他的接口,本披露并不限制上述其他的接口的具体表现形式,所述接口单元能够实现转接功能即可。另外,所述芯片的计算结果仍由所述接口装置传送回外部设备(例如服务器)。
所述控制器件与所述芯片电连接。所述控制器件用于对所述芯片的状态进行监控。具体的,所述芯片与所述控制器件可以通过SPI接口电连接。所述控制器件可以包括单片机(Micro Controller Unit,MCU)。如所述芯片可以包括多个处理芯片、多个处理核或多个处理电路,可以带动多个负载。因此,所述芯片可以处于多负载和轻负载等不同的工作状态。通过所述控制装置可以实现对所述芯片中多个处理芯片、多个处理和/或多个处理电路的工作状态的调控。
在一些实施例里,本披露还公开了一种电子设备或装置,其包括了上述板卡。
电子设备或装置包括数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、手机、行车记录仪、导航仪、传感器、摄像头、服务器、云端服务器、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、交通工具、家用电器、和/或医疗设备。
所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本披露并不受所描述的动作顺序的限制,因为依据本披露,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本披露所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本披露所提供的几个实施例中,应该理解到,所披露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性、光学、声学、磁性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本披露各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件程序模块的形式实现。
所述集成的单元如果以软件程序模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,当本披露的技术方案可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本披露各个实施例所述方法的全部或部分步骤。而前述的存储器包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本披露的方法及其核心思想;同时,对于本领域的一般技术人员,依据本披露的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本披露的限制。

Claims (10)

1.一种将张量数据切分为子张量数据以在神经网络中运算所述子张量数据的方法,包括:
确定张量数据的切分方案,所述切分方案包括以子张量维度变量来表示的子张量函数;
根据所述切分方案和预设存储空间来确定所述子张量维度变量;
根据确定的子张量维度变量对所述张量数据进行切分以形成子张量数据。
2.根据权利要求1所述的方法,其中,确定张量数据的切分方案包括:
将所述神经网络的算子形成有向计算子图,所述有向计算子图包括以有向边连接的多个子节点;
确定首个子节点的输出张量的子张量函数,其中所述首个子节点为输出节点为0的子节点;
根据所述有向计算子图反向推导出其他每个子节点的子张量函数。
3.根据权利要求2所述的方法,其中,根据所述有向计算子图反向推导出其他每个待融合子节点的子张量函数包括:
当算子的输出为多个时,反向推导出其他每个算子的最大子张量函数。
4.根据权利要求1-3中任意一项所述的方法,其中,根据所述切分方案和预设存储空间来确定所述子张量维度变量包括:
根据每个子节点的子张量函数来计算该子张量函数表示的子张量数据占用的存储空间;
确定子张量数据占用的存储空间小于或等于预设存储空间时最大的子张量维度变量;
其中,子张量函数表示的子张量数据包括:
子节点的输出子张量数据;
子节点在运行时产生的中间子张量数据;以及
子节点的输入子张量数据。
5.根据权利要求4所述的方法,其中,确定子张量数据占用的存储空间小于或等于预设存储空间时最大的子张量维度变量包括:
确定所述输出子张量数据、中间子张量数据以及输入子张量数据占用的最大存储空间;
在所述最大存储空间不大于预设存储空间时,将该最大存储空间对应的子张量数据的张量维度变量作为最大的子张量维度变量。
6.根据权利要求5所述的方法,其中,当子节点的输入为多个时,确定所述输出子张量数据、中间子张量数据,以及多个输入子张量数据之和占用的最大存储空间。
7.根据权利要求1-6中任意一项所述的方法,其中,所述神经网络包括能够融合的算子。
8.根据权利要求7所述的方法,进一步包括:
将所述子节点对应的算子进行融合以得到融合算子;以及
通过所述融合算子运行切分而形成的子张量数据以得到运行时间;或者
评估切分而形成的子张量数据在所述算子中的运行时间。
9.一种电子设备,包括:
一个或多个处理器;以及
存储器,所述存储器中存储有计算机可执行指令,当所述计算机可执行指令由所述一个或多个处理器运行时,使得所述电子设备执行如权利要求1-8中任意一项所述的方法。
10.一种计算机可读存储介质,包括计算机可执行指令,当所述计算机可执行指令由一个或多个处理器运行时,执行如权利要求1-8中任意一项所述的方法。
CN202110578471.0A 2021-05-26 2021-05-26 一种对神经网络的算子进行融合的方法和相关产品 Pending CN115409678A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110578471.0A CN115409678A (zh) 2021-05-26 2021-05-26 一种对神经网络的算子进行融合的方法和相关产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110578471.0A CN115409678A (zh) 2021-05-26 2021-05-26 一种对神经网络的算子进行融合的方法和相关产品

Publications (1)

Publication Number Publication Date
CN115409678A true CN115409678A (zh) 2022-11-29

Family

ID=84156289

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110578471.0A Pending CN115409678A (zh) 2021-05-26 2021-05-26 一种对神经网络的算子进行融合的方法和相关产品

Country Status (1)

Country Link
CN (1) CN115409678A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117172289A (zh) * 2023-09-01 2023-12-05 苏州亿铸智能科技有限公司 张量切分方法、装置以及电子设备

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117172289A (zh) * 2023-09-01 2023-12-05 苏州亿铸智能科技有限公司 张量切分方法、装置以及电子设备

Similar Documents

Publication Publication Date Title
WO2022247880A1 (zh) 一种对神经网络的算子进行融合的方法和相关产品
CN115221102B (zh) 用于优化片上系统的卷积运算操作的方法和相关产品
CN112686379B (zh) 集成电路装置、电子设备、板卡和计算方法
CN110490302B (zh) 一种神经网络编译优化方法、装置以及相关产品
CN115409678A (zh) 一种对神经网络的算子进行融合的方法和相关产品
WO2021185262A1 (zh) 计算装置、方法、板卡和计算机可读存储介质
CN111667060B (zh) 深度学习算法的编译方法、装置及相关产品
US20230259780A1 (en) Neural network sparsification apparatus and method and related product
WO2022135049A1 (zh) 规约多维向量的方法、电子设备以及存储介质
CN111783954B (zh) 一种用于确定神经网络的性能的方法、电子设备和存储介质
CN113112009B (zh) 用于神经网络数据量化的方法、装置和计算机可读存储介质
WO2021037082A1 (zh) 用于处理数据的方法、装置以及相关产品
CN111382852B (zh) 数据处理装置、方法、芯片及电子设备
CN111381875B (zh) 数据比较器、数据处理方法、芯片及电子设备
CN110020720B (zh) 算子拼接方法及装置
CN111047030A (zh) 运算方法、装置、计算机设备和存储介质
CN214504452U (zh) 一种用于神经网络推理的异构系统
CN111738428B (zh) 计算装置、方法及相关产品
CN114692847B (zh) 数据处理电路、数据处理方法及相关产品
CN113112008B (zh) 用于神经网络数据量化的方法、装置和计算机可读存储介质
CN113111997B (zh) 用于神经网络数据量化的方法、装置和相关产品
CN111026440B (zh) 运算方法、装置、计算机设备和存储介质
CN111384944B (zh) 全加器、半加器、数据处理方法、芯片及电子设备
CN111339060B (zh) 运算方法、装置、计算机设备和存储介质
CN114662641A (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