CN116261736A - 用于双稀疏卷积处理和并行化的方法和*** - Google Patents
用于双稀疏卷积处理和并行化的方法和*** Download PDFInfo
- Publication number
- CN116261736A CN116261736A CN202080101977.6A CN202080101977A CN116261736A CN 116261736 A CN116261736 A CN 116261736A CN 202080101977 A CN202080101977 A CN 202080101977A CN 116261736 A CN116261736 A CN 116261736A
- Authority
- CN
- China
- Prior art keywords
- sub
- channel
- index
- zero
- filter
- 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
- 238000000034 method Methods 0.000 title claims abstract description 116
- 238000012545 processing Methods 0.000 title claims description 98
- 238000003860 storage Methods 0.000 claims abstract description 15
- 239000000872 buffer Substances 0.000 claims description 80
- 230000015654 memory Effects 0.000 claims description 41
- 238000000638 solvent extraction Methods 0.000 claims description 8
- 230000004931 aggregating effect Effects 0.000 claims description 5
- 230000008569 process Effects 0.000 abstract description 42
- 238000004590 computer program Methods 0.000 abstract description 2
- 238000013528 artificial neural network Methods 0.000 description 17
- 230000006870 function Effects 0.000 description 17
- 239000004698 Polyethylene Substances 0.000 description 14
- -1 polyethylene Polymers 0.000 description 14
- 229920000573 polyethylene Polymers 0.000 description 14
- 230000004913 activation Effects 0.000 description 12
- 238000001994 activation Methods 0.000 description 12
- 238000013527 convolutional neural network Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 9
- 238000004422 calculation algorithm Methods 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 7
- 238000011176 pooling Methods 0.000 description 7
- 230000011218 segmentation Effects 0.000 description 7
- 239000000284 extract Substances 0.000 description 5
- 239000011159 matrix material Substances 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000009825 accumulation Methods 0.000 description 3
- 238000007792 addition Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 3
- 230000006872 improvement Effects 0.000 description 3
- 210000002569 neuron Anatomy 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000010801 machine learning Methods 0.000 description 2
- 206010028980 Neoplasm Diseases 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 201000011510 cancer Diseases 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000010191 image analysis Methods 0.000 description 1
- 238000012804 iterative process Methods 0.000 description 1
- 238000011068 loading method Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000003058 natural language processing Methods 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 239000013598 vector Substances 0.000 description 1
Images
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/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/0464—Convolutional networks [CNN, ConvNet]
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
-
- 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/045—Combinations of networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Biomedical Technology (AREA)
- Health & Medical Sciences (AREA)
- Life Sciences & Earth Sciences (AREA)
- Biophysics (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Evolutionary Computation (AREA)
- Data Mining & Analysis (AREA)
- Neurology (AREA)
- Complex Calculations (AREA)
- Image Processing (AREA)
Abstract
本文公开了方法、***和设备,包括编码在计算机存储介质上的计算机程序,用于并行化卷积处理。示例性方法包括:将输入张量分割成多个子张量,将多个过滤器分割成多个子过滤器组;分别将由子张量和子过滤器组构成的多个组合分配给多个处理器;由多个处理器中的每个处理器将分配的组合中的子张量和子过滤器组的非零值存储为索引‑值对;由多个处理器在多次迭代中并行执行基于索引‑值对的乘法和累加(MAC)操作,以获得多个输出,其中子过滤器组的索引‑值对在多次迭代中在多个处理器之间旋转;并将多个输出汇总为输出张量。
Description
技术领域
本公开内容笼统地涉及人工智能,特别是通过利用输入激活张量和滤波器张量的稀疏性来并行化卷积处理。
背景技术
神经网络(NN)目前是许多现代人工智能(AI)应用的基础,如图像和视频识别、推荐***、分类、医学图像分析和自然语言处理。NN被用于各种使用场景,从自动驾驶汽车、检测癌症到玩复杂游戏。典型的NN可能包括一系列的卷积层,在那里进行昂贵的卷积操作(成本包括计算成本和能源成本)。近年来,人们开发了各种技术来提高NN的计算和能源效率,例如减少NN过滤器中的非零参数(神经元之间的连接)的数量,修剪网络的各部分(例如神经元的通道或过滤器的列/行)。这些技术的共同主题是在NN的卷积处理中引入稀疏性,这为提高推理通量和减少延迟提供了巨大潜力。然而,现有的硬件架构通常依赖于通用计算引擎(例如GPU),而这些引擎并没有针对稀疏卷积进行优化。这些架构无法有效地存储稀疏张量,也无法充分地利用大规模的更高水平的并行性。这个问题在双稀疏卷积场景中变得更加严重(输入张量和过滤器都是稀疏的)。因此,希望建立新的***架构,使稀疏卷积的效率更高。
发明内容
本说明书的各种实施例可包括用于双稀疏卷积处理和并行化的***、方法和非临时性计算机可读介质。
根据一个方面,提供了一种用于并行化卷积处理的方法。该方法包括:获得输入张量和与输入张量共享多个通道的多个过滤器;将多个通道划分为多个通道组;将输入张量分割成多个子张量,并将多个过滤器根据多个通道组分割成多个子过滤器组;将由子张量和子过滤器组构成的多个组合分别分配给多个处理器,其中,多个组合中的每个组合包括对应于同一通道组的子张量和子过滤器组;由多个处理器中的每个处理器在一个或多个第一索引-值对中存储分配的组合中的子张量的一个或多个非零值,以及在一个或多个第二索引-值对中存储分配的组合中的子过滤器组的一个或多个非零值;由多个处理器并行地执行基于第一索引-值对和第二索引-值对的乘法和累加(MAC)操作,以获得多个输出;以及将多个输出汇总为输出张量。
在一些实施例中,将多个过滤器分割成多个子过滤器组包括:将多个过滤器分组为多个过滤器组;根据多个通道组将多个过滤器中的每个过滤器分割成多个子过滤器;以及将同一过滤器组的和同一通道组的子过滤器确定为一个子过滤器组。
在一些实施例中,多个通道组中的每一个包括多个子张量中的一个或多个,并且多个子张量中的每一个与识别子张量在该子张量所在的通道组中的位置的标识符相关联,并且该方法进一步包括:将与来自多个通道组的相同标识符相关联的子张量存储到输入缓存中,其中该输入缓存由多个处理器中的一个或多个共享。
在一些实施例中,不存储分配的组合中的子张量和子过滤器组的零值。
在一些实施例中,将分配的组合中的子张量的一个或多个非零值存储为一个或多个第一索引-值对包括:识别子张量中的一个或多个非零输入值;对于该一个或多个非零输入值中的每一个:确定对应于非零输入值所在的通道的通道标识符;并将该通道标识符和非零输入值存储为第一索引-值对。
在一些实施例中,将分配的组合中的子过滤器组的一个或多个非零值存储为一个或多个第二索引-值对包括:识别子过滤器组中的一个或多个非零权重;对于该一个或多个非零权重中的每一个:确定对应于非零权重所在的通道的通道标识符;以及将该通道标识符和该非零权重存储为第二索引-值对。
在一些实施例中,将分配的组合中的子过滤器组的一个或多个非零值存储为一个或多个第二索引-值对包括:识别子过滤器组中的一个或多个非零权重;对于该一个或多个非零权重中的每一个:确定与非零权重所在的通道相对应的通道标识符;确定与非零权重所属的核相对应的核标识符;以及在权重缓冲器头中存储由通道标识符索引的指针,该指针指向存储在权重缓冲器阵列中的第二索引-值对,其中第二索引-值对包括非零权重并由核标识符进行索引。
在一些实施例中,分别将由子张量和子过滤器组构成的多个组合分配给多个处理器包括:进行一次或多次迭代的并行处理,每次迭代包括:确定由子张量和子过滤器组构成的多个组合,其中多个组合分别对应于多个通道组;以及分别将多个组合送入多个处理器以生成多个点积。
在一些实施例中,多个通道组包括M个通道组,并且分别将多个组合送入多个处理器进一步包括:在一次或多次迭代的第一迭代期间,确定由M个组合构成的第一集合,包括从M个通道组中的第i个通道组的由子张量和子过滤器组构成的第i个组合,其中1<=i<=M;以及在一次或多次迭代的第二迭代期间,确定由M个组合构成的第二集合,包括来自M个通道组中的第(i+1)个通道组的由子张量和子过滤器组构成的第i个组合,其中1<=i<M,以及来自M个通道组中的第1个通道组的由子张量和子过滤器组构成的第M个组合。
在一些实施例中,多个处理器中的每个处理器在一次或多次迭代的每次迭代期间产生一个部分和并且将多个输出汇总为输出张量包括:对于多个处理器中的每个处理器,累积由处理器在一次或多次迭代中产生的部分和以产生点积;以及将由多个处理器在一次或多次迭代中产生的点积组装为输出张量。
在一些实施例中,由多个处理器对多个组合并行执行MAC操作以获得多个输出包括,对于多个处理器中的每一个:获得与处理器相关联的子张量中的第一非零值的第一索引-值表示,其中第一索引-值表示包括对应于第一非零值所在的第一通道的第一索引;基于第一索引,获得第二非零值的第二索引-值表示,第二非零值位于第一通道中并且在与处理器相关联的子过滤器组的子过滤器中,其中第二索引-值表示包括对应于该子过滤器所在的过滤器的第二索引;对第一索引-值表示的值和第二索引-值表示的值进行MAC操作,以获得输出;以及将输出加到由第二索引-值表示的第二索引确定的部分和。
在一些实施例中,多个通道组中的每一个包括相同数量的通道;而多个子过滤器组中的每一个包括相同数量的子过滤器。
在一些实施例中,每个子张量和每个子过滤器包括相同数量的通道。
根据另一个方面,一种用于并行化卷积处理的***,包括一个或多个处理器和一个或多个非暂时性计算机可读存储器,该存储器与一个或多个处理器耦合,并配置有可由一个或多个处理器执行的指令,以使该***执行操作,操作包括:获得输入张量和与输入张量共享多个通道的多个过滤器;将多个通道划分为多个通道组;将输入张量分割成多个子张量,并将多个过滤器根据多个通道组分割成多个子过滤器组;将由子张量和子过滤器组构成的多个组合分别分配给多个处理器,其中,多个组合中的每个组合包括对应于同一通道组的子张量和子过滤器组;由多个处理器中的每个处理器在一个或多个第一索引-值对中存储分配的组合中的子张量的一个或多个非零值,以及在一个或多个第二索引-值对中存储分配的组合中的子过滤器组的一个或多个非零值;由多个处理器并行地执行基于第一索引-值对和第二索引-值对的乘法和累加(MAC)操作,以获得多个输出;以及将多个输出汇总为输出张量。
根据又另一个方面,一种用于并行化卷积处理的非暂时性计算机可读存储介质被配置为具有可由一个或多个处理器执行的指令,以使一个或多个处理器执行操作,操作包括:获得输入张量和与输入张量共享多个通道的多个过滤器;将多个通道划分为多个通道组;将输入张量分割成多个子张量,并将多个过滤器根据多个通道组分割成多个子过滤器组;将由子张量和子过滤器组构成的多个组合分别分配给多个处理器,其中,多个组合中的每个组合包括对应于同一通道组的子张量和子过滤器组;由多个处理器中的每个处理器在一个或多个第一索引-值对中存储分配的组合中的子张量的一个或多个非零值,以及在一个或多个第二索引-值对中存储分配的组合中的子过滤器组的一个或多个非零值;由多个处理器并行地执行基于第一索引-值对和第二索引-值对的乘法和累加(MAC)操作,以获得多个输出;以及将多个输出汇总为输出张量。
本文所公开的***、方法和非暂时性计算机可读介质的这些和其他特征,以及相关结构元素的操作方法和功能,以及部件的组合和制造的经济性,在参照附图对以下描述和所附权利要求进行考虑后将变得更加明显,所有附图构成本说明书的一部分,其中类似的附图标记标明各图中的相对应部分。然而,应明确理解的是,附图仅用于说明和描述的目的,而不旨在作为本发明的限定的定义。
附图说明
图1示出根据各种实施例的示例性卷积神经网络(CNN)。
图2示出根据各种实施例的示例性卷积处理。
图3示出根据各种实施例对输入张量和过滤器进行分割的示例性方法。
图4示出根据各种实施例的卷积处理的示例性并行处理方案。
图5示出根据各种实施例的并行卷积处理的示例性***图。
图6A示出根据各种实施例用于并行卷积处理的处理实体(PE)的示例性***图。
图6B示出根据各种实施例的并行卷积处理的示例性方法。
图6C示出根据各种实施例用于并行卷积处理的示例性***架构。
图7示出根据各种实施例的输入张量和过滤器的示例性索引值表示。
图8A示出根据各种实施例的平行卷积处理的示例性流程图。
图8B示出根据各种实施例的平行卷积处理的另一示例性流程图。
图9示出根据各种实施例用于并行化卷积处理的示例方法。
图10示出示例计算机***,其中可以实现本文所述的任何实施例。
具体实施方式
本文描述的实施例提供了在神经网络中并行化双稀疏卷积处理的方法、***、设备。卷积操作可以指一种基本的但计算成本很高的操作,用于从上一层提取输入数据的特征,如从图像或音频波中得到的特征图,或从神经网络中上一层输出的激活。卷积操作的输入数据可被称为输入张量,而卷积操作的输出可被称为输出张量。输入张量可以包括多个通道的特征图。例如,RGB图像可以表示为具有三个通道(红色通道、绿色通道和蓝色通道)的输入张量,每个通道包括特征图(例如,与原始RGB图像相同大小的灰度图像,但仅由红色、绿色或蓝色中的一种颜色组成)。为了从输入张量中提取特征,一个或多个特征提取器(也称为过滤器)可以以卷积(例如滑动或移动)的方式应用于输入张量。在每个卷积步骤中,可以在特征检测器(过滤器)和输入张量之间进行乘法和累加(MAC)操作。从卷积步骤产生的输出可以随后被组合起来,以形成卷积操作的输出张量。该输出张量可成为神经网络中下一层的输入张量。
在卷积操作中,输入张量和过滤器中的一个或两个可以通过引入大量的零来修剪或稀疏化,以减少计算成本并提高推理速度。例如,输入张量和/或过滤器中超过20%或50%的值可以被设置为零。稀疏化可能会导致双稀疏卷积,其中输入张量和过滤器都被稀疏化,这可能会进一步放大现有***架构在处理稀疏卷积时的无效性。本说明书中的一些实施例通过将稀疏化的输入张量和过滤器有效地存储在存储器中,并在多个处理实体(PE)(例如处理器)上并行化卷积处理,从而利用了稀疏化的优势。
在一些实施例中,输入张量和过滤器首先被分割成子张量和子过滤器组,多个PE中的每一个都可以被分配到一对子张量和子过滤器组来执行本地MAC操作。这种分配保证了分配给不同PE的子张量和子过滤器组构成的对是相互独立的,以便多个PE可以并行地执行本地MAC操作以提高性能。这种分割和并行处理方案也是高度可扩展的。在一些实施例中,每轮并行处理可以产生多个部分和,多个PE可以执行多轮并行处理,以积累每轮产生的部分和,并将累积的结果组装成输出张量。在此,每个PE在多轮中产生的部分和可以直接累积(在每个PE内)以产生输出张量的一部分,而不需要与其他PE交换数据。
在一些实施例中,分配采用权重旋转机制,在每轮并行处理期间,在PE之间旋转子过滤器组的分配。在此,“权重”指的是存储在每个子过滤组中的数据。这种机制提供的好处至少有三层:避免为每个PE同时存储相同的子过滤器组(例如避免多次复制相同的数据);并行化并减少从高层存储器(通常容量较大、但速度较慢)昂贵的记忆读取的次数,以便从所有PE共享的全局缓冲区获得权重;以及允许利用相邻PE之间更快的直接连接通道来执行每两轮并行处理之间的子过滤器组的旋转。
在一些实施例中,每个PE可以通过在每个PE内只存储索引-值对中的非零值,将分配的子张量和子过滤器组存储在能源高效和存储高效的表示中。这些表示可以显著减少神经网络的存储空间,并使该解决方案适用于具有有限存储器资源的装置。例如,本文公开的实施例可应用于边缘计算***中的边缘装置。
在一些实施例中,(在子张量中的)非零输入值的索引-值对可以按照非零输入值所在的通道的通道标识符来索引,而(在子过滤器组中的)非零权重的索引-值对可以按照(1)非零权重所在的通道的通道标识符、和/或(2)非零权重所属的核的核标识符来索引。这样,每个PE可以遍历每个非零输入值,有效地识别并按顺序读取相应的非零权重以执行卷积操作。通过本文公开的方法,卷积过程的性能改进可能与所涉及的输入张量和过滤器的稀疏程度成正比。更高的稀疏性可能导致更小的存储占用和更少的MAC操作。
在下面的描述中,将参照附图对本发明的具体的、非限制性的实施例进行描述。本文公开的任何实施例的特定特征和方面可用于和/或与本文公开的任何其他实施例的特定特征和方面相结合。还应理解的是,这些实施例是以举例的方式,仅仅是说明本发明范围内的少量实施例。对本发明相关领域的技术人员来说,各种变化和修改被认为在本发明的精神、范围和设想之内是显而易见的,如所附权利要求书中进一步限定的那样。
图1示出根据各种实施例的示例性卷积神经网络(CNN)。CNN广泛用于各种应用,包括图像理解、语音识别、游戏、机器人,并可采用包括卷积层在内的深度层次结构,其中发生卷积操作。可以指出的是,CNN仅用于说明目的,本文公开的实施例可应用于涉及卷积操作的其他神经网络。
图1中所示的示例神经网络100包括多个层,如第一卷积层120和第一ReLU(整流线性单元)层、第一池化层130、第二卷积层140和第二ReLU层、第二池化层150、扁平化层160和全连接(FC)层170。这个示例的神经网络100可以被训练成将给定图像中的字母与多个已知的字母类别相匹配。如图1所示,带有字母的图像110被送入神经网络100,并通过多个层进行转换。最后一层(FC层170)最终产生多个分数,代表输入图像110中的字母与每个已知字母类别之间的相似度。
在一些实施例中,输入图像110可以首先被转换为输入张量。作为示例,如果输入图像110包含32*32个像素,每个像素有三个颜色通道(红、绿、蓝),其相应的输入张量的大小为32*32*3,其中高度为32,宽度为32,深度(例如通道数)为3。为了便于描述,该三维尺寸可称为HWC格式,其中H指的是输入张量的高度(例如在前面的图像示例中为32),W指的是输入张量的宽度(例如在前面的图像示例中为32),而C指的是输入张量中的通道数(例如在前面的图像示例中为3)。在一些情况下,如果卷积层有多个输入张量(例如当有多个图像输入到卷积层,或者有多个从上一层收到的输入激活张量),每个输入张量可以用NHWC格式表示,其中N指的是输入张量在该批次输入张量中的索引。在下面的描述中,为了简单起见,可以省略N(例如假设只有一个输入张量),除非另有明确说明。对于本领域技术人员来说,扩展实施例以涵盖N>1的情况可能是显而易见的。
在一些实施例中,CNN可以包括多个卷积层(例如图1中的第一卷积层120和第二卷积层140)。卷积层将输入张量(例如原始输入图像,或来自前一层的输入张量)减少到更容易处理的形式,而不丢失对获得良好预测/分类至关重要的特征。一个或多个特征检测器,例如图像处理中的边缘检测器、曲线检测器,可以参与卷积层的卷积处理。这些特征检测器可以被称为过滤器。每个过滤器可以有与输入张量相同数量的通道。为了便于描述,本说明书使用术语“共享多个通道”来表达每个过滤器和输入张量具有相同数量的通道。例如,输入张量是32*32*3的矩阵,示例的过滤器可以是3*3*3的矩阵。对卷积处理的详细解释可以参考图2的描述。
CNN中的卷积层可跟随有非线性激活函数,以将非线性引入CNN中。示例性的非线性激活函数包括sigmoid、双曲正切和整流线性单元(ReLU)。如图1所示,ReLU函数(也可称为ReLU层)跟随卷积层120和140中的每一个。ReLU函数可以应用元素激活函数来过滤掉由卷积层120或140产生的一些输出(激活)。例如,可以采用max(0,x)函数来过滤掉卷积输出中的所有负激活,只将正激活送入下一层。ReLU函数可以不改变输出激活的大小,但限制活动神经元的数量,因为负激活都被清零了,以提高后续各层的计算效率。
CNN也可以包括一个或多个池化层,以提供各种计算,减少输入张量的维度。在图1中,神经网络100的第一池化层130和第二池化层150可以各自沿空间维度(高度和宽度)对输入张量进行下采样操作,但通常不改变深度维度(例如通道的数量)。
神经网络中的全连接(FC)层可以学***化层160中)被扁平化成向量,由此该空间中的固有非学习函数可以由FC层170学习,以计算多个类的最终分数。每个分数可以代表输入图像中的字母与相应类别之间的量化相似性。
图2示出根据各种实施例的示例性卷积处理。图2中的卷积处理220涉及输入张量222、过滤器224、和输出张量225。输入张量222可以用其高度(H)、宽度(W)和通道数量(C)来表示。如图2所示,输入张量222可以是3*3*3的矩阵,其中高度为3,宽度为3,通道数量为3。每个通道中的输入张量222的高度和宽度(例如3(H)*3(W))可以被称为二维输入特征图。{h,w,c}的元组可以指向通道c中的二维输入特征图的一个元素。例如,{2,1,1}可以指向通道1中的二维输入特征图的元素,其位置由{2,1}限定(例如高度方面的索引是2,宽度方面的索引是1)。过滤器224可以用其高度(R)、宽度(S)和通道数量(C)来表示。在图2中,过滤器224可以是1*1*3的矩阵。过滤器224在每个通道中的高度和宽度(例如1(R)*1(S))可以被称为核(过滤器224在三个通道中分别有三个核)。
在一些情况下,卷积处理可能涉及跨度和填充。例如,当跨度为1时,过滤器每次卷积(如移动、滑动)一个像素;而当跨度为2时,过滤器在滑动时每次卷积两个像素。较大的跨度会产生空间上较小的输出张量(输出张量中的H*W较小)。作为另一个示例,当过滤器的空间大小(高度*宽度)大于1*1(例如3*3,或5*5)时,输入张量可以在其边界周围填充零,以便应用过滤器并控制输出张量的空间大小,例如以保留输入张量的空间大小,从而使输入和输出的高度和宽度相同。在图2中,假设没有对输入张量222进行填充,并且跨度为1。
在图2所示的卷积处理220期间,对过滤器224和输入张量的每个深度切片、例如第一深度切片223,进行MAC操作,以产生点积,例如点积228。例如,输入张量222的第一个深度切片223是输入张量222左上方的1*1*3张量(三个灰色立方体)。第一深度切片223和过滤器224的大小都是1*1*3。在MAC操作之后,生成的点积228可以作为输出张量225的一部分被组装起来。因此,输出张量225可以在过滤器224通过输入张量222中的所有深度切片(图2中的9个切片)进行卷积(例如移动)后确定。输出张量225中的通道数量等于卷积过程中应用的过滤器数量。由于卷积处理220只使用一个过滤器224,相应的输出张量228只有一个通道。
相比之下,卷积处理260涉及两个过滤器264和265。凭借通过输入张量262对过滤器264进行卷积,可以确定第一通道中的输出张量268的值(例如通道1中的二维输出特征图)。凭借通过输入张量262对过滤器265进行卷积,可以确定第二通道中的输出张量268的值(例如通道2中的二维输出特征图)。相应地,所得的输出张量268包括两个通道的二维输出特征图。
可以注意到,卷积处理过程中的一些操作可以被并行化。例如,对一个过滤器进行的MAC操作与另一个过滤器的操作是独立的,因为不同的过滤器为不同的输出通道产生二维输出特征图。作为另一示例,输入张量中的深度切片是相互独立的,因为它们为每个二维输出特征图的不同位置生成数值。如果所有这些操作都能在多个处理实体(如处理器、核或线程)之间并行化,就可以实现理论上的理想并行性。然而,由于现实世界的应用可能有大量的过滤器和大量的输入张量,追求理论上的理想并行性可能需要具有无法实现的计算能力的硬件(例如具有巨大数量的处理实体和内存交换机制)。下面公开的实施例提供了一种方法(以及相应的***、存储介质),通过充分利用给定硬件的并行处理能力来实现理想的并行性,这是一种更可扩展的实用方法。
图3示出根据各种实施例对输入张量和过滤器进行分割的示例性方法。如上所述,每个输入张量(322或325)和每个过滤器(342、344、346或348)共享多个通道(即,具有相同数量的通道)。在一些实施例中,分割输入张量的过程可以包括将每个输入张量沿其高度维度、宽度维度和深度维度分割成多个子张量。通过沿其深度维度分割诸如322的输入张量,输入通道(例如输入张量的通道)被分割成多个通道组324,每个通道组324包括若干个通道。在一些实施例中,每个过滤器可以类似地沿着其深度维度被分割成根据多个通道组324的多个子过滤器。也就是说,输入张量的每个子张量和过滤器的每个子过滤器都包括相同数量的通道。
根据本说明书的一个方面,输入张量的分割过程可以描述为以下步骤:将多个通道划分为多个通道组,并根据多个通道组将输入张量分割为多个子张量。在特定的示例中,输入张量可以沿着其深度维度被分割成大小相同的多个组,即具有相同的数量通道,表示为Cg(即每组通道)。在一些实施例中,输入张量的分割过程可进一步包括:对输入张量沿其高度维度和宽度维度进行分割。在分割后,每个子张量包括(通过沿高度维度分割输入张量)表示为Hg的高度、(通过沿宽度维度分割输入张量)表示为Wg的宽度、以及(通过沿深度维度分割输入张量)等于Cg的通道数量。
参照图3,每个输入张量(322或325)的大小为3*3*6。6个通道首先被分为3组,每组包括2个通道(Cg=2),其中组1包括通道0至1,组2包括通道2至3,组3包括通道4至5。基于通道组,输入张量322被分割成27个子张量,每个子张量的大小为1*1*2(例如高度为1、宽度为1、通道数量为2)。图3中的子张量323用四元组323A{Ng_1,Hg_1,Wg_1,Cg_1}表示,其中Ng_1指的是该批次输入张量中的第一个输入张量,成对的Hg_1和Wg_1指的是输入张量中每个二维输入特征图的左上角位置,而Cg_1指的是第一通道组324。
在一些实施例中,一旦确定每个通道组324中的通道数量(即,在多个通道被划分为通道组之后),分割多个过滤器可以包括以下步骤:(分组步骤)将多个过滤器分组为多个过滤器组;(分割步骤)根据多个通道组将多个过滤器中的每一个分割为多个子过滤器;以及(确定步骤)将同一过滤器组和同一通道组的子过滤器确定为一个子过滤器组。在一些实施例中,每个过滤器组包括相同数量的过滤器,因此每个子过滤器组包括相同数量的子过滤器。在一些情况下,最后一个过滤器组可能包括较少数量的过滤器,因此从最后一个过滤器组得出的每个子过滤器组可能包括较少数量的子过滤器。
回到图3,在四个过滤器342、344、346和348中,每个过滤器的大小为1*1*6(即,输入张量322或325和多个过滤器共享6个通道)。在分组步骤中,四个过滤器342、344、346和348可以被分成多个组,例如过滤器组1(343)包括两个过滤器(342和344),过滤器组2(347)包括两个过滤器(346和348)。在分割步骤中,四个过滤器342、344、346和348中的每一个都根据通道组324的大小被分割成多个子过滤器。仍然使用与上面相同的示例,即每个通道组324包括两个通道,每个1*1*6的过滤器可以被分割成三个子过滤器,每个子过滤器包括两个通道。最后,在确定步骤中,同一过滤器组和同一通道组的子过滤器被确定为一个子过滤器组。如图3所示,子过滤器组1(345)包括来自过滤器组1(343)和第一通道组324的两个子过滤器;子过滤器组2(349)包括来自过滤器组2(347)和第一通道组324的两个子过滤器。可以理解的是,上述的分组步骤和分割步骤可以以任何顺序或并行进行。图3所示的示例中的小数字(例如,输入张量和过滤器的数量,每个输入张量和每个过滤器的大小)只是说明性的,为了简单起见,本领域技术人员可能显而易见地将所描述的分割过程扩展到具有更大数字的场景。
图4示出根据各种实施例的卷积处理的示例性并行处理方案。如上所述,神经网络内卷积层的卷积处理可能涉及对一批次的输入张量和多个过滤器进行MAC操作。并行地执行这些MAC操作可以极大地提高神经网络的通量和性能。
在一些实施例中,一旦输入张量和过滤器被分割(图3中示出示例),相应的卷积处理可以以各种方式并行化。示例性的并行处理配置可能涉及(1)按顺序处理每个通道组;(2)对于每个通道组,使用多个处理实体对来自该通道组的子张量和子过滤器组并行执行卷积,每个处理实体处理一个子张量和一个子过滤器组;以及(3)在每轮并行处理后累积来自多个处理实体的输出。
这种示例性配置在图4中得到说明,其中由子张量和子过滤器组构成的多个组合被分别分配给多个处理器,其中多个组合中的每个组合包括对应于同一通道组的子张量和子过滤器组。例如,第一轮(410)处理来自覆盖通道1和通道2的第一通道组的子张量和子过滤器组,第二轮(420)处理来自覆盖通道3和通道4的第二通道组的子张量和子过滤器组。在图4中,只有通道1和3的二维输入特征图被标注在图4中,通道2和4的二维输入特征图没有被标注。在每一轮中,可以确定子张量(例如输入子标尺)和子过滤器组的多个组合,并并行地分配给多个处理实体以执行MAC操作。
以图4中的第一轮(410)为例,子张量(412)和子过滤器组1(414)可形成第一组合,由第一处理实体处理,而子张量(412)和子过滤器组2(416)可形成第二组合,由第二处理实体处理。由处理第一组合的第一处理实体产生的输出是部分和,其可以汇总并组装到对应于子过滤器组1(414)中的过滤器的输出通道中;而由处理第二组合的第二处理实体产生的输出是部分和,其可以汇总并组装到对应于子过滤器组2(416)中的过滤器的输出通道中。由于不同的过滤器被映射到不同的输出通道,第一组合和第二组合是相互独立的,可以并行处理。类似地,由子张量(413)和子过滤器组1(414)组成的第三组合可以由第三处理实体处理。由第三处理实体产生的输出是部分和,将被汇总并组装到对应于子过滤器组1(414)中的过滤器的输出通道中。可以理解的是,由第一处理实体产生的部分和和由第三处理实体产生的部分和被映射到同一二维输出特征图上的不同位置。因此,第三组合也是独立于第一和第二组合的,因此可以并行处理。
除了图3中所示的示例性并行处理配置外,替代性配置也可能是可行的。另一个示例性配置可以包括:依次迭代子过滤器组;对于每个子过滤器组,确定多个组合,每个组合包括子过滤器组和来自同一通道组的子张量,且并行处理该多个组合。又另一个示例配置可以包括:在输入张量的二维特征图上依次迭代每个特征图位置(由高度索引和宽度索引确定);对于每个特征图位置,确定多个组合,每个组合包括与特征图位置相关联的子张量和来自同一通道组的子过滤器组,且并行处理多个组合。
图5示出根据各种实施例的并行卷积处理的示例性***图。图5中所示的架构包括计算机***,其被设计为在神经网络加载和运行时执行推理。在一些实施例中,这样的计算机***被实现为硬件加速器500。硬件加速器500中的一些组件可以以特定的方式协作,通过促进在多个处理实体上的并行卷积计算来提高神经网络的通量和能源效率。加速器500仅仅是说明性的,并且可以包括更多、更少或替代性的组件。硬件加速器500可以设计成可重新配置的装置,如现场可编程门阵列(FPGA),或特定应用集成电路(ASIC)。
如图5所示,硬件加速器500可包括调度器570,以控制加速器500内的工作流程以及与片外组件如主机CPU510和双数据速率(DDR)存储器520的交互。例如,加速器500可以通过***组件互连表达(PCIe)物理层(PHY)控制器512与主机CPU510交互,并通过DDR接口530与片外DDR存储器520交互。加速器500可以通过直接存储器访问(DMA)控制器540从片外DDR存储器520提取数据,该控制器通过DDR接口530与片外DDR存储器520通信。提取的数据可以存储在片上缓冲器中,称为全局缓冲器550,以便为并行卷积计算做准备。全局缓冲器550在逻辑上可分为多个部分,如输入缓冲器552、权重缓冲器554和输出缓冲器556。输入缓冲器552可以存储与输入张量相关联的数据,权重缓冲器554可以存储与过滤器相关联的数据,而输出缓冲器556可以存储与卷积计算的结果(例如输出张量)相关联的数据。全局缓冲器550可以与稀疏处理单元(SPU)562的阵列560交换数据,以进行卷积计算。SPU名称中的“稀疏”表示SPU阵列560被专门设计为有效地执行涉及稀疏性的卷积计算(例如稀疏输入张量和/或稀疏过滤器)。每个SPU562可以包括多个处理实体(PE)600,其中每个PE600可以处理单位量的卷积计算(例一个PE600可以对一个子张量和一个子过滤器组进行MAC操作)。
图6A示出根据各种实施例用于并行卷积处理的处理实体(PE)600的示例性***图。图6A中的PE600可以包括各种组件,包括存储与输入子张量相关联的数据的I-缓冲器620,存储与子过滤器组相关联的数据的W-缓冲器630,乘法器640(MUL)和累积缓冲器(Accum-缓冲器)650。图6A中的组件是示例性的,根据实施情况,PE600可以包括更多、更少或替代性的组件。
如图6A所示,PE600可以从I-缓存610提取数据到其I-缓冲器620。I-缓存610可以指与PE600所在的一个SPU562(在图5中)相关联的缓存。例如,SPU562可以从全局输入缓冲器552(在图5中)中提取一个或多个输入子张量到其I-缓存610中,以在其中执行并行卷积计算。随后,SPU562内的每个PE600可以例如一次提取一个子张量到其I-缓冲器620中进行处理。
在一些实施例中,与其从I-缓存610中提取整个子张量到I-缓冲器620中,不如只提取子张量中的非零输入值。这样,稀疏张量(因此是稀疏子张量)可以以紧凑的格式存储在I-缓冲器620中,并显著减少其存储器占用。在一些实施例中,子张量的每个非零输入值可以表示为索引-值对,其中索引对应于非零输入值所在的通道,而值包括非零输入值。例如,如果1*1*16(有16个通道)的子张量只有一个位于通道3的非零输入值X,则该子张量在I-缓冲器620中的表示可以是{3,X}。在一些实施例中,一个SPU562的I-缓存610可以由相邻的PE600共享。例如,如果过滤器中的核大小为X*X,X>1,且跨度大小小于X,则可在多个子张上进行卷积计算(例如当过滤器跨越多个子张量时)。也就是说,在一个PE600提取一个子张量后,它可能需要提取相邻子张量的一些数据来执行MAC操作。
类似地,PE600中的W-缓冲器630可以只存储与I-缓冲器620中的输入子张量相对应的子过滤器组的非零权重(即,来自同一通道组的子过滤器组和输入子张量)。这样,稀疏子过滤器组可以以紧凑的格式存储在W-缓冲器630中,并显著减少其存储器占用。在一些实施例中,如果在子过滤器组内的子过滤器中存在非零权重,则非零权重可表示为索引-值对,其中索引包括对应于非零权重所在的通道的第一标识符,以及对应于该子过滤器所属的过滤器的第二标识符。例如,如果子过滤器组包括两个1*1*16的子过滤器:子过滤器1,其属于过滤器A并且包括通道5中的一个非零权重X,以及子过滤器2,其属于过滤器B并且包括通道3中的一个非零权重Y,那么该子过滤器组可以在W-缓冲器630中存储为{5,A,X}和{3,B,Y}。
在一些实施例中,由于子张量和子过滤器组中的非零值被存储为索引-值表示,PE600可以通过以下方式执行MAC操作:获得与处理器相关联的子张量中的第一非零值的第一索引-值表示,其中第一索引-值表示包括对应于第一非零值所在的第一通道的第一索引;基于第一索引,获得第二非零值的第二索引-值表示,第二非零值位于第一通道中并且在与处理器相关联的子过滤器组的子过滤器中,其中第二索引-值表示包括对应于该子过滤器所在的过滤器的第二索引;对第一索引-值表示的值和第二索引-值表示的值进行MAC(乘法和累加)操作,以获得输出;以及将输出加到由第二索引-值表示的第二索引确定的部分和。
例如,PE600可以迭代I-缓冲器620中的非零输入值(以索引-值对表示)。对于每个非零输入值,索引i(非零输入值的索引)可用于在W-缓冲器630中查找相应的非零权重以执行乘法。indexi仍然使用上述示例,对于存储在I-缓冲器620中的非零输入值{3,X},索引3(通道标识符)被用来在W-缓冲器630中查找相应的非零权重。在W-缓冲器630中的{5,A,X}和{3,B,Y}之间,{3,B,Y}可以被确定,因为它是由通道标识符3索引的。
在确定了相应的非零权重后,来自I-缓冲器620的输入张量的非零输入值和来自W-缓冲器630的非零权重可以在MUL640中相乘以产生结果。然后,这个结果可以被添加到存储在Accum-缓冲器650中的现有的部分和。现有的部分和可以根据非零权重的索引-值表示中的第二标识符来定位。例如,在非零输入值{3,X}和非零权重{3,B,Y}被确定后,MUL640可以计算出乘积为X*Y,并将该乘积发送到Accum-缓冲器650进行累加。Accum-缓冲器650可以根据过滤器标识符B查找相应的部分和,并将乘积X*Y累积(例如添加)到相应的部分和。
图6B示出根据各种实施例的并行卷积处理的示例性方法。图6B中的流程图演示了用于全局输入缓冲器(如图5中的552)、全局权重缓冲器(如图5中的554)、I-缓存或输入缓存(如图6A中的610)和PE(如图6A中的600)彼此互动的示例性方法670。包括在图6B中的方法670中的步骤是说明性的,可以包括更多、更少或替代的步骤,这取决于实施情况。
在步骤671中,全局输入缓冲器中的数据被划分为多个段。在此,全局输入缓冲器中的数据可以指从片外DDR存储器(如图5中的520)提取的输入张量。输入张量可以被分割成多个子张量,如图3所示。在一些实施例中,每个SPU(如图5中的562)可以被分配到多个子张量的一部分来处理。被分配的子张量可以存储在与SPU相关联的I-缓存中,并且I-缓存由多个处理器中的一个或多个共享。在一些实施例中,多个通道组中的每一个包括多个子张量中的一个或多个,并且多个子张量中的每一个与识别子张量在该子张量所在的通道组中的位置的标识符相关联,并且存储在I-缓存中的子张量可以与多个通道组中的相同标识符相关联。
在步骤672和步骤673中,每个SPU可以在其I-缓存中迭代遍历所分配的子张量,并且当迭代到达子张量的终点(所有子张量都被处理)时,在步骤680停止方法670。在迭代的同时,SPU可以将子张量分配给多个PE进行并行处理。
在步骤674中,每个PE可以迭代遍历所分配的子张量的非零输入值,其中非零输入值被表示为索引-值对。通过检查是否所有的非零输入值在步骤675被列举出来,PE可以停止迭代并回到步骤672将下一个子张量提取到其I-缓存中进行处理。
在步骤676中,用于非零输入值的索引-值对的索引部分可用于从全局权重缓冲器中提取权重(过滤器中的值)到PE的W-缓冲器。如图6A所述,用于非零输入值的索引-值对的索引部分可包括与非零输入值所在的通道相对应的通道标识符。基于这个通道标识符,可以提取相应的过滤器(来自由该通道标识符识别的同一通道)。权重提取过程可以以各种方式实现。在一些实施例中,可以创建权重缓冲器头,以方便查找过滤器内的非零权重。权重缓冲器头可以包括诸如过滤器的第一非零权重的地址(作为起始地址),以及代表过滤器中非零权重数量的长度。由于所有的非零权重都是连续存储的,起始地址和相应的长度可以指示权重提取器执行有效的批量存储器读取,而不需要为每个非零权重进行查找。
在步骤677中,每个非零权重(索引-值对)被迭代,以找到与非零输入值相同通道的权重。当迭代在步骤678达到结束时,下一个非零输入值可以被提取到I-缓存中以开始下一次迭代。
在步骤679中,一旦来自同一通道的非零输入值和非零权重被识别,PE可以计算非零输入值和非零权重的乘积,并将该乘积累积到累积缓冲器。
图6C示出根据各种实施例用于并行卷积处理的示例性***架构。图示的***架构展示了稀疏处理单元(SPU)6000和处理实体(PE)6200内的组件以及组件之间的相互作用。根据实施情况,***架构可以包括更多、更少或替代的组件。
在一些实施例中,SPU6000可以包括I-缓存6100,其将输入张量的非零输入值存储为多个索引-值对。例如,在输入张量被分割成多个子张量后,如图3所示,每个通道组可以包括多个子张量,并且每个子张量可以与标识符(如N*Hg*Wg)相关联,标识子张量在通道组中的位置。在这种情况下,与来自多个通道组的相同标识符相关联的子张量可被存储到SPU6000的I-缓存6100中,其中I-缓存6100可被SPU6000内的一个或多个相邻的PE6200访问。
在一些实施例中,子张量的非零输入值可以通过以下方式存储为索引-值对:迭代子张量的每个输入值以识别一个或多个非零输入值;对于一个或多个非零输入值中的每一个:确定对应于非零输入值所在的通道的通道标识符;并将通道标识符和非零输入值存储为第一索引-值对。
如上所述,一个SPU6000可以包括多个PE6200,这些PE以类似的方式工作,除了用从I-缓存6100提取的不同数据工作。参照图6C,图示的PE6200可以从I-缓存6100中提取一个或多个索引-值对到其I-缓冲器6220中,其中提取的索引-值对可以是来自同一子张量。在一些实施例中,PE6200还可以将来自子过滤器组的非零权重存储在W-缓冲器6230中,其中子过滤器组对应于子张量,即,子过滤器组和子张量来自同一通道组。
在一些实施例中,子过滤器组的非零权重可以通过以下方式存储为索引-值对:迭代子过滤器组中的每个权重以识别一个或多个非零权重;对于一个或多个非零权重中的每一个:确定对应于非零权重所在的通道的通道标识符;以及将通道标识符和非零权重存储为第二索引-值对。在一些实施例中,可通过以下方式将非零权重存储在多级存储器层次中:迭代子过滤器组中的每个权重以识别一个或多个非零权重;对于该一个或多个非零权重中的每一个:确定与非零权重所在的通道相对应的通道标识符;确定与非零权重所属的核相对应的核标识符;以及在由通道标识符索引的权重缓冲器头中存储指针,该指针指向存储在权重缓冲器阵列中的第二索引-值对,其中第二索引-值对包括非零权重并由核标识符索引。
例如在图6C中,W-缓冲器6230包括W-缓冲器头6232和W-缓冲器阵列6234。W-缓冲器头6232中的每个条目包括指向W-缓冲器阵列6234中的偏移量的起始地址,以及指示从起始地址开始存储在W-缓冲器阵列6234中的子过滤器组的非零权重的数量的长度。W-缓冲器头6232中的<起始地址,长度>条目中的每一个都对应于通道(子过滤组中的通道可以包括多个核),并且可以基于相对应的通道标识符来定位。也就是说,起始地址指向存储在W-缓冲器阵列6234中的第一非零权重,该权重在子过滤器组中和相应的通道中。W-缓冲器阵列6234中的每个条目可以包括(K,W)对,表示来自核K的非零权重W,其中K是核标识符。例如,(K1,W1)指的是子过滤器组中和相应通道中的第一非零权重,第一非零权重来自核1,值为W1。在(K1,W1)之后,来自子过滤器组和相应通道的其余非零权重(可以来自不同的核)可以被连续地存储在W-缓冲器阵列6234中。例如,图6C中的(Kg,Wg)可以指子过滤器组和相应通道中的最后一个非零权重,而最后一个非零权重来自核g、具有Wg。
在一些实施例中,PE6200可以保留A-缓冲器6250来存储部分和,每个部分和对应于一个核。这些部分和可以按照核标识符来索引。例如,对应于核1的部分和可以按照K1索引,对应于核g的部分和可以按照Kg索引。
在一些实施例中,PE6200可以在其I-缓冲器6220中迭代遍历一个或多个索引-值对。对于每个索引-值对,PE6200可以基于索引搜索W-缓冲器头6232,以找到<起始地址,长度>条目。基于<起始地址,长度>条目,PE6200可从W-缓冲器阵列6234中按顺序提取(K,W)对,从由起始地址确定的偏移量开始,提取“长度”周期数。每个提取的(K,W)包括核标识符和非零权重。非零权重和非零输入值可被送入乘法器6240以确定乘积。同时,PE6200可以根据核标识符从A-缓冲器6250中检索出部分和。随后,检索到的部分和与乘积可以在Accum-缓冲器6260中累积,以获得新的部分和,新的部分和可以被存储回Accum-缓冲器6260中,并通过核标识符进行索引。
图7示出根据各种实施例的输入张量和过滤器的示例性索引值表示。在图7中,输入张量720可以理解为从输入张量中分割出来的输入子张量,而过滤器740可以理解为过滤器、子过滤器或子过滤器组。输入张量720和过滤器740被推定为来自由多个通道组成的同一通道组。输入张量720包括每个通道的5*5二维输入特征图,而过滤器740包括每个通道的3*3核。输入张量720和过滤器740可以在一个PE内处理。
如图7所示,输入张量720和过滤器740被假定为极其稀疏,在通道0和核0(通道0中的过滤器740的核)中各只有一个非零值。为简单起见,下面的描述假定输入张量720中的所有其他通道和过滤器740中的所有其他核都只有零。输入张量720通道0中的非零输入值3位于位置{1,2}(假设高度索引和宽度索引从0开始)。过滤器740通道0的核0中的非零权重4位于位置{0,1}。
在一些实施例中,输入张量的非零值可以通过以下方式存储为索引-值对:识别子张量中的一个或多个非零输入值;对于该一个或多个非零输入值中的每一个:确定对应于非零输入值所在的通道的通道标识符;并将该通道标识符和非零输入值存储为第一索引-值对。例如,输入张量720中的非零输入值3可以表示为索引-值对,其中索引是非零输入值所在的通道(在此是通道0),而值是非零输入值(在此是3)。索引可用于从同一通道(即通道0)查找过滤器740中的相应的核,而值可用于生成乘积。在一些实施例中,非零输入值的位置信息也可能是确定在哪里累积乘积所必需的。这种位置信息可以明确地包括在相应的索引-值对表示中,或者隐含地作为PE执行的迭代过程的一部分获得。在一些实施例中,输入张量720中的零输入值可被存储为NULL指针(即,零值不被存储)。这些NULL指针可能不会消耗实际值的存储空间,除了用于存储指针本身的几个字节(例如,32位***上的4个字节或64位***上的8个字节)。如图7所示,输入张量720的通道0可以被存储为稀疏表示722。在另一个实施例中,输入张量720中的零输入值可以完全不被存储,而非零输入值(例如输入张量720的通道0中的{1,2})的位置信息可以明确地包括在索引-值对表示中。在又另一个实施例中,如果PE在其迭代期间保持计数器,则可以确定隐含的位置信息。在这种情况下,假设PE从通道1中二维输入特征图的位置{0,0}开始迭代,计数器设置为1,它将在步骤8遇到非零输入值3。根据计数器值和二维输入特征图的大小(高度和宽度是已知的),可以确定非零输入值在通道1的二维输入特征图中的位置为{1,2}。
在一些实施例中,子过滤器组的非零权重可以通过以下方式存储为索引-值对:识别子过滤器组中的一个或多个非零权重;对于该一个或多个非零权重中的每一个:确定对应于非零权重所在的通道的通道标识符;以及将通道标识符和非零权重存储为第二索引-值对。例如,过滤器740中的非零权重可以表示为索引-值对,其中索引包括非零权重所在的通道(在此是通道0),而值包括非零权重(在此是4)。当PE寻找对应于非零输入值的核时,可以使用该索引。当非零权重的索引和非零输入值的索引相匹配时(意味着它们来自同一个通道),相应的核就被找到了。在一些实施例中,非零权重的索引-值对的索引可以进一步包括核标识符。核标识符表示非零权重所属的核,并可用于识别/定位非零输入值与非零权重的乘积应被累积到的部分和。
在一些实施例中,子过滤器组的非零权重可以通过以下方式存储为索引-值对:识别子过滤器组中的一个或多个非零权重;对于该一个或多个非零权重中的每一个:确定与非零权重所在的通道相对应的通道标识符;确定与非零权重所属的核相对应的核标识符;以及在权重缓冲器头中存储由通道标识符索引的指针,该指针指向存储在权重缓冲器阵列中的第二索引-值对,其中第二索引-值对包括非零权重并由核标识符进行索引。也就是说,非零权重可以在两个层级上进行索引,其中第一层级是根据通道标识符进行索引,第二层级是根据核标识符进行索引。在图6C所示的示例中,非零权重首先根据通道标识符在权重缓冲器头中被索引,权重缓冲器头中的条目指向权重缓冲器阵列,其中实际的非零权重被存储并由核标识符索引。在一些实施例中,过滤器740的零权重可以被存储为NULL指针,除了指针本身的几个字节外,不消耗任何存储空间。如图7所示,过滤器k740的通道0(也可称为核0)可被存储为稀疏表示742,其中非零权重4被存储在位置(0,1),而其他零权重被存储为NULL指针。
在对输入张量720和过滤器740进行MAC操作后,可以确定输出张量760。由于图7中只有一个过滤器740,输出张量760只有1个通道(输出张量760中的通道数量等于过滤器740的数量)。假设卷积处理的跨度是1,没有零填充,稀疏表示722中位置{1,2}的非零输入值3和稀疏表示742中位置{0,1}的非零权重4可以产生12的乘积,该乘积被置于输出张量760的位置{1,1}。与稀疏表示722和742类似,输出张量760也可以被存储在稀疏表示762中,其中只有非零值被存储为索引-值对,而零值被存储为NULL指针。在图7所示的示例中,代表输出张量760的稀疏表示762可以通过对输入张量720中通道0的稀疏表示722和过滤器740中通道0的稀疏表示742执行卷积而得到。
图8A示出根据各种实施例的平行卷积处理的示例性流程图。如上所述,卷积计算可以以各种方式并行化。图4中描述了一种示例性的并行化配置,其中通道组被按顺序处理,对于每个通道组,使用多个处理实体并行处理MAC操作。图8A中的流程图示出对应于图4中描述的并行化配置的详细过程。
如图所示,示例的输入张量802的大小为1*3*6,即高度为1,宽度为3,通道数量为6。在分割过程中,6个通道被分为3个通道组,输入张量802沿其高度维度、宽度维度和深度维度(根据通道组)被分割为多个子张量。如图8A所示,每个子张量的大小为1*1*2,即高度为1,宽度为1,通道数量为2。输入张量802被分割成9个子张量,每个子张量可以表示为Ix,y,其中x指输入张量中二维输入特征图上的位置,y指通道组索引。例如,I1,1指的是在二维输入特征图的位置1(对应于特征图上的{0,0})和第一通道组中的子张量,I1,2指的是在二维输入特征图的位置1和第二通道组中的子张量,I3,3指的是在二维输入特征图的位置3(对应于特征图的{0,2})和第三通道组中的子张量。
为简单起见,图8A中只示出了一个过滤器804,其大小为1*1*6。根据输入张量802的通道分割,过滤器804被分割成三个1*1*2的子过滤器。由于本例中只有一个过滤器804,每个子过滤器形成一个子过滤器组,表示为Wy,k,其中y指子过滤器组所属的通道组,k指过滤器804本身的标识符。例如,W1,k指的是在通道组1中且属于过滤器k(在此是过滤器804)的子过滤器组。
在输入张量802和过滤器804被分割后,子张量和子过滤器组被分配给多个PE进行多轮并行处理。图8A示出将子张量和子过滤器组分配给多个PE的两种方法:一种是朴素方法820,另一种是权重旋转方法810。在这两种方法中,每轮并行处理使用三个PE,每个PE处理来自同一通道组的三个子张量中的一个。
在朴素方法820中,在第一轮并行处理期间(t=1),PE1、PE2和PE3处理来自第一通道组的子张量,并分别被分配到I1,1*W1,k、I2,1*W1,k和I3,1*W1,k。也就是说,同一个子过滤器组W1,k被PE1、PE2和PE3用来生成MAC结果。在此,“*”指的是MAC操作。在第二轮并行处理期间(t=2),PE1、PE2和PE3处理来自第二通道组的子张量,并分别被分配到I1,2*W2,k、I2,2*W2,k和I3,2*W2,k。也就是说,同一个子过滤器组W2,k被PE1、PE2和PE3用来生成MAC结果。类似地,在第三轮并行处理期间(t=3),PE1、PE2和PE3处理来自第一通道组的子张量,并分别被分配到I1,3*W3,k、I2,3*W3,k和I3,3*W3,k。也就是说,同一个子过滤器组W3,k被PE1、PE2和PE3用来生成MAC结果。在三轮并行处理之后,由PE1产生的MAC结果可以累积起来,以产生输入张量802的第一(左边)1*1*6张量与1*1*6过滤器804的点积A1,k(下一个NN层的激活)。类似地,由PE2产生的MAC结果可被累积以产生输入张量802的第二(中间)1*1*6张量与1*1*6过滤器804的点积A2,k,而由PE3产生的MAC结果可被累积以产生输入张量802的第三(右边)1*1*6张量与1*1*6过滤器804的点积A3,k。这些点积可以随后被组装成输出张量830。
在一些实施例中,图8A中的权重旋转方法810可以包括以下步骤:进行一次或多次迭代的并行处理,每次迭代包括:确定由子张量和子过滤器组构成的多个组合,其中多个组合分别对应于多个通道组;以及分别将多个组合送入多个处理器以生成多个点积。在此,“一次或多次迭代”可以根据通道组数量来确定(即每个通道组由一次迭代来处理),并且多个处理器可以指图5和图6中的多个PE600。在一些实施例中,“将多个组合送入多个处理器”可以遵循权重旋转方法,该方法为每次迭代旋转多个PE上的权重分配。权重旋转方法可包括以下步骤:在一次或多次迭代的第一迭代期间,确定由M个组合构成的第一集合,包括从M个通道组中的第i个通道组的由子张量和子过滤器组构成的第i个组合,其中1<=i<=M;以及在一次或多次迭代的第二迭代期间,确定由M个组合构成的第二集合,包括来自M个通道组中的第(i+1)个通道组的由子张量和子过滤器组构成的第i个组合,其中1<=i<M,以及来自M个通道组中的第1个通道组的由子张量和子过滤器组构成的第M个组合。
如图8A所示,在使用权重旋转方法810的第一轮并行处理(t=1)期间,PE1、PE2和PE3处理来自所有三个通道组的三个子张量,并分别分配有I1,1*W1,k、I2,2*W2,k和I3,3*W3,k。在第二轮并行处理(t=2)期间,分配给PE1、PE2和PE3的权重被旋转(图8A中的左旋转)。如图8A所示,当t=2时,PE1、PE2和PE3分别被分配到I1,2*W2,k、I2,3*W3,k和I3,1*W1,k。类似地,当t=3时,PE1、PE2和PE3分别被分配到I1,3*W3,k、I2,1*W1,k和I3,2*W2,k。也就是说,在第一轮中,一个子过滤器组被分配到PEx,在第二轮中被旋转到PEx-1,在第三轮中被进一步旋转到PEx-2。在三轮并行处理之后,由PE1、PE2和PE3中的每一个产生的MAC结果可以被累积以产生点积。这些点积可以随后被组装成输出张量830。
在朴素方法820和权重旋转方法810的比较中,朴素方法820可能需要在每一轮并行处理期间为三个PE复制三次相同的权重(即相同的子过滤器组),并且在每一轮之后,三个PE可能需要从更高层级的存储器(例如从图5中的片外DDR存储器520或图6A中的I-缓存610)提取下一个权重。由于这三轮是按顺序进行的,所以这些权重是按顺序从更高层级的存储器中提取的。从更高层级的存储器中访问数据通常是昂贵而缓慢的。相比之下,权重旋转方法810可以在第一轮并行处理期间提取所有三个权重。这个存储器提取步骤可并行执行(例如每个PE读取其分配的权重)。对于接下来的各轮,权重在各PE之间旋转,而不是从高层级存储器中提取。由于在PE之间旋转权重是在较低层级的存储器***中进行的,它可以产生更快的速度和更少的能源成本。在一些实施例中,相邻的PE可以通过直接通道连接以交换缓存数据,这可以进一步促进权重旋转。
图8B示出根据各种实施例的平行卷积处理的另一示例性流程图。图8B中的流程图是图8A中权重旋转方法的一般化版本。在这个示例中要执行的MAC操作涉及成批次的输入张量(包括N个输入张量)和过滤器组,其中每个输入张量沿其深度维度和高度/宽度二维维度进行分割,而过滤器组沿其深度维度进行分割。每个输入张量的通道被分割成多个通道组,表示为Gc(通道组或通道组数量),每个Gc包括Cg(每组的通道)通道;而输入张量的二维输入特征图被分割成Gh*Gw(高度组*宽度组)段;过滤器组的通道类似地根据多个通道组Gc进行分割。以图3中的3*3*6输入张量322和325为例,经过图3中说明的分割,输入张量322的6个通道被分割成3组(例如Gc为3),输入张量322的二维输入特征图被分割成3*3(例如Gh为3并且Gw为3)段。
通过上述表示,对N个输入张量和过滤器组进行的MAC操作所产生的总和数量为B=N*Gh*Gw。从形式上看,这些和可以用以下公式表示:
其中m是指Gc(通道组数量),i是指B个和的第i个和,j是指m个通道组中的第j个通道组,k是指过滤器组的标识符,l是指由i和j识别的子张量,w是指由j和k识别的子过滤器组,A是指以i和k为索引的和(例如激活,其将被置于输出张量的通道k的二维特征图中的位置i)。
在一些实施例中,并行卷积处理可以从将个和分为多个组开始,每组包括(生成)m个和。m为了生成m个和,可以执行m轮并行处理。mm在每一轮并行处理过程中。m个PE被用于根据m个子张量和m个过滤器组到m个PE的分配来并行计算m个部分和。在连续两轮的并行处理过程中,m个子过滤器组可以在PE之间旋转。m也就是说,在第一轮中,确定由m个组合构成的第一集合,包括来自m个通道组中的第i个通道组的由子张量和子过滤器组构成的第i个组合,其中1<=i<=m;并且在第二轮期间中,确定由m个组合构成的第二集合,包括来自m个通道组中的第(i+1)个通道组的由子张量和子过滤器组构成的第i个组合,其中1<=i<m。
图8B中的图示出多个(m)轮的并行处理,用于多个和组中的一个。m)在第一轮(t=1)中,m个PE中的每个PE被分配到一个通道组的一个子张量和一个子过滤器组,但不同的PE处理不同的通道组(即,没有两个PE处理相同的通道组)。m如图所示,当t=1时,PE1处理第一通道组(I1,1和W1,k来自通道组1),而PE2处理第二通道组(I2,2和W2,k来自通道组2)。此外,不同的PE处理来自输入张量的二维特征图的不同位置的子张量,(即,没有两个PE处理来自二维特征图上相同位置的子张量)。如图所示,当t=1时,PE1在二维特征图上的位置1处理I1,1,而PE2在二维特征图上的位置2处理I2,2。
在第二轮(t=2)中,子过滤器组的分配在m个PE之间旋转。例如,W2,k从PE2(在第一轮中)旋转到PE1(在第二轮中)。形式上,在第i轮中分配给PEi的Wi,k在第i+1轮被旋转到PEi-1。对于后续各轮(t=3,...,m),权重以相同的方向旋转。m可以注意到,分配给第一个PE的子过滤器组被旋转到最后一个PE。
在每轮并行处理之后,每个PE可以通过对分配的子张量和子过滤器组执行MAC操作来获得部分和。在m轮并行处理过程中,由每个PE产生的m个部分和可以被累积,以在m轮完成之后,最终产生点积(即,被组装成输出张量的和)。如图8B所示,在PE1累积其在每轮并行处理期间产生的部分和之后,可以收集和A1,k。
图9示出根据各种实施例用于并行化卷积处理的示例方法。方法900可由用于优化资源配给的装置、设备或***执行。方法900可以由图1至图8所示的环境或***的一个或多个模块/组件执行,例如图5中的硬件加速器500、图6A中的处理实体(PE)600以及图6C中的PE6200。下面介绍的方法900的操作旨在说明。根据实施情况,方法900可以包括额外的、更好的或替代的步骤,以不同的顺序或并行地执行。
块910包括获得输入张量和与输入张量共享多个通道的多个过滤器。
块920包括将多个通道划分为多个通道组。在一些实施例中,多个通道组中的每个通道组都包括相同数量的通道。
块930包括将输入张量分割成多个子张量,并将多个过滤器根据多个通道组分割成多个子过滤器组。在一些实施例中,将多个过滤器分割成多个子过滤器组包括:将多个过滤器分组为多个过滤器组;根据多个通道组将多个过滤器中的每个过滤器分割成多个子过滤器;以及将同一过滤器组的和同一通道组的子过滤器确定为一个子过滤器组。
块940包括将由子张量和子过滤器组构成的多个组合分别分配给多个处理器,其中多个组合中的每个组合包括对应于同一通道组的子张量和子过滤器组。在一些实施例中,分别将由子张量和子过滤器组构成的多个组合分配给多个处理器包括:进行一次或多次迭代的并行处理,每次迭代包括:确定由子张量和子过滤器组构成的多个组合,其中多个组合分别对应于多个通道组;以及分别将多个组合送入多个处理器以生成多个点积。在一些实施例中,多个通道组包括M个通道组,并且分别将多个组合送入多个处理器进一步包括:在一次或多次迭代的第一迭代期间,确定由M个组合构成的第一集合,包括从M个通道组中的第i个通道组的由子张量和子过滤器组构成的第i个组合,其中1<=i<=M;以及在一次或多次迭代的第二迭代期间,确定由M个组合构成的第二集合,包括来自M个通道组中的第(i+1)个通道组的由子张量和子过滤器组构成的第i个组合,其中1<=i<M,以及来自M个通道组中的第1个通道组的由子张量和子过滤器组构成的第M个组合。在一些实施例中,多个处理器中的每个处理器在一次或多次迭代的每次迭代期间产生一个部分和并且将多个输出汇总为输出张量包括:对于多个处理器中的每个处理器,累积由处理器在一次或多次迭代中产生的部分和以产生点积;以及将由多个处理器在一次或多次迭代中产生的点积组装为输出张量。
块950包括由多个处理器中的每个处理器在一个或多个第一索引-值对中存储分配的组合中的子张量的一个或多个非零值,以及在一个或多个第二索引-值对中存储分配的组合中的子过滤器组的一个或多个非零值。在一些实施例中,不存储分配的组合中的子张量和子过滤器组的零值。在一些实施例中,将分配的组合中的子张量的一个或多个非零值存储为一个或多个第一索引-值对包括:识别子张量中的一个或多个非零输入值;对于该一个或多个非零输入值中的每一个:确定对应于非零输入值所在的通道的通道标识符;并将该通道标识符和非零输入值存储为第一索引-值对。在一些实施例中,将分配的组合中的子过滤器组的一个或多个非零值存储为一个或多个第二索引-值对包括:识别子过滤器组中的一个或多个非零权重;对于该一个或多个非零权重中的每一个:确定对应于非零权重所在的通道的通道标识符;以及将该通道标识符和该非零权重存储为第二索引-值对。在一些实施例中,将分配的组合中的子过滤器组的一个或多个非零值存储为一个或多个第二索引-值对包括:识别子过滤器组中的一个或多个非零权重;对于该一个或多个非零权重中的每一个:确定与非零权重所在的通道相对应的通道标识符;确定与非零权重所属的核相对应的核标识符;以及在权重缓冲器头中存储由通道标识符索引的指针,该指针指向存储在权重缓冲器阵列中的第二索引-值对,其中第二索引-值对包括非零权重并由核标识符进行索引。
块960包括由多个处理器并行地执行基于第一索引-值对和第二索引-值对的乘法和累加(MAC)操作,以获得多个输出。在一些实施例中,由多个处理器对多个组合并行执行MAC操作以获得多个输出包括,对于多个处理器中的每一个:获得与处理器相关联的子张量中的第一非零值的第一索引-值表示,其中第一索引-值表示包括对应于第一非零值所在的第一通道的第一索引;基于第一索引,获得第二非零值的第二索引-值表示,第二非零值位于第一通道中并且在与处理器相关联的子过滤器组的子过滤器中,其中第二索引-值表示包括对应于该子过滤器所在的过滤器的第二索引;对第一索引-值表示的值和第二索引-值表示的值进行MAC操作,以获得输出;以及将输出加到由第二索引-值表示的第二索引确定的部分和。
块970包括将多个输出汇总为输出张量。
在一些实施例中,多个通道组中的每一个包括多个子张量中的一个或多个,并且多个子张量中的每一个与识别子张量在该子张量所在的通道组中的位置的标识符相关联,并且方法900进一步包括:将与来自多个通道组的相同标识符相关联的子张量存储到输入缓存中,其中该输入缓存由多个处理器中的一个或多个共享。
在一些实施例中,多个通道组中的每一个包括相同数量的通道;而多个子过滤器组中的每一个包括相同数量的子过滤器。在一些实施例中,每个子张量和每个子过滤器包括相同数量的通道。
图10示出示例计算***,其中可以实现本文所述的任何实施例。计算装置可用于实现图1至图9中所示的***和方法的一个或多个组件。计算装置1000可包括用于通信信息的总线1002或其他通信机制,以及一个或多个与总线1002耦合的硬件处理器1004,用于处理信息。(多个)硬件处理器1004例如可以是一个或多个通用微处理器。
计算装置1000还可以包括主存储器1007,例如随机存取存储器(RAM)、缓存和/或其他动态存储装置,耦合到总线1002,用于存储将由(多个)处理器1004执行的信息和指令。主存储器1007也可用于在执行将由(多个)处理器1004执行的指令期间存储临时变量或其他中间信息。这样的指令,当存储在(多个)处理器1004可访问的存储介质中时,可使计算装置1000成为被定制来执行指令中规定的操作的专用机器。主存储器1007可以包括非易失性介质和/或易失性介质。非易失性介质例如可以包括光盘或磁盘。易失性介质可包括动态存储器。常见的介质形式例如可以包括软盘、可折叠磁盘、硬盘、固态驱动器、磁带或任何其他磁性数据存储介质、CD-ROM(只读存储光盘)、任何其他光学数据存储介质、任何具有孔洞图案的物理介质、RAM、DRAM(动态随机存取存储器)、PROM(可编程序只读存储器)和EPROM(可擦可编程只读存储器)、FLASH-EPROM(快擦编程只读存储器)、NVRAM(非易失随机存取存储器)、任何其他存储芯片或盒式存储器,或相同的网络化版本。
计算装置1000可以使用定制的硬接线逻辑、一个或多个ASIC或FPGA、固件和/或程序逻辑来实现本文所述的技术,其与计算装置相结合可以使计算装置1000成为专用机器或对其进行编程。根据一个实施例,本文的技术由计算装置1000响应于(多个)处理器1004执行包含在主存储器1007中的一个或多个指令的一个或多个序列来执行。这样的指令可以从另一个存储介质、例如存储装置1009读入主存储器1007。执行主存储器1007中包含的指令序列可以使(多个)处理器1004执行本文所述的过程步骤。例如,本文公开的过程/方法可由存储在主存储器1007中的计算机程序指令来实现。当这些指令被(多个)处理器1004执行时,它们可以执行相应的附图中所示和上述的步骤。在替代的实施例中,可以用硬接线电路来代替软件指令或与软件指令结合。
计算装置1000还包括与总线1002耦合的通信接口1010。通信接口1010可以提供与一个或多个网络链接耦合的双向数据通信,这些网络链接连接到一个或多个网络。作为另一个示例,通信接口1010可以是局域网(LAN)卡,以提供与兼容的LAN(或与WAN(广域网)通信的WAN组件)的数据通信连接。也可以实现无线链接。
某些操作的性能可以分布在处理器之间,不仅驻留在单个机器内,而且部署在若干机器上。在一些示例性实施例中,处理器或处理器实现的引擎可以位于单个地理位置(例如在家庭环境、办公室环境或服务器场内)。在其他示例性实施例中,处理器或处理器实现的引擎可以分布在若干地理位置上。
前面各节所述的每个过程、方法和算法都可以体现在由一个或多个计算机***或包括计算机硬件的计算机处理器执行的代码模块中,并完全或部分地自动化。这些过程和算法可以部分或全部在特定应用电路中实现。
当本文公开的功能以软件功能单元的形式实现并作为独立的产品出售或使用时,它们可以被存储在处理器可执行的非易失性计算机可读存储介质中。本文公开的特定技术解决方案(全部或部分)或有助于当前技术的方面可以以软件产品的形式体现。软件产品可以存储在存储介质中,包括若干指令,以使计算装置(可以是个人计算机、服务器、网络装置等)执行本申请实施例的方法的全部或部分步骤。存储介质可以包括闪存驱动器、移动硬盘、ROM、RAM、磁盘、光盘、另一种可用于存储程序代码的介质,或其任何组合。
特定实施例进一步提供了一种***,包括处理器和非暂时性计算机可读存储介质,其存储有可由处理器执行的指令,以使***执行与上述公开的实施例的任何方法中的步骤相应的操作。特定实施例进一步提供了一种非暂时性计算机可读存储介质,其配置有可由一个或多个处理器执行的指令,以使一个或多个处理器执行与上述公开的实施例中的任何方法的步骤相对应的操作。
本文所公开的实施例可以通过与客户端交互的云平台、服务器或服务器组(以下统称为“服务***”)来实现。客户端可以是终端装置,或由用户在平台注册的客户端,其中终端装置可以是移动终端、个人计算机(PC)以及可以安装平台应用程序的任何装置。
上面描述的各种特征和过程可以相互独立使用,也可以以各种方式组合。所有可能的组合和子组合都是为了落在本公开的范围内。此外,在一些实施方式中可以省略某些方法或过程块。本文描述的方法和过程也不限于任何特定的顺序,与之相关的块或状态可以以其他适当的顺序执行。例如,所描述的块或状态可以以不同于具体公开的顺序执行,或者多个块或状态可以结合在单个块或状态中。示例的块或状态可以以串行、并行或其他方式执行。块或状态可以被添加到所公开的示例性实施例中或从其中移除。本文描述的示例性***和组件可以配置为与描述的不同。例如,与所公开的示例性实施例相比,可将元素添加到所公开的示例性实施例、从其中移除或重新排列。
本文描述的示例性方法的各种操作可以至少部分地由算法执行。算法可由存储在存储器(例如上述的非暂时性计算机可读存储介质)中的程序代码或指令组成。这种算法可以包括机器学习算法。在一些实施例中,机器学习算法可以不明确地对计算机进行编程以执行功能,但可以从训练数据中学习,以得到执行该功能的预测模型。
本文描述的示例性方法的各种操作可以至少部分地由一个或多个处理器执行,这些处理器被临时配置(例如通过软件)或永久配置以执行相关操作。无论是临时配置还是永久配置,这样的处理器可以构成处理器实现的引擎,其操作是为了执行本文所述的一个或多个操作或功能。
类似地,本文所述的方法至少可以部分地由处理器实现,特定的一个或多个处理器是硬件的示例。例如,方法的至少部分操作可以由一个或多个处理器或处理器实现的引擎执行。此外,一个或多个处理器也可以运行,以支持在“云计算”环境下或作为“软件即服务”(SaaS)的相关操作的性能。例如,至少一些操作可以由一组计算机(作为包括处理器的机器的示例)执行,这些操作可以通过网络(例如互联网)和通过一个或多个适当的接口(例如应用程序接口(API))进行访问。
某些操作的性能可以分布在处理器之间,不仅驻留在单个机器内,而且部署在若干机器上。在一些示例性实施例中,处理器或处理器实现的引擎可以位于单个地理位置(例如在家庭环境、办公室环境或服务器场内)。在其他示例性实施例中,处理器或处理器实现的引擎可以分布在若干地理位置上。
在本说明书中,多个实例可以实现作为单一实例描述的组件、操作或结构。尽管一个或多个方法的单个操作被作为单独的操作进行说明和描述,但一个或多个单独的操作可以同时执行,并且不要求这些操作按照说明的顺序执行。在示例配置中作为单独组件呈现的结构和功能可以作为组合的结构或组件实施。类似地,作为单个组件呈现的结构和功能可以作为单独的组件来实现。这些和其他的变化、修改、补充和改进都属于本文主题的范围。
正如本文所使用的,“或”是包含而非排他性的,除非另外明确指出或根据上下文另有表示。因此,在本文中,“A、B或C”是指“A、B、A和B、A和C、B和C,或A、B和C”,除非另外明确指出或根据上下文另有表示。此外,“和”既是共同的、也是个别的,除非另有明确指示或根据上下文另有表示。因此,在本文中,“A和B”是指“A和B,共同或单独”,除非另有明确表示或由上下文另行表示。此外,可以为本文描述的资源、操作或结构提供复数实例,作为单一实例。此外,各种资源、操作、引擎和数据存储之间的界限在某种程度上是任意的,并且特定的操作是在特定的说明性配置的背景下说明的。功能的其他分配是可以设想的,并且可以落在本公开的各种实施例的范围内。一般来说,在示例配置中作为单独资源呈现的结构和功能可以作为组合的结构或资源来实现。类似地,作为单个资源呈现的结构和功能可以作为单独的资源来实现。这些和其他的变化、修改、补充和改进都属于所附权利要求书所代表的本公开的实施例的范围。因此,本说明书和附图应以说明性而非限制性的意义来看待。
术语“包括”或“包含”用于表示随后声明的特征的存在,但其并不排除增加其他特征。条件性语言,例如尤其是“可”、“可以”、或“可能”,除非特别另行说明,或在使用的上下文中以其他方式理解,一般旨在表达某些实施例包括、而其他实施例不包括某些特征、元素和/或步骤。因此,这种条件性语言一般不意味着特征、元素和/或步骤以任何方式是一个或多个实施例所必需的,或者一个或多个实施例必须包括用于决定在有或没有用户输入或提示的情况下,这些特征、元素和/或步骤是否被包括或是在任何特定实施例中执行的逻辑。
尽管已经参照具体的实施例描述了本主题的概况,但在不脱离本公开的实施例的广泛范围的情况下,可以对这些实施例进行各种修改和变化。该主题的此类实施例在此可单独或集体地用术语“发明”来称呼,这仅仅是为了方便起见,并不打算将本申请的范围自愿限制在任何单一的公开或概念上,如果事实上公开了一个以上的概念的话。
本文说明的实施例已被描述得足够详细,以使本领域技术人员能够实践所公开的教导。其他实施例可以被使用并由此衍生出来,从而结构和逻辑上的替换和改变可以在不偏离本公开的范围的情况下进行。因此,具体实施方式不应具有限制性意义,各种实施例的范围仅由所附的权利要求书以及此权利要求书所具有的全部等同物来限定。
Claims (20)
1.一种计算机实现的方法,包括:
获得输入张量和与所述输入张量共享多个通道的多个过滤器;
将所述多个通道划分为多个通道组;
根据所述多个通道组,将所述输入张量分割成多个子张量,并将所述多个过滤器分割成多个子过滤器组;
将由所述子张量和所述子过滤器组构成的多个组合分别分配给多个处理器,其中,所述多个组合中的每个组合包括对应于同一通道组的子张量和子过滤器组;
由所述多个处理器中的每个处理器在一个或多个第一索引-值对中存储分配的组合中的所述子张量的一个或多个非零值,以及在一个或多个第二索引-值对中存储分配的组合中的所述子过滤器组的一个或多个非零值;
由所述多个处理器并行地执行基于所述第一索引-值对和所述第二索引-值对的乘法和累加(MAC)操作,以获得多个输出;以及
将所述多个输出汇总为输出张量。
2.根据权利要求1所述的方法,其中,所述将所述多个过滤器分割成多个子过滤器组包括:
将所述多个过滤器分组为多个过滤器组;
根据所述多个通道组,将所述多个过滤器中的每个过滤器分割成多个子过滤器;以及
将同一过滤器组和同一通道组的所述子过滤器确定作为子过滤器组。
3.根据权利要求1所述的方法,其中,所述多个通道组中的每个通道组包括所述多个子张量中的一个或多个,并且所述多个子张量中的每个子张量与识别所述子张量在所述子张量所在的通道组中的位置的标识符相关联,并且
所述方法进一步包括:
将与所述多个通道组中的相同标识符相关联的子张量存储到输入缓存中,其中,所述输入缓存由所述多个处理器中的一个或多个共享。
4.根据权利要求1所述的方法,其中,不存储所述分配的组合中的所述子张量和所述子过滤器组的零值。
5.根据权利要求1所述的方法,其中,所述将所述分配的组合中的子张量的一个或多个非零值存储为一个或多个第一索引-值对包括:
识别所述子张量中的一个或多个非零输入值;
对于所述一个或多个非零输入值中的每个非零输入值:
确定与所述非零输入值所在的通道相对应的通道标识符;以及
将所述通道标识符和所述非零输入值存储为第一索引-值对。
6.根据权利要求1所述的方法,其中,所述将所述分配的组合中的子过滤器组的一个或多个非零值存储为一个或多个第二索引-值对包括:
识别所述子过滤器组中的一个或多个非零权重;
对于所述一个或多个非零权重中的每个权重:
确定与所述非零权重所在的通道相对应的通道标识符;以及
将所述通道标识符和所述非零权重存储为第二索引-值对。
7.根据权利要求1所述的方法,其中,所述将所述分配的组合中的子过滤器组的一个或多个非零值存储为一个或多个第二索引-值对包括:
识别所述子过滤器组中的一个或多个非零权重;
对于所述一个或多个非零权重中的每个权重:
确定与所述非零权重所在的通道相对应的通道标识符;
确定与所述非零权重所属的核相对应的核标识符;以及在按所述通道标识符索引的权重缓冲器头中存储指针,所述指针指向存储在权重缓冲器阵列中的第二索引-值对,其中,所述第二索引-值对包括所述非零权重并按所述核标识符索引。
8.根据权利要求1所述的方法,其中,所述将由所述子张量和所述子过滤器组构成的多个组合分别分配给多个处理器包括:
进行一次或多次迭代的并行处理,每次迭代包括:
确定由所述子张量和所述子过滤器组构成的多个组合,其中,所述多个组合分别对应于多个通道组;以及
分别将所述多个组合送入多个处理器以生成多个点积。
9.根据权利要求8所述的方法,其中,所述多个通道组包括M个通道组,并且
所述分别将所述多个组合送入所述多个处理器进一步包括:
在所述一次或多次迭代的第一迭代期间,确定由M个组合构成的第一集合,包括由来自所述M个通道组中的第i个通道组的子张量和子过滤器组构成的第i个组合,其中1<=i<=M;以及
在所述一次或多次迭代的第二迭代期间,确定由M个组合构成的第二集合,包括:
由来自所述M个通道组中的第(i+1)个通道组的子张量和子过滤器组构成的第i个组合,其中1<=i<M,以及
由来自所述M个通道组中的第1个通道组的子张量和子过滤器组构成的第M个组合。
10.根据权利要求8所述的方法,其中,所述多个处理器中的每个处理器在所述一次或多次迭代的每次迭代期间产生一个部分和,并且
所述将所述多个输出汇总为输出张量包括:
对于所述多个处理器中的每个处理器,累积由所述处理器在所述一次或多次迭代中产生的所述部分和,以产生点积;和
将由所述多个处理器在所述一次或多次迭代中产生的所述点积组装成输出张量。
11.根据权利要求1所述的方法,其中,由所述多个处理器对所述多个组合并行地执行MAC操作以获得多个输出包括:
对于所述多个处理器中的每个处理器:
获得与所述处理器相关联的所述子张量中第一非零值的第一索引-值表示,其中,所述第一索引-值表示包括对应于所述第一非零值所在的第一通道的第一索引;
基于所述第一索引,获得第二非零值的第二索引-值表示,所述第二非零值位于所述第一通道中,并且位于与所述处理器相关联的所述子过滤器组的子过滤器中,其中,所述第二索引-值表示包括与所述子过滤器所在的过滤器相对应的第二索引;
对所述第一索引-值表示的所述值和所述第二索引-值表示的所述值执行MAC操作,以获得输出;以及
将所述输出加到由所述第二索引-值表示的所述第二索引标识的部分和。
12.根据权利要求1所述的方法,其中,所述多个通道组中的每个通道组包括相同数量的通道;而所述多个子过滤器组中的每个子过滤器组包括相同数量的子过滤器。
13.根据权利要求12所述的方法,其中,每个所述子张量和每个所述子过滤器包括所述相同数量的通道。
14.一种用于并行化卷积处理的***,包括一个或多个处理器和一个或多个非暂时性计算机可读存储器,所述一个或多个非暂时性计算机可读存储器与所述一个或多个处理器耦合,并配置有可由所述一个或多个处理器执行的指令,以使所述***执行操作,所述操作包括:
获得输入张量和与所述输入张量共享多个通道的多个过滤器;
将所述多个通道划分为多个通道组:
根据所述多个通道组,将所述输入张量分割成多个子张量,并将所述多个过滤器分割成多个子过滤器组;
将由所述子张量和所述子过滤器组构成的多个组合分别分配给多个处理器,其中,所述多个组合中的每个组合包括对应于同一通道组的子张量和子过滤器组;
由所述多个处理器中的每个处理器在一个或多个第一索引-值对中存储分配的组合中的所述子张量的一个或多个非零值,以及在一个或多个第二索引-值对中存储分配的组合中的所述子过滤器组的一个或多个非零值;
由所述多个处理器并行地执行基于存储在所述多个处理器的每个处理器中的所述第一索引-值对和所述第二索引-值对的乘法和累加(MAC)操作,以获得多个输出;以及
将所述多个输出汇总为输出张量。
15.根据权利要求14所述的***,其中,所述将所述多个过滤器分割成多个子过滤器组包括:
将所述多个过滤器分组为多个过滤器组;
根据所述多个通道组,将所述多个过滤器中的每个过滤器分割成多个子过滤器;以及
将同一过滤器组和同一通道组的所述子过滤器确定作为子过滤器组。
16.根据权利要求14所述的***,其中,所述将所述分配的组合中的子张量的一个或多个非零值存储为一个或多个第一索引-值对包括:
识别所述子张量中的一个或多个非零输入值;
对于所述一个或多个非零输入值中的每个非零输入值:
确定与所述非零输入值所在的通道相对应的通道标识符;以及
将所述通道标识符和所述非零输入值存储为第一索引-值对。
17.根据权利要求14所述的***,其中,所述将所述分配的组合中的子过滤器组的一个或多个非零值存储为一个或多个第二索引-值对包括:
识别所述子过滤器组中的一个或多个非零权重;
对于所述一个或多个非零权重中的每个权重:
确定与所述非零权重所在的通道相对应的通道标识符;
确定与所述非零权重所属的核相对应的核标识符;以及在按所述通道标识符索引的权重缓冲器头中存储指针,所述指针指向存储在权重缓冲器阵列中的第二索引-值对,其中,所述第二索引-值对包括所述非零权重并按所述核标识符索引。
18.根据权利要求14所述的***,其中,所述将由所述子张量和所述子过滤器组构成的多个组合分别分配给多个处理器包括:
进行一次或多次迭代的并行处理,每次迭代包括:
确定由所述子张量和所述子过滤器组构成的多个组合,其中,所述多个组合分别对应于多个通道组;以及
分别将所述多个组合送入多个处理器以生成多个点积。
19.一种用于并行化卷积处理的非暂时性计算机可读存储介质,配置有由一个或多个处理器执行的指令,以使所述一个或多个处理器执行操作,所述操作包括:
获得输入张量和与所述输入张量共享多个通道的多个过滤器;
将所述多个通道划分为多个通道组:
根据所述多个通道组,将所述输入张量分割成多个子张量,并将所述多个过滤器分割成多个子过滤器组;
将由所述子张量和所述子过滤器组构成的多个组合分别分配给多个处理器,其中,所述多个组合中的每个组合包括对应于同一通道组的子张量和子过滤器组;
由所述多个处理器中的每个处理器在一个或多个第一索引-值对中存储分配的组合中的所述子张量的一个或多个非零值,以及在一个或多个第二索引-值对中存储分配的组合中的所述子过滤器组的一个或多个非零值;
由所述多个处理器并行地执行基于存储在所述多个处理器的每个处理器中的所述第一索引-值对和所述第二索引-值对的乘法和累加(MAC)操作,以获得多个输出;以及
将所述多个输出汇总为输出张量。
20.根据权利要求19所述的存储介质,其中,所述将所述分配的组合中的子过滤器组的一个或多个非零值存储为一个或多个第二索引-值对包括:
识别所述子过滤器组中的一个或多个非零权重;
对于所述一个或多个非零权重中的每个权重:
确定与所述非零权重所在的通道相对应的通道标识符;
确定与所述非零权重所属的核相对应的核标识符;以及在按所述通道标识符索引的权重缓冲器头中存储指针,所述指针指向存储在权重缓冲器阵列中的第二索引-值对,其中,所述第二索引-值对包括所述非零权重并按所述核标识符索引。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2020/095760 WO2021248433A1 (en) | 2020-06-12 | 2020-06-12 | Method and system for dual-sparse convolution processing and parallelization |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116261736A true CN116261736A (zh) | 2023-06-13 |
Family
ID=78846749
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080101977.6A Pending CN116261736A (zh) | 2020-06-12 | 2020-06-12 | 用于双稀疏卷积处理和并行化的方法和*** |
Country Status (3)
Country | Link |
---|---|
US (1) | US20230111362A1 (zh) |
CN (1) | CN116261736A (zh) |
WO (1) | WO2021248433A1 (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104077233A (zh) * | 2014-06-18 | 2014-10-01 | 百度在线网络技术(北京)有限公司 | 单通道卷积层及多通道卷积层处理方法和装置 |
CN107239824A (zh) * | 2016-12-05 | 2017-10-10 | 北京深鉴智能科技有限公司 | 用于实现稀疏卷积神经网络加速器的装置和方法 |
GB201718358D0 (en) * | 2017-11-06 | 2017-12-20 | Imagination Tech Ltd | Exploiting sparsity in a neural network |
CN108510066A (zh) * | 2018-04-08 | 2018-09-07 | 清华大学 | 一种应用于卷积神经网络的处理器 |
EP3385901A1 (en) * | 2017-04-09 | 2018-10-10 | INTEL Corporation | Machine learning sparse computation mechanism |
CN108805266A (zh) * | 2018-05-21 | 2018-11-13 | 南京大学 | 一种可重构cnn高并发卷积加速器 |
CN109993297A (zh) * | 2019-04-02 | 2019-07-09 | 南京吉相传感成像技术研究院有限公司 | 一种负载均衡的稀疏卷积神经网络加速器及其加速方法 |
WO2019144865A1 (en) * | 2018-01-26 | 2019-08-01 | Mediatek Inc. | Method and apparatus of neural networks with grouping for video coding |
CN110457069A (zh) * | 2016-02-03 | 2019-11-15 | 谷歌有限责任公司 | 访问多维张量中的数据 |
US20200160181A1 (en) * | 2018-05-31 | 2020-05-21 | Neuralmagic Inc. | Systems and methods for generation of sparse code for convolutional neural networks |
CN111247537A (zh) * | 2017-10-06 | 2020-06-05 | 深立方有限公司 | 紧凑且高效的稀疏神经网络的***和方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11379716B2 (en) * | 2018-02-09 | 2022-07-05 | Htc Corporation | Method and electronic apparatus for adjusting a neural network |
CN111160517B (zh) * | 2018-11-07 | 2024-02-06 | 杭州海康威视数字技术股份有限公司 | 一种深度神经网络的卷积层量化方法及装置 |
CN110276450B (zh) * | 2019-06-25 | 2021-07-06 | 交叉信息核心技术研究院(西安)有限公司 | 基于多粒度的深度神经网络结构化稀疏***和方法 |
-
2020
- 2020-06-12 WO PCT/CN2020/095760 patent/WO2021248433A1/en active Application Filing
- 2020-06-12 CN CN202080101977.6A patent/CN116261736A/zh active Pending
-
2022
- 2022-12-12 US US18/079,197 patent/US20230111362A1/en active Pending
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104077233A (zh) * | 2014-06-18 | 2014-10-01 | 百度在线网络技术(北京)有限公司 | 单通道卷积层及多通道卷积层处理方法和装置 |
CN110457069A (zh) * | 2016-02-03 | 2019-11-15 | 谷歌有限责任公司 | 访问多维张量中的数据 |
CN107239824A (zh) * | 2016-12-05 | 2017-10-10 | 北京深鉴智能科技有限公司 | 用于实现稀疏卷积神经网络加速器的装置和方法 |
EP3385901A1 (en) * | 2017-04-09 | 2018-10-10 | INTEL Corporation | Machine learning sparse computation mechanism |
CN111247537A (zh) * | 2017-10-06 | 2020-06-05 | 深立方有限公司 | 紧凑且高效的稀疏神经网络的***和方法 |
GB201718358D0 (en) * | 2017-11-06 | 2017-12-20 | Imagination Tech Ltd | Exploiting sparsity in a neural network |
WO2019144865A1 (en) * | 2018-01-26 | 2019-08-01 | Mediatek Inc. | Method and apparatus of neural networks with grouping for video coding |
CN108510066A (zh) * | 2018-04-08 | 2018-09-07 | 清华大学 | 一种应用于卷积神经网络的处理器 |
CN108805266A (zh) * | 2018-05-21 | 2018-11-13 | 南京大学 | 一种可重构cnn高并发卷积加速器 |
US20200160181A1 (en) * | 2018-05-31 | 2020-05-21 | Neuralmagic Inc. | Systems and methods for generation of sparse code for convolutional neural networks |
CN109993297A (zh) * | 2019-04-02 | 2019-07-09 | 南京吉相传感成像技术研究院有限公司 | 一种负载均衡的稀疏卷积神经网络加速器及其加速方法 |
Non-Patent Citations (1)
Title |
---|
余本功;朱梦迪;: "基于层级注意力多通道卷积双向GRU的问题分类研究", 数据分析与知识发现, vol. 04, no. 08, 23 April 2020 (2020-04-23), pages 50 - 62 * |
Also Published As
Publication number | Publication date |
---|---|
WO2021248433A1 (en) | 2021-12-16 |
US20230111362A1 (en) | 2023-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11144823B1 (en) | Method and system for hierarchical weight-sparse convolution processing | |
WO2022002157A1 (en) | Method and system for balanced-weight sparse convolution processing | |
CN105960647B (zh) | 紧凑人脸表示 | |
CN114026569A (zh) | 使用脉动阵列的扩张卷积 | |
Kang et al. | Dynamic random walk for superpixel segmentation | |
US20220303176A1 (en) | Efficient optimization for neural network deployment and execution | |
WO2022095984A1 (en) | Method and system for convolution with workload-balanced activation sparsity | |
US20220292300A1 (en) | Efficient quantization for neural network deployment and execution | |
KR20210111677A (ko) | 뉴럴 네트워크의 클리핑 방법, 뉴럴 네트워크의 컨벌루션 계산 방법 및 그 방법을 수행하기 위한 전자 장치 | |
US20220292334A1 (en) | Efficient memory use optimization for neural network deployment and execution | |
CN116261736A (zh) | 用于双稀疏卷积处理和并行化的方法和*** | |
WO2021109878A1 (en) | Method and system for semi-supervised content localization | |
CN117203628A (zh) | 加速器、计算机***、方法和存储介质 | |
EP4388455A1 (en) | System and method for bank-balanced sparse activation and joint-activation-weight-sparse training of neural networks |
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 |