CN117273093A - 将神经网络映射到硬件 - Google Patents
将神经网络映射到硬件 Download PDFInfo
- Publication number
- CN117273093A CN117273093A CN202310728286.4A CN202310728286A CN117273093A CN 117273093 A CN117273093 A CN 117273093A CN 202310728286 A CN202310728286 A CN 202310728286A CN 117273093 A CN117273093 A CN 117273093A
- Authority
- CN
- China
- Prior art keywords
- depth
- hardware
- size
- current depth
- coefficients
- 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
- 238000013507 mapping Methods 0.000 title claims abstract description 33
- 238000013528 artificial neural network Methods 0.000 title claims abstract description 32
- 238000000034 method Methods 0.000 claims abstract description 163
- 230000006835 compression Effects 0.000 claims abstract description 120
- 238000007906 compression Methods 0.000 claims abstract description 120
- 238000005192 partition Methods 0.000 claims abstract description 70
- 230000004044 response Effects 0.000 claims abstract description 16
- 239000000872 buffer Substances 0.000 claims description 33
- 238000003860 storage Methods 0.000 claims description 10
- 230000003247 decreasing effect Effects 0.000 claims description 4
- 230000001419 dependent effect Effects 0.000 claims description 4
- 238000004519 manufacturing process Methods 0.000 description 32
- 238000012545 processing Methods 0.000 description 25
- 230000011218 segmentation Effects 0.000 description 17
- 238000005457 optimization Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 16
- 238000000638 solvent extraction Methods 0.000 description 13
- 230000006870 function Effects 0.000 description 12
- 238000010586 diagram Methods 0.000 description 9
- 238000004590 computer program Methods 0.000 description 6
- 230000007423 decrease Effects 0.000 description 6
- 230000006872 improvement Effects 0.000 description 6
- 238000013459 approach Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- XUIMIQQOPSSXEZ-UHFFFAOYSA-N Silicon Chemical compound [Si] XUIMIQQOPSSXEZ-UHFFFAOYSA-N 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 239000000470 constituent Substances 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 229910052710 silicon Inorganic materials 0.000 description 2
- 239000010703 silicon Substances 0.000 description 2
- 230000002194 synthesizing effect Effects 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012993 chemical processing Methods 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000002620 method output Methods 0.000 description 1
- 238000012015 optical character recognition Methods 0.000 description 1
- 238000000206 photolithography Methods 0.000 description 1
- 238000003672 processing method Methods 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 238000005389 semiconductor device fabrication Methods 0.000 description 1
- 210000003813 thumb Anatomy 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/06—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
- G06N3/063—Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0495—Quantised networks; Sparse networks; Compressed networks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/08—Learning methods
- G06N3/082—Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/0464—Convolutional networks [CNN, ConvNet]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/01—Dynamic search techniques; Heuristics; Dynamic trees; Branch-and-bound
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- General Health & Medical Sciences (AREA)
- General Physics & Mathematics (AREA)
- Evolutionary Computation (AREA)
- Computational Linguistics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Artificial Intelligence (AREA)
- Neurology (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Character Discrimination (AREA)
- Image Analysis (AREA)
Abstract
本发明涉及将神经网络映射到硬件。描述了一种将神经网络映射到硬件的方法。该方法使用二叉树来评估如何将该神经网络的层分割成多个硬件遍次,该方法通过以下方式进行:确定该二叉树内的当前深度的起始值,并且将系数集排列成组,每个组对应于该当前深度处的节点。计算该当前深度处的至少一个系数组的压缩大小,并且确定是否满足终止标准。响应于确定不满足该终止标准,更新该当前深度,并且重复计算步骤和确定步骤。响应于确定满足终止标准,输出定义该多个硬件遍次中的每个硬件遍次的数据,其中该数据取决于该当前深度。
Description
相关申请的交叉引用
本申请要求2022年6月21日提交的英国专利申请2209110.2的优先权,该英国专利申请以全文引用方式并入本文中。
技术领域
本发明涉及将神经网络映射到硬件。
背景技术
许多神经网络(NN)包括输入层、输出层和多个隐藏层,例如卷积NN。对于NN中的每个层,预先计算权重(或系数)阵列(例如作为训练阶段的一部分)进行,并且存储在存储器中,使得当这些权重应用于输入数据时可以在运行时进行使用。这些权重在NN执行期间保持不变。权重阵列可以是多维权重阵列,并且输入数据可以是多维数据阵列。在运行时,从存储器读取这些权重。对于NN中的不同层,权重阵列的大小可以不同(例如特别地,阵列的深度可以跨不同层显著变化),并且对于一些层,该大小可以非常大。为了减小存储权重所需的存储器的大小以及用于从存储器读取权重的带宽,权重可以以压缩形式进行存储,并且随后在使用之前进行解压缩。压缩可以在离线过程中执行。
下文描述的实施方案仅借助于示例来提供,并且不是对解决已知数据处理方法的任何或所有缺点的具体实现的限制。
发明内容
提供本发明内容是为了以简化形式介绍下文在具体实施方式中进一步描述的一系列概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用以限制所要求保护的主题的范围。
描述了一种将神经网络映射到硬件的方法。所述方法使用二叉树来评估如何将神经网络的层分割成多个硬件遍次,所述方法通过以下方式进行:确定二叉树内的当前深度的起始值,并且将系数集排列成组,每个组对应于当前深度处的节点。计算当前深度处的至少一个系数组的压缩大小,并且确定是否满足终止标准。响应于确定不满足终止标准,更新当前深度,并且重复计算步骤和确定步骤。响应于确定满足终止标准,输出定义多个硬件遍次中的每个硬件遍次的数据,其中所述数据取决于当前深度。
第一示例提供了一种将神经网络映射到硬件的方法,所述方法包括使用二叉树来评估如何将神经网络的层分割成多个硬件遍次,每个硬件遍次从外部存储器中读取层的系数的子集,并且其中系数以压缩形式存储在存储器中,并且二叉树中的每个节点对应于系数的不同子集,其中使用二叉树包括:(i)确定二叉树内的当前深度的起始值;(ii)将系数集排列成组,每个组对应于当前深度处的节点;(iii)计算当前深度处的至少一个系数组的压缩大小;(iv)确定是否满足终止标准,所述终止标准中的至少一个终止标准是基于所计算的压缩大小与硬件大小约束之间的比较;(v)响应于确定不满足终止标准,更新当前深度,并且重复步骤(ii)至(iv);以及(vi)响应于确定满足终止标准,输出定义多个硬件遍次中的每个硬件遍次的数据,其中所述数据取决于当前深度。
确定二叉树内的当前深度的起始值可以包括将当前深度的起始值设置为深度一,并且其中更新当前深度包括增加当前深度。
确定二叉树内的当前深度的起始值可以包括将当前深度的起始值设置为二叉树的最大深度,并且其中更新当前深度包括减小当前深度。二叉树的最大深度可以由最小组大小来定义。最小组大小可以由用于压缩系数以存储在外部存储器中的压缩方法来定义。
确定二叉树内的当前深度的起始值可以包括:对层的所有系数进行压缩以确定层的压缩大小;以及将层的压缩大小除以硬件大小约束。
输出定义多个硬件遍次中的每个硬件遍次的数据可以包括:确定当前深度处的组中的系数数量;以及增加至少一个组中的系数数量;计算至少一个组的压缩大小;以及响应于确定压缩大小满足硬件大小约束,基于至少一个组中的增加的系数数量来输出定义多个硬件遍次中的每个硬件遍次的数据。
计算当前深度处的至少一个系数组的压缩大小可以包括:计算当前深度处的一个系数组的压缩大小,所述系数组对应于二叉树的分支;并且其中响应于确定满足终止标准,所述方法还包括在输出数据之前:在以当前深度的起始值对其他组重复步骤(ii)至(v)之前,对二叉树的分支中的其他组重复步骤(ii)至(v)。
输出定义多个硬件遍次中的每个硬件遍次的数据可以包括:选择当前深度处的两个或更多个组;将所选组的组合压缩大小与硬件约束进行比较;响应于确定组合压缩大小满足硬件大小约束,合并所述组,并且基于合并组来输出定义多个硬件遍次中的每个硬件遍次的数据。
更新当前深度可以包括增加当前深度,并且其中终止标准包括:压缩组大小不超过硬件大小约束;以及当前深度大于起始深度加一。
更新当前深度可以包括减小当前深度,并且其中终止标准包括:压缩组大小超过硬件大小约束;以及当前深度小于起始深度减一。
硬件大小约束可以包括被配置成存储系数的缓冲器的大小或者与外部存储器的连接的带宽。
第二示例提供了一种使用包括固定功能电路的硬件加速器来实现神经网络的方法,所述方法包括使用二叉树来评估如何将神经网络的层分割成多个硬件遍次,每个硬件遍次从外部存储器中读取层的系数的子集,并且其中系数以压缩形式存储在存储器中,并且二叉树中的每个节点对应于系数的不同子集,其中使用二叉树包括:(i)确定二叉树内的当前深度的起始值;(ii)将系数集排列成组,每个组对应于当前深度处的节点;(iii)计算当前深度处的至少一个系数组的压缩大小;(iv)确定是否满足终止标准,所述终止标准中的至少一个终止标准是基于所计算的压缩大小与硬件大小约束之间的比较;(v)响应于确定不满足终止标准,更新当前深度,并且重复步骤(ii)至(iv);以及(vi)响应于确定满足终止标准,输出定义多个硬件遍次中的每个硬件遍次的数据,其中所述数据取决于当前深度。
本文中描述的方法可以是计算机实现的方法。
实现神经网络的方法还可以包括:根据定义多个硬件遍次中的每个硬件遍次的数据,使用固定功能电路来执行神经网络的层。
固定功能电路可以包括被配置成执行一个或多个卷积运算的卷积硬件。
第三示例提供了一种计算设备,所述计算设备包括处理器和存储器,其中所述存储器被布置成存储计算机可读代码,所述计算机可读代码被配置成当代码由处理器执行时,使得本文中描述的方法中的任何方法得以执行。
可以提供用于执行本文中描述的方法中的任何方法的计算机程序代码。可以提供非暂时性计算机可读存储介质,该非暂时性计算机可读存储介质上存储有计算机可读指令,该计算机可读指令当在计算机系统处被执行时使得该计算机系统执行本文所描述的方法中的任一种方法。
如对本领域的技术人员将显而易见,上述特征可以适当地组合,并且可与本文中所描述的示例的各方面中的任一方面进行组合。
附图说明
现在将参考附图详细描述示例,在附图中:
图1是示例NN硬件的示意图;
图2是将NN映射到硬件上的示例方法的流程图;
图3A是平衡二叉树的示意图;
图3B是不平衡二叉树的示意图;
图4是将NN映射到硬件上的改进方法的流程图;
图5示出了当使用广度优先方案向下遍历二叉树时分割系数集的示意图;
图6示出了当向上遍历二叉树时分割系数集的示意图;
图7是选择用于图4的方法中的起始深度的示例方法的流程图;
图8是可用于图4的方法中的第一优化的流程图;
图9是可用于图4的方法中的第二优化的流程图;
图10示出了当使用深度优先方案向下遍历二叉树时分割系数集的示意图;
图11是示出可借以分割系数阵列的不同方式的示意图;
图12示出了其中可实现本文中描述的方法的计算机系统;并且
图13示出了用于生成体现NN硬件的集成电路的集成电路制造系统。
附图示出了各种示例。技术人员将了解,附图中所示出的元件边界(例如框、框的组,或其他形状)表示边界的一个示例。在一些示例中,情况可能是一个元件可以被设计为多个元件,或者多个元件可以被设计为一个元件。在适当的情况下,贯穿各附图使用共同的附图标记来指示类似的特征。
具体实施方式
借助于示例呈现以下描述,以使得本领域的技术人员能够制造和使用本发明。本发明不限于本文中所描述的实施方案,并且对所公开实施方案的各种修改对于本领域的技术人员将是明显的。
现在将仅借助于示例来描述实施方案。
如上文所描述,NN中的层(例如卷积NN中的层)的权重阵列可以以压缩形式进行存储,以便减小所需的存储量以及用于从存储器中读取权重的带宽。权重也可以称为‘系数’,并且这两个术语在本文中可以互换使用。在运行时,将系数从存储器中读取,并且存储在NN硬件内(例如NN加速器NNA内)的缓冲器(其可以称为系数缓冲器)中,随后进行解压缩,并且馈送到将系数应用于输入数据(例如NNA内的卷积引擎)的硬件元件(其可以称为‘处理元件’)中。通常,系数缓冲器对于存储NN层的所有系数并不足够大(例如由于阵列的大小较大以及对缓冲器可用的空间和功率的约束),并且/或者在存储器与NNA之间没有充足的可用带宽以在可用时间内将所有系数从NN层中读取到缓冲器中(即在每个时钟周期中可以加载的数据量存在限制)。因此,将加载层的系数划分成被称为‘遍次’或‘硬件遍次’的多个操作,其中每个遍次涉及从存储器中读取压缩系数的子集,并且在每个遍次中读取的数据量不超过系数缓冲器以及/或者以压缩形式存储这些数据的存储器与缓冲器之间的连接(例如总线)的容量。在其他示例中,当确定如何将NN层的系数划分成多个遍次时,可以使用额外或替代的硬件约束,诸如输入缓冲器的大小、处理元件的处理吞吐量等。在存在多个硬件约束的情况下,将层的系数分割成遍次可能受到最严格的硬件约束的约束。
将了解,由于这些硬件约束是特定于具体实现的,因而可能需要对在其上实现NN的每个不同类型或版本的硬件执行将阵列划分成遍次,并且因此该划分可以形成将NN映射到将在其上实现该NN的硬件的过程的一部分。当系数与输入数据组合时,将映射作为独立于运行时间的离线过程来执行。
将NN系数的层分割成多个遍次一般在压缩系数之前执行,因为一个遍次中的系数需要与另一遍次中的任何系数分开压缩,使得可以独立地访问(例如读取)这些系数。然而,根据所用压缩方法,这两个操作(分割和压缩)并不是独立的,因为分割的性质可能影响可实现的压缩量。
在将系数分割成遍次时,可能存在定义分割发生在何处的标准。例如,在NN层使用滤波器(例如卷积滤波器)的情况下,可以在滤波器级处执行将系数分割成遍次,使得来自相同滤波器的系数总是处于相同遍次中,并且不在遍次之间进行分割,并且最小可能的遍次包括单个滤波器的那些系数,或者在使用p分割(即在信道维度中的分割)的情况下包括针对p分割中的那些信道的单个滤波器的那些系数。在其他示例中,如下文更详细地描述,最小可能的分割可能受到所用压缩方法的影响,但在使用基于块的压缩方法的情况下,可以使用零(或零信道)填充,使得系数数量是块大小的倍数(例如通过填充输入信道的数量,使得系数数量是块大小的倍数)。这确保了(基于块的压缩方法的)块仅包含单个滤波器的单个空间位置。
虽然将NN层划分成多个遍次确保了不超过系数缓冲器的大小和存储器连接的带宽的限制(和/或任何其他硬件约束),但增加遍次数量会增添运行时的等待时间和带宽两者(因为对于每个遍次,输入数据被重新加载到输入缓冲器中),并且如果硬件(例如系数缓冲器以及/或者存储器与缓冲器之间的总线)在每个遍次中没有被完全利用,则将层分割成遍次会导致硬件在运行时低效操作。
将层划分成多个遍次可以作为将神经网络映射到特定硬件具体实现的操作的一部分来执行,因为这取决于硬件特性,例如系数缓冲器的大小以及/或者存储器与NNA之间的带宽。即使此映射是离线(而不是在运行时)执行的,该映射仍然需要以有效的方式执行,即在所需的计算工作量和花费的时间方面,因为计算资源和可用时间都是有限的。如果将在多个不同的硬件具体实现(例如具有不同系数缓冲器大小、总线带宽等的硬件具体实现)上使用NN,则该NN可能需要被映射多次。
在GB专利2579399中描述了一种可用于对系数进行压缩的示例压缩方法。此压缩方法是基于块的压缩方法,因为该压缩方法采用数据项组(其可以称为数据项块),并且将数据项组中的数据项一起编码。在GB 2579399中描述的方法中,针对作为整体的组生成报头数据(包括h位),并且针对组中的数据项中的每个数据项生成主体部分(包括b位)。报头数据指示主体部分中的每个主体部分中的位数b,并且当对数据进行解压缩以从这些数据的相应主体部分重建解压缩数据项时,使用此值。使用此方法,压缩比不是固定的,并且不同的数据项组可以被压缩不同的量(例如尽管组内的所有数据项具有相同大小的主体部分,但主体部分大小在数据项组之间可以不同),并且增加每个组中的数据项的数量仅可以维持或减小(而不是增加)可以实现的压缩量(即增加组中的数据项的数量不能使得所实现的压缩比增大)。如上文所指出,在使用基于块的压缩方案的情况下,可以使用零填充,使得在每个块中编码的系数的数量相同,并且使得每个块仅包含单个滤波器的单个空间位置(而不是相同滤波器的多个空间位置或多个滤波器的相同空间位置)。
图1示出了可被称为神经网络加速器(NNA)100的示例NN硬件,该示例NN硬件在运行时实现NN。如上文所描述,压缩系数存储在外部存储器102中,并且被读取到NNA 100中的系数缓冲器104中。压缩系数随后由解压缩引擎106解压缩,并且输出到多个处理元件107,该多个处理元件将系数与特定NN层的输入数据(其也可以从外部存储器102中被读取)共同组合,以生成NN层的输出数据。在图1中所示出的示例中,NN层是卷积层,并且因此处理元件107各自包括卷积引擎108和累加器110。NNA 100还可以包括一个或多个缓冲器,诸如累加缓冲器112和输出缓冲器。如图1中所示出,累加缓冲器112从处理元件107接收输出。NNA100还可以包括一个或多个输入缓冲器(图1中未示出),该一个或多个输入缓冲器在从外部存储器102中读取输入数据之后并且在将输入数据输入到处理元件107之前存储该输入数据。
NN的输入可以包括文本数据、音频数据、视频数据或多模态数据——例如文本数据和图像数据(诸如标题和相关联的图像)。图像处理应用程序包括但不限于:图像分割;图像分类;光学字符识别。
将NN映射到硬件上(诸如映射到图1中所示出的硬件上)的示例方法涉及估计所有可能分割的压缩,以基于硬件的约束(例如系数缓冲器的大小)来确定将系数最优分割成遍次。然而,此方法花费的时间太长(因为较大数量的系数分割的可能性以及因此巨大的搜索空间),以至于该方法甚至在离线计算中也是不可行的。例如,对于更大的层,这可能涉及估计数百万个选项。
将NN映射到硬件上(诸如映射到图1中所示出的硬件上)的另一示例方法使用系数的未压缩大小来确定如何将NN层分割成多个遍次。此映射方法包括将层分割成多个遍次,使得每个遍次中的系数的未压缩大小满足硬件约束(例如系数缓冲器的大小、存储器总线的带宽等)。此分割方法可以快速地执行,并且使用最少的计算资源,因为该方法不需要对系数的压缩大小进行任何确定,但会导致硬件在运行时的低效使用(例如由于除了在不可能对系数进行压缩的罕见情形下之外,系数缓冲器将被不充分利用)。此映射方法的输出(即映射方法的结果)包括定义如何将系数划分成遍次(例如按照遍次数量或者每遍次的系数或滤波器的数量)的数据。此方法导致在系数较稀疏(即系数包括远多于一的零)的情况下特别低效的具体实现,因为针对稀疏系数可以实现的压缩比一般高于非稀疏系数(即稀疏系数更可压缩)。可以训练系数,使得它们的分布是类高斯的(Gaussian-like)或类拉普拉斯的(Laplacian-like),这增大了可以实现的压缩比(例如可以实现约50%的压缩比)。
图2中的流程图的第一部分201示出了此方法的示例具体实现,其中在滤波器级处执行系数分割(例如使得最小分割是单个滤波器)。此方法也可以在以不同方式(例如每压缩块或者使用p分割的情况)执行分割的情况下使用,并且因此在以下描述中对滤波器数量的引用仅借助于示例来进行(例如在使用p分割的情况下,滤波器数量可以替代地指块的数量或者指滤波器数量乘以p分割的数量)。
该方法将系数集202和硬件约束206(例如在存在影响系数读入到NNA中的多个硬件约束的情况下最严格的硬件约束)作为输入,该硬件约束例如可以是系数缓冲器的大小cbuf_size。在系数被量化的情况下,该方法还可以将每个量化系数204的大小作为输入(例如按照每量化系数的位数)。该方法包括:例如通过将量化系数的数量除以滤波器大小来计算滤波器数量num_filters(块208);计算所有系数的未压缩大小uncompressed_size_w_q(块210);以及通过将硬件系数(例如cbuf_size)除以滤波器的系数的平均未压缩大小来计算每次分割中的滤波器数量(块212)。如在块212中所计算,此数量init_num_split_filters表示每次分割中的滤波器数量的上限,并且可以如下进行计算(等式1):
方法201的输出可以是每次分割中的滤波器数量init_num_split_filters,或者遍次数量(其由num_filters除以init_num_split_filters给出)。将了解,init_num_split_filters的值可能并不精确地划分成num_filters,并且因此除了一个分割之外的所有分割都可以包括由init_num_split_filters给出的数量的滤波器,同时可以存在具有比此数量更少的滤波器的一个分割。
如图2的第二部分中所示出,可以提高此示例方法的效率。额外的方法步骤包括从基于未压缩大小201的分析中取得结果(例如每遍次的滤波器数量init_num_split_filters或遍次数量),以及将系数集划分成组,每个遍次一个组,使得每个集包括用于所计算的滤波器数量的系数(块214),即每个组最初包括由init_num_split_filters给出的滤波器数量。将每个系数组独立压缩(例如使用GB 2579399中描述的压缩方法),并且识别系数组中的任何系数组的最大压缩大小(块216)。随后将此最大压缩组大小与最严格的硬件约束进行比较(例如,如果该最大压缩组大小小于任何带宽约束,则与约束缓冲器大小cbuf_size进行比较)(块218)。如果最大压缩组大小不超过(并且因此满足)硬件约束(块218中的‘是’),例如最大压缩组大小小于系数缓冲器大小,则每个遍次中的滤波器数量num_split_filters增加值x(块219),并且重复该方法,直到最大压缩组大小不满足硬件约束为止。在一个示例中,块219中的增加可以将每个遍次中的滤波器数量增加一(x=1)。在另一示例中,在该方法的每次迭代中,每个遍次中的滤波器数量可以增加更大的量(例如x=2)。选择更大的值x会导致最终结果的粒度较小(这可能会降低在运行时的硬件使用的所得效率),但该方法将更快速地终止。
在每次后一迭代中,在增加了每个遍次中的滤波器数量之后(在块219中),每遍次使用该新的滤波器数量将输入系数集202划分成新的组(在块214中),并且对新的系数组进行压缩(在块216中)。随后将任何滤波器组的新的最大压缩大小与硬件约束进行比较(在块218中)。
对于初始迭代,使用num_split_filters=init_num_split_filters,最大压缩组大小将总是满足约束(块218中的‘是’),因此图2的方法可以通过省略此第一迭代并且在块214中以num_split_filters=init_num_split_filters+x开始进一步优化,其中x>0。在一个示例中,x=1,并且在另一示例中,x可以被设置为将总遍次数量减少一的值。
一旦最大组大小不满足硬件约束(块218中的‘否’),便输出来自前一迭代的结果num_split_filters–x(块220)。同样,num_split_filters–x的值可能并不精确地划分成num_filters,并且因此除了一个分割之外的所有分割都可以包括由num_split_filters–x给出的数量的滤波器,同时可以存在具有比此数量更少的滤波器的一个分割。
将了解,不是将结果输出为滤波器的数量,而是可以以每遍次的相应系数数量或遍次数量的形式输出。
虽然图2的第二部分中的额外方法步骤(块214至220)提高了在运行时的硬件使用的效率,但映射时间显著增加。
本文中描述了一种将NN映射到硬件(诸如图1中所示出的硬件)上的改进方法,与仅使用未压缩大小(例如,如在图2的第一部分201中)和上文描述的修改方法(例如使用图2的全部)相比,该方法提供了更快的映射时间,并且与仅基于未压缩大小来确定分割的情况相比,还提高了在运行时的硬件效率。如下文更详细地描述,改进方法使用二叉树来减少为计算系数集合的压缩大小而执行的计算的数量。可以自顶向下、自底向上或其任何组合来遍历该树(例如该方法可以在树的顶部处开始,向下跳几个层级,并且随后基于所计算的压缩大小而在树内向上/向下移动),并且该方法可以在树内的任何深度处开始。此外,二叉树的探索可以是深度优先或广度优先的。所得二叉树可以是平衡二叉树(即其中所有分支都在相同深度处终止)或不平衡二叉树(即其中至少一些分支在与树中的其他分支不同的深度处终止)。树是平衡的还是不平衡的可以取决于压缩操作,例如压缩有多均匀。
二叉树是一种树状数据结构,其在每个分支上具有二叉(即两个)分割,二叉树的一个示例如图3A中所示出。该树包括两种类型的节点:分割节点302和叶节点304。分割节点302负责分割,并且将数据传递到分支306,而叶节点304终止分支,并且可以包含关于到达叶节点的数据的信息(例如记录到达叶节点的分割的大小)。节点(分割或叶)的位置可以按照其深度来标识,其中树的顶部处的单个分割节点是深度0,该单个分割节点之下的层级处的两个分割节点是深度1,等等。图3A中所示出的二叉树是平衡二叉树,即其中所有分支达到相同最终深度。图3B示出了不平衡二叉树,其中分支可以到达不同最终深度。在平衡二叉树中,每个深度中的分割数量(即分割节点302的数量)由(等式2)给出:
num_of_splits=2depth
在不平衡树中,等式2给出了任何深度处的最大分割数量。在处于图3A和图3B中所示出的取向的二叉树的情况下,较小深度值指示靠近树的顶部的节点,而较大深度值指示树中更向低处的节点。将了解,二叉树可以替代地以其他取向进行绘制,例如使得叶节点位于顶部处或者在左侧或右侧上。
本文中描述的将NN映射到硬件上的改进方法包括确定树内的起始深度(其例如可以是深度=1的第一分割层级或底部层级或者第一分割层级与底部层级之间的任何深度),以及将该系数集划分成组,起始深度处的每次分割一个组(例如其中分割数量可以使用等式2来确定)。将了解,如果起始深度是深度=0,则所有系数被视为单个组(num_of_splits=20=1)。随后对每个系数组进行压缩以确定针对每个组的压缩大小(其也可以称为‘分割’)。随后至少将所有分割的压缩大小中的最大压缩大小与硬件约束(例如与最严格的硬件约束)进行比较,并且基于该比较的结果来向下(使得当前深度与起始深度相比增加)或向上(使得当前深度与起始深度相比减小)遍历该树。在输出定义系数组的数据之前,执行至少一次另外的迭代(基于当前深度将约束分割成组,确定新压缩组大小,并且至少将最大压缩大小与硬件约束进行比较)。
通过本文中描述的改进方法输出的定义系数组的数据将NN的层分割成多个遍次,该多个遍次是为将在其上执行NN的特定硬件定制的,其中每个遍次对应于系数组。在输出了定义系数组的数据之后,可以通过执行由系数组定义的遍次而在特定硬件上执行NN的层。如上文所描述,通过使用本文中描述的改进映射方法,不仅更快速地执行映射,而且在执行NN时特定硬件的效率也得到提高。
本文中描述的将NN映射到硬件上的改进方法可用于卷积NN层(其中每个系数是属于卷积滤波器的权重),或者用于系数与输入数据组合的其他类型的NN层(例如全连接层、去卷积层等)。对卷积NN层的任何引用仅借助于示例来进行。
本文中描述的将NN映射到硬件上的改进方法可以与GB专利2579399中描述的压缩方法或任何其他基于块的压缩方法结合使用,其中增加被一起压缩的数据项组中的数据项的数量不能使得所实现的压缩比的增大。在所用压缩方法不产生固定压缩比,而是其中不同数据组可以取决于组内的数据项的值而被压缩不同量的情况下,该方法是特别有益的。这是因为不能仅基于未压缩大小来确定压缩大小(即在没有实际执行压缩的情况下不能确定该压缩大小)。
图4中示出了将NN映射到硬件上的改进方法的第一示例。在图4中所示出的示例中,该方法将系数集402(其中这些系数可以是量化系数)和硬件约束406作为输入,该硬件约束可以是例如系数缓冲器的大小cbuf_size。虽然图4引用了单个硬件约束,但将了解,可以存在作为输入被接收的多于一个硬件约束。在输入多于一个硬件约束的情况下,后一比较操作可以使用那些输入约束中最严格的输入约束,或者可以使用输入约束中的一些或所有输入约束。在一些示例中,在系数被量化的情况下,该方法还可以将每个量化系数404的大小作为输入(例如按照每量化系数的位数)。在此大小不被输入而是被用作后一操作的一部分的情况下,该大小可以根据对系数集402的分析来确定。
如图4中所示出,该方法以确定二叉树内的起始深度(块408)开始。此起始深度例如可以是二叉树中第一分割发生的层级(深度=1)、树的底部(例如,如基于使用未压缩大小或最小可能的分割所确定)或位于其间的任何点处。对于二叉树的底部层级,深度可以例如由(等式3)给出:
其中cbuf_size是最严格的硬件约束,并且可以是系数缓冲器大小或另一约束(例如带宽约束)。在其他示例中,可以选择底部层级,使得每个叶节点包括最小系数分割。最小系数分割可以基于NN层的特性来确定,例如除非使用p分割,否则在卷积NN层中形成单个滤波器的系数。在使用p分割的情况下,最小可能的分割可以是从p分割中的那些信道中形成单个滤波器的系数。如上文所指出,在使用块遍历压缩方法的情况下,最小可能的分割中的系数可以是零填充的,使得它是块大小的倍数。例如,在最小分割包括单个滤波器的系数的情况下,深度可以例如由(等式4)给出:
将了解,在使用p分割的情况下,可以根据p分割将滤波器进一步分割成多个组,并且在该情况下,修改等式4以考虑每个p分割中的信道数量,如下所示:
其中num_psplits是p分割数量。以下描述使用等式4,但将了解,可以替代地使用等式4的修改版本。类似地,在最小分割是根据基于块的压缩方案的单个系数块的情况下,深度可以例如由(等式5)给出:
其中block_size是根据压缩方案的单个系数块中的系数数量,并且filter_size是每滤波器的系数数量。在使用填充的情况下,可以增加每滤波器的系数数量,使得输入信道数量是块大小的倍数。
起始深度的选择(在块408中)确定了是在向下方向(即,使得深度增加)还是向上方向(即,使得深度减小)上遍历二叉树。例如,如果起始深度是0或1,则在向下方向上遍历二叉树,并且如果起始深度位于树的底部处,则在向上方向上遍历二叉树。对于中间起始深度,可以向下或向上遍历二叉树,并且这可以取决于计算起始深度的方式(例如起始深度是否被计算为保守地小,在该情况下遍历是向下的;或者保守地大,在该情况下遍历是向上的)。
在确定了起始深度(在块408中)之后,将输入系数集划分成组(块410),其中在所确定的起始深度(例如,如使用等式2所计算)中,每个分割节点一个组,并且在此初始迭代中,对每个系数组进行压缩以便确定每个组的压缩大小(块412)。随后使用这些压缩组大小来确定是否符合终止标准(块414)。将在下文更详细描述的这些终止标准取决于是向下还是向上遍历二叉树而有所不同,并且涉及至少一个压缩组大小与硬件约束的比较。终止标准还确保执行该方法的至少两次迭代。
在第一迭代中,从未符合终止标准,并且因此对最初等于起始深度的当前深度进行更新(块416)。当前深度的此更新(在块416中)可以以多种不同的方式来执行,例如取决于二叉树是否被限制为平衡二叉树或者二叉树是否可以是不平衡树,并且这将在下文更详细地描述。更新(在块416中)还取决于起始深度的值以及/或者如何确定起始深度,以及因此是在向下方向还是向上方向上遍历二叉树。如果向下遍历该树,则更新会增加当前深度,而如果向上遍历二叉树,则更新(在块416中)会减小当前深度。在一个示例中,更新可以将当前深度增加或减小值x,并且在各种示例中,x=1,并且在其他示例中,x>1。
在更新了当前深度(在块416中)之后,至少执行第二迭代(块410至414)。如果在向下方向上遍历二叉树并且x=1,则在每次迭代中,系数组被一分为二(在块410中),并且随后对新的组进行压缩以确定压缩组大小(在块412中)。然而,如果在向上方向上遍历二叉树(并且x=1),则在第一迭代之后的每次迭代中,将系数组进行组合(因为随着深度减小一,分割数量减半),并且任何新形成的组的新压缩组大小可以通过对已被组合以形成新组的来自前一迭代的两个组的压缩组大小进行求和来确定。如果x>1,则每次迭代有效地跳过二叉树中的x-1层。因此,对于向下遍历,系数组被分割成2x个组,并且对于向上遍历,将2x个系数组组合在一起。
当满足终止标准(在块414中)时,图4的方法可以在两次或更多次迭代之后终止,并且这些终止标准将取决于是向下遍历还是向上遍历二叉树而有所不同。对于被向下遍历的二叉树,终止标准可以由(等式6A、6B、6C)给出:
compressed_group_size≤cbuf_size
current_depth≥starting_depth+1
current_depth≥2
并且该方法仅在满足所有这些标准(即等式6A、6B和6C中的所有等式)的情况下终止。对于被向上遍历的二叉树,终止标准可以由(等式7A、7B)给出:
compressed_group_size≥cbuf_size
current_depth≤starting_depth-1
并且类似地,该方法仅在满足所有这些标准(即等式7A和7B两者)的情况下终止。在这些标准中,只有第一标准(等式6A和7A)涉及与最严格的硬件约束的比较,并且第二标准(等式6B和7B)确保执行图4的方法的至少两次迭代。用于向下遍历的第三标准(等式6C)确保至少将输入系数集分割至少两次,并且如果没有阻止起始深度成为树的顶部的限制(例如starting_depth=0),则可以使用该第三标准。
对于平衡树,终止标准可以涉及整个树(因为所有分支到达相同最终深度),而对于不平衡树,将终止标准分别应用于每个分支,其中不同的分支在不同的深度处终止。在针对平衡树的一些示例中,也可以将终止标准分别应用于每个分支,因为这通过对树进行修剪而减少总计算工作量;然而,在这类具体实现中,分支中的任何分支所到达的最大深度被用于生成输出数据。
一旦该方法终止(块414中的‘是’),便可以基于终止时间处的当前深度来输出定义系数组的数据(块418),或者可以首先执行进一步的优化(块417),如下文参考图8至图9所描述。所输出的数据可以以多种不同的方式定义系数组,并且这将部分地取决于是使用平衡树还是不平衡树。对于平衡树,输出数据可以定义分割数量或每分割的系数(或者滤波器或块)数量。对于不平衡树,输出定义每次单独分割的数据,因为分割将并不都是相同大小,并且该数据可以定义每次单独分割中的系数(或者滤波器或块)数量。通过定义系数组,数据输出(在块418中)指定硬件遍次数量以及如何将系数划分成这些硬件遍次。在输出了定义硬件遍次的数据(在块418中)之后,可以在硬件上(即在具有硬件约束406的硬件上)执行对应遍次以便执行NN的层。
在不执行额外优化(省略块417)并且输出定义系数组的数据(在块418中)的情况下,这也取决于二叉树的遍历方向。如果向下遍历该树,则输出深度output_depth等于current_depth,并且如果向上遍历该树,则输出深度由current_depth+x给出。在这两种情况下,可以使用等式2根据输出深度来确定分割数量,并且可以使用等式8(见下文)来确定每分割的滤波器数量。对于不平衡深度,将存在单独的值current_depth,并且因此存在针对每个分支或分支组的输出深度,其中分支组都在相同深度处终止。可以使用(等式8)来确定每次分割中的滤波器数量:
如上文所描述,在该方法输出单一大小的系数组(在块418中)的情况下,此值可能并不精确地划分成num_filters,并且因此除了一个分割之外的所有分割都可以包括与由输出数据(来自块418)所指定的滤波器数量相同数量的滤波器,同时可以存在具有比此滤波器数量更少的滤波器的一个分割。
在向下方向上遍历二叉树并且x=1的示例中,此遍历可以参考图5来描述。图5示出了当向下遍历该树时分割系数集502的示意图。图5中的每个小方块503表示最小可能的分割,如上文所描述,该最小可能的分割可以对应于单个滤波器的系数或者根据所使用的基于块的压缩方案形成块的系数。将了解,在实践中,将存在比图5中所示出的系数显著更多的系数。在深度=1处发生第一分割时开始,将系数集502分割成两个组504、506(在块410中),并且对每个组进行压缩(在块412中)。因为这是第一迭代,所以从未符合终止标准(块414中的‘否’),并且这使得深度增加一(在块416中),使得current_depth=2。
在第二迭代中,将来自前一迭代的组中的每个组一分为二(在块410中)以形成四个组508至514,并且随后对四个组中的每个组进行压缩(在块412中)以计算四个压缩组大小。随后至少将压缩组大小中的最大压缩组大小,并且在许多情况下将所有压缩组大小与硬件约束进行比较,以确定是否符合终止标准(在块414中)。返回参考等式6A至6C,这是在第一迭代之后的唯一相关终止标准,并且其中current_depth等于二(只要起始深度不是二叉树的深度=0的最顶部,就将是这种情况)。如果任何压缩组大小超过硬件约束,则不满足终止标准(块414中的‘否’),并且进一步向下遍历二叉树,即至少对于该分支,current_depth增加一(在块416中)。
在图5中所示出的示例中,借助于阴影示出了与硬件约束的比较结果(在块414中)。超过硬件约束的组被示出为无阴影,并且满足硬件约束的组被示出为带阴影。在所示出的示例中,在第二迭代中形成的四个组中,两个组满足硬件约束,而两个组不满足。因此,深度增加一,使得current_depth=3。
在第三迭代中,将来自前一迭代的组中的每个组一分为二(在块410中)以形成八个组516至530,并且随后对八个组中的每个组进行压缩(在块412中)以计算八个压缩组大小。如前所述,随后至少将压缩组大小中的最大压缩组大小,并且在许多情况下将所有压缩组大小与硬件约束进行比较(在块414中),但从并未超过前一迭代中的约束的组中导出的任何组(例如从图5中带阴影示出的组中导出的组)可以从计算和比较操作(块412和414)中排除,或者仅从比较操作(块414)中排除。在所示出的示例中,存在超过硬件约束(块414中的‘否’)的一个压缩组大小(组520的压缩组大小),并且因此进一步向下遍历二叉树,使得current_depth=4(如在块416中所更新)。
在第四迭代中,将来自前一迭代的组中的每个组一分为二(在块410中)以形成十六个组,并且随后对十六个组中的每个组进行压缩(在块412中)以计算十六个压缩组大小。随后至少将压缩组大小中的最大压缩组大小,并且在许多情况下将所有压缩组大小与硬件约束进行比较(在块414中)。在此示例中,所有压缩组大小满足硬件约束,并且因此该方法终止(块414中的‘是’),并且输出定义输出深度处的系数组的数据,其中输出深度由current_depth给出,并且在此示例中等于四(在块418中)。
图5中的二叉树是平衡树,使得输出系数组中的每个输出系数组包括与输出深度所定义的数量相同数量的系数,并且因此数据输出(在块418中)例如可以是输出深度(output_depth=4),或者每个组中并且因此每个遍次中的最小大小的分割503的数量(例如num_split_filters=1)。每个组中的最小大小的分割503的数量可以使用等式8根据输出深度来确定。
即使在仅具有较少系数数量的图5的示例中,也可以看出,一旦终止标准(在块414中评估)确定针对特定分支的压缩组大小满足硬件约束(等式6A,假设也符合等式6B和6C),便可以通过终止对分支的处理,并且仅处理不满足约束的那些分支,来减少作为用于平衡二叉树的图4的方法的一部分所执行的压缩操作的数量。如果相反,则可以使用不平衡二叉树,不仅以此方式终止分支,而且当输出定义系数组的数据(在块418中)时,每组的系数数量并不总是相同的,并且取决于每个分支终止的深度。在图5的示例中,第一分支540和第五分支548可以在深度二处终止,并且第二分支542和第三分支544可以在深度四处终止,并且第四分支546、第六分支550和第七分支552可以在深度三处终止。数据输出(在块418中)例如可以是针对每个组并且因此遍次的输出深度(output_depth={2,4,4,3,2,3,3}),或者每个组中并且因此每个遍次中的最小大小的分割503的数量(例如num_split_filters={4,1,1,2,4,2,2})。
在向上方向上遍历二叉树并且x=1的示例中,此遍历可以参考图6来描述。图6示出了当向上遍历该树时分割系数集602的示意图。图6中的每个小方块603表示最小可能的分割,如上文所描述,该最小可能的分割可以对应于单个滤波器的系数或者根据所使用的基于块的压缩方案形成块的系数。将了解,在实践中,将存在比图6中所示出的系数显著更多的系数。
在树的底部处开始,在由上述等式4或5给出的深度bottom_depth(bottom_depth=4)处,将系数集602分割成其最小分割以产生16个组604(在块410中),并且对每个组进行压缩(在块412中)。因为这是第一迭代,所以从未符合终止标准(特别是等式7B)(块414中的‘否’),并且因此随着向上遍历二叉树,深度减小一(在块416中)。这意味着current_depth=bottom_depth+1=3。
在第二迭代中,将来自前一迭代的组对结合在一起(在块410中)以形成八个组606至620,并且随后通过对在前一迭代中计算的构成组的压缩大小进行求和来计算八个组中的每个组的压缩大小(在块412中)。在向上遍历二叉树的情况下,仅需要在第一迭代中执行压缩,并且可以使用加法运算来计算所有后续压缩大小(在块412中)。随后至少将压缩组大小中的最大压缩组大小,并且在许多情况下将所有压缩组大小与硬件约束进行比较,以确定是否符合终止标准(在块414中)。对于第二迭代和后续迭代,这是唯一相关终止标准(等式7A),因为另一终止标准(等式7B)总是被满足。
在图6中所示出的示例中,借助于阴影示出了与硬件约束的比较结果(在块414中)。超过硬件约束的组被示出为无阴影,并且满足硬件约束的组被示出为带阴影。在所示出的示例中,在第二迭代中形成的八个组中,一个组(组610)不满足硬件约束,并且其余七个组(组606、608和612至620)满足约束。
对于平衡树和向上遍历,一旦一个压缩组大小不满足硬件约束,该方法便终止(块414中的‘是’)。随后输出定义输出深度处的系数组的数据(在块418中),其中对于向上遍历,输出深度由current_depth+1给出,并且在此示例中等于四。可以看出,虽然计算输出深度的方法对于向上和向下遍历是不同的,但最终结果(output_depth=4)是相同的。数据输出(在块418中)例如可以是输出深度(output_depth=4),或者每个组中并且因此每个遍次中的最小大小的分割503的数量(例如num_split_filters=1)。
对于不平衡树和向上遍历,可以在每分支基础上应用终止标准,使得该方法仅针对形成未满足硬件约束的组610的那些分支终止,而不是在第二迭代之后完全终止。对于其余分支,进一步向上遍历二叉树,即current_depth减小一(在块416中)。
在第三迭代中,对于每个非终止分支,将来自前一迭代的组对进行组合(在块410中)以形成四个组622至628。可以看出,虽然形成组610的分支630、632已经终止,但在第三迭代中,组610仍然被用于形成四个组624中的一个组。计算每个组的压缩大小(在块412中),并且将该压缩大小与硬件约束进行比较(在块414中)。如同第二迭代一样,如果组不满足硬件约束,则分支终止(块414中的‘是’),并且因此在此示例中,有三个分支634至638终止,因为有两个组624、628不满足硬件约束。
在第四迭代中,对于每个非终止分支640、642,将来自前一迭代的组对进行组合(在块410中)以形成两个组644、646。计算每个组的压缩大小(在块412中),并且将该压缩大小与硬件约束进行比较(在块414中)。由于两个组都不满足硬件约束,因而所有其余分支都终止(块414中的‘是’)。数据输出(在块418中)例如可以是针对每个组并且因此遍次的输出深度(output_depth={2,4,4,3,2,3,3}),或者每个组中并且因此每个遍次中的最小大小的分割503的数量(例如num_split_filters={4,1,1,2,4,2,2})。
图4的方法可以通过选择既不是深度=1也不是二叉树的底部的起始深度来加速,并且这可以在图5的示例中看出。即使在仅具有较少系数数量的此示例中,通过在深度二(starting_depth=2)处而不是在深度一处开始,总迭代数量并且因此压缩操作(在块412中)得以减少。可以参考图7来描述选择起始深度(在块408中)的示例方法。该方法通过使用压缩方法对整个系数集进行压缩来开始(块702),并且随后将整个集的此压缩大小用于计算起始深度(块704)。起始深度通过以下操作来计算:将压缩大小除以硬件约束以给出起始分割数量,并且随后使用等式2来确定包括该分割数量的深度。在向下遍历二叉树的情况下,结果被偏置为更小的值,以确保所使用的起始深度不会太低(在图3A和图3B的取向上),并且在向上遍历二叉树的情况下,结果被偏置为更大的值,使得起始深度不会太高(在图6的取向上)。例如,在向下遍历二叉树的情况下,所得深度可以被向上舍入,并且随后将起始深度选择为比所得深度小一,或者所得深度可以被向下舍入,并且将起始深度选择为等于所得深度。例如(等式9A):
或者(等式9B):
将了解,在本文中的所有等式中,大小需要呈相同单位(例如位或字节)。类似地,在向上遍历二叉树的情况下,所得深度可以被向下舍入,并且随后将起始深度选择为比所得深度大一,或者所得深度可以被向上舍入,并且将起始深度选择为等于所得深度。例如(等式10A):
或者(等式10B):
如上文所描述,一旦满足终止标准(块414中的‘是’),当前深度可以直接用于输出定义系数组的数据(在块418中),或者可以执行一个或多个优化(在块417中)。
图4的方法可以另外或替代地通过使用更大的值x来加速,使得x>1。这导致跳过二叉树中的层,并且虽然这使该方法的操作加速,但结果更有可能不是最佳的,并且这可能会降低在运行时的所得硬件效率。
图8中示出了第一示例优化,其对应于图2的第二部分,并且可以用于平衡树。如图8中所示出,此优化(在块417中)接收current_depth值,并且使用此值和遍历方向来定义每个系数组的大小num_split_filters(块802)。可以通过使用与上文描述的用于计算输出深度的技术相同的技术根据current_depth值计算interim_depth值,并且随后使用等式8来确定每个系数组的大小(在块802中)。如果向下遍历该树,则interim_depth等于current_depth,并且如果向上遍历该树,则interim_depth由current_depth+1给出。
在确定了每个系数组的大小之后,每分割的滤波器数量num_split_filters增加例如整数值x(块804,其对应于图2中的块219)。用于优化中的值x可以与在图4的方法的较前部分中使用的值x相同或不同,并且在各种示例中,在两种情形下都使用x=1。还将了解,如上文所阐明,如果最小分割不是在滤波器级而是在压缩块级处,则每分割的块数量增加x(在块804中)。
随后将系数组划分成确定大小的组(块806,其对应于块214),并且对每个组进行压缩以找到最大压缩大小(块808,其对应于块216)。将了解,如果该数量没有精确地划分成总滤波器数量num_filters,则可能存在小于所定义大小(即小于如在块804中所确定的每分割的所定义滤波器数量)的一个组。将最大压缩大小与最严格的硬件约束进行比较(块810,其对应于块218),并且如果最大压缩大小小于硬件约束(块810中的‘是’),则重复该方法(如从块810到块804的箭头所指示)。
如果在此迭代或后一迭代中,发现最大压缩大小等于或超过最严格的硬件约束(块810中的‘否’),则输出来自前一迭代的组大小(如由num_split_filters-x所给出),并且将该组大小用于生成定义系数组的输出数据(在图4的块418中)。如上文所描述,对于平衡树,可以存在包括比所有其余分割更少的系数的一个分割,因为所输出的最终数据(在块418中)可以定义每分割的滤波器数量,该滤波器数量没有精确地划分成层中的总滤波器数量。
此第一优化产生比纯二的幂更精细的分割粒度(如在没有任何优化的图4的方法中),但可以比使用图2的方法显著更快速地执行。
如图9中所示出,如果组合压缩大小不大于最严格的硬件约束,则可以与图8的方法结合使用或者可以独立使用的第二示例优化涉及合并两个或更多个系数组(例如合并对应于二叉树的叶节点的那些系数组,该二叉树可以是平衡的或不平衡的)。
如图9中所示出,优化方法以与图8的优化类似的方式开始,通过接收current_depth值,并且使用此值和遍历方向来定义每个系数组的大小num_split_filters(块902,其对应于图8的块802)。如上文所描述,可以通过使用与上文描述的用于计算输出深度的技术相同的技术根据current_depth值计算interim_depth值,并且随后使用等式8来确定每个系数组的大小(在块902中)。如果向下遍历该树,则interim_depth等于current_depth,并且如果向上遍历该树,则interim_depth由current_depth+1给出。
在确定了每个系数组的大小之后,随后将系数集划分成确定大小组(块904,以类似于块806和块214的方式),并且确定每个组的压缩大小(块906)。由于这些组与在图4的方法的早期迭代中大小相同(例如,如在块412的前一实例中所计算),因而压缩大小可以是可用的,并且可能不需要执行任何额外压缩操作。随后选择组中的两个或更多个组(块908),并且如果它们的组合压缩大小(如通过对它们的各个压缩大小进行求和所确定)没有超过最严格的硬件约束(块912中的‘是’),则合并这些组(块914)。如果它们的组合压缩大小超过最严格的硬件约束(块912中的‘否’),则不合并这些组(块916)。随后可以通过选择另外两个或更多个组(在块908中),并且将新选择的组的组合压缩大小与最严格的硬件约束进行比较(在块912中)来重复该方法。
选择组作为候选以用于合并(在块908中)可以基于树的结构,例如使得二叉树内的两个或更多个相邻叶节点从左到右被选择(或反之亦然),并且被评估以用于合并。叶节点可以基于它们的压缩大小来选择,例如使得具有最小压缩大小的相邻组被选择;或者基于任何其他因素来选择。如果没有超过最严格的硬件约束,则合并组可以进一步与一个或多个其他系数组进行合并。
在一些示例中,在给予可用组(来自块904)使在合并之后剩余的组数量最小化以及/或者最紧密地符合针对组中的每个组的最严格的硬件约束的目标的情况下,可以执行全搜索以确定最佳合并策略。在执行全搜索的情况下,在一些示例中,可以合并非相邻叶节点。
在描述将图4的方法应用于图5至图6中所示出的二叉树时,已使用用于遍历该树的广度优先方法,即计算当前深度处的每个组的压缩大小(在块412中),并且随后将该压缩大小用于确定该当前深度中的每个组是否符合终止标准(在块414中)。即使对于不平衡树,在每个深度处,也计算非终止分支中的每个组的压缩大小(在块412中),并且随后将该压缩大小用于确定该当前深度中的非终止分支中的每个组是否符合终止标准(在块414中)。
在图4的方法的变型中,可以改为使用深度优先方法,并且此变型在图10中被示出为用于二叉树的向下遍历。在深度优先方法中,在探索下一分支之前,探索每个分支,直到该分支终止为止(作为符合终止标准的结果)。如图10中所示出,不是计算当前深度处的每个组的压缩大小(在图4的块412中),而是计算当前深度(其最初是起始深度)处的单个组的压缩大小(块1002)。随后确定该特定组是否满足终止标准(块414)。
如上文所描述,第一迭代将从未满足终止标准(其中当前深度是起始深度),并且因此通过将深度增加值x来更新当前深度(块416)。随后在新的深度处将组划分成2x个组(例如,如果x=1,则将该组划分成两个组)(块1004)。随后对新形成的较小组中的所选组重复该方法,直到满足终止标准为止(块414中的‘是’)。
在到达叶节点之后,确定在当前分支(例如来自块504的分支)中是否存在待分析的任何组(块1006),并且如果存在,则选择与当前深度最接近的深度处的组,并且将当前深度更新为该最接近的深度(块1008)。该方法随后如前所述继续,其中计算所选组的压缩大小(块1010),并且将该压缩大小用于确定是否符合终止标准(块414)。
在分析该分支中的所有组之后(在块1006中得到‘否’),该方法确定在起始深度处是否存在仍待分析的任何组(块1012),并且如果存在,则该方法进行到对该组(如在块1014中所选择)以及通过以类似于第一分支的方式细分该组以一直探索到叶节点而形成的任何组进行分析。只有当所有分支都已被探索时(在块1012中得到‘否’)才输出数据,并且如前所述,在输出数据(在块418中)之前,可以应用一个或多个优化(在块417中)。以与深度优先遍历和广度优先遍历(如上文参考图4所描述)相同的方式生成输出数据(在块418中)。通过定义系数组,数据输出(在块418中)指定硬件遍次数量以及如何将系数划分成这些硬件遍次。
返回参考图5中所示出的示例二叉树,如果起始深度=1,则最初将系数划分成两个组504、506,并且计算组504的压缩大小(在块1002中)。由于这是第一迭代,因而不满足终止标准(块414中的‘否’),当前深度增加x(在块416中)。对于此示例,x=1,并且因此current_depth=2。因此,组504被分割成两个组508、510(在块1004中)。计算这些组中的一个组(组508)的压缩大小,并且识别出符合终止标准,如由图5中的阴影所指示(块414中的‘是’)。
在满足针对组508的终止标准之后,确定当前分支中存在仍待分析的组(块1006中的‘是’)。在此示例中,在分支中存在还没有被分析的单个组(组510)。选择此组,并且由于该组处于与当前深度相同的深度,因而当前深度保持相同。计算组510的压缩大小(在块1010中),并且使用该压缩大小确定不符合终止标准,如在图5中由组510的阴影缺失所示出。因此,深度增加,使得current_depth=3(在块410中),并且组510被划分成两个组520、522(在块1004中)。计算这些组中的第一组(组520)的压缩大小(在块1002中),并且将该压缩大小用于确定仍不符合终止标准(块414中的‘否’)。这使得组520被进一步细分(在块1004中)成两个组560、562,并且计算这些更小的组中的第一组(组560)的压缩大小(在块1002中)。
在确定满足终止标准时(块414中的‘是’),确定在分支中仍存在未被分析的组(块1006中的‘是’)。这些未分析组是组562和522。由于组562处于与当前深度最接近的深度(即该组处于当前深度),因而选择该组(在块1008中),并且当前深度保持不变。在确定组562的压缩大小满足终止标准之后,组522被选择,并且被发现也满足终止标准。此时,已分析第一分支(通过对组504的细分而形成)中的所有组,并且该方法返回到起始深度处的未分析组(组506),并且随后对该组重复该方法,分析组506,随后是组512,随后是组514和组528,并且最后是组530。
当执行深度优先遍历时,如上文参考图10所描述,所得树在本质上是不平衡的,因为任何分支终止的深度与树中的其他分支无关。在使用深度优先遍历但具体实现要求所有所得组大小相同(如在平衡二叉树中)的情况下,分支中的任何分支的最大深度用于所有分支(例如对于图5中的示例,深度=4)。
通过使用深度优先遍历,(图9的)合并优化可以在早期阶段处实现,而不是在遍历结束时实现。例如,在满足终止标准的任何时间点处(在图9的块414中),可以执行检查以查看所得组是否可以与满足终止标准的该(或任何)前一组进行合并(例如可以在块414与块1006之间将块908至916插入到图9中)。然而,使用广度优先遍历意味着所有分割的大小在每个深度处是已知的。
上文描述的方法涉及分割输入系数集402。此集可以根据所定义的最小分割大小以任何方式进行分割。例如,系数可以被可视化为三维阵列,其中每个平面对应于针对单个信道的滤波器的系数,如图11中所示出。当分割输入系数集时,所用分割可以是f分割或p分割。在使用f分割的情况下,分割是在滤波器维度(虚线1102)上,并且在使用p分割的情况下,分割是在信道维度(虚线1104)上。在一些示例中,仅使用f分割或p分割,并且在其他示例中,可以使用f分割和p分割两者(例如可以在一次迭代中使用f分割,随后在下一迭代中使用p分割)。在使用p分割的情况下,通过将组的合并限制为二叉树中相邻的组(而不是允许完全自由地选择将合并的组),这可能会影响合并优化,如上文参考图9所描述。此外,在使用p分割的情况下,中间结果被保存为更高的精度,随后在下一遍次中进行加载并累加。
本文中描述的将输入系数集分割成多个遍次的方法形成了将神经网络映射到硬件的过程的一部分,在运行时将在该硬件上实现该神经网络。如上文所描述,映射过程是离线执行的,但执行该映射过程的方式可能在运行时具有性能影响(例如在带宽、等待时间、效率、功耗等方面)。在一个示例中,映射过程可以包括使用本文中描述的方法将层分割成硬件遍次,对系数进行压缩(根据从分割方法中输出的最终分割数据),以及随后生成经转换的神经网络(例如生成执行这些更小的操作集的命令流,诸如将对应输入和权重数据发送到对应缓冲器,包括在必要时以更高的精度保存中间结果,并且随后执行中间卷积结果的累加)。
通过使用本文中描述的方法(在将NN映射到将在其上运行该NN的硬件的离线过程中实现该方法),可以显著提高硬件在运行时的效率。例如,可以实现系数缓冲器使用从30%至50%的范围内的某处(其中分割是基于未压缩大小)增加到接近90%或更多。如上文所描述,更有效地利用系数缓冲器减少了所需的总遍次数量,这提供了诸如等待时间减少、带宽减小以及功耗降低的益处。例如,所需的遍次数量可以大约减半。另外,与探索分割的所有可能组合(即上文描述的方法中的第一种方法)相比,执行将层(即层的系数)离线分割成遍次所花费的时间可以减少1至2个数量级。
图12示出了其中可实现本文中描述的方法的计算机系统。计算机系统包括CPU1202、GPU 1204、存储器1206、神经网络加速器(NNA)1208(例如对应于图1中所示出的NNA100)和其他设备1214,诸如显示器1216、扬声器1218和相机1217。计算机系统的部件可经由通信总线1220彼此通信。
图1的NN硬件被示出为包括多个功能块。这仅仅是示意性的,并且不旨在定义这类实体的不同逻辑元件之间的严格划分。每个功能块可以任何合适的方式提供。将了解,在本文中被描述为由NN硬件内的元件形成的中间值不需要由硬件在任何点处物理地生成,并且可以仅表示方便地描述由NN硬件在其输入与输出之间执行的处理的逻辑值。
可以在集成电路上以硬件体现本文中描述的NN硬件。一般来讲,上文所述的功能、方法、技术或部件中的任一者可在软件、固件、硬件(例如,固定逻辑电路系统)或它们的任何组合中实施。本文中可以使用术语“模块”、“功能性”、“部件”、“元件”、“单元”、“块”和“逻辑”来概括地表示软件、固件、硬件或它们的任何组合。在软件具体实施的情况下,模块、功能性、部件、元件、单元、块或逻辑表示程序代码,该程序代码当在处理器上被执行时执行指定任务。本文中所描述的算法和方法可由执行代码的一个或多个处理器执行,所述代码促使处理器执行算法/方法。计算机可读存储介质的示例包括随机访问存储器(RAM)、只读存储器(ROM)、光盘、闪存存储器、硬盘存储器,以及可使用磁性、光学和其他技术来存储指令或其他数据并且可由机器访问的其他存储器设备。
如本文中所使用的术语计算机程序代码和计算机可读指令是指用于处理器的任何种类的可执行代码,包括以机器语言、解译语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节代码、定义集成电路的代码(诸如硬件描述语言或网表),以及用诸如C、Java或OpenCL等编程语言代码表达的代码。可执行代码可以是例如任何种类的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中被适当地执行、处理、解译、编译、运行时,这些软件、固件、脚本、模块或库使得支持可执行代码的计算机系统的处理器执行由所述代码指定的任务。
处理器、计算机或计算机系统可以是任何种类的设备、机器或专用电路,或其集合或部分,所述集合或部分具有处理能力以使得其可执行指令。处理器可以是任何种类的通用或专用处理器,例如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)、物理处理单元(PPU)、无线电处理单元(RPU)、数字信号处理器(DSP)、通用处理器(例如通用GPU)、微处理器、旨在加速CPU之外的任务的任何处理单元等。计算机或计算机系统可包括一个或多个处理器。本领域技术人员将认识到,这种处理能力被结合到许多不同的设备中,并且因此术语‘计算机’包括机顶盒、媒体播放器、数字收音机、PC、服务器、移动电话、个人数字助理和许多其他设备。
本发明还意图涵盖限定如本文中所描述的硬件的配置的软件,诸如HDL(硬件描述语言)软件,如用于设计集成电路,或者用于配置可编程芯片以实施所需功能。也就是说,可以提供一种计算机可读存储介质,该计算机可读存储介质在其上编码有集成电路定义数据集形式的计算机可读程序代码,该计算机可读程序代码当在集成电路制造系统中处理(即运行)时将该系统配置为制造包括本文中所描述的任何装置的NN硬件。集成电路定义数据集可以是例如集成电路描述。
因此,可以提供一种在集成电路制造系统处制造如本文中所描述的NNA的方法。此外,可以提供一种集成电路定义数据集,该集成电路定义数据集当在集成电路制造系统中被处理时,使得制造NNA的方法得以执行。
集成电路定义数据集可呈计算机代码形式,例如作为网表、用于配置可编程芯片的代码,作为在任何层级定义集成电路的硬件描述语言,包括作为寄存器传送级(RTL)代码、作为高级电路表示,诸如Verilog或VHDL,以及作为低级电路表示,诸如OASIS(RTM)和GDSII。在逻辑上定义集成电路的更高级表示法(诸如RTL)可以在被配置为用于在软件环境的上下文中产生集成电路的制造定义的计算机系统处处理,该软件环境包括电路元件的定义以及用于组合这些元件以便产生由表示法定义的集成电路的制造定义的规则。如通常软件在计算机系统处执行以便定义机器的情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便将计算机系统配置为生成集成电路的制造定义,以执行定义集成电路以便生成该集成电路的制造定义的代码。
现在将参考图13来描述在集成电路制造系统处处理集成电路定义数据集以便将该系统配置成制造NNA的示例。
图13示出了集成电路(IC)制造系统1302的示例,该IC制造系统被配置成制造如本文中的示例中的任何示例中所描述的NNA。具体而言,IC制造系统1302包括布局处理系统1004和集成电路生成系统1306。IC制造系统1302被配置成接收IC定义数据集(例如定义如本文中的示例中的任何示例中所描述的NNA),处理IC定义数据集,以及根据IC定义数据集来生成IC(例如其体现如本文中的示例中的任何示例中所描述的NNA)。对IC定义数据集的处理将IC制造系统1302配置成制造集成电路,该集成电路体现如本文中的示例中的任何示例中所描述的NNA。
布局处理系统1304配置成接收并处理IC定义数据集以确定电路布局。根据IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可涉及合成RTL代码以确定要生成的电路的门级表示,例如就逻辑部件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP部件)而言。通过确定逻辑部件的位置信息,可以根据电路的门级表示来确定电路布局。这可以自动完成或者在用户参与下完成,以便优化电路布局。当布局处理系统1004已确定电路布局时,该布局处理系统可以将电路布局定义输出到IC生成系统1306。电路布局定义可以是例如电路布局描述。
如本领域中所已知,IC生成系统1006根据电路布局定义来生成IC。例如,IC生成系统1306可以实现用于生成IC的半导体设备制造工艺,该半导体设备制造工艺可以涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐形成电子电路。电路布局定义可呈掩模的形式,其可在光刻工艺中用于根据电路定义来生成IC。替代地,提供给IC生成系统1306的电路布局定义可呈计算机可读代码的形式,IC生成系统1306可使用所述计算机可读代码来形成用于生成IC的合适掩模。
由IC制造系统1302执行的不同过程可以全部在一个位置实现,例如,由一方实现。替代地,IC制造系统1002可以是分布式系统,使得一些过程可以在不同位置执行,并且可以由不同方来执行。例如,以下阶段中的一些阶段可以在不同位置和/或由不同方来执行:(i)合成表示IC定义数据集的RTL代码,以形成待生成的电路的门级表示;(ii)基于门级表示来生成电路布局;(iii)根据电路布局来形成掩模;以及(iv)使用掩模来制造集成电路。
在其他示例中,在集成电路制造系统处对集成电路定义数据集的处理可将系统配置成制造NNA,而无需对IC定义数据集进行处理以确定电路布局。例如,集成电路定义数据集可以定义可重新配置的处理器诸如FPGA的配置,并且对该数据集的处理可以将IC制造系统配置为(例如,通过将配置数据加载到FPGA)生成具有该定义的配置的可重新配置的处理器。
在一些实施方案中,当在集成电路制造系统中处理时,集成电路制造定义数据集可使得集成电路制造系统生成如本文所描述的设备。例如,通过集成电路制造定义数据集,以上文关于图13所描述的方式对集成电路制造系统的配置,可使得制造出如本文所描述的设备。
在一些示例中,集成电路定义数据集可包括在数据集处定义的硬件上运行的软件,或者与在数据集处定义的硬件组合运行的软件。在图13中所示的示例中,IC生成系统可以由集成电路定义数据集进一步配置,以在制造集成电路时根据在集成电路定义数据集处定义的程序代码将固件加载到所述集成电路上,或者以其他方式向集成电路提供与集成电路一起使用的程序代码。
本领域技术人员将认识到用来存储程序指令的存储设备可分布在网络上。例如,远程计算机可将所描述的过程的示例存储为软件。本地或终端计算机可访问远程计算机,并且下载软件的一部分或全部以运行程序。替代地,本地计算机可根据需要下载软件的片段,或者在本地终端处执行一些软件指令,并且在远程计算机(或计算机网络)处执行一些软件指令。本领域技术人员还将认识到,通过利用本领域技术人员已知的常规技术,软件指令的全部或一部分可由诸如DSP、可编程逻辑阵列等专用电路实行。
本文中所描述的方法可由配置有存储在有形存储介质上的机器可读形式的软件的计算机执行,例如,软件呈包括用于将计算机配置成执行所述方法的组成部分的计算机可读程序代码的计算机程序的形式,或呈包括计算机程序代码装置的计算机程序的形式,当程序在计算机上运行时以及在计算机程序可在计算机可读存储介质上实施的情况下,所述代码装置适于执行本文中所描述的方法中的任一种方法的所有步骤。有形(或非暂时性)存储介质的示例包括磁盘、拇指驱动器、存储卡等,并且不包括传播信号。软件可适于在并行处理器或串行处理器上执行,使得所述方法步骤可以任何合适的次序实行或同时实行。
本文中所描述的硬件部件可由其上编码有计算机可读程序代码的非暂时性计算机可读存储介质产生。
存储用于实施所公开方面的机器可执行数据的存储器可以是非暂时性介质。非暂时性介质可以是易失性或非易失性的。易失性非暂时性介质的示例包括基于半导体的存储器,诸如SRAM或DRAM。可用以实施非易失性存储器的技术的示例包括光学和磁存储器技术、闪存存储器、相变存储器、电阻RAM。
对“逻辑”的特定引用是指执行功能(function/functions)的结构。逻辑的示例包括被布置成执行这些功能的电路系统。例如,这种电路系统可包括在制造过程中可用的晶体管和/或其他硬件元件。借助于示例,这种晶体管和/或其他元件可用以形成实施和/或含有存储器的电路系统或结构,诸如寄存器、触发器或锁存器;逻辑运算器,诸如布尔(Boolean)运算;数学运算器,诸如加法器、乘法器;或移位器和互连线。这类元件可作为定制电路或标准单元库、宏来提供,或在其他抽象层级处提供。这类元件可以特定布置来互连。逻辑可包括作为固定功能的电路系统,并且电路系统可被编程以执行一个或多个功能;可从固件或软件更新或控制机制中提供这种编程。被标识为执行一个功能的逻辑还可包括实施组成功能或子过程的逻辑。在一个示例中,硬件逻辑具有实施一个或多个固定功能操作、状态机或过程的电路系统。
与已知的具体实施相比,在本申请中阐述的概念在设备、装置、模块和/或系统中(以及在本文中所实现的方法中)的具体实施可引起性能改进。性能改进可包括计算性能提高、等待时间减少、吞吐量增大和/或功耗减小中的一者或多者。在制造这类设备、装置、模块和系统(例如在集成电路中)期间,可在性能提高与物理具体实现之间进行权衡,从而改进制造方法。例如,可在性能改进与布局面积之间进行权衡,从而匹配已知具体实施的性能,但使用更少的硅。例如,这可以通过以串行方式重复使用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中阐述的引起设备、装置、模块和系统的物理具体实施的改进(诸如硅面积减小)的概念可进行权衡以获得性能提高。这例如可通过在预定义面积预算内制造模块的多个实例来完成。
如对本领域技术人员显而易见,可延长或改变本文中给出的任何范围或设备值而不丧失所寻求的效果。
将了解,上文所描述的益处和优点可涉及一个实施方案,或可涉及若干实施方案。实施方案不限于解决所陈述问题中的任一问题或全部问题的实施方案,或具有所陈述益处中的任一益处或全部益处的实施方案。
对‘一’项目的任何引用都是指这些项目中的一个或多个项目。术语‘包括’在本文中用以意指包括所标识的方法块或元件,但这类块或元件不包括排他列表,并且装置可包括额外块或元件,并且方法可包括额外操作或元件。此外,并不暗示块、元件和操作本身是封闭的。
本文中所描述的方法的步骤可以任何合适的次序或在适当时被同时实行。图中的框之间的箭头展示方法步骤的一个示例序列,但并不旨在排除其他序列或并行执行多个步骤。另外,在不脱离本文中所描述的主题的精神和范围的情况下,可从方法中的任一方法中删除各个块。上文所描述的示例中的任一示例的各方面可与所描述的其他示例中的任一示例的各方面组合以形成其他示例而不会丧失所寻求的效果。在图的元件被展示为通过箭头连接的情况下,将了解,这些箭头仅展示元件之间的通信(包括数据和控制消息)的一个示例流动。元件之间的流动可在任一方向上或在两个方向上。
申请人据此独立地公开了本文中所描述的每个单独特征以及两个或更多个这类特征的任何组合,到达的程度使得这类特征或组合能够根据本领域的技术人员的普通常识基于本说明书整体来实行,而不管这类特征或特征的组合是否解决本文中所公开的任何问题。鉴于前文描述,本领域的技术人员将清楚,可在本发明的范围内进行各种修改。
Claims (14)
1.一种将神经网络映射到硬件的方法,所述方法包括使用二叉树来评估如何将所述神经网络的层分割成多个硬件遍次,每个硬件遍次从外部存储器中读取所述层的系数的子集,并且其中所述系数以压缩形式存储在所述存储器中,并且所述二叉树中的每个节点对应于所述系数的不同子集,其中使用所述二叉树包括:
(i)确定所述二叉树内的当前深度的起始值;
(ii)将系数集排列成组,每个组对应于所述当前深度处的节点;
(iii)计算所述当前深度处的至少一个系数组的压缩大小;
(iv)确定是否满足终止标准,所述终止标准中的至少一个终止标准是基于所计算的压缩大小与硬件大小约束之间的比较;
(v)响应于确定不满足所述终止标准,更新所述当前深度,并且重复步骤(ii)至(iv);以及
(vi)响应于确定满足所述终止标准,输出定义所述多个硬件遍次中的每个硬件遍次的数据,其中所述数据取决于所述当前深度。
2.根据权利要求1所述的方法,其中确定所述二叉树内的当前深度的起始值包括将所述当前深度的所述起始值设置为深度一,并且其中更新所述当前深度包括增加所述当前深度。
3.根据权利要求1所述的方法,其中确定所述二叉树内的当前深度的起始值包括将所述当前深度的所述起始值设置为所述二叉树的最大深度,并且其中更新所述当前深度包括减小所述当前深度。
4.根据权利要求3所述的方法,其中所述二叉树的所述最大深度由最小组大小定义。
5.根据权利要求4所述的方法,其中所述最小组大小由用于压缩所述系数以存储在所述外部存储器中的压缩方法来定义。
6.根据权利要求1所述的方法,其中确定所述二叉树内的当前深度的起始值包括:
对所述层的所有所述系数进行压缩以确定所述层的压缩大小;以及
将所述层的所述压缩大小除以所述硬件大小约束。
7.根据权利要求1所述的方法,其中输出定义所述多个硬件遍次中的每个硬件遍次的数据包括:
确定所述当前深度处的组中的系数数量;以及
增加至少一个组中的所述系数数量;
计算所述至少一个组的压缩大小;以及
响应于确定所述压缩大小满足所述硬件大小约束,基于所述至少一个组中的增加的系数数量来输出定义所述多个硬件遍次中的每个硬件遍次的数据。
8.根据权利要求1所述的方法,其中计算所述当前深度处的至少一个系数组的压缩大小包括:
计算所述当前深度处的一个系数组的压缩大小,所述系数组对应于所述二叉树的分支;
并且其中响应于确定满足终止标准,所述方法还包括在输出数据之前:
在以所述当前深度的所述起始值对其他组重复步骤(ii)至(v)之前,对所述二叉树的所述分支中的其他组重复步骤(ii)至(v)。
9.根据权利要求1所述的方法,其中输出定义所述多个硬件遍次中的每个硬件遍次的数据包括:
选择所述当前深度处的两个或更多个组;
将所选组的组合压缩大小与所述硬件约束进行比较;
响应于确定组合压缩大小满足所述硬件大小约束,合并所述组,并且基于合并组来输出定义所述多个硬件遍次中的每个硬件遍次的数据。
10.根据权利要求1所述的方法,其中更新所述当前深度包括增加所述当前深度,并且其中所述终止标准包括:
所述压缩组大小不超过所述硬件大小约束;以及
所述当前深度大于所述起始深度加一。
11.根据权利要求1所述的方法,其中更新所述当前深度包括减小所述当前深度,并且其中所述终止标准包括:
所述压缩组大小超过所述硬件大小约束;以及
所述当前深度小于所述起始深度减一。
12.根据权利要求1所述的方法,其中所述硬件大小约束包括被配置成存储所述系数的缓冲器的大小或者与所述外部存储器的连接的带宽。
13.一种计算机可读存储介质,其上编码有计算机可读代码,所述计算机可读代码被配置成在运行所述代码时,使得根据前述权利要求中任一项所述的方法得以执行。
14.一种计算设备,所述计算设备包括:
处理器;以及
存储器,所述存储器被布置成存储计算机可读代码,所述计算机可读代码被配置成当所述代码由所述处理器执行时,使得根据权利要求1至12中任一项所述的方法得以执行。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB2209110.2 | 2022-06-21 | ||
GB2209110.2A GB2620113A (en) | 2022-06-21 | 2022-06-21 | Mapping neural networks to hardware |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117273093A true CN117273093A (zh) | 2023-12-22 |
Family
ID=82705539
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310728286.4A Pending CN117273093A (zh) | 2022-06-21 | 2023-06-19 | 将神经网络映射到硬件 |
Country Status (4)
Country | Link |
---|---|
US (1) | US20240119254A1 (zh) |
EP (1) | EP4296901A1 (zh) |
CN (1) | CN117273093A (zh) |
GB (1) | GB2620113A (zh) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2018058426A1 (zh) * | 2016-09-29 | 2018-04-05 | 清华大学 | 硬件神经网络转换方法、计算装置、编译方法和神经网络软硬件协作系统 |
GB2579399B (en) | 2018-11-30 | 2020-12-16 | Imagination Tech Ltd | Data compression and storage |
GB2599909B (en) * | 2020-10-13 | 2023-07-19 | Imagination Tech Ltd | Implementation of a neural network in multicore hardware |
-
2022
- 2022-06-21 GB GB2209110.2A patent/GB2620113A/en active Pending
-
2023
- 2023-06-19 CN CN202310728286.4A patent/CN117273093A/zh active Pending
- 2023-06-19 EP EP23180122.6A patent/EP4296901A1/en active Pending
- 2023-06-21 US US18/212,347 patent/US20240119254A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
GB202209110D0 (en) | 2022-08-10 |
EP4296901A1 (en) | 2023-12-27 |
GB2620113A (en) | 2024-01-03 |
US20240119254A1 (en) | 2024-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11868426B2 (en) | Hardware implementation of convolutional layer of deep neural network | |
US11886536B2 (en) | Methods and systems for implementing a convolution transpose layer of a neural network | |
US20220391172A1 (en) | Implementation of Softmax and Exponential in Hardware | |
US20230019151A1 (en) | Implementation of pooling and unpooling or reverse pooling in hardware | |
CN114792124A (zh) | 在硬件中实施扩张卷积 | |
CN113887710A (zh) | 循环神经网络中的数字格式选择 | |
US20240111990A1 (en) | Methods and systems for performing channel equalisation on a convolution layer in a neural network | |
GB2551624A (en) | Evaluating polynomials in hardware logic | |
CN117273093A (zh) | 将神经网络映射到硬件 | |
US20170308354A1 (en) | Sorting Numbers in Hardware | |
CN113887714A (zh) | 用于在硬件中运行动态循环神经网络的方法和系统 | |
US20240232596A1 (en) | Implementing neural networks in hardware | |
US20240232597A1 (en) | Mapping neural networks to hardware | |
EP4390770A1 (en) | Mapping neural networks to hardware | |
EP4390768A1 (en) | Implementing neural networks in hardware | |
US20240231823A1 (en) | Sorting | |
US20240192918A1 (en) | Sorting | |
EP4160486A1 (en) | Neural network accelerator with a configurable pipeline | |
EP4345692A1 (en) | Methods and systems for online selection of number formats for network parameters of a neural network | |
EP4120142A1 (en) | Implementation of argmax or argmin in hardware | |
GB2625271A (en) | Sorting | |
CN116661866A (zh) | 查找第一函数 | |
GB2622454A (en) | Compressing a neural network | |
CN117313809A (zh) | 用于在神经网络加速器上执行神经网络的方法和系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication |