CN116472537A - 一种数据处理方法和处理器 - Google Patents
一种数据处理方法和处理器 Download PDFInfo
- Publication number
- CN116472537A CN116472537A CN202180077853.3A CN202180077853A CN116472537A CN 116472537 A CN116472537 A CN 116472537A CN 202180077853 A CN202180077853 A CN 202180077853A CN 116472537 A CN116472537 A CN 116472537A
- Authority
- CN
- China
- Prior art keywords
- calculation
- layer
- data
- run
- convolution
- 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
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
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)
- Image Analysis (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请实施例公开了一种数据处理方法和处理器,涉及人工智能领域,解决了处理器需要多次进行数据读写,由此带来大量的功耗的问题。具体方案为:获取第一数据,用于进行第一计算层的第一计算行程。将该第一数据存储在该第一计算层的第一行缓存中,该第一计算层的第一行缓存包括在该本地缓存中。计算该第一计算层的第一计算行程,以获取第二数据。将该第二数据存储在第二计算层的第一行缓存中,该第二计算层是该N个计算层中,该第一计算层之后的计算层。在该第二计算层的第一行缓存中存储的累积的数据能够进行该第二计算层的第一计算行程的情况下,计算该第二计算层的第一计算行程,以获取与该第二计算层的第一计算行程对应的第五数据。
Description
本申请实施例涉及人工智能技术领域,尤其涉及一种数据处理方法和处理器。
目前,神经网络已经被广泛应用于图像分类、视频处理、语音识别、数据分析等场景。以处理器使用神经网络对图像进行处理为例。由于需要处理的图像的特征图(feature map,FM)的数据量较大,一般无法存储在处理器的本地缓存中,因此,特征图数据可以存储在具有较大存储空间的外部存储器中。在对图像进行处理的时,处理器可以将图像的特征图数据(如称为原始输入特征图)从外部存储器中读入处理器并根据神经网络模型进行计算。在获取计算结果(如称为输出特征图)之后,处理器可以将输出特征图存储到外部存储器中。
需要说明的是,在神经网络模型中,一般包括多个不同的计算层,比如卷积层,池化/激活层等。每个计算层的计算过程各不相同。其中,一个计算层可以对应一个核函数(kernel),根据该核函数,处理器即可进行对输入该计算层的输入特征图进行计算,并获取对应的输出特征图。在完成一个计算层的计算获取对应的输出特征图后,可以将该输出特征图存储到外部存储器中,以便于在进行下一层计算时,读取外部存储器中存储的数据,作为当前计算层的输入特征图进行计算。
可以看到,在完成一次神经网络模型的计算过程中,处理器需要多次将大量数据从外部存储器读取或者写入外部存储器,由此为进行神经网络计算的设备带来大量的功耗。另外,随着需要处理的对象数量(如需要处理的图像个数)以及复杂度(如需要处理的图像的特征图的数据量)的增加,计算功耗也会增加。
发明内容
本申请实施例提供一种数据处理方法和处理器,以降低神经网络计算的功耗。为达到上述目的,本申请实施例采用如下技术方案。
第一方面,提供一种数据处理方法,该方法应用于进行神经网络计算的处理器,该神经网络包括N个计算层,N为大于或等于2的整数。该处理器中设置有本地缓存。该方法包括:获取第一数据,该第一数据用于进行第一计算层的第一计算行程,该第一计算层是该N个计算层中的任一个计算层。将该第一数据存储在该第一计算层的第一行缓存中,该第一计算层的第一行缓存包括在该本地缓存中。计算该第一计算层的第一计算行程,以获取与该第一计算层的第一计算行程对应的第二数据,其中,该第一计算层的第一计算行程包括使用该第一计算层的卷积窗口对该第一数据的一行或多行数据的卷积计算。将该第二数据存储在第二计算层的第一行缓存中,该第二计算层的第一行缓存包括在该本地缓存中,该第二计算层是该N个计算层中,该第一计算层之后的计算层。在该第二计算层的第一行缓存中存储的累积的数据能够进行该第二计算层的第一计算行程的情况下,计算该第二计算层的第一计算行程,以获取与该第二计算层的第一计算行程对应的第五数据,其中,该第二计算层的第一计算行程包括使 用该第二计算层的卷积窗口对该第二数据的一行或多行数据的卷积计算。
基于该方案,提供了一种多个计算层之间的流水线计算机制。在该示例中,处理器可以在进行一个计算层的卷积计算时,获取进行一个计算行程所需的数据。其中,以进行卷积计算为例。一个计算行程可以为卷积窗口从左侧滑动计算到最右侧的一个行程的计算。比如,卷积窗口为A行,那么在进行该计算层的卷积计算之前,处理器只需要获取A行的数据即可开始计算,而不需要获取当前计算层所需的输入特征图的全量数据。由于A行数据的数据量非常小,因此可以被存储在本地缓存中,而非存储在外部存储器(比如DDR)中。这样,在进行当前层的计算时,就可以直接从本地缓存中读取这A行数据,并据此进行当前计算层的一个行程的计算。可以理解的是,在当前计算层并非神经网络的第一个计算层时,那么这A行数据可以是前一个计算层的计算结果。相较于现有技术,本示例体提供的方案中,由于前一个计算层仅需要计算获取A行数据即可,因此不需要将前一计算层和当前计算层之间的中间数据写入DDR中等待处理器再次从DDR中进行读取。取而代之的,前一计算层可以在计算获取A行数据后,将该数据存储在本地缓存中为当前计算层配置的行缓存中。也就是说,中间数据不需要被写入DDR中,因此在执行当前层的计算时也不需要从DDR中读取。而从本地缓存中进行的数据读写不需要与DDR进行多次大量的数据交互,由此节省功耗。
在一种可能的设计中,该方法还包括:在该累积的数据无法进行该第二计算层的第一计算行程的情况下,计算该第一计算层的第二计算行程,该第一计算层的第二计算行程是该第一计算层的第一计算行程后的计算行程。基于该方案,提供了一种层间计算过程中的回退机制。在该示例中,在前一个计算层完成一个行程的计算之后,处理器可以计算是否可以执行当前层的一个行程的计算。如果当前计算层对应的行缓存中没有存储能够支持当前层一个行程的计算的数据,那么处理器可以回退到前一层继续执行后面一个行程的计算,以便获取新的一行计算结果更新到当前计算成的行缓存中。接着处理器可以循环上述方案,比如,判断当前行缓存中存储的数据是否能够支持当前计算层完成一个行程的计算,如果可以则执行当前计算层的一个行程的计算,如果不行则继续返回上一个计算层进行计算。如此类推,对于后面的计算层可以执行类似的判断回退机制,使得***计算不会卡顿在某一个计算层,并且每个计算层在同一时刻只需要占用与该计算层的卷积窗口行数对应的行缓存即可。
在一种可能的设计中,第一行缓存的行数等于第一计算层的卷积窗口的行数。基于该方案,提供了一种对第一行缓存的行数的具体限定。可以理解的是,第一行缓存用于存储第一数据,可以是在处理器的本地缓存中为第一计算层配置的存储空间,用于存储第一计算层的任意一个行程的计算的数据。该第一行缓存的行数至少需要等于第一卷积计算层的卷积窗口的行数,以便于能够存储足够的数据进行一个行程的计算。
在一种可能的设计中,在该第一计算层是该神经网络的第一个计算层时,该获取第一数据,包括:从外部存储器中读取该第一数据,该第一数据是该外部存储器中存储的输入特征图的至少部分,该外部存储器是与该处理器耦接的存储介质。基于该方案,提供了一种第一计算层为神经网络的第一个计算层时的数据获取机制。可以理解的是,由于输入特征图的数据量一般较大,可以存储在与处理器可以进行数据交互的外部存储器(比如DDR)中。处理器可以在执行第一计算层的一个计算行程之前,从 DDR中的读取对应的数据,写入为第一计算层配置的行缓存中,以便进行第一计算层的一个计算行程的计算。
在一种可能的设计中,第一数据是外部存储器中存储的输入特征图的部分,该方法还包括:从该外部存储器中获取第三数据,该第三数据是输入特征图中另一部分,该第三数据用于进行该第一计算层的第二计算行程。将该第三数据覆盖存储第四数据,该第四数据是该第一数据中,不再参与该第一计算层的计算的数据。基于该方案,提供了一种动态调整行缓存中数据的机制。在该示例中,每完成一个计算行程中的一次计算,第一数据中就有部分数据不会在后续计算中再次被应用。那么,处理器可以从DDR中读取部分新的数据,覆盖这些不会在后续计算中应用的数据,实现数据的更新。使得在完成当前的计算行程之后,就可以在对应的行缓存中存储有能够用于进行新的一个计算行程的计算的数据。需要说明的是,在本申请的一些实施例中,该数据的替换可以是在完成一个计算行程之后进行的,也可以是在执行一个计算行程的过程中执行的。
在一种可能的设计中,该将该第二数据存储在第二计算层的第一行缓存中,包括:在进行该第一计算层的第一计算行程的过程中,每获取第一计算层的卷积窗口在一个位置的计算结果,将该计算结果存储在第二计算层的第一行缓存中。基于该方案,提供了一种第二数据的写入机制。在该示例中,第一计算层中每计算获取一个计算结果,就可以将该计算结果存储在第二计算层的行缓存中对应的位置。这样在完成第一计算成中的一个计算行程之后,就可以获取在第二计算层的行缓存中存储的一行或多行数据用于进行第二计算层的计算。
在一种可能的设计中,在获取与第二计算层的第一计算行程对应的第五数据后,该方法还包括:将所述第五数据存储在第三计算层的第一行缓存中,所述第三计算层的第一行缓存包括在所述本地缓存中;所述第三计算层是所述N个计算层中,所述第二计算层之后的计算层,所述第五数据用于进行所述第三计算层的卷积计算。基于该方案,提供了神经网络中包括的其他计算层的计算机制。比如,第二计算层每完成一个行程的计算,就可以将计算结果存储在下一个计算层(比如第三计算层)对应的行缓存中。以便在获取足够的数据之后,执行第三计算层的一个行程的计算。
第二方面,提供一种数据处理装置,应用于进行神经网络计算,该神经网络包括N个计算层,N为大于或等于2的整数。该数据处理装置中设置有本地缓存。该装置包括:获取单元,用于获取第一数据,该第一数据用于进行第一计算层的第一计算行程,该第一计算层是该N个计算层中的任一个计算层。存储单元,用于将该第一数据存储在该第一计算层的第一行缓存中,该第一计算层的第一行缓存包括在该本地缓存中。计算单元,用于计算该第一计算层的第一计算行程,以获取与该第一计算层的第一计算行程对应的第二数据,其中,该第一计算层的第一计算行程包括使用该第一计算层的卷积窗口对该第一数据的一行或多行数据的卷积计算。存储单元,还用于将该第二数据存储在第二计算层的第一行缓存中,该第二计算层的第一行缓存包括在该本地缓存中,该第二计算层是该N个计算层中,该第一计算层之后的计算层。计算单元,还用于在该第二计算层的第一行缓存中存储的累积的数据能够进行该第二计算层的第一计算行程的情况下,计算该第二计算层的第一计算行程,以获取与该第二计算层的第 一计算行程对应的第五数据,其中,该第二计算层的第一计算行程包括使用该第二计算层的卷积窗口对该第二数据的一行或多行数据的卷积计算。
在一种可能的设计中,计算单元,还用于在累积的数据无法进行该第二计算层的第一计算行程的情况下,计算该第一计算层的第二计算行程,该第一计算层的第二计算行程是该第一计算层的第一计算行程后的计算行程。
在一种可能的设计中,第一行缓存的行数等于第一计算层的卷积窗口的行数。
在一种可能的设计中,获取单元,用于从外部存储器中读取该第一数据,该第一数据是该外部存储器中存储的输入特征图的至少部分,该外部存储器是与该处理器耦接的存储介质。
在一种可能的设计中,第一数据是外部存储器中存储的输入特征图的部分,获取单元,还用于从该外部存储器中获取第三数据,该第三数据是输入特征图中另一部分,该第三数据用于进行该第一计算层的第二计算行程。将该第三数据覆盖存储第四数据,该第四数据是该第一数据中,不再参与该第一计算层的计算的数据。
在一种可能的设计中,存储单元,还用于在进行该第一计算层的第一计算行程的过程中,每获取第一计算层的卷积窗口在一个位置的计算结果,将该计算结果存储在第二计算层的第一行缓存中。
在一种可能的设计中,获取单元,还用于获取与第二计算层的第一计算行程对应的第五数据。存储单元,将所述第五数据存储在第三计算层的第一行缓存中,所述第三计算层的第一行缓存包括在所述本地缓存中;所述第三计算层是所述N个计算层中,所述第二计算层之后的计算层,所述第五数据用于进行所述第三计算层的卷积计算。
第三方面,提供一种处理器,该处理器包括一个或多个计算核心,以及本地缓存,该处理器被配置为实现如第一方面及其可能的设计中任一项所述的数据处理方法。
第四方面,提供一种电子设备,电子设备包括一个或多个如第三方面所述的处理器以及一个或多个存储器。该存储器与该处理器耦合,该存储器存储有计算机指令。当该处理器执行该计算机指令时,使得该电子设备执行如第一方面及其可能的设计中任一项所述的数据处理方法。
第五方面,提供一种计算机可读存储介质,该计算机可读存储介质包括计算机指令,当该计算机指令运行时,执行如第一方面及其可能的设计中任一项所述的数据处理方法。
示例性地,上述第二方面至第五方面中任一种设计方式及其可能的设计方法,均可对应到上述第一方面及其任一种可能的设计,因此,能够带来类似的技术效果,此处不再赘述。
图1为一种卷积神经网络的结构示意图;
图2为本申请实施例提供的一种神经网络计算装置的结构示意图;
图3为本申请实施例提供的一种卷积层的结构示意图;
图4为本申请实施例提供的一种数据处理方法的流程示意图;
图5为本申请实施例提供的一种计算逻辑示意图;
图6为本申请实施例提供的又一种计算逻辑示意图;
图7为本申请实施例提供的又一种计算逻辑示意图;
图8为本申请实施例提供的一种行缓存的示意图;
图9为本申请实施例提供的又一种行缓存的示意图;
图10为本申请实施例提供的又一种计算逻辑示意图;
图11为本申请实施例提供的又一种计算逻辑示意图;
图12为本申请实施例提供的一种神经网络的结构示意图;
图13为本申请实施例提供的一种单核和多核场景下的计算逻辑时序示意图;
图14为本申请实施例提供的一种数据处理装置的结构示意图;
图15为本申请实施例提供的一种电子设备的结构示意图。
人工智能领域中常用的神经网络可以包括卷积神经网络(Convolutional Neural Networks,CNN)和递归神经网络(recursive neural network,RNN)等。示例性的,图1示出了一种卷积神经网络的结构示意图。如图1所示,在卷积神经网络中可设置有包括一个或多个卷积计算层的卷积层,以及包括一个或多个计算层的池化/激活层。其中,在数据输入卷积层时,处理器可以根据卷积层中各个卷积计算层对应的卷积核对输入特征图进行卷积计算。示例性的,处理器可以依照预设的卷积核,使用卷积核对应的卷积窗口在输入特征图上,按照预设的步长(stride)进行滑动计算,以获取各个窗口位置对应的计算结果,这些计算结果即可合并为对应的输出特征图。在数据输入池化/激活层时,处理器可以根据特定的函数对输入特征图进行处理,比如池化(pooling)和/或激活(activity)处理。如图1所示,该卷积神经网络还可包括输入层。输入层可以用于存储需要处理的图像的特征图数据,以便于卷积层可以从输入层获取输入特征图。在一些实现中,该输入层可以设置在与进行卷积计算的处理器连接的外部存储器中。
需要说明的是,不同应用场景下的卷积神经网络的结构可以不同。在一些实现中,卷积层中的多个卷积计算层可以与池化/激活层中的计算层交叉设置。比如,如图1所示,可以在进行一部分卷积计算之后,进行池化或者激活处理,之后在进行卷积计算。在另一些实现中,也可先进行卷积计算,之后选择性地进行池化和/或激活处理。在完成上述计算之后,可以获取完成一轮卷积神经网络计算的结果,并将该结果通过输出层进行输出。
需要说明的是,在处理器内部可以设置有本地缓存(local buffer)。该本地缓存可以用于存储少量的数据。存储在本地缓存中的数据具有进行快速读写的特性。比如,该本地缓存可以用于存储卷积神经网络模型的各个计算层对应的卷积核等数据。在进行神经网络计算时,由于原始输入特征图的数据量一般较大,无法存入本地缓存。因此,可以将原始输入特征图存储在与处理器连接的外部存储器中。其中,该外部存储器可以为具有较大存储空间的存储介质。比如该存储介质可以是双倍速率同步动态随机存取内存(Double Data Rate synchronous dynamic random-access memory,DDR SDRAM)等。在本示例中,该DDR SDRAM也可简称为DDR。以外部存储器为DDR为例。处理器可以在开始计算时,从DDR中读取原始输入特征图,以便进行神经网络计算。当神经网络模型中包括多个计算层时,那么上一层的输出特征图就可以作为下一层的 输入特征图。两个计算层层之间的特征图数据也可称为中间数据。一般而言,神经网络计算过程的中间数据的数据量不大于原始输入特征图的数据量。但是,该中间数据的数据量也远超本地缓存的存储能力。处理器如果将该中间数据写入DDR中,会导致处理器多次与DDR进行较大数据量的读写交互,由此造成大量的功耗。另外,随着处理器计算能力的不断提升,读写带宽的不足,也会限制神经网络计算的效率。
为了解决上述问题,可以将存储在DDR中的特征图的数据进行拆分,使得拆分后的特征图分片(slice)可以被存储在本地缓存中。这样,在进行神经网络计算时,处理器可以从DDR中读取一个slice存储在本地缓存中,对该slice的数据进行计算。结合上述说明,对于一个slice的计算过程中的中间数据以及输出特征图的数据量不会大于该slice对应的输入特征图的数据量。在完成一个slice的计算之后,处理器可以从DDR中读取下1个slice放入本地缓存,并重复上述步骤进行计算。如此反复,直至完成所有slice的计算。这样,在DDR中就可以存储有多个slice分别对应的输出特征图。此后,处理器需要将这些slice分别对应的输出特征图进行合并,由此获取原始输入特征图对应的完整的输出特征图。为了使得各个slice的输出特征图之间不存在空隙,在对原始输入特征图进行分片时,相邻的slice上需要包括重复的数据。这样就会使得这些重复的数据被多次计算,进而降低整个计算过程的效率,功耗也不够优化。
为了解决上述问题,本申请实施例提供的数据处理方法,能够在不同计算层的计算中建立对应的流水线计算机制,使得在进行下一层计算之前,不需要完全执行上一层的计算。这样的方案能够显著降低中间数据的数据量,进而使得中间数据可以被存储在本地缓存中,避免处理器与外部存储器(比如DDR)之间的多次大量读写交互的功耗开销。同时,由于该流水线计算机制的建立,使得整个计算过程不需等待,因此能够有效地提升计算效率。通过该方案,同样由于流水线计算的机制,使得不会对数据进行重复的无效计算,因此计算效率显著高于现有技术方案。特别的,本申请实施例提供的数据处理方法,提供了一种具有回退机制的计算方法,能够适用于步长大于或等于1的不同卷积计算场景。下面结合附图对本申请实施例提供的方案进行详细说明。
请参考图2,为本申请实施例提供的一种神经网络计算装置200的逻辑结构示意图。该神经网络计算装置200可以用于根据本申请实施例提供的方法,实现包括卷积神经网络模型在内的神经网络模型的计算。为了便于说明,在该图2中同时示出了与神经网络计算装置200耦接的外部存储模块230。神经网络计算装置200可以通过其上设置的接口与外部存储模块230进行读写交互。比如,从外部存储模块230中读取待处理的特征图数据(如原始输入特征图)。又如,将完成神经网络计算的输出特征图数据写入外部存储模块230等。神经网络计算装置200可以是之前所述处理器。
在一些实现中,该外部存储模块230可以包括上述说明中的DDR。在另一些实现中,该外部存储模块230还可以包括***缓存(system cache),该***缓存可以是设置有如图2所示的神经网络计算装置200的设备的***缓存。在不同的设备中,该***缓存可以是通过不同的存储介质实现其功能的。比如,该***缓存是通过闪存(flash)。又如,该***缓存还可以是固态硬盘(Solid State Device,SSD)等其 他存储介质。
如图2所示,本申请实施例提供的神经网络计算装置200中,可以包括计算模块210和本地缓存220。其中,该计算模块210可以是神经网络计算装置200中,用于实现各项计算功能的模块。比如,该计算模块210可以包括卷积计算单元211,激活计算单元212,池化计算单元213,以及Eltwise计算单元214等。其中,卷积计算单元211可以用于执行卷积计算。作为一种可能的实现,该卷积计算单元211可以包括一个或多个乘加器,或者其他能够实现卷积计算的部件。激活计算单元212可以用于执行激活处理。池化计算单元213可以用于实现池化处理的功能。Eltwise计算单元214可以用于实现逐个数据地(elementwise)的计算功能。
需要说明的是,上述示例中对于计算模块210的结构示例仅为一种可能的实现,在针对不同神经网络模型的计算中,计算模块210包括的用于实现各个功能的单元可以与上述示例相同,也可以不同。比如,在神经网络模型中没有激活计算以及池化计算的需求时,该计算模块210中就可以不设置激活计算单元212以及池化计算单元213。又如,在神经网络模型中没有elementwise的计算需求时,该计算模块210中就可以不设置Eltwise计算单元214。
作为一种可能的实现,该计算模块210可以为神经网络处理器(neural-network processing units,NPU),或者现场可编程门阵列(Field Programmable Gate Array,FPGA),或者中央处理器(Central Process ing Unit/Processor,CPU),或者图形处理器(Graphics Processing Unit,GPU)等能够实现对应计算功能的部件。需要说明的是,以计算模块210为NPU为例,该NPU可以是单核NPU,也可以是具有多个计算核心的多核NPU。本申请实施例对此不作限制。可以理解的是,本申请实施例提供的数据处理方法应用在单核NPU上时的处理逻辑,可以复用在多核NPU上。当该方案应用于多核NPU时,可以利用多核NPU的并行计算机制,进一步提升计算效率。示例性的,当NPU中存在多个计算核心时,可以采用内部互联(interconnect)的方式实现多个计算核心的互联。比如,可以采用片上网络(Network on Chip,NOC)的结构,实现多个计算核心的互联。可以理解的是,采用NOC的互联方式,可以使得根据网络结构动态地配置不同计算核心之间的互联关系,以便于根据各个计算核心的计算压力动态配置计算量,实现计算的动态调度,由此提升多核NPU的计算效率。
继续结合图2,在本申请实施例提供的神经网络计算装置200中还可设置有本地缓存220。该本地缓存220可以用于数据的快速读写。在本申请的一些实现中,为了节约神经网络计算装置200的成本,同时兼顾神经网络计算装置200的尺寸需求,本地缓存220可以为具有较小存储空间的存储介质。比如,以通过NPU实现计算模块210的功能为例,该本地缓存220就可以是NPU的内部缓存。在本申请中,该本地缓存220可以用于支持行缓存(line buffer)技术。比如,如图2所示,该本地缓存220中可以配置有多个行缓存。
作为一种示例,该多个行缓存可以分别对应到神经网络模型中的不同计算层。其中,一个计算层对应的行缓存的数量可以根据该计算层的核函数的窗口大小确定。比如,以卷积计算层的卷积窗口为M行N列为例。在本地缓存220中可以为该卷积计算层配置M行行缓存。类似的,对于神经网络模型中的其他计算层,也可在本地缓存220 中分别配置对应的行缓存。可以理解的是,由于核函数的行数一般较小,因此为神经网络模型的各个计算层配置的行缓存的数量总和也不会过大。对于目前的本地缓存220空间而言,都可以实现上述配置。
需要说明的是,在本申请的另一些实现中,对于计算层的行缓存的配置,也可以结合当前计算层以及相关计算层的步长,和/或神经网络模型中的特殊计算(比如elementwise计算)需求进行的。具体的配置情况将在后续说明中详细陈述。
在以下示例中,以神经网络模型为卷积神经网络模型,该卷积神经网络模型具有如图1所示的结构,计算模块为单核NPU,本地缓存为NPU中的本地缓存,外部存储模块为DDR为例对本申请实施例提供的数据处理方法进行说明。以下说明中,将对采用本申请实施例提供的数据处理方法进行卷积层中各个卷积计算层的过程进行详细说明。可以理解的是,对于卷积神经网络模型中的其他层的计算,其过程可以参考该卷积层中的计算过程。作为一种示例,卷积神经网络包括的卷积层中可以设置有如图3所示的N个卷积计算层。如图3所示,这N个卷积计算层可以为层1,层2,……,层N。在进行卷积计算的过程中,层1的输入特征图可以为原始输入特征图。在层N完成卷积计算后获取的输出特征图可以称为卷积输出特征图。
在开始进行卷积计算时,NPU可以进行初始化。示例性的,在该初始化的过程中,NPU可以从DDR中读取与层1的卷积窗口行数对应的数据写入本地缓存中,为层1配置的行缓存中。示例性的,以下说明中将原始输入特征图的第i行第j列数据记为a
ij,i和j均为大于或等于1的整数。以层1的卷积核大小为A1行B1列为例。本地缓存中即可为层1配置A1行行缓存。在初始化过程中,NPU可以从DDR中读取原始输入特征图的前A1行数据,写入本地缓存中为层1配置的行缓存中。在完成初始化之后,NPU可以针对写入本地缓存的数据进行层1的卷积计算。比如采用层1对应的卷积窗口在A1行行缓存上,从左向右依次进行卷积计算,获取对应位置的卷积结果。
在本申请中,可以将卷积窗口从最左侧到最右侧执行的计算过程称为一个行程的计算。一个行程的计算包括对一行或多行数据中位于所述窗口中的部分数据的计算处理。在完成一个行程的计算之后,即可获取层1对应的输出特征图的第1行结果。该层1的输出特征图可以作为层2的输入特征图。因此,在每完成一个位置的卷积计算,NPU就可以将该计算结果存入本地缓存中,为层2配置的行缓存中的对应位置。比如,在完成层1第1个行程的卷积计算之后,层2对应的行缓存中就可以存储有层2对应的输入特征图的第1行数据。需要说明的是,在本申请的一些实现中,NPU可以随着层1中卷积计算的进行,从DDR读取新的数据覆盖层1的计算中不会在使用的数据,以便使得在完成1个行程的计算之后,层1可以继续执行下1个行程的计算,而不需等待NPU从DDR中读取数据。
示例性的,以层1的卷积核步长为S1为例。层1卷积窗口完成在对应行程中的第1次卷积计算之后,原始输入特征图中的前S1行S1列数据(如数据a
11到数据a
(S1,S1))就不会再次被使用。因此,NPU可以在层1完成第1次卷积计算之后,从DDR中读取原始输入特征图中的第S1+1行到第2×S1行前S1列数据,存入本地缓存中原先存储有前S1行S1列数据的位置。依次类推,在完成层1的第1个行程的卷积计算之后,为层1配置的A1行行缓存中就已经存储有进行下1个行程的卷积计算所需的数据。当 然,在本申请的另一些实现中,NPU也可以在完成1个行程的计算之后,从DDR中读取下1个行程需要的数据,存入层1的A1行行缓存中。
通过上述步骤,即可完成层1的一个行程的卷积计算。由此获取层2的第1行输入特征图的数据。以层2的卷积窗口为A2行B2列为例。NPU可以在层1继续按照上述方案,执行其他行程的卷积计算,直至获取层2进行卷积计算所需的A2行数据。也就是说,NPU可以在层1执行A2个行程的卷积计算,由此获取A2行数据作为层2的输入特征图存储在本地缓存中为层2配置的A2行行缓存中。接着,NPU就可以开始执行层2的第1个行程的卷积计算。进而获取层3的第1行输入特征图,并存储在本地缓存中为层3配置的行缓存中。
可以理解的是,在层2完成1个行程的卷积计算之后,要想继续执行层2的第2个行程的计算,就需要层1执行对应的卷积计算以获取层2的第2个行程的卷积计算所需的新的输入特征图数据。比如,以层2的步长为S2为例。在层2进行行程1的卷积计算的过程中,在层2对应的行缓存中存储的是经过层1的A2个行程计算获取的A2行数据。那么在层2完成行程1的卷积计算之后,NPU就可以返回层1,执行层1的(A2+1)到(A2+S2)行程的计算。由此获取新的S2行数据存入A2对应的行缓存中。以便于NPU可以在层2中继续执行第2个行程计算。由此类推,在之后的计算过程中,NPU每完成层1的S2个行程的计算,就可以执行层2的1个行程的计算,其他层类似。在完成层N的1个行程计算时,就可以获取卷积层输出特征图的第1行数据。
作为一种示例,图4示出了本申请实施例提供的一种数据处理方法的流程示意图。如图4所示,该方法可以包括至少两个计算过程(如过程1和过程2)。其中,过程1是在开始进行神经网络计算时的流程。过程2则是层2能够执行1个行程的计算开始的后续流程。如图所示,该流程具体可以包括:S401、计算层1行程1。S402、将层1行程1的输出特征图存入层2对应的行缓存中。S403、确定在层2无法进行层2行程1的计算,退回到层1进行计算。S404、计算层1行程2。S405、将层1行程2的输出特征图存入层2对应的行缓存中。S406、确定在层2无法进行层2行程1的计算,退回到层1进行计算。S407、计算层1行程3。S408、将层1行程3的输出特征图存入层2对应的行缓存中。
可以理解的是,该示例中是以层2的卷积窗口为3行为例进行说明的。因此,层2进行1次行程的计算需要层1执行3个行程的计算。对应的,如果层2的卷积窗口为A2行时,则层2进行第1次行程的计算,就需要层1执行A2个行程的计算。至此即可完成过程1的步骤。可以理解的是,在该过程1中,由于在开始计算时,层2对应的行缓存中没有数据,因此,需要层1连续进行3个行程的计算,才能够获取层2执行1个行程的数据。
以下对过程2进行说明。其中,由于层2的行缓存中已经存储有数据,因此,层1此后每完成S2个行程的计算,就可以向层2更新S2个行缓存的数据,使得层2可以执行下1个行程的计算。其中,S2为层2的步长,S2为大于或等于1的整数。以下以S2=1为例。S409、计算层2行程1。S410、确定在层2无法进行层2行程2的计算,退回到层1进行计算。S411、计算层1行程4。S412、将层1行程4的输出特征图存入层2对应的行缓存中。S413、计算层2行程2。可以看到,在过程2中,层1每执 行1个行程的计算,层2就可以继续执行1个行程的计算。由此即可行程不同层之间的流水线处理效果。
上述说明中,是以层1每完成1个行程的计算之后,将该行程对应的1行计算结果存入层2对应的行缓存中为例进行说明的。在本申请的另一些实现中,如上述说明中的,层1可以在执行1个行程中的计算过程中,每获取1个卷积窗口位置对应的计算结果,就将该数据存入层2的行缓存中的对应位置。
需要说明的是,图4中仅其中示出了层1-层2的计算逻辑,其他层的计算逻辑可以采用该流程示意的步骤。比如,层3的输入特征图可以为层2的输出特征图。因此,在层2每次执行1个行程的过程中获取1个计算结果,就可将该结果存入层3的行缓存中。在层2完成1个计算行程之后,层3的行缓存中就可以被更新1行数据。NPU可以判断层3是否可以执行1个新的行程的计算,如果可以,则执行层3的计算行程。如果不行,则返回层2进行计算,而如果层2可以执行下1个行程的计算,则执行层2的下1个行程的计算,如果不行,那么继续向前回退,一直回退到可以执行下1个行程的计算。在执行该层的1个行程计算之后,就可以向下一层的行缓存中更新1行数据,并执行下一行的下1个行程的计算。依次类推,即可完成如图3所示的N个计算层的卷积计算。
可以看到,通过上述说明,如果在卷积神经网络模型中,完成卷积层的计算之后没有其他层的计算,那么NPU就可以将该第1行数据的写入DDR中。其中,NPU可以是在获取1个数据后,直接将该数据写入DDR中的。NPU也可以是在获取1行数据之后,一同写入DDR中的。而如果在卷积神经网络模型中,完成卷积层的计算之后,还有其他层的计算,比如进行激活/池化计算,或者elementwise计算,那么NPU就可以在获取卷积层输出特征图的数据时,将该数据写入后续计算对应的行缓存中,并依照上述卷积层中的计算执行。
可以理解的是,基于上述图4的说明。由于存在回退机制(即NPU可以判断当前层是否可以执行1个行程的计算,如果不行,可以回退到上一层进行计算),因此,在计算层的步长不为1时,也可以使用该方案实现流水线的计算机制。这样,只需要为每个计算层配置对应于其卷积窗口行数的行缓存(如为层1配置A1行行缓存),即可实现该计算层中所有的卷积计算。而且由于当前层的卷积计算结果直接被写入本地缓存中下1个计算层的行缓存中,用于下1个计算层的计算,形成流水线的计算效果。因此,在进行下一层的计算过程中,NPU不需要再从DDR中读取中间数据。由此就可以使得NPU在对如图3所示的卷积层进行卷积计算的过程中,从DDR中读取的数据量仅为1个原始输入特征图的数据量。而如果没有后续计算需求,那么写入DDR中的数据量仅为1个卷积层输出特征图的数据量。显而易见的,采用上述示例中的方案可以显著地降低NPU与DDR的读写数据压力,因此能够起到明显的控制由于多次大量的数据读写造成的功耗开销。另外,由于NPU从DDR中进行原始输入特征图的数据读入时,每次只需要读入A1行数据,因此不会出现由于读写带宽的限制,影响整个***的计算效率的情况。相比于目前分片后对slice计算的方案,本申请实施例提供的数据处理方法由于不需要对数据进行重复计算,因此能够节省对重复数据计算过程中的计算带宽以及相应的功耗开销。
为了能够更加清楚地对本申请实施例提供的方案进行说明,以下图5-图13,以原始输入特征图中包括6×6个数据,即i=j=6;层1卷积窗口的大小为2×2,即A1=B1=2,层1卷积窗口的步长S1=1;对于层2,A2=B2=3,S2=2为例,对采用本申请实施例提供的方案进行的卷积计算进行示例性的说明。请参考图5,为该示例中层1卷积计算的第1个行程的过程示意图。在初始化过程中,NPU可以从DDR中将原始输入特征图中的a
11到a
26两行数据,分别读入本地缓存中,为层1配置的行缓存1和行缓存2中。在完成上述初始化之后,NPU就可以开始针对层1的卷积计算。比如,NPU可以将层1对应的卷积窗口,在行缓存1和行缓存2的数据上进行滑动计算,由此完成一个行程的计算。
可以理解的是,每完成一个卷积窗口位置的计算,即可获取输出特征图对应位置的1个数据。另外,层1的输出特征图可以为层2的输入特征图,因此,在本示例中,每获取层1的输出特征图的1个数据,就可以将该数据存入本地缓存中,为层2配置的行缓存中的对应位置。比如,结合图6,以对a
11到a
26的计算结果分别为b
11到b
15为例。层1卷积窗口在a
11到a
22的位置计算获取的结果为b
11。在计算行程中每滑动一次,即可获取一个新的结果。比如,计算获取b
11之后,层1卷积窗口向右滑动1个数据,继续进行卷积计算可以获取b
12。以此类推,层1卷积窗口滑动到最右侧,即可计算获取b
15。在本示例中,在获取b
11后,NPU即可将该结果写入为层2配置的第一行行缓存(如行缓存3)中的第1列。在获取b
12后,NPU即可将该结果写入行缓存3中的第2列。以此类推,在层1中完成一个行程的计算之后,即可获取行缓存3中的所有数据(如b
11到b
15)。
可以理解的是,在层1进行第1个行程的卷积计算时,卷积窗口在完成第1个位置(即a
11到a
22所在位置)的计算后,则a
11就不会再参与后续的计算。因此,在本示例中,NPU可以在完成第1个行程中的第1次卷积计算之后,如图7所示,NPU可以从DDR中读取第2个行程的计算中第1次卷积计算需要补充的数据,即a
31。NPU可以将该a
31替换a
11存储在层1的行缓存(如行缓存1)中,以便于后需进行第2个行程的卷积计算。
用a
31替换a
11之后,为层1配置的行缓存中存储的数据如图8所示。可以看到,在NPU进行层1的第1个行程(如称为行程1)的第2次卷积计算时,NPU中已经存储有a
31以用于行程2的第1次卷积计算。需要说明的是,在该示例中,是以NPU完成1次卷积计算后即从DDR中读取新的数据替换不会再参与后续计算的数据为例的。在本申请的另一些实现中,NPU也可以在完成第1个行程的所有卷积计算之后,从DDR中一次性地读取多个数据,替换行缓存中不会再参与计算的数据。由此可以降低NPU从DDR中读取数据的次数。
在完成层1行程1的卷积计算之后,层1的行缓存中可以存储有能够支持下1个行程(如行程2)的卷积计算所需的数据。比如,数据替换的结果如图9中的(a)所示。可以理解的是,为了保证层1行程2的计算顺利进行,NPU可以适当调整行缓存中数据的位置,以便于在卷积窗口滑动的过程中,能够覆盖正确的数据。比如,NPU可以将行缓存中存储的数据以行为单位进行回卷,以达到交换行缓存1和行缓存2中存储数据的效果。即,经过回卷,可以将层1的行缓存中的数据由如图9中的(a)所 示的分布,转换成如图9中的(b)所示的分布。
需要说明的是,如图9中的(b)中的回卷操作是可选的步骤。在本申请的一些实现中,并不需要对数据进行该回卷的处理。可以理解的是,在进行卷积计算的过程中,其实质可以理解为卷积窗口各个位置上的数据分别与输入特征图对应位置上的数据的乘积,之后将这些乘积进行加运算以获取此次卷积计算的结果。因此,在进行卷积计算的过程中,只要保证乘积运算的卷积窗口的数据与输入特征图的数据具有正确的对应关系,就可以不对行缓存上的数据顺序进行调整。
在根据图8-图9中的(b)所示的处理之后,在层1的行缓存上已经存储了可以用于进行层1行程2卷积计算的所有数据。这样,如果继续执行层1行程2的卷积计算,就可以获取层2的输入特征图的第2行数据。比如,参考图10,卷积窗口可以重新移动到行缓存1和行缓存2的最左侧,开始执行层1行程2的计算。每计算一次,按照层1卷积窗口对应的步长向右滑动以进行下一次计算。如此类推,直至完成行程2中的所有卷积计算。由此即可获取层2的输入特征图的第2行数据,比如NPU可以将这些数据(如b
21-b
25)写入用于存储层2的输入特征图的第2行数据的行缓存4中。
可以理解的是,层2进行行程1的计算时,需要至少获取3行输入特征图的数据。因此,在过程1中,NPU可以执行层1行程1到层1行程3的卷积计算,以获取层2进行行程1的计算所需数据。在获取层2进行行程1的计算所需数据(如b
11-b
35)之后,NPU可以执行层2的行程1的计算,即进入过程2的计算。在层2中的卷积计算过程与在层1中的卷积计算过程类似。比如,参考图11,层2的行程1计算可以获取层3(如果存在)的输入特征图数据(比如c
11-c
13),NPU可以将这些数据存入本地缓存中为层3配置的行缓存(如行缓存6)中。
需要说明的是,在本示例中,由于层2的步长为2。也就是说,在完成层2行程1的计算之后,层2中的卷积窗口会向下滑动2个数据开始行程2的计算。比如,在层2行程1中的第1次卷积计算时,层2的卷积窗口覆盖的输入特征图数据为b
11-b
35。在层2行程2中的第1次卷积计算时,层2的卷积窗口覆盖的输入特征图数据为b
31-b
55。而为了获取b
31-b
55的数据,NPU就需要过程2的计算中,执行层1的2个行程(如层1行程4以及层1行程5)计算。也就是说,当下一层的步长大于1时,在如图4所示的过程2的计算中,当前层就需要连续执行与下一层步长对应次数的行程的计算,才能获取能够支持下一层的1个行程的计算对应的输入特征图数据。
示例性的,在本申请的一些实现中,在完成层1行程3的计算之后,可以执行层2行程1的计算。此后,NPU确定无法继续执行层2行程2的计算,就可以回退到层1的计算中,执行层1行程4的计算。在完成层1行程4的计算之后,NPU可以确定是否能够进行层2行程2的计算。由于层2的步长为2,因此无法根据当前的数据进行层2行程2的计算。这样,就可以继续回退到层1的计算中,执行层1行程5的计算。在完成层1行程5的计算之后,NPU可以确定是否能够进行层2行程2的计算。由于已经获取了层2行程2计算所需的输入特征图数据(如b
31-b
55),因此NPU可以接着执行层2行程2的计算。后续过程类似,此处不再赘述。
在本申请的另一些实现中,由于卷积神经网络模型在开始计算时,各个计算层的步长已经确定,因此NPU可以在完成层1行程4的计算之后,直接进行层1行程5的 计算。由此一次性地获取能够支持层2行程2计算的数据。这样能够减少NPU判断逻辑的执行次数,但是,需要为层1配置更多的行缓存以便能够在本地缓存中同时存储支持层1可以快速地执行两个行程的计算所需数据。
可以理解的是,上述对步长不同时计算逻辑的说明,仅以相邻的层1和层2为例。对于设置有更多计算层的神经网络模型而言,该计算逻辑可以推广到更多层的实施。比如,层2之后还需进行层3的计算,而层3的步长为3。那么,NPU就可以在过程2中,在层1连续执行更多次数的计算,以便于在层2能够连续更多行程的计算,使得不通过判断逻辑,即可获取层3执行下1个行程计算所需的数据。当然,这样就会使得需要为层1和层2配置更多的行缓存。此方案可以应用于本地缓存的存储空间余量较为充足的情况下,能够减少NPU的判断逻辑,提升***计算效率。
而在另一些场景下,为了能够节省本地缓存的存储空间,可以按照有判断逻辑参与的方法执行计算。比如,在层2执行1个行程的计算之后,NPU判断层3是否可以执行下1个行程的计算,如果可以,则继续执行层3下1个行程的计算。反之,如果无法执行层3下1个行程的计算,则回退到层2执行下1个行程的计算。类似的,如果当前层2对应的行缓存中的数据无法支持层2执行下1个行程的计算,则继续回退到上一层(如层1)执行下1个行程的计算。
这样,通过上述说明,可以理解的是,基于本申请实施例提供的数据处理方法,可以使得本地缓存中只需为各个计算层配置与核函数(如卷积计算中的卷积核的卷积窗口)的行数对应数量的行缓存,即可参考图4所示的方法流程以及上述说明中的方案,获取流水线的计算效果。使得NPU不需要多次大量地从DDR中读取数据,也不需要多次大量地将数据写入DDR中。由此节省读写数据引入的功耗开销,同时由于中间数据均存储在本地缓存的行缓存中,因此能够显著地提升计算效率。
需要说明的是,本申请实施例提供的方案,也能够应用于具有特殊计算需求的场景下。示例性的,结合图3,以卷积神经网络模型中还需要进行elementwise计算为例。参考图12,示出了一种卷积神经网络中的计算逻辑示意图。如图12所示,在卷积神经网络中,除了如图3所示的卷积层计算之外,还需要进行elementwise的计算。示例性的,该elementwise的计算可以包括加运算。该加运算的对象可以是卷积层输出特征图,以及原始输入特征图经过计算层W计算之后获取的输出特征图W。其中,该计算层W可以是与卷积层中任意一个卷积计算层相同的计算层,也可以是不同于卷积层中任意一个卷积计算层的计算层。在该示例中,elementwise的加运算可以在Eltwise计算层中进行。结合前述说明,在NPU的本地缓存中可以为计算层W配置对应的行缓存。比如,以在计算层W中进行卷积计算,其窗口大小为A
w行B
w列为例。那么在本地缓存中可以为计算层W配置A
w行行缓存。类似的,Eltwise计算层在本地缓存中也可配置有对应的行缓存。示例性的,该行缓存的数量可以是大于或等于1的整数。
在执行elementwise的加运算之前,NPU可以分时执行卷积层的卷积计算以及在计算层W中的卷积计算。比如,NPU可以执行计算层W对应的行程1的卷积计算,以获取输出特征图W的第1行数据。NPU可以将该输出特征图W的第1行数据存入Eltwise计算层对应的行缓存中。此后,NPU可以执行卷积层中的卷积计算,在获取卷积层输出特征图的第1行数据时,可以将该卷积层输出特征图的第1行数据输入到Eltwise计算层, 以便于NPU在Eltwise计算层中,对已经存储的输出特征图W的第1行数据以及卷积层输出特征图的第1行数据进行加运算,由此即可获取Eltwise输出特征图的第1行数据。如果没有其他层的计算,那么NPU可以将该Eltwise输出特征图的第1行数据输出到DDR中,作为一轮卷积神经网络计算的输出特征图的一部分。
在获取Eltwise输出特征图的第1行数据之后,NPU可以按照前述示例中的方法,更新计算层W对应行缓存中的数据,以便进行第2个行程的卷积计算。此外,NPU还可以根据前述方法进行卷积层的卷积计算,以获取卷积层输出特征图的第2行数据,在Eltwise计算层中进行加运算,由此获取Eltwise输出特征图的第2行数据。以此类推,即可获取一轮卷积神经网络计算的输出特征图的完整数据。可以看到,根据本申请实施例提供的方法,执行包括elementwise运算在内的特殊运算时,只需要为对应的计算层配置能够存储其计算过程中的1个行程所需数据的行缓存即可,这样就能够使得不需要多次大量从DDR中读写数据,由此避免数据读写引入的功耗开销。
需要说明的是,上述示例中,是以单独为计算层W配置行缓存为例进行说明的。在本申请的另一些实现中,计算层W的行缓存也可与层1进行复用。示例性的,在该实例中,计算层W中的卷积计算与层1中的卷积计算的相同点在于,都是对原始输入特征图中的数据的卷积计算,只是其卷积核可能不同。
在本示例中,在计算层W和层1的卷积核不同时,可以为计算层W和层1配置共同的行缓存,该行缓存的数量可以根据计算层W和层1的卷积核分别对应的卷积窗口中,行数较大的卷积窗口确定。比如,计算层W的卷积窗口行数A
w为3,层1的卷积窗口行数A1为2。那么,就可以为计算层W和层1共同配置包括3行行缓存的本地存储以便支持计算层W和层1的卷积计算。
需要说明的是,由于计算层W和层1可能需要使用不同的卷积核对存储在行缓存中的数据进行卷积计算,因此,对于行缓存中数据的更新,可以是在分别完成计算成W和层1在对应位置的卷积计算之后进行的。比如,结合图7的说明。在只需对输入特征图执行层1的卷积计算时,可以是如图7所示的,在完成层1行程1中的第1次卷积计算之后,NPU从DDR中读取a
31替换a
11。而在本示例中,由于a
11不仅需要参与层1行程1的第1次卷积计算,还需要参与计算层W的行程1的第1次卷积计算。因此,可以在a
11完成层1行程1的第1次卷积计算以及计算层W的行程1的第1次卷积计算之后,NPU从DDR中读取a
31替换a
11。这样,可以达到行缓存复用的效果,由此节省本地缓存的存储空间。
可以理解的是,上述示例中,均是以NPU为单核为例进行说明的。比如,结合图4所示的流程示意图,NPU可以按照时序执行其中的过程1和过程2。当然,结合对图4所示方案的说明,过程1和过程2中部分步骤的执行先后顺序可以不同于图4,此处不再赘述。目前,随着芯片加工工艺的提升,多核NPU也经常被使用。当在多核NPU中使用本申请实施例提供的数据处理方法时,能够实现计算并发,达到进一步提升计算效率的效果。
示例性的,以NPU具有两个计算核心为例。图13示出了单核场景和多核场景下依照时序的计算流程对比示意图。如图13所示,在单核场景下,NPU中的计算核心(如核1)可以在T1时刻执行层1行程4的计算。核1可以在T2时刻执行层2行程1的 计算。核1可以在T3时刻执行层1行程5的计算。对应的,在NPU为双核处理器时(即在双核场景下),NPU中的一个计算核心(如核1)可以在T1时刻执行层1行程4的计算。核1可以在T2时刻执行层1行程5的计算。在T3时刻执行层1行程6的计算。而层2的计算可以由NPU的另一个计算核心(如核2)执行。比如,在T2时刻,核2可以在核1执行层1行程5的计算时,执行层2行程1的计算。在T3时刻,核2可以在核1执行层1行程6的计算时,执行层2行程2的计算。
显而易见的,相比于单核NPU的计算流程,多核NPU的计算过程中,可以实现多个计算过程的并发,由此使得NPU可以在获取层2行程1计算所需数据之后,同时执行层1下1个行程的计算以及层2行程1的计算,而不需等待完成层2行程1的计算之后,再回退到层1执行下1个行程的计算。需要说明的是,上述示例中,是以核1执行层1的计算,核2执行层2的计算为例进行说明的。在本申请中,并不存在对于计算核心和计算层的计算的对应关系限制。也就是说,在本申请的另一些实现中,同一个计算核心中也可以执行不同计算层的计算。比如,在核1本身的计算能力(比如用吞吐量标识)较大,核2吞吐量较小时,那么核1可以在完成层1的计算之外,还可以通过分时复用的方式,处理部分层2的计算,从而保证吞吐量的一致。由此实现计算带宽的充分利用,以提升多核NPU的工作效率。
上述主要从处理器的角度对本申请实施例提供的方案进行了介绍。可以理解的是,上述处理器为了实现上述功能,其包括了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的单元,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对处理器对应的数据处理装置进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。可选的,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
请参考图14,为本申请实施例提供的一种数据处理装置1400的结构示意图。该数据处理装置1400可以应用于进行神经网络计算,该神经网络包括N个计算层,N为大于或等于2的整数。该数据处理装置1400中设置有本地缓存。如图14所示,该数据处理装置1400包括:获取单元1401,用于获取第一数据,该第一数据用于进行第一计算层的第一计算行程,该第一计算层是该N个计算层中的任一个计算层。存储单元1402,用于将该第一数据存储在该第一计算层的第一行缓存中,该第一计算层的第一行缓存包括在该本地缓存中。计算单元1403,用于计算该第一计算层的第一计算行程,以获取与该第一计算层的第一计算行程对应的第二数据,其中,该第一计算层的第一计算行程包括使用该第一计算层的卷积窗口对该第一数据的一行或多行数据的卷积计算。存储单元1402,还用于将该第二数据存储在第二计算层的第一行缓存中,该第二计算层的第一行缓存包括在该本地缓存中,该第二计算层是该N个计算层中,该 第一计算层之后的计算层。计算单元1403,还用于在该第二计算层的第一行缓存中存储的累积的数据能够进行该第二计算层的第一计算行程的情况下,计算该第二计算层的第一计算行程,以获取与该第二计算层的第一计算行程对应的第五数据,其中,该第二计算层的第一计算行程包括使用该第二计算层的卷积窗口对该第二数据的一行或多行数据的卷积计算。
在一种可能的设计中,计算单元1403,还用于在累积的数据无法进行该第二计算层的第一计算行程的情况下,计算该第一计算层的第二计算行程,该第一计算层的第二计算行程是该第一计算层的第一计算行程后的计算行程。在一种可能的设计中,第一行缓存的行数等于第一计算层的卷积窗口的行数。在一种可能的设计中,获取单元1401,还用于从外部存储器中读取该第一数据,该第一数据是该外部存储器中存储的输入特征图的至少部分,该外部存储器是与该处理器耦接的存储介质。在一种可能的设计中,第一数据是外部存储器中存储的输入特征图的部分,获取单元1401,还用于从该外部存储器中获取第三数据,该第三数据是输入特征图中另一部分,该第三数据用于进行该第一计算层的第二计算行程。将该第三数据覆盖存储第四数据,该第四数据是该第一数据中,不再参与该第一计算层的计算的数据。在一种可能的设计中,存储单元1402,还用于在进行该第一计算层的第一计算行程的过程中,每获取第一计算层的卷积窗口在一个位置的计算结果,将该计算结果存储在第二计算层的第一行缓存中。在一种可能的设计中,获取单元1401,还用于获取与第二计算层的第一计算行程对应的第五数据。存储单元1402,将所述第五数据存储在第三计算层的第一行缓存中,所述第三计算层的第一行缓存包括在所述本地缓存中;所述第三计算层是所述N个计算层中,所述第二计算层之后的计算层,所述第五数据用于进行所述第三计算层的卷积计算。
上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。即,以上任一单元可以软件、硬件或二者结合实现,以实现如方法所示功能。包括以上单元的数据处理装置1400可以是集成在以上所述处理器内的部分,如处理器内功能硬件或运行于处理器内功能软件。例如,所述任一单元以软件模块实现,则其运行于如图2所示的神经网络计算装置200上。
请参考图15,为本申请实施例提供的一种电子设备1500的结构示意图。该电子设备1500可以包括:处理器1501和存储器1502。该存储器1502用于存储计算机执行指令。示例性的,在一些实施例中,当该处理器1501执行该存储器1502存储的指令时,使得该电子设备1500执行如图4所示的S401-S413中一个或多个步骤,以及电子设备需要执行的其他操作。在一些实施例中,该电子设备1500可以设置有如图2所述的神经网络计算装置200。处理器1501可以参考图2的神经网络计算装置200。
需理解,本实施例的处理器包括但不限于之前所述CPU、NPU、FPGA、CPU、GPU和DSP(数字信号处理器)中的一个或多个。以上处理器可以一个或多个芯片的方式实现。当处理器集成于一个芯片时,该芯片也称之为片上***(SoC)。
需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。本申请实施例提供的对焦装置,用于执行上述对焦方法中终端的功能,因此可以达到与上述对焦方法相同的效果。
在上述实施例中的功能或动作或操作或步骤等,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包括一个或多个可以用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包括这些改动和变型在内。
Claims (10)
- 一种数据处理方法,其特征在于,所述方法应用于进行神经网络计算的处理器,所述神经网络包括N个计算层,N为大于或等于2的整数;所述处理器中设置有本地缓存;所述方法包括:获取第一数据,所述第一数据用于进行第一计算层的第一计算行程,所述第一计算层是所述N个计算层中的任一个计算层;将所述第一数据存储在所述第一计算层的第一行缓存中,所述第一计算层的第一行缓存包括在所述本地缓存中;计算所述第一计算层的第一计算行程,以获取与所述第一计算层的第一计算行程对应的第二数据,其中,所述第一计算层的第一计算行程包括使用所述第一计算层的卷积窗口对所述第一数据的一行或多行数据的卷积计算;将所述第二数据存储在第二计算层的第一行缓存中,所述第二计算层的第一行缓存包括在所述本地缓存中,所述第二计算层是所述N个计算层中,所述第一计算层之后的计算层;在所述第二计算层的第一行缓存中存储的累积的数据能够进行所述第二计算层的第一计算行程的情况下,计算所述第二计算层的第一计算行程,以获取与所述第二计算层的第一计算行程对应的第五数据,其中,所述第二计算层的第一计算行程包括使用所述第二计算层的卷积窗口对所述第二数据的一行或多行数据的卷积计算。
- 根据权利要求1所述的方法,其特征在于,所述方法还包括:在所述累积的数据无法进行所述第二计算层的第一计算行程的情况下,计算所述第一计算层的第二计算行程,所述第一计算层的第二计算行程是所述第一计算层的第一计算行程后的计算行程。
- 根据权利要求1或2所述的方法,其特征在于,所述第一行缓存的行数等于所述第一计算层的卷积窗口的行数。
- 根据权利要求1-3中任一项所述的方法,其特征在于,在所述第一计算层是所述神经网络的第一个计算层时,所述获取第一数据,包括:从外部存储器中读取所述第一数据,所述第一数据是所述外部存储器中存储的输入特征图的至少部分,所述外部存储器是与所述处理器耦接的存储介质。
- 根据权利要求4所述的方法,其特征在于,所述第一数据是所述外部存储器中存储的输入特征图的部分,所述方法还包括:从所述外部存储器中获取第三数据,所述第三数据是所述输入特征图中另一部分,所述第三数据用于进行所述第一计算层的第二计算行程;将所述第三数据覆盖存储第四数据,所述第四数据是所述第一数据中,不再参与所述第一计算层的计算的数据。
- 根据权利要求1-5中任一项所述的方法,其特征在于,所述将所述第二数据存储在第二计算层的第一行缓存中,包括:在进行所述第一计算层的第一计算行程的过程中,每获取所述第一计算层的卷积窗口在一个位置的计算结果,将所述计算结果存储在所述第二计算层的第一行缓存中。
- 根据权利要求1-6中任一项所述的方法,其特征在于,在获取与所述第二计算 层的第一计算行程对应的第五数据之后,所述方法还包括:将所述第五数据存储在第三计算层的第一行缓存中,所述第三计算层的第一行缓存包括在所述本地缓存中;所述第三计算层是所述N个计算层中,所述第二计算层之后的计算层,所述第五数据用于进行所述第三计算层的卷积计算。
- 一种处理器,其特征在于,所述处理器包括一个或多个计算核心,以及本地缓存,所述处理器被配置为实现如权利要求1-7中任一项所述的数据处理方法。
- 一种电子设备,其特征在于,电子设备包括一个或多个如权利要求8所述的处理器以及一个或多个存储器;所述存储器与所述处理器耦合,所述存储器存储有计算机指令;当所述处理器执行所述计算机指令时,使得所述电子设备执行如权利要求1-7中任一项所述的数据处理方法。
- 一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括计算机指令,当所述计算机指令运行时,执行如权利要求1-7中任一项所述的数据处理方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/CN2021/074548 WO2022160310A1 (zh) | 2021-01-30 | 2021-01-30 | 一种数据处理方法和处理器 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116472537A true CN116472537A (zh) | 2023-07-21 |
Family
ID=82652937
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202180077853.3A Pending CN116472537A (zh) | 2021-01-30 | 2021-01-30 | 一种数据处理方法和处理器 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN116472537A (zh) |
WO (1) | WO2022160310A1 (zh) |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107862374B (zh) * | 2017-10-30 | 2020-07-31 | 中国科学院计算技术研究所 | 基于流水线的神经网络处理***和处理方法 |
CN111582451B (zh) * | 2020-05-08 | 2022-09-06 | 中国科学技术大学 | 图像识别层间并行流水线型二值化卷积神经网络阵列架构 |
CN111767986A (zh) * | 2020-06-24 | 2020-10-13 | 深兰人工智能芯片研究院(江苏)有限公司 | 一种基于神经网络的运算方法及装置 |
-
2021
- 2021-01-30 CN CN202180077853.3A patent/CN116472537A/zh active Pending
- 2021-01-30 WO PCT/CN2021/074548 patent/WO2022160310A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2022160310A1 (zh) | 2022-08-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP4036803A1 (en) | Neural network model processing method and apparatus, computer device, and storage medium | |
US20180032911A1 (en) | Parallel information processing apparatus, information processing method and non-transitory recording medium | |
CN111465943B (zh) | 一种集成电路和用于神经网络处理的方法 | |
CN111028360B (zh) | 一种3d图像处理中数据读写方法及***、存储介质及终端 | |
CN112905530B (zh) | 片上架构、池化计算加速器阵列、单元以及控制方法 | |
US11853866B2 (en) | Implementation of a neural network in multicore hardware | |
US11163686B2 (en) | Method and apparatus for accessing tensor data | |
EP3844610B1 (en) | Method and system for performing parallel computation | |
JP7419574B2 (ja) | 膨張畳み込み加速演算方法及び装置 | |
JP2022137247A (ja) | 複数の入力データセットのための処理 | |
WO2021244045A1 (zh) | 一种神经网络的数据处理方法及装置 | |
CN116431562B (zh) | 一种基于加速处理器的多头注意力机制融合计算分配方法 | |
GB2599910A (en) | Implementation of a neural network in multicore hardware | |
CN111767243A (zh) | 数据处理方法、相关设备及计算机可读介质 | |
CN111756802A (zh) | 一种数据流任务在numa平台上的调度方法及*** | |
CN116472537A (zh) | 一种数据处理方法和处理器 | |
WO2023124304A1 (zh) | 芯片的缓存***、数据处理方法、设备、存储介质及芯片 | |
US20220138563A1 (en) | Method and device with deep learning operations | |
CN113392959A (zh) | 一种在计算***中重构架构的方法及计算*** | |
WO2021120036A1 (zh) | 数据处理装置和数据处理方法 | |
US11544213B2 (en) | Neural processor | |
US20220114015A1 (en) | Electronic device and method with scheduling | |
US20240127056A1 (en) | Computational storage for an energy-efficient deep neural network training system | |
CN116894462A (zh) | 一种数据处理方法和装置 | |
CN117151191A (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 |