CN115878547A - 计算装置、利用计算装置实施卷积运算的方法及相关产品 - Google Patents

计算装置、利用计算装置实施卷积运算的方法及相关产品 Download PDF

Info

Publication number
CN115878547A
CN115878547A CN202111131388.5A CN202111131388A CN115878547A CN 115878547 A CN115878547 A CN 115878547A CN 202111131388 A CN202111131388 A CN 202111131388A CN 115878547 A CN115878547 A CN 115878547A
Authority
CN
China
Prior art keywords
circuit
data
convolution
output
dimension
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111131388.5A
Other languages
English (en)
Inventor
请求不公布姓名
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Cambricon Technologies Corp Ltd
Original Assignee
Cambricon Technologies Corp Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Cambricon Technologies Corp Ltd filed Critical Cambricon Technologies Corp Ltd
Priority to CN202111131388.5A priority Critical patent/CN115878547A/zh
Priority to PCT/CN2022/113302 priority patent/WO2023045638A1/zh
Publication of CN115878547A publication Critical patent/CN115878547A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/544Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices for evaluating functions by calculation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/084Backpropagation, e.g. using gradient descent

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • General Engineering & Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Computer Hardware Design (AREA)
  • Neurology (AREA)
  • Complex Calculations (AREA)

Abstract

本披露公开了一种计算装置、利用计算装置实施卷积运算的方法及相关产品。该计算装置可以包括在组合处理装置中,该组合处理装置还可以包括接口装置和其他处理装置。该计算装置与其他处理装置进行交互,共同完成用户指定的计算操作。组合处理装置还可以包括存储装置,该存储装置分别与计算装置和其他处理装置连接,用于存储该计算装置和其他处理装置的数据。本披露的方案对卷积运算进行优化,提高了运算处理效率。

Description

计算装置、利用计算装置实施卷积运算的方法及相关产品
技术领域
本披露一般地涉及数据处理领域。更具体地,本披露涉及一种配置用于执行卷积运算的计算装置、利用计算装置实施卷积运算的方法、芯片和板卡。
背景技术
目前,深度学习(Deep Learning)已经成为机器学习中的重要分支,也大力助推着人工智能(AI)的发展。深度学习的核心技术——深度神经网络(DNN)已在诸多行业有着广泛的应用。
神经网络是人工智能、深度学习中最为关键的技术之一,其中卷积神经网络(Convolution Neural Network,CNN)是最为重要的一种网络类型。卷积神经网络中最为关键的计算即为卷积层(Conv layer)的卷积运算(Convolution Operation)。卷积层的功能是对输入数据进行特征提取,通过多层卷积,能够抽取复杂特征,以保证网络具有足够的表达能力和泛化能力。神经网络模型中包含了大量的、各种类型的卷积运算,卷积运算的计算性能极大地影响整个神经网络模型的计算性能。当神经网络模型应用于不同领域时,例如语音识别、机器翻译、图像处理等等,其对应的输入特征图和权值的各个维度大小可能各有不同。为了充分利用深度学习处理器的硬件优势,需要针对不同规模的、不同类型的卷积运算进行优化,以提高执行神经网络模型的计算性能。
发明内容
为了至少解决如上所提到的一个或多个技术问题,本披露在多个方面中提出了一种计算装置,其通过对输入特征图和权值进行分块处理,可以使得各种维度尺寸的数据能够适配卷积运算的硬件,从而提高卷积运算的计算效率。本披露实施例的卷积运算可以是各种神经网络模型中的运算,这些神经网络模型可以应用于各种领域,诸如图像处理、语音处理、文本处理等等,这些处理例如可以包括但不限于识别和分类。
在第一方面中,本披露实施例提供了一种计算装置,配置用于执行卷积运算,所述计算装置包括主处理电路,所述主处理电路用于:获取输入特征图和/或卷积核,其中所述输入特征图和卷积核已分别按卷积拆分方案拆分成多个拆分单元并转换其维度存储顺序,其中所述卷积拆分方案是根据所述输入特征图拆分前的最低存储维度的大小确定的,所述卷积拆分方案指示所述拆分单元的形状,一个拆分单元包含的数据量不超过硬件单次最大运算量,并且一个拆分单元内的数据连续存储为一个数据行;以及多个从处理电路,所述多个从处理电路用于对所述输入特征图和卷积核的对应拆分单元执行卷积运算。
在第二方面中,本披露实施例提供了一种芯片,其包括前述第一方面任一实施例的计算装置。
在第三方面中,本披露实施例提供了一种板卡,其包括前述第二方面的任一实施例的芯片。
在第四方面中,本披露实施例提供了一种由前述第一方面任一实施例的计算装置实施卷积运算的方法。
通过如上所提供的计算装置、芯片、板卡以及由计算装置实施卷积运算的方法,本披露实施例的方案针对不同维度尺寸的输入特征图应用不同的卷积拆分方案,以适应硬件运算装置的处理能力,从而充分利用多个从处理电路的并行处理能力,可以有效提高卷积运算的运算效率。此外,在一些实施例中,输入特征图和权值可以通过不同的数据路径进行传输,从而支持输入特征图和权值的多种复用方式,进一步优化卷积运算,减小数据访存量。
附图说明
通过参考附图阅读下文的详细描述,本公开示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本公开的若干实施方式,并且相同或对应的标号表示相同或对应的部分,其中:
图1示出本披露实施例的板卡的结构图;
图2示出本披露实施例的组合处理装置的结构图;
图3示出本披露实施例的单核或多核计算装置的处理器核的内部结构示意图;
图4a-图4c示出可以应用本披露实施例的几种示例性卷积运算原理示例;
图5示出了根据本披露实施例的计算装置的示意性结构框图;
图6示出了根据本披露实施例的一种示例性数据存储顺序;
图7a-7d示出了根据本披露实施例的几种示例性分组模式;
图8示出了根据本披露实施例的输入特征图的示例性拆分示意图;
图9a-9d示出了根据本披露实施例的第二存储电路中的数据存储示意图;
图10a-10b示出了根据本披露实施例的运算电路的输出点划分示意图;
图11示出根据本披露实施例的Forward16方案的拆分和存储示意图;
图12示出根据本披露实施例的Forward16方案中的单次运算示意图;
图13示出根据本披露实施例的Forward16方案中的滑动卷积示意图;
图14示出根据本披露实施例的Forward16方案中滑动卷积结果的累加示意图;
图15示出根据本披露实施例的Forward16拆分方案的输出数据格式示意图;
图16示出根据本披露实施例的Forward4方案的拆分和存储示意图;
图17示出根据本披露实施例的Forward4方案中的单次运算示意图;
图18示出根据本披露实施例的Forward4方案中的滑动卷积示意图;
图19示出根据本披露实施例Forward4方案的输出数据格式示意图;
图20示出根据本披露实施例的Forward1方案中运算电路的输出点划分示意图;
图21示出根据本披露实施例的Forward1方案中的单次运算示意图;
图22示出根据本披露实施例的Forward1方案中的滑动卷积示意图;
图23示出根据本披露实施例Forward1方案的输出数据格式示意图;
图24示出根据本披露实施例的Update1方案中第二存储电路中的数据存储示意图;
图25示出根据本披露实施例的Update1方案中的滑动卷积示意图;
图26示出根据本披露实施例Update1方案的输出数据格式示意图;
图27a-图27b示出根据本披露实施例的Update4方案中不同分组模式下第二存储电路中的示例性存储内容;
图28示出根据本披露实施例的Update4方案中的单次运算过程示意图;
图29示出根据本披露实施例的Update4方案中的滑动卷积过程示意图;以及
图30示出根据本披露实施例的Update4方案的输出数据格式示意图。
具体实施方式
下面将结合本披露实施例中的附图,对本披露实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本披露一部分实施例,而不是全部的实施例。基于本披露中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本披露保护的范围。
应当理解,本披露的权利要求、说明书及附图中可能出现的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本披露的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本披露说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本披露。如在本披露说明书和权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本披露说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。
示例性硬件环境
图1示出本披露实施例的一种板卡10的结构示意图。如图1所示,板卡10包括芯片101,其是一种系统级芯片(System on Chip,SoC),或称片上系统,集成有一个或多个组合处理装置,组合处理装置是一种人工智能运算单元,用以支持各类深度学习和机器学习算法,满足计算机视觉、语音、自然语言处理、数据挖掘等领域复杂场景下的智能处理需求。特别是深度学习技术大量应用在云端智能领域,云端智能应用的一个显著特点是输入数据量大,对平台的存储能力和计算能力有很高的要求,此实施例的板卡10适用在云端智能应用,具有庞大的片外存储、片上存储和强大的计算能力。
芯片101通过对外接口装置102与外部设备103相连接。外部设备103例如是服务器、计算机、摄像头、显示器、鼠标、键盘、网卡或wifi接口等。待处理的数据可以由外部设备103通过对外接口装置102传递至芯片101。芯片101的计算结果可以经由对外接口装置102传送回外部设备103。根据不同的应用场景,对外接口装置102可以具有不同的接口形式,例如PCIe接口等。
板卡10还包括用于存储数据的存储器件104,其包括一个或多个存储单元105。存储器件104通过总线与控制器件106和芯片101进行连接和数据传输。板卡10中的控制器件106配置用于对芯片101的状态进行调控。为此,在一个应用场景中,控制器件106可以包括单片机(Micro Controller Unit,MCU)。
图2是示出此实施例的芯片101中的组合处理装置的结构图。如图2中所示,组合处理装置20包括计算装置201、接口装置202、处理装置203和存储装置204。
计算装置201配置成执行用户指定的操作,主要实现为单核智能处理器或者多核智能处理器,用以执行深度学习或机器学习的计算,其可以通过接口装置202与处理装置203进行交互,以共同完成用户指定的操作。
接口装置202用于在计算装置201与处理装置203间传输数据和控制指令。例如,计算装置201可以经由接口装置202从处理装置203中获取输入数据,写入计算装置201片上的存储装置。进一步,计算装置201可以经由接口装置202从处理装置203中获取控制指令,写入计算装置201片上的控制缓存中。替代地或可选地,接口装置202也可以读取计算装置201的存储装置中的数据并传输给处理装置203。
处理装置203作为通用的处理装置,执行包括但不限于数据搬运、对计算装置201的开启和/或停止等基本控制。根据实现方式的不同,处理装置203可以是中央处理器(central processing unit,CPU)、图形处理器(graphics processing unit,GPU)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(digital signal processor,DSP)、专用集成电路(application specificintegrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本披露的计算装置201而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算装置201和处理装置203整合共同考虑时,二者视为形成异构多核结构。
存储装置204用以存储待处理的数据,其可以是DRAM,为DDR内存,大小通常为16G或更大,用于保存计算装置201和/或处理装置203的数据。
图3示出了计算装置201为单核或多核装置时处理核的内部结构示意图。计算装置301用以处理计算机视觉、语音、自然语言、数据挖掘等输入数据,计算装置301包括三大模块:控制模块31、运算模块32及存储模块33。
控制模块31用以协调并控制运算模块32和存储模块33的工作,以完成深度学习的任务,其包括取指单元(instruction fetch unit,IFU)311及指令译码单元(instructiondecode unit,IDU)312。取指单元311用以获取来自处理装置203的指令,指令译码单元312则将获取的指令进行译码,并将译码结果作为控制信息发送给运算模块32和存储模块33。
运算模块32包括向量运算单元321及矩阵运算单元322。向量运算单元321用以执行向量运算,可支持向量乘、加、非线性变换等复杂运算;矩阵运算单元322负责深度学习算法的核心计算,即矩阵乘及卷积。
存储模块33用来存储或搬运相关数据,包括神经元存储单元(neuron RAM,NRAM)331、权值存储单元(weight RAM,WRAM)332、直接内存访问模块(direct memory access,DMA)333。NRAM 331用以存储输入神经元、输出神经元和计算后的中间结果;WRAM 332则用以存储深度学习网络的卷积核,即权值;DMA 333通过总线34连接DRAM 204,负责计算装置301与DRAM 204间的数据搬运。
示例性卷积运算类型
基于前述硬件环境,在一个方面中,本披露实施例提供了一种计算装置,其配置用于执行卷积运算,从而可以对例如神经网络模型中的卷积运算进行优化。神经网络模型中的卷积层可以执行卷积运算,通过对输入特征图(也称为输入数据、神经元或输入神经元)应用卷积核(也称为过滤器、权值等)做卷积处理,从而进行特征提取。卷积层内部可以包含多个卷积核,组成卷积核的每个元素对应一个权重系数和一个偏差量bias。
神经网络模型中可能包含各种卷积运算层,例如执行正向、常规3D卷积运算的卷积层、执行深度(Depthwise)卷积运算的反卷积层。而在反向训练中,可能需要执行反向的深度卷积运算或叉乘卷积运算。本披露实施例可以针对这些不同类型的卷积运算进行优化。
在常规3D卷积运算中,假设卷积层中输入特征图(Feature map)张量形状表示为X[N Hi Wi Ci],卷积核(kernel)的张量形状表示为K[Co Kh Kw Ci],输出的结果为Y[N HoWo Co],那么,简化的卷积运算的数学计算公式可以表示如下:
Yin,jc,jh,jw=∑0≤ic≤ci,0≤ih≤kh,0≤iw≤kwXin,ic,jh×sh+ih,jw×sw+iw×Kjc,ic,ih,iw (1)
上式中,X是输入数据,Y是输出数据,K是卷积核,Kh和Kw是K的长和宽,sh和sw是在长和宽方向上的步长(stride),公式忽略了偏差量bias,填充pad和膨胀dilation,并且假设输入数据X已经做了填充,卷积核已经做了膨胀。公式忽略了N维度和C维度,神经网络模型的正向计算在N维度上的计算都是独立的,在C维度上是全连接的。卷积核在工作时,会按照一定的步长扫过输入特征,在卷积窗口内对输入特征做矩阵元素乘法求和并叠加偏差量。在常规3D卷积运算中,H、W和Ci方向的对位乘积结果会进行累加,因此称为3D卷积。但是这种3D卷积存在约束条件:卷积核的Ci维度大小和输入特征图的Ci维度大小相等,因此卷积核不在Ci方向滑动,是一种伪3D卷积。为了区别于本文中其他卷积运算,上述卷积运算称为3D卷积运算。
图4a示出了可以应用本披露实施例的示例性常规3D卷积运算原理示例。
图中示例性示出了大小为[N Hi Wi Ci]的四维输入数据X,其可以表示成N个Hi×Wi×Ci大小的立体矩形410a。图中还示例性示出了大小为[Co Kh Kw Ci]的四维卷积核K,其可以表示成Co个Kh×Kw×Ci大小的立体卷积核420a。输入数据X与卷积核K的卷积结果得到输出数据Y,其为[N Ho Wo Co]大小的四维数据,可以表示成N个Ho×Wo×Co大小的立体矩形430a。
图中还具体示出了一个卷积运算示例,其中输入数据为6×6×3大小的输入特征图440a,省去N维度;卷积核为3×3×3大小的立体卷积核450a,针对单个卷积核Co;输出数据为4×4的输出特征图460a。具体运算过程如下:
卷积核450a按照一定的步长扫过输入特征图440a,在卷积窗口470a内对输入特征做矩阵元素乘法求和并叠加偏差量。也即,输出特征图460a中每个位置上的值由每个输入特征图的对应区块和对应卷积核做二维卷积运算之后再加和得到。例如,图中示出了输出特征图460a上(0,0)位置的值(也即卷积输出点)由输入特征图中黑色立方体框出的卷积窗口470a与立体卷积核450a进行二维卷积运算得到3个值,再加和得到最终值。
为了得到其他位置的输出,可以在输入特征图440a上移动卷积核450a的位置,也即移动卷积输出点的卷积窗口。在图中示例中,卷积步长(Sx,Sy)为(1,1),当横向(宽度方向)向右或纵向(高度方向)向下移动一格后做卷积运算,可以分别得到输出特征图460a上(0,1)或(1,0)位置的值。
从上面的描述可知,在神经网络的一个卷积层中,有N组输入特征图,每组包含Hi×Wi×Ci个信息,其中Hi和Wi分别是输入特征图的高度和宽度,Ci是输入特征图的个数,也称为输入通道数。卷积层有Ci×Co个Kh×Kw大小的卷积核,其中Ci是输入通道数,Co是输出特征图的个数(或输出通道数),Kh和Kw分别是卷积核的高度和宽度。输出特征图包含Ho×Wo×Co个信息,其中Ho和Wo分别是输出特征图的高度和宽度,Co是输出通道数。此外,在卷积运算中,还会涉及到卷积步长(Sx,Sy),卷积步长的大小会影响输出特征图的尺寸。
图4b示出了可以应用本披露实施例的示例性深度卷积运算原理示例。
深度卷积与常规3D卷积相比,区别在于深度方向不进行累加,此处的深度方向是指输入通道Ci。在常规3D卷积中每个卷积核都需要与输入特征图的所有图层(输入通道)计算并累加,所以每个卷积核的输入通道数等于输入特征图的输入通道数。而深度卷积中每个卷积核都是单通道的,一个卷积核负责一个通道,一个通道只被一个卷积核卷积。因此,深度卷积有时候也称为2D卷积,也即只在H和W维度上滑动累加。
如图所示,输入特征图410b的维度尺寸为12×12×3,也即包括三个通道,每个通道包括12×12的图像。在此深度卷积中分别使用3个卷积核420b,每个卷积核都是单通道的,其尺寸例如为5×5×1。每个卷积核仅对输入特征图410b的一个通道做卷积,这样的卷积每次都得出大小为8×8×1的输出,之后再将这些输出堆叠在一起创建一个8×8×3的图像,最终得出一个大小为8×8×3的输出特征图430b。从图中可以看出,输出特征图的深度(通道数)保持与输入特征图一致。
由于在深度卷积中输入通道不进行累加,因此在涉及深度卷积时,其输入特征图、卷积核和输出特征图的维度都可以简化成C(通道)、H(高度)、W(宽度)三个维度。
在神经网络模型训练的反向传播中,涉及到神经元梯度和权值梯度的计算,如下所示:
Figure BDA0003280666330000061
Figure BDA0003280666330000062
其中,top_diff、bottom_diff分别为神经元梯度,W是本次迭代的权值,△W是本次迭代计算的权值梯度,
Figure BDA0003280666330000063
是反向传播中的计算,类似于卷积运算。相对于反向传播方向上,前一层的bottom_diff是当前层的top_diff,当前层的bottom_diff是下一层的top_diff,由此可以反向逐层传递误差。
在公式(2)的计算中,top_diff与W之间的运算类似于输入神经元和权值W之间的运算过程,其中top_diff相当于输入特征图。
在公式(3)的计算中,top_diff与bottom_data之间的运算类似于深度卷积运算,其中top_diff相当于卷积核,在bottom_data的XY方向上滑动累加,其运算原理可以参考图4b。在此运算场景中,top_diff与bottom_data的尺寸通常都比较大。因此,本披露实施例针对此种场景下的卷积运算(简称反向深度卷积)也提供优化方案。
在反向传播中,对于执行常规3D卷积运算的卷积层,其反向过程中的运算可以称为叉乘卷积运算。本披露实施例同样可以针对这种卷积运算提供优化方案。
图4c示出了可以应用本披露实施例的叉乘卷积运算原理示例。
图中示例性示出了大小为[Ho Wo Co]的三维数据top_diff,其可以表示成Ho×Wo×Co大小的立体矩形410c;图中还示出了大小为[Hi Wi Ci]的三维数据bottom_data,其可以表示成Hi×Wi×Ci大小的立体矩形420c。top_diff与bottom_data执行叉乘卷积运算后得到输出数据430c,其是大小为[Co Kh Kw Ci]的四维数据,其可以表示成Co个Kh×Kw×Ci大小的立体矩形430c。与图4a对比可以看出,图4c的叉乘卷积相当于常规3D卷积的反向运算,也即通过输出特征图(top_diff)和输入特征图(bottom_data),计算出卷积核。图4c中省去了N维度。
具体地,对于top_diff中每一个HoWo面的数据,也即针对每个Co值的HoWo面,复制出Ci份,得到Ho×Wo×Ci的数据440c。将该数据440c与bottom_data执行深度卷积运算(参考图4b的示意图),也即Ci方向不累加,从而得到输出460c,其为Kh×Kw×Ci大小的三维数据。针对每个HoWo面,重复该复制和深度卷积运算,即可得到Co个Kh×Kw×Ci大小的三维数据,也即得到四维的卷积核430c,其大小为Co×Kh×Kw×Ci。
在本文中,输入特征图(Feature map)、输入数据、神经元或输入神经元可互换使用;卷积核、过滤器或权值可互换使用。此外,H(高度)和Y维度可互换使用,W(宽度)和X维度可互换使用。相应地,输入特征图的H维度可以表示为Hi或Yi,输出特征图的H维度可以表示为Ho或Yo,W维度类似表示。在本披露实施例中,每个卷积输出点具有对应的卷积窗口,卷积窗口的形状等于卷积核的形状。每个卷积输出点的值对应于其卷积窗口内的输入特征图与权值的对位乘累加结果。此外,无论涉及哪种类型的卷积运算,所涉及的数据都可以分为输入特征图、卷积核和输出特征图。例如,在反向运算中,top_diff对应卷积核,bottom_data对应输入特征图,△W对应输出特征图。
示例性计算装置
在本披露实施例中,可以采用主从结构的计算装置来实施上述卷积运算。进一步地,可以为输入特征图和卷积核配置不同的数据通路,从而提高访存效率。
图5示出了根据本披露实施例的计算装置500的示意性结构框图。可以理解,该结构可以视为图3中单个处理核的运算模块的内部结构细化,也可以视为在多个图3所示处理核的运算模块基础上联合的功能划分框图。如图5所示,本披露实施例的计算装置500可以配置用于执行各种类型的卷积运算,其可以包括主处理电路(MA)510和多个从处理电路(SL)520,图中示出了16个从处理电路SL0~SL15。本领域技术人员可以理解,从处理电路的数量可以更多或更少,取决于具体的硬件配置,本披露实施例在此方面没有限制。
主处理电路和从处理电路之间以及多个从处理电路之间可以通过各种连接相互通信。在不同的应用场景中,多个从处理电路之间的连接方式既可以是通过硬线布置的硬连接方式,也可以是根据例如微指令进行配置的逻辑连接方式,以形成多种从处理电路阵列的拓扑结构。本披露实施例在此方面没有限制。主处理电路和从处理电路可以相互配合,由此实现并行运算处理。
为了支持运算功能,主处理电路和从处理电路可以包括各种计算电路,例如可以包括向量运算单元及矩阵运算单元。向量运算单元用以执行向量运算,可支持向量乘、加、非线性变换等复杂运算;矩阵运算单元负责深度学习算法的核心计算,例如矩阵乘和卷积。
从处理电路例如可以用于根据运算指令,对相应的数据并行执行中间运算得到多个中间结果,并将多个中间结果传输回主处理电路。
通过将计算装置500设置成主从结构(例如一主多从结构,或者多主多从结构,本披露在此方面没有限制),对于正向运算的计算指令,可以根据计算指令将数据进行拆分,从而通过多个从处理电路对计算量较大的部分进行并行运算以提高运算速度,节省运算时间,进而降低功耗。
在本披露一些实施例中,通过利用不同的数据通路传输输入特征图和权值,可以支持输入特征图和权值的多种复用方式,从而减小运算期间的数据访存量,提升处理效率。
具体地,计算装置500中还可以包括第一存储电路530和第二存储电路540,用于分别存储经由不同数据通道传输的数据。可选地,该第一存储电路530和第二存储电路540可以是同一存储器划分形成的两个存储块,也可以是两个独立的存储器,此处不做具体限定。
第一存储电路530可以用于存储多播数据,也即第一存储电路中的数据将通过广播总线传输给多个从处理电路,这些从处理电路接收到相同的数据。可以理解,通过广播总线可以实现广播和多播。多播是指将一份数据传输到多个从处理电路的通信方式;而广播是将一份数据传输到所有从处理电路的通信方式,是多播的一个特例。由于多播和广播都对应一对多的传输方式,本文中未对二者特意区分,广播和多播可以统称为多播,本领域技术人员根据上下文可以明确其含义。
第二存储电路540可以用于存储分发数据,也即第二存储电路中的数据将分别传输给不同的从处理电路,每个从处理电路接收到不同的数据。
通过分别提供第一存储电路和第二存储电路,可以支持针对待运算的数据以不同传输方式进行传输,从而通过在多个从处理电路之间复用多播数据来降低数据访存量。
在一些实施例中,可以将输入特征图和卷积核中之一确定为多播数据并存储在第一存储电路中,以在运算期间通过广播方式将数据传输给调度的多个从处理电路。对应地,可以将输入特征图和卷积核中另一确定为分发数据并存储在第二存储电路中。这些分发数据可以在运算前分发给对应的从处理电路。
图5还示出了根据本披露实施例的从处理电路SL的内部结构示意图。如图所示,每个从处理电路520可以包括多个运算电路CU 521、第一缓冲电路522和第二缓冲电路523。图中示出了4个运算电路CU0~CU3。本领域技术人员可以理解,运算电路的数量可以更多或更少,取决于具体的硬件配置,本披露实施例在此方面没有限制。
在一些实施例中,第一缓冲电路522可以用于缓存分配给该从处理电路的权值或输入特征图。相应地,第二缓冲电路523则可以用于缓存分配给该从处理电路的输入特征图或权值。这两个缓冲电路均用于选取参与运算的数据。第一缓冲电路522的数据可以是来自例如第一存储电路530或第二存储电路540的多个数据行,对应地,第二缓冲电路523的数据可以来自例如第二存储电路540或第一存储电路530的多个数据行。取决于具体的复用方式,这些数据行可以在运算期间被分发给对应的运算电路CU 521或广播给该从处理电路520内的所有CU 521。
每个运算电路CU 521用于在每个运算周期内,针对分别从第一缓冲电路中选取的数据行和从第二缓冲电路中选取的数据行执行对位乘累加运算。
通过分别提供第一缓冲电路和第二缓冲电路,可以支持针对待运算的数据以不同传输方式进行传输,从而通过在单个从处理电路内的多个运算电路之间尽可能复用数据来降低数据访存量。
从处理电路520中还可以包括第三缓冲电路524,用于缓存各个运算电路CU 521的运算结果。
可以理解,虽然在图5中将各个处理电路与存储电路示出为分立的模块,但是根据不同的配置,存储电路与处理电路也可以合并成一个模块。例如,第一存储电路530可以与主处理电路510合并在一起,第二存储电路540则可以由多个从处理电路520共享,并为每个从处理电路分配独立的存储区域,加速访问。本披露实施例在此方面没有限制。此外,在该计算装置中,主处理电路和从处理电路可以属于同一处理器或芯片的不同模块,也可以属于不同处理器,本披露在此方面也没有限制。
示例性数据拆分和存储
在本披露实施例中,所涉及的多维数据的维度表征为(N,H,W,C)或(Co,H,W,Ci),其代表了数据在存储器中的存储顺序。可以理解,虽然多维数据具有多个维度,但是因为存储器的布局始终是一维的,因此多维数据与存储器上的存储顺序之间存在对应关系。多维数据通常被分配在连续的存储空间中,也即可以将多维数据进行一维展开,按顺序存储在存储器上。例如,在本披露实施例中,初始的输入特征图可以按照低维度(此处C/Ci为最低维度)优先方式,进行顺序存储;而为了优化卷积运算,在运算过程中或者在运算之前可以调整输入特征图的存储顺序,如后面将详细描述的。相邻的维度是指多维数据的维度信息表示中相互紧挨着的维度,例如,W和Ci相邻,相邻的维度也可以称为连续的维度。
在智能处理器中,出于算力的需要和面积功耗开销的考虑,硬件的主要运算单元是向量的乘加运算器。在硬件设计中实现各类卷积算法的支持,本质上是最大化地提取算法中的乘加运算,并且通过数据通路实现在片上RAM(诸如图3中的NRAM、WRAM等)和运算器之间高效地交换乘加运算的输入和输出数据。
硬件在存储上是以一行一行(缓存行)进行存储的,读、写、计算操作在整行对齐时效率最高,因此为了充分利用带宽,适配运算器阵列的访存量等需求,通常需要将数据进行向量化对齐。人工智能芯片的设计通常以Ci维度为最低维度,也即上述NHWC摆放顺序,Ci维度上的数据是连续的。因此,向量化对齐要求需要Ci维度的大小对齐到指定数值,例如对齐值M,从而以该对齐值M为单位进行存取数,M也可以称为硬件单次最大运算量。基于不同的硬件设计,M可以有不同的数值,例如64bit、128bit、256bit、512bit等。通常,运算器阵列的输入端口大小也与M相关,例如在输入数据位宽对称的情形下,运算器阵列的输入端口大小通常为M的2倍,也即一次性处理对齐值M规模的输入特征图数据和权值数据。当输入特征图的Ci维度较大时,比较容易满足上述对齐要求。
当输入特征图的Ci维度较小时,例如小于一个缓存行的大小,则需将Ci维度补齐到一行数据(例如,512比特),即填充无效数据0。这种填充会造成大量的冗余计算,导致资源浪费,降低了运算的效率。
在本披露实施例中,提出了一种卷积运算方案,其例如可以由图5的计算装置来执行。其中,主处理电路用于获取输入特征图和/或卷积核,输入特征图和卷积核已分别按照卷积拆分方案拆分成多个拆分单元并转换维度存储顺序,以使得一个拆分单元内的数据连续存储为一个数据行。取决于不同的硬件配置和/或其他考虑因素,输入特征图和卷积核的上述拆分和维度转换可以在不同位置、不同时间执行。在反向传播的神经元梯度更新过程中,可以将top_diff看成是输入特征图。
在一些实施例中,主处理电路可以包括分块电路,也即分块电路集成在主处理电路中,用于分别针对输入特征图和卷积核进行拆分和维度转换存储。例如,主处理电路可以从外部存储电路(例如DDR)读取原始存储格式的输入特征图和卷积核,然后利用分块电路对输入特征图和卷积核分别进行拆分和维度转换,之后将输入特征图和卷积核之一存储在第一存储电路中,而将另一存储在第二存储电路中。上述拆分过程可以在运算期间执行也可以在运算前执行,以准备好数据。
在另一些实施例中,主处理电路可以包括部分分块电路,该部分分块电路用于仅针对输入特征图和卷积核中被确定为多播数据的数据进行拆分和维度转换存储,而被确定为分发数据的数据则可以通过外部分块电路进行拆分和维度转换。例如,在一个示例中,被确定为分发数据的卷积核可以通过外部电路进行拆分和维度转换后,预先存储在第二存储电路中,其可以从片外存储电路直接存储到第二存储电路中,也可以经由第一存储电路再存储到第二存储电路中。
在又一些实施例中,主处理电路可以完全不包括分块电路或不执行分块电路的功能。在这些实施例中,输入特征图和卷积核由独立于主处理电路的分块电路进行拆分和维度转换存储。经拆分和维度转换后的输入特征图和卷积核之一可以存储在第一存储电路中,而另一可以存储在第二存储电路中。
可以根据输入特征图的最低存储维度(例如Ci)的大小,确定对应的卷积拆分方案,其中卷积拆分方案至少指示待运算数据的拆分单元的形状。一个拆分单元包含的数据量不超过硬件单次最大运算量。
在一些实施例中,一个拆分单元包含的数据量可以设置成硬件的一次性处理对齐值M,从而以拆分单元为单位进行运算处理,可以充分发挥硬件的算力,避免或减少无效计算。
在本披露的示例性描述中,不防假设M=512bit=64Byte,数据类型可以是Int8、Int16、Float16或Float32,并且输入特征图与卷积核的数据类型一致。由于数据类型至少需要1字节的宽度,并且运算处理的最小单位是一个数据,因此在下面的示例中均以字节为单位进行各种计算,例如M=64B,Ci=28B等等,其中有时候为了简洁起见省略单位。
当拆分单元的数据量等于M时,每个拆分单元的数据块形状为blockC*blockY*blockX,其可能存在多种情形,表1列出了其中的几种:
Figure BDA0003280666330000101
表1、数据块形状
从表1可以看出,有些数据块形状的X和Y维度尺寸相等(如深色行所示),这种形状可以简化后续的运算。因此在本披露实施例中,可以优选使用这种数据块形状对待运算数据进行拆分。
为了简便起见,将64B×1×1形状的拆分方案称为Forward64,将16B×2×2形状的拆分方案称为Forward16,将4B×4×4形状的拆分方案称为Forward4,将4B×4×4形状的应用于深度卷积运算的拆分方案称为Forward1,将4B×4×4形状的应用于反向深度卷积运算的拆分方案称为Update1,将4B×4×4形状的应用于叉乘卷积运算的拆分方案称为Update4。除了Forward64之外,这些拆分方案适合卷积计算中通道C比较小的场景,因此也可以统称为小卷积。在这些小卷积拆分方案中,一个拆分单元包括最低存储维度和至少一个其他存储维度的数据,并且一个拆分单元的总数据量不超过硬件单次最大运算量。
不同的卷积拆分方案可以适用于不同的运算场景,从而获得不同程度的性能优化。具体地,在一些实施例中,可以按照如下至少一项规则来确定对应的卷积拆分方案:
将输入特征图拆分前的最低存储维度Ci对齐到最近的M/4n的倍数,其中M是硬件单次最大运算量,
Figure BDA0003280666330000102
以及将拆分单元在最低存储维度上的大小Uci(也即blockC)确定为M/4n
存在多个最近的M/4n的倍数时,取M/4n中最大值作为Uci,或者取其中对齐填补量最小的M/4n作为Uci;以及
确定拆分单元在X和Y存储维度上的大小Ux(也即blockX)和Uy(blockY),使得Uci×Uy×Ux=M,其中优选Ux=Uy。
以下结合几个示例来描述上述规则的应用。所有示例中假设M=64,则M/4n可以是64、16和4。
在一个示例中,假设Ci=28,则对齐到最近的M/4n的倍数是4*7,此时将拆分单元在最低存储维度上的大小Uc(也即blockC)确定为4。当优选Ux=Uy,则可以确定拆分单元的形状为4B×4×4,也即Forward4方案。
在另一个示例中,假设Ci=112,若对齐到64*2=128,补零16个;若对齐到16*7=112,无需补零;若对齐到4*28=112,也无需补零。此时,最近的M/4n的倍数是16*7=4*28=112,根据规则,可以取M/4n中最大值16作为Uc。当优选Ux=Uy,则可以确定拆分单元的形状为16B×2×2,也即Forward16方案。
在确定了拆分方案之后,接着可以按照所确定的卷积拆分方案,将输入特征图和卷积核拆分成多个对应的拆分单元并转换其维度存储顺序,以使得一个拆分单元内的数据连续存储为一个数据行,从而方便后续以拆分单元(数据行)为单位进行读取处理。
在一些实施例中,对于三维或者四维的神经元或者权值的数据,将其全部划分为大小为blockC*blockY*blockX(Uc×Uy×Ux)大小的数据块,每一个数据块连续存储在例如M=64B的一行上,由此在读取一行数据时,实际取出一个数据块的数据。
具体地,可以从以第一维度存储顺序存储的待运算数据中,以拆分单元为单位,按第一读取顺序读取一个或多个拆分单元,将读取的拆分单元存储到对应的存储电路上,其中每个拆分单元内的数据按照第二维度存储顺序存储,拆分单元之间按照第三维度存储顺序存储。
图6示出了根据本披露实施例的一种示例性数据存储顺序。
如图所示,610表示待运算的四维张量的存储方式,包含N个3维的子张量,N在最高维度,也即四维张量的第一维度存储顺序为NHWC。注意,本文中H和Y、W和X可互换使用。每一个子张量被划分为更小的数据块或拆分单元,每一维的数据块的个数分别为C/Y/X。
中间的图620表示每一个子张量的存储方式,每个数据块被存储为连续的64Byte,也即一行。当读取数据块的顺序不同时,行之间的顺序也会相应地变化。在图中示例中,按照先C、然后X、最后Y的方向读取数据块,也即第一读取顺序为YXC,则各行之间按照Y*X*C的顺序存储,也即第三维度存储顺序为YXC或HWC。在此示例中,第三维度存储顺序与第一维度存储顺序相同。可以理解,也可以使用其他读取顺序,从而导致第三维度存储顺序与第一维度存储顺序不同,此处不再一一列举。
右侧的图630表示每一行内的顺序,也即每个数据块内的数据顺序,其形状为blockC*blockY*blockX,此时第二维度存储顺序为CYX或CHW。后面将结合各种示例性卷积拆分方案详细描述具体的拆分方案。
示例性分组运算和数据复用
前面描述了本披露实施例的计算装置的硬件结构以及数据的示例性拆分方案和存储方式,上述硬件结构可以为参与运算的输入特征图和权值提供不同的数据通路,从而利用不同的数据传输方式(例如,广播、多播、分发等)来减少运算期间的数据访存量,提高运算效率。卷积的计算是每一个输入特征图都需要和每一个Co的卷积核进行乘加运算,从而输出Co个输出特征图。然而,并不是片上空间一定能同时存储下所有规模的卷积核和输入特征图,因此,对于硬件而言存在一系列重复加载输入特征数据或者权值数据的操作,如何平衡重复加载输入特征数据还是权值数据对计算的效率会有一定影响。在实际运算中,为了减少频繁的片外访存,根据参与运算的数据的规模特性,可以采取不同的复用方式。在卷积运算中,主要有两种数据复用方式:卷积核复用和输入特征图复用。
根据复用的场景,卷积核复用又可以分为通道内卷积核复用和批次间卷积核复用。通道内卷积核复用是针对单个输出通道,也即一个输出特征图的情况,此时只有一组卷积核。对于每个输入特征图,多个卷积窗口可以复用相同的卷积核。批次间卷积核复用是针对批处理的情况,即对多个输入图像同时处理。多个输入图像采用相同的卷积核组进行处理,因此卷积核可以复用。
类似地,根据复用的场景,输入特征图复用可以分为通道内输入特征图复用和通道间输入特征图复用。通道内输入特征图复用是针对单个输出通道,对于每个输入特征图,其相邻的卷积窗口可以复用部分输入特征图的数据。通道间输入特征图复用是针对多个输出通道,也即有多个输出特征图(即多组卷积核)的情况,此时一个卷积窗口内的输入特征图可以与多组卷积核做卷积运算。
根据前面描述的卷积运算原理可知,Co维度(深度卷积为C维度)上的运算结果无需累加,因此不同Co上的运算分配在不同的运算电路上可以相对独立地进行。在输入通道数量较小的场景下,卷积核普遍也较小,例如Kh和Kw通常是个位数,Co与Ci的尺寸差不多。在这些实施例中,通常单轮运算中卷积核的输出通道Co维度的尺寸不超过所调度的从处理电路的数量,因此单个Co的运算需要由一个或多个从处理电路来完成。更一般地,即使Co维度较大时,也可以通过拆分成多轮运算来实现,其中每轮运算处理的Co尺寸不超过所调度的从处理电路的数量。由此,在一个示例中,可以首先基于卷积核的输出通道Co维度尺寸和可调度的从处理电路数量Ns,确定完成卷积运算所需的运算轮次以及各轮次运算中处理的Co数量或相应的分组模式。
在确定完成卷积运算所需的运算轮次时,各轮次所处理的Co数量可以不尽相同,从而即使对于同一Co维度尺寸也可能存在多种分配方式。
例如,以图5中示出的包括16个从处理电路SL的计算装置为例,假设所有从处理电路都可调度,也即Ns=16。当Co=40时,可以分成三轮运算,第一轮处理前16个Co值,每个SL处理一个不同的Co值;第二轮处理接下来的16个Co值,每个SL处理一个不同的Co值;最后一轮处理剩下的8个Co值,每2个SL处理一个不同的Co值。在另一种分配方式中,也可以分成两轮运算,第一轮处理前32个Co值,每个SL处理2个不同的Co值;最后一轮处理剩下的8个Co值,每2个SL处理一个不同的Co值。又例如,当Co=12时,可以分成单轮运算,每个SL处理一个不同的Co值,其中有4个SL空闲或进行无效运算。在另一种分配方式中,也可以分成三轮运算,每次处理4个连续的Co值,每4个SL处理1个不同的Co值,从而在每轮运算中利用所有可调度的从处理电路。可以理解,本领域技术人员还可以设想出更多其他分配方案。
由此可见,不管哪种分配方式,在单轮运算中,Co可能存在两种分配情况:多个从处理电路处理一个Co值,或者单个从处理电路处理一个或多个Co值。具体地,在处理Nco个输出通道的单个运算轮次中,每Rs个SL构成一个从处理电路组SLB,处理对应同一输出Co值的卷积核,Rs=[Ns/Nco],也即同一卷积核在同一SLB内的Rs个SL上复用,Rs表示卷积核在从处理电路之间的复用次数。与之相应地,输入特征图可以在各个从处理电路组SLB之间复用,Rn=[Ns/Rs],表示输入特征图在从处理电路之间的复用次数。
可选地或附加地,当每个从处理电路处理对应rn个Co值的卷积核,rn=[Nco/Ns],此时每个从处理电路处理的输入特征图可以重复用于rn个卷积核,rn表示输入特征图在单个从处理电路内的复用次数。可以考虑硬件缓冲空间限制等因素(例如图5中的第一缓冲电路和第二缓冲电路的大小)来确定单个从处理电路内可应用的最大卷积核复用次数rs和最大输入特征图复用次数rn。
考虑到硬件电路中的缓存大小限制和复用收益,在本披露一些实施例中暂时不考虑一个从处理电路在单轮运算中处理多个Co值的情况,而只考虑一个或多个从处理电路在单轮运算中只处理一个Co值的情况。
根据在单轮运算中处理同一Co值的从处理电路SL的个数,可以采用不同的分组模式。可以理解,优选对可调用的从处理电路SL平均分配,从而均衡算力,例如,每2个SL一组,从而16个SL可以同时处理8个Co值;或者每4个SL一组,从而16个SL可以同时处理4个Co值;等等。在一些实施例中,对于图5所示的包括Ns=16个SL的计算装置,可以选择如下几种分组模式:Group1模式、Group4模式和Group16模式。本领域技术人员可以理解,根据Ns的数值不同,可以有不同的分组模式,每种分组模式均可以参考本文给出的以上三种代表性分组模式进行对应的处理。
在一些实施例中,上述分组模式可以统一表示为GroupN,代表当前轮次运算中调度的所有从处理电路SL分为N组,每个从处理电路组SLB处理同一Co值,不同从处理电路组SLB处理不同Co值。对于总计16个SL可调度的场合下,N可以取1,4,16,分别对应上面的Group1、Group4和Group16。
图7a-7d示出了根据本披露实施例的几种示例性分组模式。图7a示出了Group1模式,图7b示出了Group16模式,图7c示出了一种Group4模式,以及图7d示出了另一种Group4模式。
如图7a所示,Group1模式是指所有可调度的16个SL属于一个组,共同处理一个Co值,例如SL0~SL15属于组G0。从而,针对该一个输出通道的运算被分配在16个SL上。在这种模式下,可以优先考虑将该输出通道的卷积核720以广播方式传输到各个SL,输入特征图710则进行拆分分配给各个SL,从而提高访存效率。
在一个实施例中,可以将卷积核存储在图5的第一存储电路530上,以利用广播通道进行传输。输入特征图则可以按照输出特征图的XY方向划分,存储在第二存储电路540上,以分配给不同的SL。由此,所有SL共同计算一个Co的输出特征图。后面将结合附图详细描述输入特征图的划分和存储。
如图7b所示,Group16模式是指所有可调度的16个SL分成16个组,也即每组一个SL,每个SL处理一个不同的Co值。例如SL0属于组G0,SL1属于组G1,以此类推,直至SL15属于组G15。在这种模式下,同一块输入特征图730可以在16个SL之间重复使用,因此可以优先考虑将输入特征图730以广播方式传输到各个SL,而对应不同Co的卷积核740则分发给对应的SL。
在一个实施例中,可以将输入特征图存储在图5的第一存储电路530上,以利用广播通道进行传输。卷积核则根据Co划分,存储在第二存储电路540上,以分配给不同的SL。由此,所有SL针对同一输入特征图计算不同Co的输出特征图。
Group4模式是指所有可调度的16个SL分成4个组,每组处理一个Co值。每个SL组(简称SLB)包括的SL数量等于Rs=Ns/4=4。例如SL0~SL3属于组G0,SL4~SL7属于组G1,SL8~SL11属于组G2,以及SL12~SL15属于组G3。这种模式介于Group1和Group16之间,因此可以将卷积核或输入特征图任一确定为多播数据,而将另一确定为分发数据。
在一个实施例中,可以将卷积核按照Co划分成4组,存储在图5的第一存储电路530上,以利用广播通道进行传输。输入特征图则可以按照输出特征图的XY方向划分为4份并复制4份,存储在第二存储电路540上,以分发给4个SLB。每个SLB获得相同的输入特征图,在SLB内再按照所划分的4份分发给其内的4个SL。由此,每个SLB中的所有SL共同计算一个Co的输出特征图,4个SLB则分别处理一个不同的Co。
在另一实施例中,可以将卷积核存储在图5的第二存储电路540上,而将输入特征图存储在第一存储电路530上,划分方式与前一实施例类似。
在这种模式下,卷积核在SLB之间的划分又可以有多种方式。
图7c示出了一种卷积核的Co分配方式770。在此方式中,将卷积核分成4组,按照Co以间隔1为单位划分至各组。例如,当Co=12时,分成的4组Co分别为{0,4,8}、{1,5,9}、{2,6,10}和{3,7,11}。每一次发送各组的一个Co,例如第一次发送Co=0~3,一个Co对应一个SLB,在一个SLB内的4个SL共用相同权值;第二次发送Co=4~7,依次类推。由此,每轮运算完成后,各个SLB输出的运算结果的Co维度是连续的。
图7d示出了卷积核的另一种Co分配方式780。在此方式中,将卷积核按照Co连续地平均分成4组。例如,当Co=12时,分成的4组Co分别为{0,1,2}、{3,4,5}、{6,7,8}和{9,10,11}。每一次发送各组的一个Co,例如第一次发送Co=0,3,6,9,一个Co对应一个SLB,在一个SLB内的4个SL共用相同权值;第二次发送Co=1,4,7,10,依次类推。由此,每个SLB在多轮运算中输出的运算结果的Co维度是连续的。
输入特征图的示例性拆分
从前面的描述可以看出,当多个SL共同处理一个Co值时,需要在这多个SL之间对输入特征图进行拆分,例如Group1分组模式需要将输入特征图拆分成16份,而Group4分组模式需要将输入特征图拆分成4份。
为了保证拆分的输入特征图可以共用卷积核,可以根据输出特征图的Ho/Wo方向来划分,从而映射回到输入特征图的划分。在一些实施例中,在每个从处理电路组内包括的Rs个从处理电路SL之间可以按如下划分输入特征图:根据对应的输出特征图的尺寸,将输出特征图在XY维度(也即Ho/Wo维度)上平均划分为Rs个形状相同的输出特征块;以及根据计算每个输出特征块所需的输入特征图区域,将输入特征图在XY维度(也即Hi/Wi维度)上划分为Rs个输入特征块,以分配给Rs个从处理电路。可以理解,取决于卷积核尺寸和卷积步长,输出特征图上相邻的输出点所对应的输入特征图可能会存在重叠。
图8示出了根据本披露实施例的输入特征图的示例性拆分示意图。在此示例中,将输入特征图划分成16份分配在16个SL上,对应Group1模式。
图中810代表单个Co的输出特征图,其在XY方向上按照4×4方式划分成16个形状相同的输出特征块,分别分配给SL0~SL15。继而,由这16个输出特征块可以映射到输入特征图820上,获得分别计算这16个输出特征块所需的16个输入特征图区域,其同样是将输入特征图在XY方向上划分。这16个输入特征图区域可以相应地分配给16个从处理电路SL。
根据前文描述,会按照确定的卷积拆分方案,以拆分单元为单位对输入特征图进行拆分,因此,上述实施例中对输入特征图的分块要使得划分的每个输入特征图块在XY方向上是拆分单元XY方向维度的倍数,也即在XY方向上可以按照拆分单元对齐。例如,在选择4×4×4的卷积拆分方案时,每个输入特征图块按4×4对齐;而在选择16×2×2的卷积拆分方案时,每个输入特征图块按2×2对齐。
对于输出特征图不按拆分单元(例如4×4或2×2)对齐的情况,需要相应的在输入特征图上填补(例如补0),使得实际计算的输出XY是按拆分单元(例如4×4或2×2)对齐的并且输入XY也是按拆分单元(例如4×4或2×2)对齐的。
本领域技术人员可以理解,也可以在输出特征图的XY方向按照其他规则进行拆分,例如按照1×16方式拆分成16个形状相同的输出特征块,分别分配给SL0~SL15。本披露实施例在此方面没有限制。此外,还可以理解,虽然前面结合从处理电路之间的拆分进行描述,但是这种拆分方式也可以应用于其他场景下的拆分,例如单个从处理电路SL内的运算电路CU之间的拆分,本披露实施例在此方面没有限制。
第二存储电路上的数据存储示例
如前所述,输入特征图或卷积核之一可以存储在图5的第一存储电路530上,二者中另一可以存储在第二存储电路540上。第一存储电路中的数据可以经由广播通路进行多播,而第二存储电路中的数据通常进行分发。通过合理地分配各个数据的存储方式,可以加快数据访存速度。在一些实施例中,第二存储电路可以为每个从处理电路SL分配一个存储区域,从而每个从处理电路运算所需的数据只需要从其对应的存储区域读取即可。
图9a-9d示出了根据本披露实施例的第二存储电路中的数据存储示意图。图中示例性示出了为例如Ns=16个从处理电路SL0~SL15分配的16块存储区域900~915。每个存储区域中存储该从处理电路要处理的卷积核或输入特征图。可以理解,取决于不同的分组模式,各个存储区域中的存储内容也会有所不用。
图9a示出了Group1模式下,输入特征图被拆分成16份FB0~FB15,存储在第二存储电路的各个存储区域中。对应每个SL的存储区域中存储一个连续的二维区域,这些二维区域是按照例如图8的方式拆分的。在每个二维区域中,按照前文描述的拆分单元按行存储,也即一行对应一个输入特征图的拆分单元。例如,假设拆分后的每个输入特征块包括4个拆分单元,也即4行数据,则在分配给SL0的存储区域1100中,按顺序存储有第一行Line01、第二行Line02、第三行Line03和第四行Line04输入特征图。每一行也可以称为一个输入特征行。
图9b示出了Group16模式下,卷积核根据Co划分,存储在第二存储电路的各个存储区域中,以分配给对应的SL。对应每个SL的存储区域中存储分配给其不同Co值的卷积核。例如,前文描述了两种Co分配方式,对应地,其存储方式也有两种。图9b中示出了其中一种,也即在每一轮运算中,将连续的Co值按顺序分配给各个SL。这样每轮运算完成后,各个SL输出的运算结果的Co维度是连续的。例如,图中示出第一轮运算中的Co=0~15的卷积核依次存储在16个存储区域900~915上;第二轮运算中的Co=16~31的卷积核顺次依次存储在16个存储区域900~915上;以此类推。可以理解,Group16模式下,也可能将输入特征图存储在第二存储电路上(未图示)。此时输入特征图无需拆分,直接被复制16份,分别存储在第二存储电路的各个存储区域中,以分配给对应的SL,从而每个SL可以针对相同的输入特征图、不同Co值的卷积核执行卷积运算。
图9c示出了Group4模式下一种可能的存储内容。在此图示示例中,输入特征图被拆分成4份并复制4份,存储在第二存储电路的各个存储区域中。具体地,每个从处理电路组SLB针对相同的输入特征图、不同Co的卷积核进行处理;而每个SLB内的4个SL分别处理一块拆分的输入特征图块。因此,图中用于4个SLB的存储区域的存储内容是相同的,例如900~903中的内容与912~915中的内容相同。进一步地,在每个SLB内,用于不同SL的存储区域存储不同的拆分输入特征块,例如900中存储输入特征块FB0,901中存储输入特征块FB1,以此类推。其他SLB的存储区域内也进行相同的存储分配,不再赘述。
图9d示出了Group4模式下另一种可能的存储内容。在此图示示例中,卷积核按照Co分成4组,存储在第二存储电路的各个存储区域中。具体地,卷积核按照Co以间隔1为单位划分至各组。例如,当Co=16时,通过多轮顺次分配给4个SLB,其中Co=0分配给G0{SL0~SL3},Co=1分配给的G1{SL4~SL7},Co=2分配给的G2{SL8~SL11},Co=3分配给G3{SL12~SL15};接着从Co=4开始又顺次分配给4个SLB。每个SLB内的4个SL共用相同权值。例如,存储区域900、901、902和903中存储相同的权值。同样地,Co也可以采用单个SLB内连续的方式,本领域技术人员参考前文描述可以推导其存储方式,此处不再详述。
单个从处理电路内的示例性卷积运算过程
在拆分好待运算数据并进行相应的摆放存储之后,就可以调度多个从处理电路对输入特征图和卷积核的对应数据行执行卷积运算,继而可以根据卷积拆分方案,对多个从处理电路返回的运算结果进行拼接处理,以得到输入特征图和卷积核的卷积运算的输出特征图。具体地,可以利用从处理电路中的多个运算电路CU以及各个缓冲电路(参见图5)来执行具体的卷积运算过程。取决于从处理电路内部缓冲电路的空间大小以及运算电路的算力限制,在每轮运算中通常需要执行多次计算来完成所需运算。
在一些实施例中,第一缓冲电路可以用于缓存输入特征图,其可能来自第一存储电路或第二存储电路;相应地,第二缓冲电路可以用于缓存卷积核,其可能来自第二存储电路或第一存储电路。如前文所提到,以拆分单元(一行数据)为单位进行卷积运算处理,可以充分发挥硬件的算力,避免或减少无效计算。因此,每个运算电路CU可以在每次计算时,针对分别从第一缓冲电路中选取的数据行(例如输入特征行)和从第二缓冲电路中选取的数据行(例如,权值行)执行对位乘累加运算。为了简便起见,以下描述针对单个从处理电路SL内的处理,可以理解,其他SL内进行类似的处理。
从前面描述可知,在针对常规3D卷积运算场景下,单个从处理电路内的所有运算电路计算对应同一输出通道Co的一个输出特征图或部分输出特征图。取决于从处理电路SL内第一缓冲电路和第二缓冲电路的缓冲空间大小、运算电路CU的处理能力(例如内部寄存器等),从处理电路可能无法一次计算完分配给其的输出特征图。因此,可以以运算电路单次运算能力(例如,单次计算Nop个输出点或部分和)为单位,划分输出特征块,每个输出特征块对应单个SL内所有可调度的NCU个运算电路的单次运算能力(NCU*Nop个输出点)。例如,以前文图5中每个SL包括4个CU为例,假设每个CU单次可以计算Nop=4个输出点或输出点的部分和,则单个SL单次可以计算4*4=16个输出点(或部分和)。因此,可以将输出特征图在XoYo维度上按照16个输出点对齐划分输出特征块,逐个计算各个输出特征块。可以理解,这16个输出点可以按照4*4形式,也可以按照1*16形式,本披露实施例在此方面没有限制。
在计算每个划分的输出特征块时,又可以进一步在这NCU个运算电路之间划分该输出特征块的输出点,以确定各个运算电路的处理对象。继而,可以根据输出点的划分,以拆分单元为滑动窗口,从第一缓冲电路中选取NCU个输入特征数据行分发给NCU个运算电路,从第二缓冲电路中选取对应的权值数据,广播给NCU个运算电路,从而通过复用权值数据来实现多个滑动窗口对应的输出点的并行计算。执行Nk次滑动选取,其中Nk根据卷积核在X和Y维度的尺寸和从处理电路单次运算所支持的最大卷积核尺寸中的较小值来确定。
在一些实施例中,当执行三维卷积运算时,可以按如下选取对应的权值数据:从第二缓冲电路中按照与在第一缓冲电路中对应的滑动方式选取1/Nop个权值行,将其复制Nop-1份扩展为一个扩展权值行,广播给从处理电路内的NCU个运算电路。
此时,每个运算电路可以在每次滑动选数期间,针对来自第一缓冲电路的一个输入特征行和来自第二缓冲电路的一个扩展权值数据行,以1/Nop个数据行为单位进行对位乘累加,得到Nop个部分和;以及将Nk个滑动选数期间计算得到的Nk*Nop个部分和按照对应的卷积输出点进行累加,得到并输出Nop个运算结果。
从处理电路在输出其内运算电路的输出点时,可以根据输出点的划分方式,按特定顺序输出其内多个运算电路计算的输出点,以使得连续输出的输出点在X和/或Y维度上连续,方便后续处理。在一些实施例中,前面提到的分块电路可以进一步将从各个从处理电路返回的运算结果以第四维度存储顺序存储。根据情况,分块电路还可以将运算结果转换为期望的维度存储顺序存储。
运算电路之间输出点的划分可以有多种方式,相应地滑动选数卷积过程以及输出点的输出顺序也有所不同。
图10a-10b示出了运算电路之间两种不同的输出点划分示意图。
图10a示出了根据本披露一些实施例为每个运算电路分配连续输出点的示意图。在这些实施例中,可以在NCU个运算电路之间将该输出特征块平均划分为NCU个形状相同的输出特征子块,每个输出特征子块包括Nop个输出点,从而每个运算电路分别负责计算其中一个输出特征子块。例如,图中以上面示例为例,示出了输出特征块1010a包括4*4个输出点,平均划分的每个输出特征子块1011a~1011d均包括2*2个输出点,每个运算电路每次计算连续的2*2个输出点(或部分和)。图中用不同的背景示出分配给4个不同运算电路CU0~CU3的输出点。
基于上述输出点划分,当通过滑动选数执行卷积运算时,可以根据计算输出特征子块所需的数据,与这NCU个输出特征子块位置相对应地,从第一缓冲电路中选取NCU个数据行进行运算。
例如,在输入特征数据的首次选数时,可以根据计算4个输出特征子块1011a~1014a所需的4个输入特征块,从对应的输入特征块中分别选取首个输入数据行,分发给4个运算电路。
在进行权值数据选取时,可以从第二缓冲电路中选取对应的权值数据,广播给NCU个运算电路,从而通过复用权值数据来实现多个运算电路对应的输出点的并行计算。
进一步地,在一些实施例中,为了充分发挥运算装置CU内部的算力(例如乘加运算器),例如单次计算Nop个输出点或部分和,可以在单个输入数据行内进行权值复用,从而同时计算Nop个输出点或部分和。
例如,在权值数据的选数时,可以只取1/Nop个权值行,将其复制Nop-1份以扩展成1个权值行,此扩展权值行中包括Nop个相同的1/Nop权值行。扩展权值行同样可以广播给NCU个运算电路,从而在多个运算电路之间复用权值的同时,在单个运算电路的Nop个输出点的计算之间以更小的粒度(例如1/Nop行)复用权值。
由此,通过每次对应地取NCU个输入特征数据行、取1/Nop个权值行复制扩展成1个权值行,每次可以计算NCU*Nop个输出点或部分和。当计算结果是部分和时,通过多次滑动,可以多次计算部分和,各次的部分和根据所属的输出点进行累加,可以得到最终结果。
根据输出点的划分方式,可以确定卷积运算的滑动次数和滑动步长。按照图10a的划分方式,滑动次数Nk=Kx*Ky,其中Kx、Ky分别是卷积核在X和Y维度的尺寸和从处理电路单次运算所支持的最大卷积核尺寸中的较小值,滑动步长=1。从处理电路单次运算所支持的最大卷积核尺寸例如由第一缓冲电路和第二缓冲电路的空间大小决定。可以理解,当卷积核超过最大卷积核尺寸时,需要在Kx和Ky方向按照该最大卷积核尺寸进行拆分。
按照图10a的划分方式,由于每个运算电路所计算的输出点在X和/或Y维度上是连续的,因此可以逐个输出各个运算电路的运算结果。例如按照运算电路的顺序,每次输出一个运算电路的运算结果,例如2*2个输出点,连续4次返回4*4的输出特征块。
图10b示出了根据本披露另一些实施例为每个运算电路分配间隔输出点的示意图。在这些实施例中,可以在NCU个运算电路之间将该输出特征块平均划分为Nop个形状相同的输出特征子块,每个输出特征子块包括NCU个输出点,分别划分给NCU个运算电路。例如,图中仍以上面示例为例,示出了输出特征块1010b包括4*4个输出点,平均划分的每个输出特征子块1011b~1011b均包括2*2个输出点。在每个输出特征子块中,这2*2个输出点分配给4个运算电路。由此,每个运算电路计算Nop个输出特征子块中各一个输出点。图中用不同的背景示出分配给4个不同运算电路CU0~CU3的输出点。
基于上述输出点划分,当通过滑动选数执行卷积运算时,可以根据计算输出特征子块所需的数据,从每个输出特征子块的输出点位置相对应地,从第一缓冲电路中选取NCU个数据行进行运算。
例如,在输入特征数据的首次选数时,可以根据计算首个输出特征子块1011b内的4个输出点所需的4个输入特征块,从对应的输入特征块中选取4个输入数据行,分发给4个运算电路。可以理解,由于这4个输出点在X和/或Y方向是连续的,因此同时选取的4个输入数据行在X和/或Y方向的间隔或步长是1。
在进行权值数据选取时,可以从第二缓冲电路中选取对应的权值数据,广播给NCU个运算电路,从而通过复用权值数据来实现多个运算电路对应的输出点的并行计算。
进一步地,在一些实施例中,为了充分发挥运算装置CU内部的算力(例如乘加运算器),例如单次计算Nop个输出点或部分和,可以在单个输入数据行内进行权值复用,从而同时计算Nop个输出点或部分和。
例如,在权值数据的选数时,可以只取1/Nop个权值行,将其复制Nop-1份以扩展成1个权值行,此扩展权值行中包括Nop个相同的1/Nop权值行。扩展权值行同样可以广播给NCU个运算电路,从而在多个运算电路之间复用权值的同时,在单个运算电路的Nop个输出点的计算之间以更小的粒度(例如1/Nop行)复用权值。
由此,通过每次对应地取NCU个输入特征数据行、取1/Nop个权值行复制扩展成1个权值行,每次可以计算NCU*Nop个输出点或部分和。当计算结果是部分和时,通过多次滑动,可以多次计算部分和,各次的部分和根据所属的输出点进行累加,可以得到最终结果。
根据输出点的划分方式,可以确定卷积运算的滑动次数和滑动步长。按照图10b的划分方式,滑动次数Nk=ceil(Kx/2)*ceil(Ky/2),其中Kx、Ky分别是卷积核在X和Y维度的尺寸和从处理电路单次运算所支持的最大卷积核尺寸中的较小值,滑动步长=2。同样,从处理电路单次运算所支持的最大卷积核尺寸例如由第一缓冲电路和第二缓冲电路的空间大小决定。可以理解,当卷积核超过最大卷积核尺寸时,需要在Kx和Ky方向按照该最大卷积核尺寸进行拆分。
按照图10b的划分方式,由于每个运算电路所计算的输出点在X和/或Y维度上是间隔的,也即不连续的,因此每次需要选取部分运算电路的部分运算结果进行输出,以使得输出点在X和/或Y维度上连续。例如可以每次输出一行1*4个运算结果,连续4次返回4*4的输出特征块。在此示例中,第一行需要输出CU0的两个结果和CU1的两个结果,第二行则需要输出CU2的两个结果和CU3的两个结果,以此类推。在另一示例中,仍然可以每次输出2*2个运算结果,连续4次返回4*4的输出特征块。在此示例中,第一次输出CU0~CU3每个的首个运算结果,第二次输出CU0~CU3每个的第二个运算结果,依次类推。在另一示例中,还可以按列输出运算结果,此处不再赘述。
此外,考虑到利用运算电路CU内部的寄存器,一个从处理电路在Xo/Yo方向可以计算多个4*4区域,例如最多计算16个4*4的区域。此时,可以根据第二存储电路中的存储内容,可以复用权值或神经元,减少第二存储电路的读数频率。计算出的结果如果是部分和,则存储在运算电路内的寄存器上。
在这些实施例中,每个从处理电路可以根据权值复用和/或输入特征图复用方式,控制权值数据行和输入特征图数据行的读取方式,以通过多次运算将权值数据和输入特征图数据同时遍历卷积输出点的整个卷积窗口执行对位乘累加运算,得到多个部分和结果并累加得到对应卷积输出点上的卷积输出。
以下结合几个具体实施例描述采用不同卷积拆分方案、应用于不同类型的卷积运算时的详细运算过程。
实施例1:Forward16
在Forward16中,拆分单元的形状是16B×2×2,其运算过程也可以应用于与其类似的卷积拆分方案中。这些卷积拆分方案所指示的拆分单元的尺寸可以表示为Uci×Uy×Ux=M,Uci为拆分单元在输入特征图和卷积核初始的最低存储维度(例如Ci维度)上的尺寸,Ux和Uy分别为拆分单元在输入特征图和卷积核初始的X和Y存储维度上的尺寸,M是硬件单次最大运算量。在这些卷积拆分方案中,Uci>Ux=Uy>1,Uci=M/4n
Figure BDA0003280666330000191
例如,假设M=64,则M/4n可以是64、16、4和1,按照Uci>Ux=Uy>1这一规则,拆分单元可以是16B×2×2的形状。在使用这一卷积拆分方案时,需要将输入特征图和卷积核的Ci维度对齐到16B。例如,当Ci=40时,可以通过补零对齐到3*16=48,从而按照16B×2×2进行拆分,Ci维度上有3个拆分单元。
又例如,假设M=128,则M/4n可以是128、32、8和2,按照Uci>Ux=Uy>1这一规则,拆分单元可以是32B×2×2、8B×4×4的形状。在使用这一卷积拆分方案时,需要将输入特征图和卷积核的Ci维度对齐到32B或8B。例如,当Ci=40时,可以通过补零对齐到2*32=64,也可以对齐到5*8=40,此时无需补零,因此可以优先按照8B×4×4进行拆分,Ci维度上有5个拆分单元。
因此,尽管下面结合Forward16的具体示例来描述卷积运算过程,但是这些运算过程也可以应用于这些与Forward16类似的卷积拆分方案中。
图11示出了根据本披露实施例1的Forward16方案的拆分和存储示意图。为了简便起见,图中示例假设数据类型为Int8。
图中1110示出了原始待运算数据(其可以是神经元或权值),其存储顺序是HWC。图中还示出了原始待运算数据按拆分单元进行拆分的4个数据块1111-1114,每个数据块包括16×2×2=64个数据。
图中1120示出了拆分后的数据摆放格式,以方便读取。可以看出,原始的数据块(例如1111-1114)被摆放成C维度上的一行(例如1121-1124)。在每行内,数据按照CHW的顺序存储,例如对于数据行1121,先存储C=0的4个数据,接着存储C=1的4个,然后是C=2的4个,一直到最后是C=15的4个。
具体而言,对于神经元来说,需要将数据从[1Hi Wi Ci]摆放为:
[1*Hi/2*Wi/2*Ci/16*(16×2×2)],这种七维张量的形状。
对于权值而言,需要将数据从[Co Kh Kw Ci]摆放为:
[Co*Kh/2*Kw/2*Ci/16*(16×2×2)],这种七维张量的形状。
当使用图5所示的计算装置执行Forward16卷积拆分方案时,可以按照Forward16卷积拆分方案,由主处理电路内集成的分块电路、或完全或部分独立于主处理电路的分块电路将输入特征图和卷积核拆分成多个对应的拆分单元。分块电路还可以转换输入特征图和卷积核的维度存储顺序,以使得每个拆分单元内的数据连续存储为一个数据行。拆分和转换后的输入特征图和/或卷积核可被提供给主处理电路或从处理电路。继而,主处理电路可以将其获得的数据分发给多个从处理电路以供执行卷积运算;以及根据卷积拆分方案,对多个从处理电路返回的运算结果进行拼接处理,以得到输入特征图和卷积核的卷积运算的输出特征图。多个从处理电路则可以根据其获得的数据执行卷积运算,并向主处理电路返回运算结果。
在Forward16这种场景中,Co通常对齐到16。在这些实施例中,卷积拆分方案还可以指示执行卷积运算所需的运算轮次L,其中每个运算轮次中处理的输出通道Co数量对应于该运算轮次中可调度的从处理电路数量Ns,从而一个从处理电路可以处理一个Co值。
由于每个从处理电路处理不同的Co值,因此输入特征图可以在这些从处理电路之间复用。鉴于此,在一些实施例中,可以将输入特征图确定为多播数据,并将拆分并转换维度存储顺序后的多播数据存储在第一存储电路中,以在运算期间通过广播总线传输给所调度的多个从处理电路。对应地,可以将卷积核确定为分发数据,并将拆分并转换维度存储顺序后的分发数据存储在第二存储电路中,以便分发给对应的从处理电路。这些分发数据可以在运算前分发给对应的从处理电路。
在此示例中,可以进一步将各个运算轮次中分配给各个从处理电路的、不同Co值的卷积核分别存储在第二存储电路中为对应的从处理电路分配的存储区域中。第二存储电路中的存储内容例如参考图9b。
相应地,第一缓冲电路可以缓存来自第一存储电路的、广播传输的多个输入特征数据行;而第二缓冲电路可以缓存来自第二存储电路的、分发给该从处理电路的卷积核的多个权值数据行。取决于具体的拆分和/或复用方式,这些数据行可以在运算期间被分发给对应的运算电路或广播给该从处理电路内的所有运算电路。继而,每个运算电路CU可以在每次运算中,针对分别从第一缓冲电路中选取的输入特征数据行和从第二缓冲电路中选取的权值数据行执行对位乘累加运算。
当单个从处理电路SL内的多个运算电路CU共同处理一个Co值时,需要在这多个CU之间对输出点进行拆分。在Forward16方案中,4个运算电路CU之间的输出点拆分方式例如可以参考图10a,也即,在每次计算时,每个运算电路计算输出特征图上在X和/或Y维度连续的多个输出点。
图12示出了根据本披露一个实施例的Forward16方案中的单次运算过程示意图。在该示例中,第一缓冲电路1210的大小为3×3×64B,也即最多可以缓存9行数据,第二缓冲电路1220的大小为2×2×64B,也即最多可以缓存4行数据。为了与拆分单元一致,图中的缓冲电路内的存储同样以拆分单元为单位示出。
图中示出了第一次滑动取数的运算过程。按照与输出点的划分方式对应的方式,以拆分单元为滑动窗口,从第一缓冲电路中滑动选取NCU个输入特征行,分别发送给NCU个运算电路以供计算;从第二缓冲电路中按照与在第一缓冲电路中对应的滑动方式选取1/Nop个权值行,其中Nop是每个运算电路单次最大可计算卷积输出点数量,将其复制Nop-1份扩展为一个扩展权值行,广播给从处理电路内的NCU个运算电路。
具体地,在图5所示的计算装置中,NCU=4,Nop=4。在划分输出点时,按照每次计算时,每个运算电路计算包括2×2个输出点的输出特征区块进行划分。
如图所示,从第一缓冲电路1210中在起始位置从与划分的输出点对应的4个输入特征块中各选取一个输入特征数据行对应地发送给该从处理电路SL内的4个运算电路1240。从第二缓冲电路1220中在起始位置选取1/4个权值数据行,将其复制3份扩展为一个扩展权值数据行1230,广播给该SL内的4个运算电路1240。
在每次计算时,每个运算电路针对来自第一缓冲电路的一个输入特征行和来自第二缓冲电路的一个扩展权值行,以1/Nop个数据行为单位进行对位乘累加,得到Nop个部分和。
如图所示,4个运算电路1240对分发的输入特征数据行和广播的扩展权值数据行执行对位乘累加运算,得到运算结果1250。1250中不同背景颜色的结果代表由不同运算电路1240得到的。可以看出,每次计算时,一个CU会计算1个2×2的部分和,4个CU总计获得4个2×2的部分和,也即4×4。
接着,在第一缓冲电路和第二缓冲电路中同步滑动取数,进行下一计算。执行Nk次滑动选数,其中Nk=Kx*Ky,Kx和Ky分别是卷积核在X和Y维度的尺寸或从处理电路在当前卷积拆分模式(也即Forward16)下单次运算所支持的最大卷积核尺寸中的较小值。相应地,运算电路将Nk次滑动计算期间计算得到的Nk*Nop个部分和按照对应的卷积输出点进行累加,得到并输出Nop个运算结果。
在一些实施例中,在Forward16模式下,从处理电路单次运算所支持的最大卷积核尺寸为3×3。
图13示出了根据本披露一个实施例的Forward16方案中的滑动卷积过程示意图。该示例以6×6的输入特征图,3×3的卷积核为例,卷积步长为1,则输出特征图大小为4×4。输入特征图已对齐到2×2,分成9块16×2×2(C×H×W)大小的块,存储在第一缓冲电路中,图中示出为1310,其中省去了C维度。卷积核3×3则需要对齐到4×4,对齐部分补0,存储在第二缓冲电路中,图中示出为1320,同样省去了C维度。每次计算时,选取卷积核中1×1大小的块,复制3次,刚好对应上输入特征图的2×2的块,复制操作可以由硬件实现。
每次滑动时的输入特征图和卷积核在第一缓冲电路和第二缓冲电路中的选取范围如图13所示,共9幅图,代表共滑动9次。图中方块1310代表第一缓冲电路中的输入特征图,四个虚线框表示选择发给四个CU的区域;方块1320代表第二缓冲电路中的卷积核,虚线框代表选出的1/4行,其被复制3份扩展成一行后广播给4个CU。滑动次数Nk=Kx*Ky=9。
在每次计算时,每个CU针对来自第一缓冲电路的一个数据行和来自第二缓冲电路的一个扩展数据行,以1/4个数据行为单位进行对位乘累加,得到4个部分和;以及在当前运算轮次中将Nk次计算得到的对应同一卷积输出点的Nk个部分和进行累加,得到并输出4个运算结果。
具体地,对于图13中的每幅图,CU的个数Ncu=4,每个CU计算输出特征图上的4个输出点的部分和,该部分和是1/4个数据行的对位乘累加结果,也即每个输出点为一个16×1×1(Ci×Y×X)的标准卷积。滑动Nk=Kx*Ky=9次之后,Y×X方向完成累加,最终1个SL中得到完整的4×4(Y×X)的输出(如图10a所示)。对于更大的卷积核,需要在Kx和Ky方向按照上面同样的原理进行拆分运算。
图14示出了根据本披露一个实施例的Forward16方案中滑动卷积结果的累加示意图。
如图中1410所示,每个运算电路CU在每次计算时,针对来自第一缓冲电路的一个输入特征数据行和来自第二缓冲电路的一个扩展权值数据行,以1/4个数据行为单位进行对位乘累加,得到4个部分和。
每个运算电路CU在当前运算轮次中将Nk=Kx*Ky次计算得到的对应同一卷积输出点的Nk个部分和进行累加,得到4个运算结果。
可以理解,当Ci>16时,需要在Ci方向遍历,同时切换输入和权值,直到计算出完整的输出。当每个CU计算的Xo/Yo大于4时,需要沿着Xo/Yo方向滑动,读取不同的输入神经元和权值。本领域技术人员根据前述描述可以类似地推导出其计算过程,此处不再赘述。
从前面的滑动卷积过程可以看出,滑动模式输出的结果并不是传统卷积输出数据的正常排列顺序。因此,在输出过程中,各个从处理电路SL可以将其内运算电路CU的运算结果转换为指定的格式,例如Nco×Uy×Ux的格式。在一些实施例中,每个从处理电路可以按照输出点连续划分的顺序,每次输出其内一个运算电路的Nop个运算结果。分块电路可以进一步将从各个从处理电路返回的运算结果以第四维度存储顺序存储。根据情况,分块电路还可以将运算结果转换为期望的维度存储顺序存储。
图15示出了根据本披露一个实施例的Forward16拆分方案的输出数据格式示意图。
图中1510示出了1个SL的原始输出。从图中可以看出,每个CU计算2×2的输出神经元。由于1个CU计算的4个输出神经元是相邻的,因此每个SL可以按照输出点连续划分的顺序,每次可以输出其中一个CU的计算结果,也即1×2×2(Co×Y×X)的区域,连续4次返回1×4×4(Co×Y×X)的区域,也即4个CU中各个的4个运算结果。同一SL内的不同CU输出同一Co的输出特征图的不同区域。不同的SL输出不同Co的输出特征图。
图中1520示出了16个SL的存出数据结构。如图所示,输出缓存电路(例如图5的第三缓冲电路)可以将输出结果转换为16×2×2的格式,其中16对应SL的数量,也对应输出通道Co的数量。
在一些实施例中,考虑到运算电路内部寄存器的存储空间,例如包含四个运算电路的单个从处理电路最多可以计算16个4×4的输出特征区域,因此可以复用权值,从而减少第二存储电路的读数频率。也即,第一存储电路和第二存储电路的读数频率可以不同。运算电路计算出的结果如果是部分和,则存储在内的寄存器上。
在这些实施例中,从处理电路可以进一步用于:根据运算电路内的存储空间限制,确定从处理电路内的权值复用次数rs;以及控制第一缓冲电路中的输入特征数据的加载频次,以使得第二缓冲电路中每次加载的权值数据重复使用rs次,与第一缓冲电路中rs次加载的对应输入特征数据执行卷积运算。在一些示例中,rs可以取不大于16的值。
实施例2:Forward4
在Forward4中,拆分单元的形状是4B×4×4,其运算过程也可以应用于与其类似的卷积拆分方案中。这些卷积拆分方案所指示的拆分单元的尺寸可以表示为Uci×Uy×Ux=M,Uci为拆分单元在输入特征图和卷积核初始的最低存储维度(例如Ci维度)上的尺寸,Ux和Uy分别为拆分单元在输入特征图和卷积核初始的X和Y存储维度上的尺寸,M是硬件单次最大运算量。在这些卷积拆分方案中,Ux=Uy≥Uci>1,Uci=M/4n
Figure BDA0003280666330000221
例如,假设M=64,则M/4n可以是64、16、4和1,按照Ux=Uy≥Uci>1这一规则,拆分单元可以是4B×4×4的形状。在使用这一卷积拆分方案时,需要将输入特征图和卷积核的Ci维度对齐到4B。例如,当Ci=10时,可以通过补零对齐到3*4=12,从而按照4B×4×4进行拆分,Ci维度上有3个拆分单元。
又例如,假设M=128,则M/4n可以是128、32、8和2,按照Ux=Uy≥Uci>1这一规则,拆分单元可以是2B×8×8的形状。在使用这一卷积拆分方案时,需要将输入特征图和卷积核的Ci维度对齐到2B。例如,当Ci=3时,可以通过补零对齐到2*2=4,从而按照2B×8×8进行拆分,Ci维度上有2个拆分单元。
因此,尽管下面结合Forward4的具体示例来描述卷积运算过程,但是这些运算过程也可以应用于这些与Forward4类似的卷积拆分方案中。
图16示出了根据本披露一个实施例的Forward4方案的拆分和存储示意图。为了简便起见,图中示例假设数据类型为Int8。
图中1610示出了原始待运算数据(其可以是神经元或权值),其存储顺序是HWC。图中还示出了原始待运算数据按拆分单元进行拆分的4个数据块1611-1614,每个数据块包括4×4×4=64个数据。
图中1620示出了拆分后的数据摆放格式,以方便读取。可以看出,原始的数据块(例如1611-1614)被摆放成C维度上的一行(例如1621-1624)。在每行内,数据按照CHW的顺序存储,例如对于数据行1621,先存储C=0的16个数据,接着存储C=1的16个,然后是C=2的16个,最后是C=3的16个。
具体而言,对于神经元来说,需要将数据从[1Hi Wi Ci]摆放为:
[1*Hi/4*Wi/4*Ci/4*(4×4×4)],这种七维张量的形状。
对于权值而言,需要将数据从[Co Kh Kw Ci]摆放为:
[Co*Kh/4*Kw/4*Ci/4*(4×4×4)],这种七维张量的形状。
当使用图5所示的计算装置执行Forward4卷积拆分方案时,可以按照Forward4卷积拆分方案,由主处理电路内集成的分块电路、或完全或部分独立于主处理电路的分块电路将输入特征图和卷积核拆分成多个对应的拆分单元。分块电路还可以转换输入特征图和卷积核的维度存储顺序,以使得每个拆分单元内的数据连续存储为一个数据行。拆分和转换后的输入特征图和/或卷积核可被提供给主处理电路或从处理电路。继而,主处理电路可以将其获得的数据分发给多个从处理电路以供执行卷积运算;以及根据卷积拆分方案,对多个从处理电路返回的运算结果进行拼接处理,以得到输入特征图和卷积核的卷积运算的输出特征图。多个从处理电路则可以根据其获得的数据执行卷积运算,并向主处理电路返回运算结果。
在Forward4这种场景中,输入通道数量较小的情况下,卷积核普遍也较小,例如Kh和Kw通常是个位数,Co与Ci的尺寸差不多。在这些实施例中,通常单轮运算中卷积核的输出通道Co维度的尺寸不超过所调度的从处理电路的数量,因此单个Co的运算需要由一个或多个从处理电路来完成。更一般地,即使Co维度较大时,也可以通过拆分成多轮运算来实现,其中每轮运算处理的Co尺寸不超过所调度的从处理电路的数量。由此,在一个示例中,可以首先基于卷积核的输出通道Co维度尺寸和可调度的从处理电路数量Ns,确定完成卷积运算所需的运算轮次以及各轮次运算中处理的Co数量或相应的分组模式。
Forward4卷积拆分方案可以支持前文结合图7描述的三种分组模式:Group1、Group4和Group16。
为了同时支持这三种分组模式,在一些实施例中,可以将卷积核确定为多播数据,并将拆分并转换维度存储顺序后的多播数据存储在第一存储电路中,以在运算期间通过广播总线传输给所调度的多个从处理电路。对应地,可以将输入特征图确定为分发数据,并将拆分并转换维度存储顺序后的分发数据存储在第二存储电路中,以便分发给对应的从处理电路。这些分发数据可以在运算前分发给对应的从处理电路。输入特征图例如可以参考图8的示意在单个SLB的多个SL之间拆分。第二存储电路中的存储内容例如可以参考图9a(Group1)、图9c(Group4),未示出Group16模式下的存储内容。
相应地,第一缓冲电路可以缓存来自第二存储电路的、分发给该从处理电路的多个输入特征数据行;而第二缓冲电路可以缓存来自第一存储电路的、多播传输给该从处理电路的对应输出通道值的卷积核的多个权值数据行。取决于具体的拆分和/或复用方式,这些数据行可以在运算期间被分发给对应的运算电路CU或广播给该从处理电路内的所有CU。继而,每个运算电路CU可以在每次运算中,针对分别从第一缓冲电路中选取的输入特征数据行和从第二缓冲电路中选取的权值数据行执行对位乘累加运算。
当单个从处理电路SL内的多个运算电路CU共同处理一个Co值时,需要在这多个CU之间对输出点进行拆分。在Forward4方案中,4个运算电路CU之间的输出点拆分方式例如可以参考图10b,也即,在每次计算时,每个运算电路计算输出特征图上在X和/或Y维度间隔的多个输出点。
图17示出了根据本披露一个实施例的Forward4方案中的单次运算过程示意图。在该示例中,第一缓冲电路1710的大小为3×3×64B,也即最多可以缓存9行数据,第二缓冲电路1720的大小为2×2×64B,也即最多可以缓存4行数据。为了与拆分单元一致,图中的缓冲电路内的存储同样以拆分单元为单位示出。
图中示出了第一次滑动取数的运算过程。按照与输出点的划分方式对应的方式,以拆分单元为滑动窗口,从第一缓冲电路中滑动选取NCU个输入特征行,分别发送给NCU个运算电路以供计算;从第二缓冲电路中按照与在第一缓冲电路中对应的滑动方式选取1/Nop个权值行,其中Nop是每个运算电路单次最大可计算卷积输出点数量,将其复制Nop-1份扩展为一个扩展权值行,广播给从处理电路内的NCU个运算电路。
具体地,在图5所示的计算装置中,NCU=4,Nop=4。在划分输出点时,按照单次计算时,每个运算电路计算X和Y维度上均间隔1的2×2个输出点进行划分。
如图所示,从第一缓冲电路1710中在起始位置以及X和/或Y方向各移动1的位置选取一个输入特征数据行,总计选取4个输入特征数据行,对应地发送给该从处理电路SL内的4个运算电路1740。从第二缓冲电路1720中在起始位置选取1/4个权值数据行,也即选取2×2大小的数据,将其复制3份扩展为一个扩展权值数据行1730,广播给该SL内的4个运算电路1740。
在每次计算时,每个运算电路针对来自第一缓冲电路的一个输入特征行和来自第二缓冲电路的一个扩展权值行,以1/Nop个数据行为单位进行对位乘累加,得到Nop个部分和。
如图所示,4个运算电路1740对分发的输入特征数据行和广播的扩展权值数据行执行对位乘累加运算,得到运算结果1750。1750中不同背景颜色的结果代表由不同运算电路1740得到的。可以看出,每次运算,一个CU会计算4个输出点的部分和,4个CU总计获得4×4的部分和。可以看出,每个CU计算的输出点在输出特征图的XoYo维度上并没有相邻。
接着,在第一缓冲电路和第二缓冲电路中同步滑动取数,进行下一计算。执行Nk次滑动选数,其中Nk=ceil(Kx/2)*ceil(Ky/2),Kx和Ky分别是卷积核在X和Y维度的尺寸或从处理电路在当前卷积拆分模式下单次运算所支持的最大卷积核尺寸中的较小值。相应地,运算电路将Nk次滑动计算期间计算得到的Nk*Nop个部分和按照对应的卷积输出点进行累加,得到Nop个运算结果。
在一些实施例中,在Forward4模式下,从处理电路单次运算所支持的最大卷积核尺寸为8×8。
图18示出了根据本披露一个实施例的Forward4方案中的滑动卷积过程示意图。该示例以9×9的输入特征图,5×5的卷积核为例,卷积步长为1,则输出特征图大小为5×5。输入特征图需要对齐到12×12,分成9块4×4×4(C×H×W)大小的块,存储在第一缓冲电路中,图中示出为1810,其中省去了C维度。卷积核5×5则需要对齐到8×8,对齐部分补0,存储在第二缓冲电路中,图中示出为1820,同样省去了C维度。每次计算时,选取卷积核中2×2大小的块,复制4次,刚好对应上输入特征图的4×4的块,复制操作可以由硬件实现。
每次滑动时的输入特征图和卷积核在第一缓冲电路和第二缓冲电路中的选取范围如图18所示,共9幅图,代表共滑动9次。图中方块1810代表第一缓冲电路中的输入特征图,四个虚线框表示选择发给四个CU的区域;方块1820代表第二缓冲电路中的卷积核,虚线框代表选出的1/4行,其被复制3份扩展成一行后广播给4个CU。滑动次数Nk=ceil(Kx/2)*ceil(Ky/2)=9。
在每次计算时,每个CU针对来自第一缓冲电路的一个输入特征数据行和来自第二缓冲电路的一个扩展权值数据行,以1/4个数据行为单位进行对位乘累加,得到4个部分和;以及在当前运算轮次中将Nk个运算周期内得到的对应同一卷积输出点的Nk个部分和进行累加,得到并输出4个运算结果。
具体地,对于图18中的每幅图,CU的个数Ncu=4,每个CU单次计算Nop=4个输出点或部分和,该部分和是1/4个数据行的对位乘累加结果,也即每个输出点为一个4×2×2(Ci×Y×X)的标准卷积。滑动Nk=ceil(Kx/2)*ceil(Ky/2)=9次之后,Y×X方向完成累加,最终1个SL中得到完整的4×4(Y×X)的输出(如图10b所示)。这种模式下单次计算仅支持卷积核不大于8×8的情形,对于更大的卷积核,需要在Kx和Ky方向按照8×8进行拆分,可以按照上面同样的原理进行拆分运算。
可以理解,当Ci>4时,需要在Ci方向遍历,同时切换输入和权值,直到计算出完整的输出。当每个CU计算的Xo/Yo大于4时,需要沿着Xo/Yo方向滑动,读取不同的输入神经元和权值。本领域技术人员根据前述描述可以类似地推导出其计算过程,此处不再赘述。
从前面的滑动卷积过程可以看出,滑动模式输出的结果并不是传统卷积输出数据的正常排列顺序。因此,在输出过程中,各个从处理电路SL可以将其内运算电路CU的运算结果转换为指定的格式,例如Nco×Uy×Ux的格式。在一些实施例中,每个从处理电路可以每次输出其内部分运算电路的部分运算结果,该部分运算结果在输出特征图的X和/或Y维度上连续。分块电路可以进一步将从各个从处理电路返回的运算结果以第四维度存储顺序存储。根据情况,分块电路还可以将运算结果转换为期望的维度存储顺序存储。
当分组模式和/或单个SLB内输入特征图的拆分方式(也即根据输出特征图的HoWo拆分方式)不同时,输出的数据格式略有不同。
图19示出了根据本披露一个实施例Forward4方案的输出数据格式示意图。在此实施例中,分组模式为Group1,单个SLB(包括16个SL)内输入特征图的拆分方式按照Ho×Wo=1×16拆分。
图中1910示出了1个SL的原始输出。从图中可以看出,每个SL每次输出1×1×4(Co×Y×X)的区域,也即每次输出其内部分运算电路的部分运算结果,例如2个CU中各2个运算结果(参见图10b),这一部分运算结果在输出特征图的X和/或Y维度上连续,例如为同一行(图19所示)或同一列。连续4次返回1×4×4(Co×Y×X)的区域,也即4个CU中各个的4个运算结果。不同的SL输出同一Co的输出特征图的不同区域。当输出所有Co的4×4区域之后,继续输出会切换不同的输出点。
图中1920示出了16个SL的存出数据结构。如图所示,最终输出数据在写入存储电路(例如第一存储电路)后变为Yo*Xo*Co*4*16*4的格式,其中的Yo和Xo为每一个SL划分到的输出特征图的块的个数,16为在16个SL上的划分。根据需要,在一些实现中,可以再次进行摆数操作以转化为其他期望的数据格式。
如前面所提到,分组模式和/或单个SLB内多个SL之间输入特征图的拆分方式不同时,输出的数据格式还有细微的差别。假设原始输出大小为:
1*ho*wo*co
那么,Group1在Ho*Wo按照4*4拆分时的输出数据形状为:
ho/(4*4)*wo/(4*4)*co/group*(4*16*4)
上式中,(4*16*4)是forward4的基本输出块,方向分别对应h*c*w,其中16表示16个SL上的相同co的ho、wo的划分;ho,wo除了两次4,其中,第一个4表示在SL存储数据时进行4×4拆分,第二个4表示h、w方向的数据块折叠。Group1模式下,上面的group=1。
Group1在Ho*Wo按照1*16拆分时的输出数据形状为:
ho/(4)*wo/(4*16)*co/group*(4*16*4)
上式中,(4*16*4)是forward4的基本输出块,方向分别对应h*c*w,其中16表示16个SL上的相同co的ho、wo的划分;Group1模式下,上面的group=1。该形状也即图19示意图的形状。
由此可见,Group1的情况下,16个SL平分一个输出特征图的Yo*Xo维度。输出时行内维度SL中的数据,与16个SL在Yo*Xo方向上平分输出神经元的方式一一对应。此场景适合输入神经元Y*X方向数值大,Co数值小。
Group4输出数据形状为:
ho/(2*4)*wo/(2*4)*co/group*(4*16*4)
上式中,(4*16*4)含义同上,不同的是16表示4个co在4个SL上的wo输出划分。Group4模式下,上面的group=4。
Group16输出数据形状为:
ho/4*wo/4*co/group*(4*16*4)
上述中,(4*16*4)含义同上,不同的是16表示16个co在16个SL上的输出划分。Group16模式下,上面的group=16。
由于Group在H*W方向上还有不同的拆分类别,上述中4*16*4的16在具体的拆分上还有差异。由于Forwrd4是按照4B*4*4的块为计算单元,那么不可避免在计算时就存在对齐限制。根据不同的Group模式,相同Group模式的不同H*W的拆分方式,最终在计算时的对齐限制也不一样。在对齐的计算上,可以首先根据输出特征图的拆分方式确定ho*wo的对齐限制,再由ho*wo反推回hi*wi,由于输入神经元需要摆成拆分单元块的形式,从而还需要再对齐一次。上述对齐限制可以汇总如下表2:
Figure BDA0003280666330000261
表2、对齐限制
综上,在输出时,硬件可以自动按照行内4*16*4(Y*SL*X)维度,行间Y*X*C维度的方式输出神经元。对于更大的卷积核同理。
在一些实施例中,考虑到运算电路内部寄存器的存储空间,例如包括四个运算电路的单个从处理电路最多可以计算16个4×4的输出特征区域,因此可以复用输入特征图/神经元,从而减少第二存储电路的读数频率。也即,第一存储电路和第二存储电路的读数频率可以不同。运算电路计算出的结果如果是部分和,则存储在内的寄存器上。
在这些实施例中,从处理电路可以进一步用于:根据运算电路内的存储空间限制,确定从处理电路内的输入特征复用次数rn;以及控制第二缓冲电路中的权值数据的加载频次,以使得第一缓冲电路中每次加载的输入特征数据重复使用rn次,与第二缓冲电路中rn次加载的对应权值数据执行卷积运算。在一些示例中,rn可以取不大于16的值。
实施例3:Forward1
在Forward1中,拆分单元的形状与Forward4相同,也是4B×4×4;区别在于Forward1应用于深度卷积运算,也即2D卷积运算。2D卷积运算的原理可以参考前面结合图4b的描述。下面的描述可以应用于与Forward1类似的卷积拆分方案中。
由于在深度卷积中输入通道不进行累加,因此卷积核和输入特征图的维度都可以简化成C(通道)、H(高度)、W(宽度)三个维度。这些卷积拆分方案所指示的拆分单元的形状同样满足:Uc×Uy×Ux=M,Uc为拆分单元在输入特征图和卷积核初始的最低存储维度(例如C维度)上的尺寸,Ux和Uy分别为拆分单元在输入特征图和卷积核初始的X和Y存储维度上的尺寸,M是硬件单次最大运算量。在这些卷积拆分方案中,Ux=Uy≥Uc>1,Uc=M/4n
Figure BDA0003280666330000271
Forward1方案中数据的拆分和存储示例可以参考实施例2中对Forward4的描述,例如参考图16,相同部分不再重复。对于Forward1方案而言,只需将Ci、Co维度替换成C维度,也即将输入特征图和卷积核都简化为三维数据。
具体而言,对于神经元来说,需要将数据从[Hi Wi C]摆放为:
[Hi/4*Wi/4*C/4*(4×4×4)],这种六维张量的形状,省略N维度。
对于权值而言,需要将数据从[Kh Kw C]摆放为:
[Kh/4*Kw/4*C/4*(4×4×4)],这种六维张量的形状,省略N维度。
当使用图5所示的计算装置执行Forward1卷积拆分方案时,可以按照Forward1卷积拆分方案,由主处理电路内集成的分块电路、或完全或部分独立于主处理电路的分块电路将输入特征图和卷积核拆分成多个对应的拆分单元。分块电路还可以转换输入特征图和卷积核的维度存储顺序,以使得每个拆分单元内的数据连续存储为一个数据行。拆分和转换后的输入特征图和/或卷积核可被提供给主处理电路或从处理电路。继而,主处理电路可以将其获得的数据分发给多个从处理电路以供执行卷积运算;以及根据卷积拆分方案,对所调度的多个从处理电路返回的运算结果进行拼接处理,以得到输入特征图和卷积核的卷积运算的输出特征图。多个从处理电路则可以根据其获得的数据执行卷积运算,并向主处理电路返回运算结果。
在Forward1这种深度卷积运算场景中,由于C维度上的运算结果不需要累加,因此不同C上的运算分配在不同的运算电路上可以相对独立地进行。需要注意,在采用Forward1拆分方案中,C维度会按4B对齐,因此,当以拆分单元为单位进行处理时,C维度会对齐到4B(也即Uc)再进行拆分。换言之,不同运算电路上的处理在C维度上是以Uc为单位进行拆分的。
在深度卷积场景中,通常通道数C较小,而卷积核和输入特征图普遍较大。在这些实施例中,通常单轮运算中输入特征图和卷积核的通道C维度Nc对Uc的倍数不超过所调度的从处理电路的数量,因此以Uc为单位计算的单个通道的运算可以由一个或多个从处理电路来完成。更一般地,即使C维度较大时,也可以通过拆分成多轮运算来实现,其中每轮运算处理的C维度尺寸Nc对Uc的倍数不超过所调度的从处理电路的数量。由此,在一个示例中,可以首先基于卷积核的通道C维度尺寸和可调度的从处理电路数量Ns,确定完成卷积运算所需的运算轮次以及各轮次运算中处理的C数量Nc或相应的分组模式,其中Nc对齐到Uc。
类似于Forward4,Forward1方案也可以支持前文结合图7描述的三种分组模式:Group1、Group4和Group16。Forward1与Forward4的分组模式的区别在于,Forward1中C维度的拆分是以Uc为单位进行,例如每4个连续的C(对应一个Uc)分配给一个分组(或从处理电路组SLB)。由此,在一些实施例中,根据单轮运算中卷积核的C维度尺寸Nc和可调度的从处理电路数量Ns,将Nc按照Uc对齐,确定每Rs个从处理电路处理对应同一Uc的卷积核和输入特征图,Rs=[Ns/(Nc/Uc)],表示从处理电路之间的权值复用次数。
为了同时支持这三种分组模式,在一些实施例中,可以将卷积核确定为多播数据,并将拆分并转换维度存储顺序后的多播数据存储在第一存储电路中,以在运算期间通过广播总线传输给所调度的多个从处理电路。对应地,可以将输入特征图确定为分发数据,并将拆分并转换维度存储顺序后的分发数据存储在第二存储电路中,以便分发给对应的从处理电路。这些分发数据可以在运算前分发给对应的从处理电路。
输入特征图例如可以参考图8的示意在单个SLB的多个SL之间拆分。具体地,可以按如下在每Rs个从处理电路之间划分对应Uc的输入特征图:根据输出特征图的尺寸,在XY维度上平均划分为Rs个形状相同的输出特征块;根据计算每个输出特征块所需的输入特征图区域,在XY维度上将输入特征图划分为Rs个输入特征块;以及将Rs个输入特征块分别按拆分单元进行拆分并转换维度存储顺序后存储在第二存储电路中为Rs个从处理电路分配的存储区域中。
第二存储电路中的存储内容例如可以参考图9a(Group1)、图9c(Group4),未示出Group16模式下的存储内容。
相应地,第一缓冲电路可以缓存来自第二存储电路的、分发给该从处理电路的多个输入特征数据行;而第二缓冲电路可以缓存来自第一存储电路的、多播传输给该从处理电路的对应输出通道值的卷积核的多个权值数据行。取决于具体的拆分和/或复用方式,这些数据行可以在运算期间被分发给对应的运算电路CU或广播给该从处理电路内的所有CU。继而,每个运算电路CU可以在每次运算中,针对分别从第一缓冲电路中选取的输入特征数据行和从第二缓冲电路中选取的权值数据行执行对位乘累加运算。
当单个从处理电路SL内的多个运算电路CU共同处理一个Uc时,需要在这多个CU之间对输出点进行拆分。类似于Forward4中,在Forward1中也按照每个运算电路分配间隔输出点的方式进行划分(例如图10b)。但是在Forward1中,卷积核的划分更小,按照4×4为单位拆分,而Forward4中卷积核按照8×8为单位拆分,因此,输出点的划分略有不同。具体地,在一个实施例中,在每次计算时,每个运算电路计算输出特征图上在X和/或Y维度间隔的1个输出点;以及在不同次计算中,每个运算电路计算输出特征图上在X和/或Y维度上不同的输出点。
图20示出了根据本披露一个实施例的Forward1方案中运算电路的输出点划分示意图。
由于卷积核按照4×4为单位拆分,每次计算时只需要使用第二缓冲电路中的1行权值,而第一缓冲电路内可以存放的输入特征数据最多9行,因此最多可以计算8×8的输出。图中示出了4个运算电路在8×8的输出点上的划分,其中用不同的背景示出分配给4个不同运算电路CU0~CU3的输出点。由于每次计算时权值只有1行,因此每次计算即可得到当前的输出点,无需进行滑动累加。
例如,第一次滑动时,4个CU分别计算第一子块2001中的4个输出点;第二次向右滑动时,4个CU分别计算第二子块2002中的4个输出点,以此类推。8×8个输出点相应地需要滑动16次。
图21示出了根据本披露一个实施例的Forward1方案中的单次运算过程示意图。在该示例中,第一缓冲电路2110的大小为3×3×64B,也即最多可以缓存9行数据,第二缓冲电路2120的大小为2×2×64B,也即最多可以缓存4行数据。为了与拆分单元一致,图中的缓冲电路内的存储同样以拆分单元为单位示出。
图中示出了第一次滑动取数的运算过程。按照与输出点的划分方式对应的方式,以拆分单元为滑动窗口,从第一缓冲电路中滑动选取NCU个输入特征行,分别发送给从处理电路内的NCU个运算电路以供计算;从第二缓冲电路中读取1个权值数据行,广播给从处理电路内的NCU个运算电路。
具体地,在图5所示的计算装置中,NCU=4,Nop=4。
如图所示,从第一缓冲电路2110中在起始位置以及X和/或Y方向各移动1的位置选取一个输入特征数据行,总计选取4个输入特征数据行,对应地发送给该从处理电路SL内的4个运算电路2140。从第二缓冲电路2120中在起始位置选取1个权值数据行,也即选取4×4大小的数据2130,将广播给该SL内的4个运算电路2140。
在每次计算时,针对来自第一缓冲电路的一个输入特征行和来自第二缓冲电路的一个权值行,以1/Uc个数据行为单位,将对应同一通道值的特征数据和权值数据进行对位乘累加,得到Uc个输出点。
如图所示,4个运算电路2140对分发的输入特征数据行和广播的权值数据行按照1/Uc(Uc=4)行执行对位乘累加运算,得到运算结果2150。2150中不同背景颜色的结果代表由不同运算电路2140得到的。可以看出,每次运算,一个CU计算Uc上各个XoYo面上的1个输出点,4个CU总计获得Uc×2×2的输出点。可以看出,4个CU计算的输出点在输出特征图的XoYo维度是相邻的。
接着,在第一缓冲电路滑动取数,第二缓冲电路中无需滑动,仍然使用这一行权值进行下一计算。在第一缓冲电路上执行Nk次滑动选数,其中Nk=Kx*Ky,Kx和Ky分别是卷积核在X和Y维度的尺寸或从处理电路在当前卷积拆分模式下单次运算所支持的最大卷积核尺寸中的较小值。相应地,运算电路将Nk次滑动计算期间计算得到的Nk*Uc个输出点按照输出点的划分方式进行拼接,得到Uc个通道上的Nk*NCU个运算结果。
在一些实施例中,在Forward1模式下,从处理电路单次运算所支持的最大卷积核尺寸为4×4。
图22示出了根据本披露一个实施例的Forward1方案中的滑动卷积过程示意图。该示例以11×11的输入特征图,4×4的卷积核为例,卷积步长为1,则输出特征图大小为8×8。输入特征图需要对齐到12×12,分成9块4×4×4(C×H×W)大小的块,存储在第一缓冲电路中,图中示出为2210,其中省去了C维度。卷积核按照4×4拆分,存储在第二缓冲电路中,图中示出为2220,同样省去了C维度。每次计算时,选取4×4大小的卷积核,刚好对应上输入特征图的4×4的块,广播给4个运算电路。
每次滑动时的输入特征图和卷积核在第一缓冲电路和第二缓冲电路中的选取范围如图22所示,共16幅图,代表共滑动16次。图中方块2210代表第一缓冲电路中的输入特征图,四个虚线框表示选择发给四个CU的区域;方块2220代表第二缓冲电路中的卷积核,虚线框代表选出的1个权值行,其被广播给4个CU,并且在滑动过程中无需重选。滑动次数Nk=Kx*Ky,其中Kx、Ky分别是卷积核在X和Y维度的尺寸和从处理电路单次运算所支持的最大卷积核尺寸中的较小值,滑动步长=2。同样,从处理电路单次运算所支持的最大卷积核尺寸例如至少由第一缓冲电路和第二缓冲电路的空间大小决定。可以理解,当卷积核超过最大卷积核尺寸时,需要在Kx和Ky方向按照该最大卷积核尺寸进行拆分。
在每次计算时,每个CU针对来自第一缓冲电路的一个输入特征数据行和来自第二缓冲电路的一个权值数据行,按照1/Uc行进行对位乘累加,得到Uc上各个XoYo面上的1个输出点,从而NCU个运算电路每次得到Uc个XoYo面上的NCU个输出点。可以理解,当滑动经过Nk个运算周期的运算之后,可以得到Uc个XoYo面上的Nk*NCU个输出点,将其进行拼接,可以得到C维度上Uc个面上的最大8×8(Ho*Wo)个输出点,也即Uc×8×8。
具体地,对于图22中的每幅图,CU的个数Ncu=4,每个CU单次计算C维度上Uc个面上的1个输出点,该部分和是1/Uc(1/4)个数据行的对位乘累加结果,也即每个输出点为一个4×4(Y×X)的2D卷积。滑动Nk=Kx*Ky=16次之后,完成最大输出点计算,1个SL中得到8×8(Y×X)的输出(如图20所示)。这种模式下单次计算仅支持卷积核4×4的情形,对于更大的卷积核,需要在Kx和Ky方向按照4×4进行拆分,可以按照上面同样的原理进行拆分运算。
可以理解,当每个CU计算的Xo/Yo大于8时,需要沿着Xo/Yo方向滑动,读取不同的输入神经元和权值。本领域技术人员根据前述描述可以类似地推导出其计算过程,此处不再赘述。
从前面的滑动卷积过程可以看出,滑动模式输出的结果并不是传统卷积输出数据的正常排列顺序。因此,在输出过程中,各个从处理电路SL可以将其内运算电路CU的运算结果转换为指定的格式,例如Nc×Uy×Ux的格式。在一些实施例中,每个从处理电路可以每次输出其内部分运算电路的部分运算结果,这些部分运算结果在输出特征图的X和/或Y维度上连续。分块电路可以进一步将从各个从处理电路返回的运算结果以第四维度存储顺序存储。根据情况,分块电路还可以将运算结果转换为期望的维度存储顺序存储。
当分组模式和/或单个SLB内输入特征图的拆分方式(也即根据输出特征图的HoWo拆分方式)不同时,输出的数据格式略有不同。
图23示出了根据本披露一个实施例Forward1方案的输出数据格式示意图。在此实施例中,分组模式为Group1,单个SLB(包括16个SL)内输入特征图的拆分方式按照Ho×Wo=1×16拆分。
图中2310示出了1个SL的原始输出。从图中可以看出,每个SL每次输出Uc×1×8(C×Y×X)的区域,也即每次输出其内部分运算电路的部分运算结果,例如2个CU中各4个运算结果(参见图20),这一部分运算结果在输出特征图的X和/或Y维度上连续,例如为同一行(图20所示)或同一列。连续8次返回Uc×8×8(C×Y×X)的区域,也即4个CU中各个的16个运算结果。不同的SL输出同一Uc的输出特征图的不同区域。当输出Uc的所有8×8区域之后,继续输出会切换不同的输出点。
图中2320示出了16个SL的存出数据结构。如图所示,最终输出数据在写入存储电路(例如第一存储电路)后变为Yo*Xo*ceil[C/Uc]*Uc*8*16*8的格式,其中的Yo和Xo为每一个SL划分到的输出特征图的块的个数,16为在16个SL上的划分。根据需要,在一些实现中,可以再次进行摆数操作以转化为其他期望的数据格式。
如前面所提到,分组模式和/或单个SLB内多个SL之间输入特征图的拆分方式不同时,输出的数据格式还有细微的差别。假设原始输出大小为:
1*ho*wo*c
那么,Group1在Ho*Wo按照4*4拆分时的输出数据形状为:
ho/(4*4)*wo/(4*4)*c/group/Uc*Uc*(8*16*8)
上式中,(8*16*8)是forward1的基本输出块,方向分别对应h*c*w,其中16表示16个SL上的相同Uc的ho、wo的划分;ho,wo除了两次4,其中,第一个4表示在SL存储数据时进行4×4拆分,第二个4表示h、w方向的数据块折叠。Group1模式下,上面的group=1。
Group1在Ho*Wo按照1*16拆分时的输出数据形状为:
ho/(4)*wo/(4*16)*c/group/Uc*Uc*(8*16*8)
上式中,(8*16*8)是forward1的基本输出块,方向分别对应h*c*w,其中16表示16个SL上的相同Uc的ho、wo的划分;Group1模式下,上面的group=1。该形状也即图23示意图的形状。
由此可见,Group1的情况下,16个SL平分一个输出特征图的Yo*Xo维度。输出时行内维度SL中的数据,与16个SL在Yo*Xo方向上平分输出神经元的方式一一对应。此场景适合输入神经元Y*X方向数值大,c数值小。
Group4输出数据形状为:
ho/(2*4)*wo/(2*4)*c/group/Uc*Uc*(8*16*8)
上式中,(8*16*8)含义同上,不同的是16表示4个Uc在4个SL上的wo输出划分。Group4模式下,上面的group=4。
Group16输出数据形状为:
ho/4*wo/4*co/group/Uc*Uc*(8*16*8)
上述中,(8*16*8)含义同上,不同的是16表示16个Uc在16个SL上的输出划分。Group16模式下,上面的group=16。
由于Group在H*W方向上还有不同的拆分类别,上述中8*16*8的16在具体的拆分上还有差异。由于Forwrd1是按照4B*4*4的块为计算单元,那么不可避免在计算时就存在对齐限制。根据不同的Group模式,相同Group模式的不同H*W的拆分方式,最终在计算时的对齐限制也不一样。在对齐的计算上,可以首先根据输出特征图的拆分方式确定ho*wo的对齐限制,再由ho*wo反推回hi*wi,由于输入神经元需要摆成拆分单元块的形式,从而还需要再对齐一次。上述对齐限制可以汇总如下表3:
Figure BDA0003280666330000311
表3、Forward1对齐限制
综上,在输出时,硬件可以自动按照行内8*16*8(Y*SL*X)维度,行间Y*X*C维度的方式输出神经元。对于更大的卷积核同理。
在一些实施例中,考虑到运算电路内部寄存器的存储空间,例如包括四个运算电路的单个从处理电路最多可以计算16个4×4的输出特征区域,因此可以复用输入特征图/神经元,从而减少第二存储电路的读数频率。也即,第一存储电路和第二存储电路的读数频率可以不同。运算电路计算出的结果如果是部分和,则存储在内的寄存器上。
在这些实施例中,从处理电路可以进一步用于:根据运算电路内的存储空间限制,确定从处理电路内的输入特征复用次数rn;以及控制第二缓冲电路中的权值数据的加载频次,以使得第一缓冲电路中每次加载的输入特征数据重复使用rn次,与第二缓冲电路中rn次加载的对应权值数据执行卷积运算。在一些示例中,rn可以取不大于16的值。
实施例4:Update1
在Update1中,拆分单元的形状与Forward1相同,也是4B×4×4;区别在于Update1应用于神经网络模型的反向训练中的深度卷积运算,具体用于深度卷积运算中的反向训练中的权值更新过程,而Forward1应用于前向深度卷积运算,二者都是2D卷积运算。反向深度卷积运算的原理可以参考前面结合图4b的描述。反向深度卷积运算场景中,top_diff与bottom_data的尺寸通常都比较大,因此需要不同的优化运算方案。
在下面的描述中,虽然会以top_diff和bottom_data来指代待运算的数据,但是前面针对卷积核的描述可以类似地应用于top_diff,而针对输入特征图的描述可以类似地应用于bottom_data,也即二者可互换使用。下面的描述可以应用于与Update1类似的卷积拆分方案中。
由于在深度卷积中输入通道不进行累加,因此top_diff和bottom_data的维度都可以简化成C(通道)、H(高度)、W(宽度)三个维度。这些卷积拆分方案所指示的拆分单元的形状同样满足:Uc×Uy×Ux=M,Uc为拆分单元在bottom_data和top_diff初始的最低存储维度(例如C维度)上的尺寸,Ux和Uy分别为拆分单元在bottom_data和top_diff初始的X和Y存储维度上的尺寸,M是硬件单次最大运算量。在这些卷积拆分方案中,Ux=Uy≥Uc>1,Uc=M/4n
Figure BDA0003280666330000321
由于深度卷积运算中,C通道维度的乘积结果不进行累加,因此,原本运算器在执行常规3D卷积时,例如C维度上64个数乘64个数,累加后得到1个数,现在却会得到64个数。也即,由于C维度上不累加浪费了运算器的算力,给运算器带来了性能损失。为了充分利用运算器的算力,通过上述拆分方式,将需要累加的维度(例如HW维度)上的数据转移到C维度上,从而可以提高运算器的使用率。例如,在采用4B×4×4的拆分单元时,假设数据类型为int8,则64个数乘64个数的累加结果得到4个数,而不是原来的64个数。
Update1方案中数据的拆分和存储示例可以参考实施例2中对Forward4的描述,例如参考图16,相同部分不再重复。对于Update1方案而言,只需将Ci、Co维度替换成C维度,也即将输入特征图(bottom_data)和卷积核(top_diff)都简化为三维数据。
具体而言,对于bottom_data来说,需要将数据从[Hi Wi C]摆放为:
[Hi/4*Wi/4*C/4*(4×4×4)],这种六维张量的形状,省略N维度。
对于top_diff而言,需要将数据从[Ho Wo C]摆放为:
[Ho/4*Wo/4*C/4*(4×4×4)],这种六维张量的形状,省略N维度。
当使用图5所示的计算装置执行Update1卷积拆分方案时,可以按照Update1卷积拆分方案,由主处理电路内集成的分块电路、或完全或部分独立于主处理电路的分块电路将bottom_data和top_diff拆分成多个拆分单元。分块电路还可以转换bottom_data和top_diff的维度存储顺序,以使得每个拆分单元内的数据连续存储为一个数据行。拆分和转换后的bottom_data和/或top_diff可被提供给主处理电路或从处理电路。继而,主处理电路可以将其获得的数据分发给多个从处理电路以供执行卷积运算;以及根据卷积拆分方案,对所调度的多个从处理电路返回的运算结果进行拼接处理,以得到bottom_data和top_diff的深度卷积运算的输出△W(或称为weight_diff)。多个从处理电路则可以根据其获得的数据执行卷积运算,并向主处理电路返回运算结果。
为了充分利用可调度的从处理电路,可以在各个从处理电路之间分配相应的运算任务,以提高并行处理效率。考虑到Update1这种深度卷积运算场景中,C维度上的运算结果不需要累加,因此不同C上的运算分配在不同的运算电路上可以相对独立地进行。需要注意,在采用Update1拆分方案中,C维度会按4B对齐,因此,当以拆分单元为单位进行处理时,C维度会对齐到4B(也即Uc)再进行拆分。换言之,不同运算电路上的处理在C维度上是以Uc为单位进行拆分的。
在反向深度卷积场景中,C维度通常较大,例如大于64,bottom_data和top_diff普遍也较大。在这些实施例中,通常单轮运算中bottom_data和top_diff的通道C维度大小Nc可以是64的倍数,因此以Uc为单位计算的单个通道的运算可以分配在一个从处理电路来完成。由此,在一些实施例中,卷积拆分方案还指示执行深度卷积运算的分组划分方式,其中分组划分方式可以针对bottom_data和top_diff数据,按照通道C维度、以Uc为单位顺次划分至可调度的Ns个从处理电路,每个从处理电路处理不同的连续Uc个C值的bottom_data和top_diff数据。换言之,单个从处理电路可以是一个组,分别处理不同C(以Uc为单位)的运算,也即对应前文的Group16分组模式。
在这种按照C维度划分分组的实施例中,可以将top_diff按照前述卷积拆分方案拆分并转换维度后存储在第一存储电路中。由于每个从处理电路处理不同的Uc,因此可以在运算期间通过广播总线将对应不同的Uc个C值的top_diff单播/分别传输给所调度的Ns个从处理电路。
在这些实施例中,可以将bottom_data确定为分发数据,并将拆分并转换维度存储顺序后的分发数据按照通道C维度、以Uc为单位顺次划分的方式分别存储在第二存储电路中与Ns个从处理电路对应的存储区域内,以便分发给对应的从处理电路。
图24示出了根据本披露一些实施例的bottom_data在第二存储电路中的示意性存储方式。
如图所示,第二存储电路可以为每个从处理电路分配一个存储区域,从而每个从处理电路运算所需的bottom_data数据只需要从其对应的存储区域读取即可。图中示例性示出了为16个从处理电路分配了16块存储区域2400~2415,每个存储区域中存储该从处理电路要处理的bottom_data数据块。
如前面所提到的,C维度上是以Uc为单位进行拆分的。在图中示例中,假设Uc=4B,数据类型为int8,则一个Uc包括4个C值。当C维度大小超过可调度的从处理电路数量的Uc倍时,需要通过多个运算轮次来执行运算。
以图中示例为例,假设总共16个从处理电路均可调度,进一步假设bottom_data数据的C维度大小为128,超过可调度的从处理电路数量的Uc倍(16*4=64),则可以分成两轮运算来完成全部计算。bottom_data按照C维度并以Uc为单位可以拆分成32个bottom_data数据块,前16个数据块在第一轮运算中计算,后16个数据块在第二轮运算中计算。
如图所示,在第一轮运算的数据中,包括C=0,1,2,3的bottom_data数据块分配给第一从处理电路;包括C=4,5,6,7的bottom_data数据块分配给第二从处理电路;以此类推。在第二轮运算的数据中,也类似地划分bottom_data数据块并相应地进行存储,此处不再重复。
相应地,第一缓冲电路可以缓存来自第二存储电路的、分发给该从处理电路的多个bottom_data数据行;而第二缓冲电路可以缓存来自第一存储电路的、单播传输给该从处理电路的对应Uc的多个top_diff数据行。取决于具体的拆分和/或复用方式,这些数据行可以在运算期间被分发给对应的运算电路CU或广播给该从处理电路内的所有CU。继而,每个运算电路CU可以在每次运算中,针对分别从第一缓冲电路中选取的bottom_data数据行和从第二缓冲电路中选取的top_diff数据行执行对位乘累加运算。
当单个从处理电路SL内的多个运算电路CU共同处理一个Uc时,需要在这多个CU之间对输出点进行拆分。类似于Forward4中,在Update1中也按照每个运算电路分配间隔输出点的方式进行划分(例如图10b)。在Update1中,卷积核top_diff按照4×4为单位拆分,而bottom_data数据每次只使用第一缓冲电路中的2×2个64B,因此,在第一缓冲电路上多次滑动取数计算后,最多可以计算4×4个输出点。
具体地,在一个实施例中,在每次计算时,每个运算电路计算输出△W的Uc个通道C值的XY面上、在X和/或Y维度相邻的1个输出点;以及在不同次计算中,每个运算电路计算输出△W上在X和/或Y维度上不同的输出点。滑动次数Nk=ceil(Kx/2)*ceil(Ky/2),其中Kx和Ky分别是输出△W在X和Y维度的尺寸或从处理电路在当前卷积拆分模式下单次运算所支持的最大输出尺寸中的较小值。例如,对于Kx=Ky=4的情况,Nk=2*2=4次,以即滑动4次,每次计算2×2个输出点,总共计算4×4个输出点。
Update1方案中的单次运算过程可以与Forward1类似,可以参考结合图21的描述,此处不再重复。
图25示出了根据本披露一个实施例的Update1方案中的滑动卷积过程示意图。在该示例中,第一缓冲电路缓存2*2=4个bottom_data数据行,图中示出为2510,其中省去了C维度;第二缓冲电路则缓存1个top_diff数据行,图中示出为2520,同样省去了C维度。每个数据行都是4×4×4(C×H×W)大小的块。△W在X和Y维度的尺寸Kx=Ky=4。每次计算时,从第二缓冲电路选取4×4大小的top_diff,刚好对应上bottom_data的4×4的块,广播给4个运算电路。
具体地,按照与输出点的划分方式对应的方式,以拆分单元为滑动窗口,从第一缓冲电路中滑动选取NCU个bottom_data数据行,分别发送给从处理电路内的NCU个运算电路以供计算。进一步的,从第二缓冲电路中读取1个top_diff数据行,广播给从处理电路内的NCU个运算电路。在第一缓冲电路上执行Nk次滑动选数,其中Nk=ceil(Kx/2)*ceil(Ky/2),Kx和Ky分别是权值梯度数据△W在X和Y维度的尺寸或从处理电路在当前卷积拆分模式下单次运算所支持的最大输出尺寸中的较小值。
每次滑动时的bottom_data和top_diff在第一缓冲电路和第二缓冲电路中的选取范围如图25所示,共4幅图,代表共滑动4次。图中方块2510代表第一缓冲电路中的bottom_data,四个虚线框表示选择发给四个CU的区域;方块2520代表第二缓冲电路中的top_diff,虚线框代表选出的1个top_diff数据行,其被广播给4个CU,并且在滑动过程中无需重选。滑动次数Nk=4,滑动步长=2。在Update1卷积运算模式下,从处理电路单次运算所支持的最大△W尺寸为4×4。可以理解,当△W超过最大支持尺寸时,需要在XY方向按照该最大支持尺寸进行拆分。
在每次计算时,每个CU针对来自第一缓冲电路的一个bottom_data数据行和来自第二缓冲电路的一个top_diff数据行,以1/Uc个数据行为单位,将对应同一通道值的bottom_data和top_diff数据进行对位乘累加,得到Uc个输出点,也即△W在Uc上各个KxKy面上的1个输出点,从而NCU个运算电路每次得到Uc个KxKy面上的NCU个输出点。可以理解,当滑动经过Nk个运算周期的运算之后,每个运算电路计算得到Uc个KxKy面上X和/或Y维度上间隔的Nk个输出点。NCU个运算电路的Nk次滑动总计可以得到Uc个KxKy面上的Nk*NCU个输出点。这些输出点进行拼接,可以构成C维度上Uc个面上的最大4×4(Kx*Ky)个输出点,也即Uc×4×4。
具体地,对于图25中的每幅图,CU的个数Ncu=4,每个CU单次计算C维度上Uc个面上的1个输出点,该部分和是1/Uc(1/4)个数据行的对位乘累加结果,也即每个输出点为一个4×4(Y×X)的2D卷积。滑动Nk=4次之后,完成最大输出点计算,1个SL中得到4×4(Y×X)的输出(如图10b所示)。
可以理解,当每个CU计算的Kx/Ky大于4时,需要沿着Kx/Ky方向滑动,读取不同的bottom_data和top_diff。本领域技术人员根据前述描述可以类似地推导出其计算过程,此处不再赘述。
从前面的滑动卷积过程可以看出,滑动模式输出的结果并不是传统卷积输出数据的正常排列顺序。因此,在输出过程中,各个从处理电路SL可以将其内运算电路CU的运算结果转换为指定的格式。在一些实施例中,每个从处理电路可以每次输出其内一个运算电路运算得到的Uc个XY面上同一位置的1个输出点。Ns个从处理电路每次同时输出Ns*Uc个XY面上同一位置的1个输出点。通过这种输出方式,该Ns*Uc个输出点在C维度上是连续的。分块电路可以进一步将从各个从处理电路返回的运算结果以第四维度存储顺序存储,例如按照Ky*Kx*(Ns*Uc)维度顺序进行拼接存储。根据情况,分块电路还可以将运算结果转换为期望的维度存储顺序存储。
图26示出了根据本披露一个实施例Update1方案的输出数据格式示意图。在此实施例中,采用按照C维度划分分组的方式,也即每个从处理电路SL处理不同Uc的运算。
图中2610示出了1个SL的原始输出。从图中可以看出,每个SL每次输出Uc×1×1(C×Y×X)的区域,也即每次输出其内一个运算电路的Uc个运算结果,例如CU0的4个运算结果,这4个运算结果在输出数据的C维度上连续。由于不同SL处理不同Uc的运算,因此16个SL可以同时输出不同Uc上、XY面上同一位置的1输出点,其可以在C维度上拼接成16*Uc个输出点,其在C维度上连续。
图中2620示出了16个SL的存出数据结构。如图所示,每次16个SL的输出拼接成C维度上连续的一行数据。例如,第一次,16个SL都输出Ky=0,Kx=0位置(标记“1”)的输出点;第二次,16个SL都输出Ky=0,Kx=1位置(标记“2”)的输出点;以此类推。最终输出数据在写入存储电路(例如第一存储电路)后变为Kh*Kw*(16*Uc)的格式,其中16为在16个SL上的划分。根据需要,在一些实现中,可以再次进行摆数操作以转化为其他期望的数据格式。
在一些实施例中,考虑到运算电路内部寄存器的存储空间,例如包括四个运算电路的单个从处理电路最多可以计算16个4×4的输出点区域,因此可以复用bottom_data,从而减少第二存储电路的读数频率。也即,第一存储电路和第二存储电路的读数频率可以不同。运算电路计算出的结果如果是部分和,则存储在内部寄存器上。
在这些实施例中,从处理电路可以进一步用于:根据运算电路内的存储空间限制,确定从处理电路内的bottom_data复用次数rn;以及控制第二缓冲电路中的top_diff数据的加载频次,以使得第一缓冲电路中每次加载的bottom_data数据重复使用rn次,与第二缓冲电路中rn次加载的对应top_diff数据执行卷积运算。在一些示例中,rn可以取不大于16的值。
实施例5:Update4
在Update4中,拆分单元的形状与Update1相同,也是4B×4×4;区别在于Update4应用于神经网络模型的反向训练中的叉乘卷积运算,具体用于叉乘卷积运算中的反向训练中的权值更新过程,而Update1应用于反向深度卷积运算。反向叉乘卷积运算的原理可以参考前面结合图4c的描述。由于反向叉乘卷积运算的特点,需要不同的优化运算方案。
在下面的描述中,虽然会以top_diff和bottom_data来指代待运算的数据,但是前面针对卷积核的描述可以类似地应用于top_diff,而针对输入特征图的描述可以类似地应用于bottom_data,也即二者可互换使用。下面的描述可以应用于与Update4类似的卷积拆分方案中。
这些卷积拆分方案所指示的拆分单元的形状同样满足:Uc×Uy×Ux=M,Uc为拆分单元在bottom_data和top_diff初始的最低存储维度(例如bottom_data为Ci维度,top_diff为Co维度)上的尺寸,Ux和Uy分别为拆分单元在bottom_data和top_diff初始的X和Y存储维度上的尺寸,M是硬件单次最大运算量。在这些卷积拆分方案中,Ux=Uy≥Uc>1,Uc=M/4n
Figure BDA0003280666330000351
Update4方案中数据的拆分和存储示例可以参考实施例2中对Forward4的描述,例如参考图16,相同部分不再重复。
具体而言,对于bottom_data来说,需要将数据从[Hi Wi Ci]摆放为:
[Hi/4*Wi/4*Ci/4*(4×4×4)],这种六维张量的形状,省略N维度。
对于top_diff而言,需要将数据从[Ho Wo Co]摆放为:
[Ho/4*Wo/4*Co/4*(4×4×4)],这种六维张量的形状,省略N维度。
当使用图5所示的计算装置执行Update4卷积拆分方案时,可以按照Update4卷积拆分方案,由主处理电路内集成的分块电路、或完全或部分独立于主处理电路的分块电路将bottom_data和top_diff拆分成多个对应的拆分单元。分块电路还可以转换bottom_data和top_diff的维度存储顺序,以使得每个拆分单元内的数据连续存储为一个数据行。拆分和转换后的bottom_data和/或top_diff可被提供给主处理电路或从处理电路。继而,主处理电路可以将其获得的数据分发给多个从处理电路以供执行卷积运算;以及根据卷积拆分方案,对所调度的多个从处理电路返回的运算结果进行拼接处理,以得到bottom_data和top_diff的深度卷积运算的输出△W(或称为weight_diff)。多个从处理电路则可以根据其获得的数据执行卷积运算,并向主处理电路返回运算结果。
从前文结合图4c描述的Update4所应用的交叉卷积运算原理可以看出,输出△W(权值梯度)包括四个维度[Co Kh Kw Ci],其中Co维度上的运算结果是相对独立的。因此,不同Co的运算分配在不同的运算电路上可以相对独立地进行。需要注意,在采用Update4拆分方案中,C维度会按4B对齐,因此,当以拆分单元为单位进行处理时,C维度会对齐到4B(也即Uc)再进行拆分。换言之,不同运算电路上的处理在Co维度上是以Uc为单位进行拆分的。
由此,在一些实施例中,可以首先基于输出通道Co维度尺寸和可调度的从处理电路数量Ns,确定完成该叉乘卷积运算的运算轮次、各轮次运算中处理的输出通道Co数量Nco以及相应的分组模式,其中Nco对齐到Uc。
在一些实施例中,根据Co的不同取值范围,可以采用不同的分组模式来执行卷积运算。在一个实现中,当Co较小时,例如在1~4时,可以采用Group1分组模式,也即所有从处理电路SL属于一个组,共同处理同一Co(也即一个Uc)的运算。在另一实现中,当Co较大,例如在4~16时,可以采用Group4分组模式,也即所有SL分为4组,每组处理一个Co(也即一个Uc)的运算。在又一实现中,当Co非常大,例如超过16时,可以采用Group16分组模式,也即每个SL是一个组,每个SL处理不同Co(也即不同Uc)的运算。虽然上面示例性描述了不同Co范围适合的分组模式,但是也可以不按上述规则选择。例如,Co=16时,也可以采用Group1分组模式,通过多轮运算来完成所需处理。由此可见,不同组之间的拆分方式(例如,Group1、Group4、Group16)是根据Co来确定的。上述分组模式可以概括为GroupN,表示当前轮次运算中调度的Ns个从处理电路分为N组,每个从处理电路组处理相同的连续Uc个Co值,不同从处理电路组处理不同的连续Uc个Co值,N=4n,n=0,1,2…。
进一步地,在每个组内,也可以为对应数量的从处理电路分配运算任务,例如按照Ci维度。对于GroupN分组模式,假设每组有Rs个从处理电路,其中Rs=Ns/N,则需要在每个从处理电路组SLB内的Rs个从处理电路上分配运算任务,各组内分配方式相同。
当组内划分方式为按照Ci维度时,可以将bottom_data数据按照输入通道Ci方向,以Uc为单位顺次划分至同一组内的Rs个从处理电路上。top_diff数据无需进行额外处理。此时,可以将top_diff数据确定为多播数据,并将拆分并转换维度存储顺序后的多播数据存储在第一存储电路中,以在运算期间通过广播总线将对应不同Uc个Co值的top_diff数据分别传输给所调度的N个从处理电路组,每个从处理电路组共享相同的Uc个Co值的神经元梯度数据。进一步地,可以将bottom_data数据确定为分发数据,并将拆分并转换维度存储顺序后的分发数据复制N份,每份按照Ci方向的分组划分方式划分为Rs个数据块,分别存储在第二存储电路中对应的存储区域内,以便分发给对应的从处理电路。
以下针对不同分组模式的划分进行详细阐述。
在Group1分组模式下,也即所有从处理电路SL共同处理同一Co的情况下,top_diff可以直接以拆分单元拆分后存储在第一存储电路中;bottom_data则除了按拆分单元进行拆分之外,还按照Ci维度、以Uc为单位划分成Ns个数据块存储在第二存储电路,以分发给Ns个从处理电路。
在这种按照Ci维度划分的实施例中,由于每个从处理电路处理不同Ci,因此可以广播同一Co(以Uc为单位)的top_diff给对应的从处理电路。进一步地,主处理电路可以将bottom_data确定为分发数据,并将拆分并转换维度存储顺序后的分发数据存储在第二存储电路中,以便分发给对应的从处理电路。
图27a示出了根据本披露一些实施例的Update4方案中Group1模式下第二存储电路中的示例性存储内容。
如图所示,bottom_data存储在第二存储电路中,其包括16个存储区域2700~2715,分别分配给16个从处理电路SL0~SL15。每个存储区域存储对应不同C(也即Ci)维度的bottom_data数据块。具体地,按照C维度间隔1个Uc,顺次分配给16个存储区域。例如,Ci=0~3分配给SL0,Ci=4~7分配给SL1,直至Ci=60~63分配给SL15;然后再从SL0开始分配。
在Group4分组模式下,每Rs=Ns/4个从处理电路构成一个从处理电路组SLB,共同处理同一Co。当按照Ci维度划分分组时,top_diff可以同样直接以拆分单元拆分后存储在第一存储电路中。由于每个SLB处理不同的Co,因此可以单播不同Co的top_diff给对应的SLB,SLB内的SL共享同一Co。换言之,同一Co的top_diff会多播给一个SLB内的多个SL。
在这些实施例中,每个SLB处理相同的bottom_data数据,在SLB内的Rs个SL之间,bottom_data数据按照Ci维度拆分成Rs=Ns/4份,存储在第二存储电路中对应的存储区域内,以便分发给对应的从处理电路。
图27b示出了根据本披露一些实施例的Update4方案中Group4模式下按C维度划分时第二存储电路中的示例性存储内容。
如图所示,第二存储电路同样包括16个存储区域2700~2715,分别分配给16个从处理电路SL0~SL15。在Group4模式下,这16个存储区域根据对应的SLB也分成4个组,每组存储相同、完整的bottom_data,也即将bottom_data复制4份存储在4个SLB对应的存储区域中。
具体地,每个SLB针对相同的bottom_data、不同Co的top_diff进行处理;而每个SLB内的4个SL分别处理一块拆分的bottom_data数据块。这些bottom_data数据块根据Ci维度进行拆分,具体地,按照Ci维度间隔1个Uc,顺次分配给1个SLB内的4个SL的对应存储区域。因此,图中用于4个SLB的存储区域的存储内容是相同的,例如2700~2703中的内容与2712~2715中的内容相同。进一步地,在每个SLB内,用于不同SL的存储区域存储不同的拆分bottom_data数据块,例如2700中存储Ci=0~3的bottom_data数据块BD0,2701中存储Ci=4~7的bottom_data数据块BD1,以此类推。其他SLB的存储区域内也进行相同的存储分配,不再赘述。
在Group16分组模式下,也即每个从处理电路处理不同Co的情况下,与前文Update1方案类似,在16个SL之间可以按照Ci维度进行划分。此部分可以参考前文Update1方案的描述,不再赘述。
相应地,第一缓冲电路可以缓存来自第二存储电路的、分发给该从处理电路的多个bottom_data数据行;而第二缓冲电路可以缓存来自第一存储电路的、单播、多播或广播传输给该从处理电路的对应Co(以Uc为单位)的多个top_diff数据行。取决于具体的拆分和/或复用方式,这些数据行可以在运算期间被分发给对应的运算电路CU或广播给该从处理电路内的所有CU。继而,每个运算电路CU可以在每次运算中,针对分别从第一缓冲电路中选取的bottom_data数据行和从第二缓冲电路中选取的top_diff数据行执行对位乘累加运算。
当单个从处理电路SL内的多个运算电路CU共同处理以Uc为单位的一个Co时,需要在这多个CU之间对输出点进行拆分。由于Update4方案所应用的叉乘卷积运算的特性,CU之间可以按照输出通道Co维度来拆分输出点。例如,在Update4中,top_diff按照4×4为单位拆分,而bottom_data数据每次只使用第一缓冲电路中的2×2个64B,因此,在第一缓冲电路上多次滑动取数计算后,最多可以计算4×4×4×4(Co×Ky×Kx×Ci)个输出点。
具体地,在一个实施例中,在每次计算时,每个运算电路计算输出△W不同Co上、以Uc为单位的一个Ci上(也即连续Uc个Ci值上)、XY维度上同一位置的1个输出点。在不同次计算中,每个运算电路计算输出△W上在XY维度上不同的输出点。滑动次数Nk=Kx*Ky,其中Kx和Ky分别是输出△W在X和Y维度的尺寸或从处理电路在当前卷积拆分模式下单次运算所支持的最大输出尺寸中的较小值。例如,对于Kx=Ky=4的情况,Nk=4*4=16次,以即滑动16次,每次计算4×1×1×4(Co×Ky×Kx×Ci)个输出点,滑动16次总共计算4×4×4×4(Co×Ky×Kx×Ci)个输出点。
图28示出了根据本披露实施例的Update4方案中的单次运算过程示意图。在该示例中,第一缓冲电路2810的大小为3×3×64B,也即最多可以缓存9行数据,第二缓冲电路2820的大小为2×2×64B,也即最多可以缓存4行数据。为了与拆分单元一致,图中的缓冲电路内的存储同样以拆分单元为单位示出。
图中示出了第一次滑动取数的运算过程。按照与输出点的划分方式对应的方式,以拆分单元为滑动窗口,从第一缓冲电路中滑动选取1个bottom_data数据行,广播传输给从处理电路内的NCU个运算电路以供计算;从第二缓冲电路中读取1个top_diff数据行,将Co(一个Uc)拆分成Uc个Co,每个Co的XY数据面复制Uc份,分别发送给从处理电路内的Uc个运算电路。在图中示例中,NCU=4,数据类型为Int8,因此Uc=4。
如图所示,从第一缓冲电路2810中在起始位置选取一个bottom_data数据行,广播给该从处理电路SL内的4个运算电路2840。从第二缓冲电路2820中在起始位置选取1个top_diff数据行,也即选取4×4×4大小的数据2830,将其在Co维度上拆分成4个1×4×4的数据面,每个数据面复制4份,扩展成4×4×4(Ho×Wo×Ci)的数据行,分别发送给该SL内的4个运算电路2840。
在每次计算时,每个运算电路2840针对来自第一缓冲电路的一个bottom_data数据行和来自第二缓冲电路的一个扩展top_diff数据行,以1/Uc=1/4个数据行为单位,将对应同一输入通道Ci值的bottom_data数据和top_diff数据进行对位乘累加,得到所分配Co值在Ci维度上的Uc个输出点。
如图所示,4个运算电路2840对广播的bottom_data数据行和分发的top_diff扩展数据行按照1/4行执行对位乘累加运算,得到运算结果2850。2850中不同背景颜色的结果代表由不同运算电路2840得到的。可以看出,每次运算,一个CU计算所分配的一个Co的Uc(Ci维度)上各个KxKy面上的1个输出点,4个CU总计获得4个Co上1×1×Uc的输出点。可以看出,4个CU计算的输出点对应不同Co的KxKy维度上的同一位置。
接着,在第一缓冲电路滑动取数,第二缓冲电路中无需滑动,仍然使用这一行top_diff数据进行下一计算。在第一缓冲电路上执行Nk次滑动选数,其中Nk=Kx*Ky,Kx和Ky分别是△W在X和Y维度的尺寸或从处理电路在当前卷积拆分模式下单次运算所支持的最大输出尺寸中的较小值。相应地,每个运算电路在Nk次滑动计算期间计算得到Nk*Uc个输出点,其为单个Co上、Uc个Ci上的XY面上在X和/或Y维度上连续的Nk个输出点。4个运算电路则总共可以得到4个Co上Uc个Ci上的XY面上的Nk个运算结果。
在一些实施例中,在Update4模式下,从处理电路单次运算所支持的最大输出尺寸为4×4。
图29示出了根据本披露一个实施例的Update4方案中的滑动卷积过程示意图。在该示例中,第一缓冲电路缓存2*2=4个bottom_data数据行,图中示出为2910,其中省去了C维度;第二缓冲电路则缓存1个top_diff数据行,图中示出为2920,同样省去了C维度。每个数据行都是4×4×4(C×H×W)大小的块。△W在X和Y维度的尺寸Kx=Ky=4。每次计算时,从第二缓冲电路选取4×4大小的top_diff,并按C拆分复制,扩展成4个数据行,分发给4个运算电路。
每次滑动时的bottom_data和top_diff在第一缓冲电路和第二缓冲电路中的选取范围如图29所示,共16幅图,代表共滑动16次。图中方块2910代表第一缓冲电路中的bottom_data,虚线框表示选择广播给四个CU的区域;方块2920代表第二缓冲电路中的top_diff,虚线框代表选出的1个top_diff数据行,其被复制扩展后分发给4个CU,并且在滑动过程中无需重选。滑动次数Nk=16,滑动步长=1。在Update4卷积运算模式下,从处理电路单次运算所支持的最大△W尺寸为4×4。可以理解,当△W超过最大支持尺寸时,需要在XY方向按照该最大支持尺寸进行拆分。
在每次计算时,每个CU针对来自第一缓冲电路的一个bottom_data数据行和来自第二缓冲电路的一个top_diff扩展数据行,按照1/Uc行进行对位乘累加,得到△W在一个Co上、Uc个Ci上各个KxKy面上的1个输出点,从而NCU个运算电路每次得到NCU个Co上、Uc个KxKy面上的1个输出点。可以理解,当滑动经过Nk个运算周期的运算之后,可以得到NCU个Co上、Uc个KxKy面上的Kx*Ky个输出点,将其进行拼接,可以得到NCU个Co上、Uc个面上的最大4×4(Kx*Ky)个输出点,也即Ky×Kx×NCU×Uc(Ky×Kx×Co×Ci)。
具体地,对于图29中的每幅图,CU的个数Ncu=4,每个CU单次计算一个Co上、Ci维度上Uc个面上的1个输出点,该输出点是1/Uc(1/4)个数据行的对位乘累加结果,也即每个输出点为一个4×4(Y×X)的2D卷积。滑动Nk=16次之后,完成最大输出点计算,1个SL中得到4×4×4×4(Y×X×Co×Ci)的输出。
可以理解,当每个CU计算的Kx/Ky大于4时,需要沿着Kx/Ky方向滑动,读取不同的bottom_data和top_diff。本领域技术人员根据前述描述可以类似地推导出其计算过程,此处不再赘述。
上文描述了单个从处理电路SL内的运算过程。当数据类型为Int16或Float16时,Uc=2,此时分配给每个从处理电路的Co只有2个,无法利用全部的运算电路CU。在这种情况下,可以额外再读一次数,将后两个Co的top_diff数据行读进来,由此仍然可以每个CU计算一个Co。当数据类型为Float32时,Uc=1,也即数据是在C维度是按照Co=1个数据拆分的。这种情况下,在一些实施例中,每次只计算一个Co,此时每个CU每拍只能计算一个Co,连续计算四拍,从而把4个Co都计算完。例如,CU0可以在第一拍计算Co=0的数据,CU1可以在第二拍计算Co=1的数据,以此类推。在另一些实施例中,也可以额外再读3次数,将后3个Co的top_diff数据行读进来,由此仍然可以每个CU计算一个Co。也即,当Uc<NCU时,可以从第二缓冲电路中读取NCU/Uc个top_diff数据行,按照Co维度拆分成NCU个Co值,每个Co值对应的XY数据面复制Uc份,分别发送给从处理电路内的NCU个运算电路。
从前面的滑动卷积过程可以看出,滑动模式输出的结果并不是传统卷积输出数据的正常排列顺序。因此,在输出过程中,各个从处理电路SL可以将其内运算电路CU的运算结果转换为指定的格式。在一些实施例中,每个从处理电路可以每次输出其内一个运算电路的一次运算结果,这些运算结果是输出数据在一个Co上、Uc个Ci上的XY面上同一位置的1个输出点。也即,这些Uc个输出点在Ci维度上连续。同一SLB内的Rs个从处理电路每次同时输出同一Co的、Rs*Uc个Ci的XY面上同一位置的1个输出点。通过这种输出方式,该Rs*Uc个输出点在Ci维度上是连续的。分块电路可以进一步将从各个从处理电路返回的运算结果以第四维度存储顺序存储,例如按照Ky*Kx*Co/N*N*(Rs*Uc)维度顺序进行拼接存储,其中N代表GroupN,也即分组数。根据情况,分块电路还可以将运算结果转换为期望的维度存储顺序存储。
当分组模式(例如,Group1、Group4、Group16)不同时,输出的数据格式略有不同。
图30示出了根据本披露一个实施例Update4方案的输出数据格式示意图。在此实施例中,采用Group1分组模式、按照Ci维度划分分组的方式,也即每个从处理电路SL处理同一Co(以Uc为单位)、不同Ci(以Uc为单位)的输出数据的运算。
图中3010示出了1个SL的原始输出。从图中可以看出,每个SL每次输出1×Uc×1×1(Co×Ci×Y×X)的区域,也即每次输出其内一个运算电路的运算结果,例如CU0计算的Co=0上、Ci=0~3上4个XY面内Kx=Ky=0的1个输出点,这4个输出点在输出数据的Ci维度上连续,在XY维度上对应同一位置。由于16个SL处理相同Co、不同Ci的运算(均以Uc为单位),因此这16个SL可以同时输出相同Co、不同Ci上、XY面上同一位置的1个输出点,其可以在Ci维度上拼接成16*Uc个输出点,其在Ci维度上连续。
图中3020示出了16个SL的存出数据结构。如图所示,每次16个SL的输出拼接成Ci维度上连续的一行数据。例如,在第一个滑动计算周期后,16个SL可以首先输出其内CU0的运算结果,也即Co=0,Ky=0,Kx=0位置(标记“1”)的输出点;接着16个SL输出其内CU1的运算结果,也即Co=1,Ky=0,Kx=0位置(标记“1”)的输出点;直至都输出CU3的运算结果。在第二滑动计算周期后,16个SL可以依次输出对应Ky=0,Kx=1位置(标记“2”)的输出点;以此类推。最终输出数据在写入存储电路(例如第一存储电路)后变为Kh*Kw*Co*(16*Uc)的格式,其中16为在16个SL上的划分。根据需要,在一些实现中,可以再次进行摆数操作以转化为其他期望的数据格式。
如前面所提到,分组模式的拆分方式不同时,输出的数据格式还有细微的差别,其例如可以表示为Ky*Kx*Co/N*N*(Rs*Uc),其中N是GroupN中的分组数。
由于Update4是按照4B*4*4的块为计算单元,那么不可避免在计算时就存在对齐限制。根据不同分组模式(例如Group1、Group4、Group16等),最终在计算时的对齐限制也不一样。本领域技术人员可以根据不同数据类型、不同分组模式,推算出对各个数据的对齐限制,此处不再详述。
在一些实施例中,考虑到运算电路内部寄存器的存储空间,例如包括四个运算电路的单个从处理电路最多可以计算16个4×4的输出点区域,因此可以复用bottom_data,从而减少第二存储电路的读数频率。也即,第一存储电路和第二存储电路的读数频率可以不同。运算电路计算出的结果如果是部分和,则存储在内部寄存器上。
在这些实施例中,从处理电路可以进一步用于:根据运算电路内的存储空间限制,确定从处理电路内的bottom_data复用次数rn;以及控制第二缓冲电路中的top_diff数据的加载频次,以使得第一缓冲电路中每次加载的bottom_data数据重复使用rn次,与第二缓冲电路中rn次加载的对应top_diff数据执行卷积运算。在一些示例中,rn可以取不大于16的值。
以上结合Forward16、Forward4、Forward1、Update1和Update4的具体卷积拆分方案对本披露实施例提供的卷积优化方案进行了示例性描述和阐释。基于本披露的教导,本领域技术人员可以根据具体的硬件电路配置(诸如从处理电路的个数、从处理电路内的运算电路的个数、硬件单次处理能力等)设想出其他的卷积拆分方案,其均落入本披露公开范围内,此处不再一一枚举。
本披露实施例还提供了利用前述计算装置执行卷积运算的方法。本领域技术人员可以理解,执行卷积运算的方法步骤与前面结合附图描述的计算装置的各个电路相对应,因此前面描述的特征同样适用于方法步骤,此处不再重复。
本披露实施例还提供了一种芯片,其可以包括前面结合附图描述的任一实施例的计算装置。进一步地,本披露还提供了一种板卡,该板卡可以包括前述芯片。
根据不同的应用场景,本披露的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、PC设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、B超仪和/或心电图仪。本披露的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本披露的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本披露方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
需要说明的是,为了简明的目的,本披露将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本披露的方案并不受所描述的动作的顺序限制。因此,依据本披露的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本披露所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本披露某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本披露对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本披露某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。
在具体实现方面,基于本披露的公开和教导,本领域技术人员可以理解本披露所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行拆分,而实际实现时也可以有另外的拆分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
在本披露中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本披露实施例所述方案的目的。另外,在一些场景中,本披露实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如中央处理器、GPU、FPGA、DSP和ASIC等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(Resistive Random Access Memory,RRAM)、动态随机存取存储器(Dynamic RandomAccess Memory,DRAM)、静态随机存取存储器(Static Random Access Memory,SRAM)、增强动态随机存取存储器(Enhanced Dynamic Random Access Memory,EDRAM)、高带宽存储器(High Bandwidth Memory,HBM)、混合存储器立方体(Hybrid Memory Cube,HMC)、ROM和RAM等。
依据以下条款可更好地理解前述内容:
条款A1、一种计算装置,配置用于执行卷积运算,所述计算装置包括:
主处理电路,所述主处理电路用于:获取输入特征图和/或卷积核,其中所述输入特征图和卷积核已分别按卷积拆分方案拆分成多个拆分单元并转换其维度存储顺序,其中所述卷积拆分方案是根据所述输入特征图拆分前的最低存储维度的大小确定的,所述卷积拆分方案指示所述拆分单元的形状,一个拆分单元包含的数据量不超过硬件单次最大运算量,并且一个拆分单元内的数据连续存储为一个数据行;以及
多个从处理电路,所述多个从处理电路用于对所述输入特征图和卷积核的对应拆分单元执行卷积运算。
条款A2、根据条款A1所述的计算装置,其中所述卷积拆分方案是按如下确定的:
将所述输入特征图拆分前的最低存储维度Ci对齐到最近的M/4n的倍数,其中M是硬件单次最大运算量,
Figure BDA0003280666330000421
将所述拆分单元在所述最低存储维度上的大小Uci确定为M/4n
存在多个最近的M/4n的倍数时,取M/4n中最大值作为所述Uci,或者取其中对齐填补量最小的M/4n作为所述Uci;以及
确定所述拆分单元在X和Y存储维度上的大小Ux和Uy,使得Uci×Ux×Uy=M,其中Ux=Uy。
条款A3、根据条款A1所述的计算装置,还包括分块电路,用于分别针对所述输入特征图和卷积核,按如下方式进行拆分和存储:
从以第一维度存储顺序存储的待运算数据中,以所述拆分单元为单位,按第一读取顺序读取一个或多个拆分单元,将读取的拆分单元存储到对应的存储电路上,其中每个拆分单元内的数据按照第二维度存储顺序存储,拆分单元之间按照第三维度存储顺序存储。
条款A4、根据条款A3所述的计算装置,其中:
所述第一维度存储顺序按照从高到低为HWC;
所述第二维度存储顺序按照从高到低为CHW;
所述第一读取顺序按照从高到低为HWC;
所述第三维度存储顺序与所述第一维度存储顺序相同;
其中H是高度维度、W是宽度维度、C是通道维度。
条款A5、根据条款A1-A4任一所述的计算装置,其中所述主处理电路进一步用于:
基于卷积核的输出通道Co维度尺寸和可调度的从处理电路数量Ns,确定完成所述卷积运算所需的运算轮次、各轮次运算中处理的Co数量或相应的分组模式。
条款A6、根据条款A5所述的计算装置,其中所述分组模式为GroupN,表示当前轮次运算中调度的所有从处理电路分为N组,每个从处理电路组处理同一Co值,不同从处理电路组处理不同Co值,N=4n,n=0,1,2…。
条款A7、根据条款A6所述的计算装置,其中每个从处理电路组包括Rs个从处理电路,并且所述主处理电路进一步用于在所述Rs个从处理电路之间按如下划分所述输入特征图:
根据对应的输出特征图的尺寸,将所述输出特征图在HW维度上平均划分为Rs个形状相同的输出特征块;以及
根据计算每个输出特征块所需的输入特征图区域,将所述输入特征图在HW维度上划分为Rs个输入特征块,以分配给所述Rs个从处理电路。
条款A8、根据条款A7所述的计算装置,其中划分的所述输入特征块在HW维度上按所述拆分单元的YX维度对齐。
条款A9、根据条款A7-A8任一所述的计算装置,还包括第一存储电路和第二存储电路,
所述输入特征图和卷积核中之一确定为多播数据,拆分后的多播数据存储在第一存储电路中;以及
所述输入特征图和卷积核中另一确定为分发数据,拆分后的分发数据存储在第二存储电路中。
条款A10、根据条款A9所述的计算装置,其中所述第二存储电路包括为每个从处理电路分配的存储区域,
为每个从处理电路划分的输入特征图存储在所述第二存储电路中对应的存储区域内;或者
为每个从处理电路分配的卷积核存储在所述第二存储电路中对应的存储区域内。
条款A11、根据条款A9-A10任一所述的计算装置,其中每个所述从处理电路包括第一缓冲电路、第二缓冲电路和多个运算电路,其中:
所述第一缓冲电路用于缓存所述从处理电路对应的、来自所述第一存储电路和第二存储电路之一的多个输入特征行;
所述第二缓冲电路用于缓存所述从处理电路对应的、来自所述第一存储电路和第二存储电路另一的多个权值行;并且
每个运算电路用于在每次计算时,针对分别从所述第一缓冲电路中选取的输入特征行和从所述第二缓冲电路中选取的权值行执行对位乘累加运算。
条款A12、根据条款A11所述的计算装置,其中每个所述从处理电路进一步用于:
根据所述多个运算电路之间的输出点划分方式,以所述拆分单元为滑动窗口,从所述第一缓冲电路中滑动选取NCU个输入特征行,分别发送给所述从处理电路内的NCU个运算电路以供计算;
从所述第二缓冲电路中滑动选取对应的权值数据,广播给所述NCU个运算电路以供计算;以及
执行Nk次滑动选数,其中Nk根据卷积核在X和Y维度的尺寸和从处理电路在所述卷积拆分模式下单次运算所支持的最大卷积核尺寸中的较小值来确定。
条款A13、根据条款A12所述的计算装置,其中当所述卷积运算为三维卷积运算时,所述从处理电路进一步用于按如下选取对应的权值数据:
从所述第二缓冲电路中按照与在第一缓冲电路中对应的滑动方式选取1/Nop个权值行,将其复制Nop-1份扩展为一个扩展权值行,广播给所述从处理电路内的NCU个运算电路,其中Nop是每个运算电路单次最大可计算卷积输出点数量。
条款A14、根据条款A13所述的计算装置,其中每个所述运算电路进一步用于:
在每次计算时,针对来自第一缓冲电路的一个输入特征行和来自第二缓冲电路的一个扩展权值数据行,以1/Nop个数据行为单位进行对位乘累加,得到Nop个部分和;以及
将Nk次滑动计算中计算得到的Nk*Nop个部分和按照对应的卷积输出点进行累加,得到Nop个运算结果。
条款A15、根据条款A12-A14任一所述的计算装置,其中每个所述从处理电路进一步用于:
根据所述多个运算电路之间的输出点划分方式,按特定顺序输出其内多个运算电路计算的输出点,以使得连续输出的输出点在X和/或Y维度上连续。
条款A16、根据条款A12-A15任一所述的计算装置,其中所述多个运算电路之间的输出点划分方式包括以下任一:
在每次计算时,每个运算电路计算在X和/或Y维度上连续的多个输出点;或者
每个运算电路计算在X和/或Y维度上间隔的多个输出点。
条款A17、根据条款A3所述的计算装置,其中所述分块电路进一步用于:
将从所述从处理电路返回的运算结果以第四维度存储顺序存储;以及
将所述运算结果转换为期望的维度存储顺序。
条款A18、根据条款A3或A17所述的计算装置,其中:
所述分块电路集成在所述主处理电路中;或者
所述分块电路独立于所述主处理电路。
条款A19、根据条款A3、A17或A18所述的计算装置,其中
所述分块电路对所述输入特征图和卷积核均执行所述拆分;或者
所述分块电路仅对所述输入特征图和卷积核中被确定为多播数据的数据执行所述拆分。
条款A20、一种芯片,包括根据条款A1-A19任一所述的计算装置。
条款A21、一种板卡,包括根据条款A20所述的芯片。
条款A22、一种利用条款A1-A19任一所述的计算装置执行卷积运算的方法。
条款B1、一种用于执行卷积运算的处理电路,包括第一缓冲电路、第二缓冲电路和多个运算电路,其中:
所述第一缓冲电路用于缓存待运算的多个输入特征行;
所述第二缓冲电路用于缓存待运算的多个权值行;以及
每个所述运算电路用于在每次计算时,针对分别从所述第一缓冲电路中选取的输入特征行和从所述第二缓冲电路中选取的权值行执行对位乘累加运算,其中所述权值行是根据从所述第二缓冲电路中选取的局部权值行复制扩展而成的扩展权值行。
条款B2、根据条款B1所述的处理电路,其中所述处理电路进一步用于在每次滑动选数时:
根据所述多个运算电路之间的输出点划分方式,从所述第一缓冲电路中滑动选取NCU个输入特征行,分别发送给所述处理电路内的NCU个运算电路以供计算;以及
从所述第二缓冲电路中按照与在第一缓冲电路中对应的滑动方式选取1/Nop个权值行,将其复制Nop-1份扩展为一个扩展权值行,广播给所述NCU个运算电路,其中Nop是每个运算电路单次最大可计算卷积输出点数量。
条款B3、根据条款B2所述的处理电路,其中所述处理电路进一步用于:
执行Nk次滑动选数,其中Nk根据卷积核在X和Y维度的尺寸和所述处理电路在当前卷积运算模式下单次运算所支持的最大卷积核尺寸中的较小值来确定。
条款B4、根据条款B3所述的处理电路,其中每个所述运算电路进一步用于:
在每次计算时,针对来自第一缓冲电路的一个输入特征行和来自第二缓冲电路的一个扩展权值行,以1/Nop个行为单位进行对位乘累加,得到Nop个部分和;以及
将Nk次滑动计算中计算得到的Nk*Nop个部分和按照对应的卷积输出点进行累加,得到Nop个运算结果。
条款B5、根据条款B4所述的处理电路,其中所述处理电路进一步用于:
根据所述多个运算电路之间的输出点划分方式,按特定顺序输出其内多个运算电路计算的输出点,以使得连续输出的输出点在X和/或Y维度上连续。
条款B6、根据条款B2-B5任一所述的处理电路,其中所述多个运算电路之间的输出点划分方式包括以下任一:
在每次计算时,每个运算电路计算在X和/或Y维度上连续的多个输出点;或者
在每次计算时,每个运算电路计算在X和/或Y维度上间隔的多个输出点。
条款B7、根据条款B2-B6任一所述的处理电路,其中NCU=4,Nop=4。
条款B8、根据条款B1-B7任一所述的处理电路,其中每个所述输入特征行和所述权值行均由一个拆分单元构成,一个所述拆分单元包含最低存储维度和至少一个其他存储维度的数据。
条款B9、根据条款B8所述的处理电路,其中所述拆分单元的形状为Uci×Ux×Uy=M,Uci为所述拆分单元在所述输入特征数据和权值数据初始的最低存储维度上的尺寸,Ux和Uy分别为所述拆分单元在所述输入特征数据和权值数据初始的X和Y存储维度上的尺寸,M是硬件单次最大运算量,Uci=M/4n
Figure BDA0003280666330000451
条款B10、一种计算装置,配置用于执行卷积运算,所述计算装置包括主处理电路和多个从处理电路,每个所述从处理电路配置成根据条款B1-B9任一所述的处理电路。
条款B11、一种芯片,包括根据条款B10所述的计算装置。
条款B12、一种板卡,包括根据条款B11所述的芯片。
条款B13、一种利用条款B1-B9任一所述的处理电路执行卷积运算的方法。
条款C1、一种计算装置,配置用于执行卷积运算,所述计算装置包括:
分块电路,用于按照卷积拆分方案,将输入特征图和卷积核拆分成多个对应的拆分单元,其中一个拆分单元包括最低存储维度和至少一个其他存储维度的数据,并且一个拆分单元的数据量不超过硬件单次最大运算量;以及转换所述输入特征图和卷积核的维度存储顺序,以使得一个拆分单元内的数据连续存储为一个数据行,其中拆分和转换后的输入特征图和/或卷积核被提供给主处理电路或从处理电路;
所述主处理电路,用于将其获得的数据分发给多个从处理电路以供执行卷积运算;以及根据所述卷积拆分方案,对所述多个从处理电路返回的运算结果进行拼接处理,以得到所述输入特征图和卷积核的卷积运算的输出特征图;以及
所述多个从处理电路,用于根据其获得的数据执行卷积运算,并向所述主处理电路返回运算结果。
条款C2、根据条款C1所述的计算装置,其中所述卷积拆分方案还指示执行所述卷积运算的运算轮次,其中每个运算轮次中处理的输出通道Co数量对应于该运算轮次中可调度的从处理电路数量Ns。
条款C3、根据条款C2所述的计算装置,其中所述计算装置还包括第一存储电路和第二存储电路,
所述输入特征图确定为多播数据,拆分并转换维度存储顺序后的多播数据存储在第一存储电路中,以在运算期间通过广播总线传输给所调度的多个从处理电路;以及
所述卷积核确定为分发数据,拆分并转换维度存储顺序后的分发数据存储在第二存储电路中,以在运算前分发给对应的从处理电路。
条款C4、根据条款C3所述的计算装置,其中各个运算轮次中分配给各个从处理电路的、不同Co值的卷积核分别存储在所述第二存储电路中为对应的从处理电路分配的存储区域中。
条款C5、根据条款C3-C4任一所述的计算装置,其中每个所述从处理电路包括第一缓冲电路、第二缓冲电路和多个运算电路,其中:
所述第一缓冲电路用于缓存来自所述第一存储电路的、广播传输的多个输入特征数据行;
所述第二缓冲电路用于缓存来自所述第二存储电路的、分发给所述从处理电路的卷积核的多个权值数据行;并且
每个运算电路用于在每次运算中,针对分别从所述第一缓冲电路中选取的输入特征数据行和从所述第二缓冲电路中选取的权值数据行执行对位乘累加运算。
条款C6、根据条款C5所述的计算装置,其中所述从处理电路进一步用于按如下在其可调度的NCU个运算电路之间划分输出点:
在每次计算时,每个运算电路计算所述输出特征图上在X和/或Y维度连续的多个输出点。
条款C7、根据条款C6所述的计算装置,其中所述卷积运算为三维卷积运算,并且每个所述从处理电路进一步用于:
按照与所述输出点的划分方式对应的方式,以所述拆分单元为滑动窗口,从所述第一缓冲电路中滑动选取NCU个输入特征行,分别发送给所述NCU个运算电路以供计算;
从所述第二缓冲电路中按照与在第一缓冲电路中对应的滑动方式选取1/Nop个权值行,其中Nop是每个运算电路单次最大可计算卷积输出点数量,将其复制Nop-1份扩展为一个扩展权值行,广播给所述从处理电路内的NCU个运算电路;以及
执行Nk次滑动选数,其中Nk=Kx*Ky,Kx和Ky分别是卷积核在X和Y维度的尺寸或所述从处理电路在所述卷积拆分模式下单次运算所支持的最大卷积核尺寸中的较小值。
条款C8、根据条款C7所述的计算装置,其中每个所述运算电路进一步用于:
在每次计算时,针对来自第一缓冲电路的一个输入特征行和来自第二缓冲电路的一个扩展权值行,以1/Nop个数据行为单位进行对位乘累加,得到Nop个部分和;以及
将Nk次滑动计算中计算得到的Nk*Nop个部分和按照对应的卷积输出点进行累加,得到Nop个运算结果。
条款C9、根据条款C8所述的计算装置,其中每个所述从处理电路进一步用于:
按照输出点连续划分的顺序,每次输出其内一个运算电路的Nop个运算结果。
条款C10、根据条款C5-C9任一所述的计算装置,其中所述从处理电路进一步用于:
根据所述运算电路内的存储空间限制,确定从处理电路内的权值复用次数rs;以及
控制所述第一缓冲电路中的输入特征数据的加载频次,以使得第二缓冲电路中每次加载的权值数据重复使用rs次,与所述第一缓冲电路中rs次加载的对应输入特征数据执行卷积运算。
条款C11、根据条款C1-C10任一所述的计算装置,其中所述卷积拆分方案指示所述拆分单元的形状为Uci×Ux×Uy=M,Uci为所述拆分单元在所述输入特征图和卷积核初始的最低存储维度上的尺寸,Ux和Uy分别为所述拆分单元在所述输入特征图和卷积核初始的X和Y存储维度上的尺寸,M是硬件单次最大运算量,Uci>Ux=Uy>1,Uci=M/4n
Figure BDA0003280666330000471
条款C12、根据条款C11所述的计算装置,其中M=64字节,Uci=16字节,Ux=Uy=2。
条款C13、根据条款C6所述的计算装置,其中在每次计算时,每个运算电路计算包括2×2个输出点的输出特征区块。
条款C14、根据条款C7所述的计算装置,其中NCU=4,Nop=4。
条款C15、根据条款C7所述的计算装置,其中所述从处理电路在所述卷积拆分模式下单次运算所支持的最大卷积核尺寸为3×3。
条款C16、一种芯片,包括根据条款C1-C15任一所述的计算装置。
条款C17、一种板卡,包括根据条款C16所述的芯片。
条款C18、一种利用条款C1-C15任一所述的计算装置执行卷积运算的方法。
条款D1、一种计算装置,配置用于执行卷积运算,所述计算装置包括:
主处理电路,所述主处理电路用于:获取输入特征图和/或卷积核,其中所述输入特征图和卷积核已分别按卷积拆分方案拆分成多个拆分单元并转换维度存储顺序,其中一个拆分单元包括最低存储维度和至少一个其他存储维度的数据,并且一个拆分单元的数据量不超过硬件单次最大运算量,单轮运算中卷积核的输出通道Co维度的尺寸不超过所述从处理电路的数量,并且一个拆分单元内的数据连续存储为一个数据行;以及
多个从处理电路,所述多个从处理电路用于对所述输入特征图和卷积核的对应数据行执行卷积运算。
条款D2、根据条款D1所述的计算装置,其中所述卷积拆分方案还指示执行所述卷积运算的运算轮次、各轮次运算中处理的Co数量及相应的分组模式。
条款D3、根据条款D2所述的计算装置,其中所述分组模式为GroupN,表示当前轮次运算中执行运算的Ns个从处理电路分为N组,每个从处理电路组处理同一Co值,不同从处理电路组处理不同Co值,N=4n,n=0,1,2…。
条款D4、根据条款D3所述的计算装置,其中每个从处理电路组包括Rs个从处理电路,并且所述主处理电路进一步用于在所述Rs个从处理电路之间按如下划分所述输入特征图:
根据对应的输出特征图的尺寸,将所述输出特征图在HW维度上平均划分为Rs个形状相同的输出特征块;以及
根据计算每个输出特征块所需的输入特征图区域,将所述输入特征图在HW维度上划分为Rs个输入特征块,以分配给所述Rs个从处理电路。
条款D5、根据条款D4所述的计算装置,其中所述计算装置还包括第一存储电路和第二存储电路,
所述卷积核确定为多播数据,拆分并转换维度存储顺序后的多播数据存储在第一存储电路中,以在运算期间通过广播总线传输给所调度的多个从处理电路;以及
所述输入特征图确定为分发数据,拆分并转换维度存储顺序后的分发数据存储在第二存储电路中,以便分发给对应的从处理电路。
条款D6、根据条款D5所述的计算装置,其中所述Rs个输入特征块分别按所述拆分单元进行拆分并转换维度存储顺序后存储在所述第二存储电路中为所述Rs个从处理电路分配的存储区域中。
条款D7、根据条款D5-D6任一所述的计算装置,其中每个所述从处理电路包括第一缓冲电路、第二缓冲电路和多个运算电路,其中:
所述第一缓冲电路用于缓存来自所述第二存储电路的、分发给所述从处理电路的多个输入特征数据行;
所述第二缓冲电路用于缓存来自所述第一存储电路的、多播传输给所述从处理电路的对应输出通道值的卷积核的多个权值数据行;并且
每个运算电路用于在每次运算中,针对分别从所述第一缓冲电路中选取的输入特征数据行和从所述第二缓冲电路中选取的权值数据行执行对位乘累加运算。
条款D8、根据条款D7所述的计算装置,其中所述从处理电路进一步用于按如下在其可调度的NCU个运算电路之间划分输出点:
每次计算时,每个运算电路计算所述输出特征图上在X和/或Y维度间隔的多个输出点。
条款D9、根据条款D8所述的计算装置,其中所述卷积运算为三维卷积运算,并且每个所述从处理电路进一步用于:
按照与所述输出点的划分方式对应的方式,以所述拆分单元为滑动窗口,从所述第一缓冲电路中滑动选取NCU个输入特征行,分别发送给所述从处理电路内的NCU个运算电路以供计算;
从所述第二缓冲电路中按照与在第一缓冲电路中对应的滑动方式选取1/Nop个权值数据行,将其复制Nop-1份扩展为一个扩展权值行,广播给所述从处理电路内的NCU个运算电路;以及
执行Nk次滑动选数,其中Nk=ceil(Kx/2)*ceil(Ky/2),Kx和Ky分别是卷积核在X和Y维度的尺寸或所述从处理电路在所述卷积拆分模式下单次运算所支持的最大卷积核尺寸中的较小值。
条款D10、根据条款D9所述的计算装置,其中每个所述运算电路进一步用于:
在每次计算时,针对来自第一缓冲电路的一个输入特征行和来自第二缓冲电路的一个扩展权值行,以1/Nop个数据行为单位进行对位乘累加,得到Nop个部分和;以及
将Nk次滑动计算中计算得到的Nk*Nop个部分和按照对应的卷积输出点进行累加,得到Nop个运算结果。
条款D11、根据条款D10所述的计算装置,其中每个所述从处理电路进一步用于:
每次输出其内部分运算电路的部分运算结果,所述部分运算结果在输出特征图的X和/或Y维度上连续。
条款D12、根据条款D7-D11任一所述的计算装置,其中所述从处理电路进一步用于:
根据所述运算电路内的存储空间限制,确定从处理电路内的输入特征复用次数rn;以及
控制所述第二缓冲电路中的权值数据的加载频次,以使得第一缓冲电路中每次加载的输入特征数据重复使用rn次,与所述第二缓冲电路中rn次加载的对应权值数据执行卷积运算。
条款D13、根据条款D1-D12任一所述的计算装置,其中所述卷积拆分方案指示所述拆分单元的尺寸为Uci×Uy×Ux=M,Uci为所述拆分单元在所述输入特征图和卷积核初始的最低存储维度上的尺寸,Ux和Uy分别为所述拆分单元在所述输入特征图和卷积核初始的X和Y存储维度上的尺寸,M是硬件单次最大运算量,Ux=Uy≥Uci>1,Uci=M/4n
Figure BDA0003280666330000481
条款D14、根据条款D13所述的计算装置,其中M=64字节,Uci=4字节,Ux=Uy=4。
条款D15、根据条款D8所述的计算装置,其中在每次计算时,每个运算电路计算X和Y维度上均间隔1的2×2个输出点。
条款D16、根据条款D9所述的计算装置,其中NCU=4,Nop=4。
条款D17、根据条款D9所述的计算装置,其中所述从处理电路在所述卷积拆分模式下单次运算所支持的最大卷积核尺寸为8×8。
条款D18、一种芯片,包括根据条款D1-D17任一所述的计算装置。
条款D19、一种板卡,包括根据条款D18所述的芯片。
条款D20、一种利用条款D1-D17任一所述的计算装置执行卷积运算的方法。
条款E1、一种计算装置,配置用于执行深度卷积运算,所述计算装置包括:
主处理电路,所述主处理电路用于:获取输入特征图和/或卷积核,其中所述输入特征图和卷积核已分别按卷积拆分方案拆分成多个拆分单元并转换维度存储顺序,其中一个拆分单元包括最低存储维度和至少一个其他存储维度的数据,并且一个拆分单元的总数据量不超过硬件单次最大运算量,并且一个拆分单元内的数据连续存储为一个数据行;以及
多个从处理电路,所述多个从处理电路用于对所述输入特征图和卷积核的对应数据行执行深度卷积运算。
条款E2、根据条款E1所述的计算装置,其中所述卷积拆分方案指示所述拆分单元的形状为Uc×Uy×Ux=M,Uc为所述拆分单元在所述输入特征图和卷积核初始的最低存储维度C上的尺寸,Ux和Uy分别为所述拆分单元在所述输入特征图和卷积核初始的X和Y存储维度上的尺寸,M是硬件单次最大运算量,Ux=Uy≥Uc>1,Uc=M/4n
Figure BDA0003280666330000491
条款E3、根据条款E2所述的计算装置,其中所述卷积拆分方案还指示执行所述卷积运算的运算轮次、各轮次运算中处理的C数量Nc及相应的分组模式,其中Nc对齐到Uc。
条款E4、根据条款E3所述的计算装置,其中所述分组模式为GroupN,表示当前轮次运算中调度的Ns个从处理电路分为N组,每个从处理电路组处理相同的连续Uc个C值,不同从处理电路组处理不同的连续Uc个C值,N=4n,n=0,1,2…。
条款E5、根据条款E4所述的计算装置,其中每个从处理电路组包括Rs个从处理电路,并且所述主处理电路进一步用于在所述Rs个从处理电路之间按如下划分所述输入特征图:
根据对应的输出特征图的尺寸,将所述输出特征图在HW维度上平均划分为Rs个形状相同的输出特征块;以及
根据计算每个输出特征块所需的输入特征图区域,将所述输入特征图在HW维度上划分为Rs个输入特征块,以分配给所述Rs个从处理电路。
条款E6、根据条款E5所述的计算装置,其中所述计算装置还包括第一存储电路和第二存储电路,
所述卷积核确定为多播数据,拆分并转换维度存储顺序后的多播数据存储在第一存储电路中,以在运算期间通过广播总线传输给所调度的多个从处理电路;以及
所述输入特征图确定为分发数据,拆分并转换维度存储顺序后的分发数据存储在第二存储电路中,以便分发给对应的从处理电路。
条款E7、根据条款E6所述的计算装置,其中
所述Rs个输入特征块分别按所述拆分单元进行拆分并转换维度存储顺序后存储在所述第二存储电路中为所述Rs个从处理电路分配的存储区域中。
条款E8、根据条款E6-E7任一所述的计算装置,其中每个所述从处理电路包括第一缓冲电路、第二缓冲电路和多个运算电路,其中:
所述第一缓冲电路用于缓存来自所述第二存储电路的、分发给所述从处理电路的多个输入特征数据行;
所述第二缓冲电路用于缓存来自所述第一存储电路的、多播传输给所述从处理电路的多个权值数据行;并且
每个运算电路用于在每次运算中,针对分别从所述第一缓冲电路中选取的输入特征数据行和从所述第二缓冲电路中选取的权值数据行执行对位乘累加运算。
条款E9、根据条款E8所述的计算装置,其中所述从处理电路进一步用于按如下在其可调度的NCU个运算电路之间划分输出点:
在每次计算时,每个运算电路计算所述输出特征图上在X和/或Y维度间隔的1个输出点;以及
在不同次计算中,每个运算电路计算所述输出特征图上在X和/或Y维度上不同的输出点。
条款E10、根据条款E9所述的计算装置,其中每个所述从处理电路进一步用于:
按照与所述输出点的划分方式对应的方式,以所述拆分单元为滑动窗口,从所述第一缓冲电路中滑动选取NCU个输入特征行,分别发送给所述从处理电路内的NCU个运算电路以供计算;
从所述第二缓冲电路中读取1个权值数据行,广播给所述从处理电路内的NCU个运算电路;以及
在所述第一缓冲电路上执行Nk次滑动选数,其中Nk=Kx*Ky,Kx和Ky分别是卷积核在X和Y维度的尺寸或所述从处理电路在所述卷积拆分模式下单次运算所支持的最大卷积核尺寸中的较小值。
条款E11、根据条款E10所述的计算装置,其中每个所述运算电路进一步用于:
在每次计算时,针对来自第一缓冲电路的一个输入特征行和来自第二缓冲电路的一个权值行,以1/Uc个数据行为单位,将对应同一通道值的特征数据和权值数据进行对位乘累加,得到Uc个输出点;以及
将Nk次滑动计算中计算得到的Nk*Uc个输出点按照所述输出点的划分方式进行拼接,得到Uc个通道上的Nk*NCU个运算结果。
条款E12、根据条款E11所述的计算装置,其中每个所述从处理电路进一步用于:
每次输出其内部分运算电路的部分运算结果,所述部分运算结果在输出特征图的X和/或Y维度上连续。
条款E13、根据条款E8-E12任一所述的计算装置,其中所述从处理电路进一步用于:
根据所述运算电路内的存储空间限制,确定从处理电路内的输入特征复用次数rn;以及
控制所述第二缓冲电路中的权值数据的加载频次,以使得第一缓冲电路中每次加载的输入特征数据重复使用rn次,与所述第二缓冲电路中rn次加载的对应权值数据执行卷积运算。
条款E14、根据条款E2-E13任一所述的计算装置,其中M=64字节,Uci=4字节,Ux=Uy=4。
条款E15、根据条款E10所述的计算装置,其中NCU=4,Nop=4。
条款E16、根据条款E10所述的计算装置,其中所述从处理电路在所述卷积拆分模式下单次运算所支持的最大卷积核尺寸为4×4。
条款E17、一种芯片,包括根据条款E1-E16任一所述的计算装置。
条款E18、一种板卡,包括根据条款E17所述的芯片。
条款E19、一种利用条款E1-E16任一所述的计算装置执行卷积运算的方法。
条款F1、一种计算装置,配置用于执行神经网络模型的反向训练中的深度卷积运算,所述计算装置包括:
主处理电路,所述主处理电路用于:获取输入神经元数据和/或神经元梯度数据,其中所述输入神经元数据和神经元梯度数据已分别按卷积拆分方案拆分成多个拆分单元并转换维度存储顺序,其中一个拆分单元包括最低存储维度和至少一个其他存储维度的数据,并且一个拆分单元的总数据量不超过硬件单次最大运算量,并且一个拆分单元内的数据连续存储为一个数据行;以及
多个从处理电路,所述多个从处理电路用于对所述输入神经元数据和神经元梯度数据的对应数据行执行所述深度卷积运算。
条款F2、根据条款F1所述的计算装置,其中所述卷积拆分方案指示所述拆分单元的形状为Uc×Uy×Ux=M,Uc为所述拆分单元在所述输入神经元数据和神经元梯度数据初始的最低存储维度、通道C上的尺寸,Ux和Uy分别为所述拆分单元在所述输入神经元数据和神经元梯度数据初始的X和Y存储维度上的尺寸,M是硬件单次最大运算量,Ux=Uy≥Uc>1,Uc=M/4n
Figure BDA0003280666330000511
条款F3、根据条款F2所述的计算装置,其中所述卷积拆分方案还指示执行所述深度卷积运算的分组划分方式,其中所述分组划分方式针对所述输入神经元数据和神经元梯度数据,按照通道C维度、以Uc为单位顺次划分至可调度的Ns个从处理电路,每个从处理电路处理不同的连续Uc个C值的输入神经元数据和神经元梯度数据。
条款F4、根据条款F3所述的计算装置,其中所述计算装置还包括第一存储电路和第二存储电路,
所述神经元梯度数据确定为单播数据,拆分并转换维度存储顺序后的单播数据存储在第一存储电路中,以在运算期间通过广播总线将对应不同Uc个C值的神经元梯度数据分别传输给所调度的Ns个从处理电路;以及
所述输入神经元数据确定为分发数据,拆分并转换维度存储顺序后的分发数据按照通道C维度、以Uc为单位顺次划分的方式分别存储在第二存储电路中与所述Ns个从处理电路对应的存储区域内,以便分发给对应的从处理电路。
条款F5、根据条款F4所述的计算装置,其中每个所述从处理电路包括第一缓冲电路、第二缓冲电路和多个运算电路,其中:
所述第一缓冲电路用于缓存来自所述第二存储电路的、分发给所述从处理电路的多个输入神经元数据行;
所述第二缓冲电路用于缓存来自所述第一存储电路的、单播传输给所述从处理电路的多个神经元梯度数据行;并且
每个运算电路用于在每次运算中,针对分别从所述第一缓冲电路中选取的输入神经元数据行和从所述第二缓冲电路中选取的神经元梯度数据行执行对位乘累加运算。
条款F6、根据条款F5所述的计算装置,其中所述从处理电路进一步用于按如下在其可调度的NCU个运算电路之间划分输出点:
在每次计算时,每个运算电路计算所述权值梯度数据的Uc个通道C值的XY面上、在X和/或Y维度相邻的1个输出点;以及
在不同次计算中,每个运算电路计算所述权值梯度数据在X和/或Y维度上不同的输出点。
条款F7、根据条款F6所述的计算装置,其中每个所述从处理电路进一步用于:
按照与所述输出点的划分方式对应的方式,以所述拆分单元为滑动窗口,从所述第一缓冲电路中滑动选取NCU个输入神经元数据行,分别发送给所述从处理电路内的NCU个运算电路以供计算;
从所述第二缓冲电路中读取1个神经元梯度数据行,广播给所述从处理电路内的NCU个运算电路;以及
在所述第一缓冲电路上执行Nk次滑动选数,其中Nk=ceil(Kx/2)*ceil(Ky/2),Kx和Ky分别是权值梯度数据在X和Y维度的尺寸或所述从处理电路在所述卷积拆分模式下单次运算所支持的最大权值梯度尺寸中的较小值。
条款F8、根据条款F7所述的计算装置,其中每个所述运算电路进一步用于:
在每次计算时,针对来自第一缓冲电路的一个输入神经元数据行和来自第二缓冲电路的一个神经元梯度数据行,以1/Uc个数据行为单位,将对应同一通道值的输入神经元数据和神经元梯度数据进行对位乘累加,得到Uc个XY面上同一位置的1个输出点;以及
在Nk次滑动计算中,计算得到Uc个XY面上X和/或Y维度上间隔的Nk个输出点。
条款F9、根据条款F8所述的计算装置,其中每个所述从处理电路进一步用于:
每次输出其内一个运算电路运算得到的Uc个XY面上同一位置的1个输出点。
条款F10、根据条款F9所述的计算装置,其中所述主处理电路进一步用于:
将从所述从处理电路输出的运算结果按照Ky*Kx*(Ns*Uc)的维度顺序进行拼接存储。
条款F11、根据条款F1-F10任一所述的计算装置,其中M=64字节,Uc=4字节,Ux=Uy=4。
条款F12、根据条款F6-F10任一所述的计算装置,其中NCU=4,Ns=16。
条款F13、根据条款F7所述的计算装置,其中所述从处理电路在所述卷积拆分模式下单次运算所支持的最大权值梯度尺寸为4×4。
条款F14、一种芯片,包括根据条款F1-F13任一所述的计算装置。
条款F15、一种板卡,包括根据条款F14所述的芯片。
条款F16、一种利用条款F1-F13任一所述的计算装置执行卷积运算的方法。
条款G1、一种计算装置,配置用于执行神经网络模型的反向训练中的叉乘卷积运算,所述计算装置包括:
主处理电路,所述主处理电路用于:获取输入神经元数据和/或神经元梯度数据,其中所述输入神经元数据和神经元梯度数据已分别按卷积拆分方案拆分成多个拆分单元,其中一个拆分单元包括最低存储维度和至少一个其他存储维度的数据,并且一个拆分单元的总数据量不超过硬件单次最大运算量,并且一个拆分单元内的数据连续存储为一个数据行;以及
多个从处理电路,所述多个从处理电路用于对所述输入神经元数据和神经元梯度数据的对应数据行执行所述叉乘卷积运算。
条款G2、根据条款G1所述的计算装置,其中所述卷积拆分方案指示所述拆分单元的形状为Uc×Uy×Ux=M,Uc为所述拆分单元在所述输入神经元数据初始的最低存储维度、输入通道Ci上的尺寸和在所述神经元梯度数据初始的最低存储维度、输出通道Co上的尺寸,Ux和Uy分别为所述拆分单元在所述输入神经元数据和神经元梯度数据初始的X和Y存储维度上的尺寸,M是硬件单次最大运算量,Ux=Uy≥Uc>1,Uc=M/4n
Figure BDA0003280666330000521
条款G3、根据条款G2所述的计算装置,其中所述卷积拆分方案还指示执行所述深度卷积运算的运算轮次、各轮次运算中处理的输出通道Co数量Nco以及相应的分组模式,其中Nco对齐到Uc。
条款G4、根据条款G3所述的计算装置,其中所述分组模式为GroupN,表示当前轮次运算中调度的Ns个从处理电路分为N组,每个从处理电路组处理相同的连续Uc个Co值,不同从处理电路组处理不同的连续Uc个Co值,N=4n,n=0,1,2…。
条款G5、根据条款G4所述的计算装置,其中所述卷积拆分方案还指示在每个从处理电路组内,针对所述输入神经元数据,按照输入通道Ci维度、以Uc为单位顺次划分至同一组内可调度的Rs个从处理电路,其中Rs=Ns/N。
条款G6、根据条款G5所述的计算装置,其中所述计算装置还包括第一存储电路和第二存储电路,
所述神经元梯度数据确定为多播数据,拆分并转换维度存储顺序后的多播数据存储在第一存储电路中,以在运算期间通过广播总线将对应不同Uc个Co值的神经元梯度数据分别传输给所调度的N个从处理电路组,每个从处理电路组共享相同的Uc个Co值的神经元梯度数据;以及
所述输入神经元数据确定为分发数据,拆分并转换维度存储顺序后的分发数据复制N份,每份按照Ci方向、以Uc为单位顺次划分的方式划分为Rs个数据块,分别存储在第二存储电路中对应的存储区域内,以便分发给对应的从处理电路。
条款G7、根据条款G6所述的计算装置,其中每个所述从处理电路包括第一缓冲电路、第二缓冲电路和多个运算电路,其中:
所述第一缓冲电路用于缓存来自所述第二存储电路的、分发给所述从处理电路的多个输入神经元数据行;
所述第二缓冲电路用于缓存来自所述第一存储电路的、多播传输给所述从处理电路的多个神经元梯度数据行;并且
每个运算电路用于在每次运算中,针对分别从所述第一缓冲电路中选取的输入神经元数据行和从所述第二缓冲电路中选取的神经元梯度数据行执行对位乘累加运算。
条款G8、根据条款G7所述的计算装置,其中所述从处理电路进一步用于按如下在其可调度的NCU个运算电路之间划分输出点:
每次计算时,每个运算电路计算所述权值梯度数据在不同Co上、连续Uc个Ci上、XY维度上同一位置的1个输出点;以及
在不同次计算中,每个运算电路计算所述权值梯度数据在X和/或Y维度上不同的输出点。
条款G9、根据条款G8所述的计算装置,其中每个所述从处理电路进一步用于:
按照与所述输出点的划分方式对应的方式,以所述拆分单元为滑动窗口,从所述第一缓冲电路中滑动选取1个输入神经元数据行,广播传输给所述从处理电路内的NCU个运算电路以供计算;
从所述第二缓冲电路中读取1个神经元梯度数据行,按照Co维度拆分成Uc个Co值,每个Co值对应的XY数据面复制Uc份,分别发送给所述从处理电路内的Uc个运算电路;以及
在所述第一缓冲电路上执行Nk次滑动选数,其中Nk=Kx*Ky,Kx和Ky分别是权值梯度数据在X和Y维度的尺寸或所述从处理电路在所述卷积拆分模式下单次运算所支持的最大权值梯度尺寸中的较小值。
条款G10、根据条款G8所述的计算装置,其中当Uc<NCU时,每个所述从处理电路进一步用于:
按照与所述输出点的划分方式对应的方式,以所述拆分单元为滑动窗口,从所述第一缓冲电路中滑动选取1个输入神经元数据行,广播传输给所述从处理电路内的NCU个运算电路以供计算;
从所述第二缓冲电路中读取NCU/Uc个神经元梯度数据行,按照Co维度拆分成NCU个Co值,每个Co值对应的XY数据面复制Uc份,分别发送给所述从处理电路内的NCU个运算电路;以及
在所述第一缓冲电路上执行Nk次滑动选数,其中Nk=Kx*Ky,Kx和Ky分别是权值梯度数据在X和Y维度的尺寸或所述从处理电路在所述卷积拆分模式下单次运算所支持的最大权值梯度尺寸中的较小值。
条款G11、根据条款G9或G10所述的计算装置,其中每个所述运算电路进一步用于:
在每次计算时,针对来自第一缓冲电路的一个输入神经元数据行和来自第二缓冲电路的一个神经元梯度数据行,以1/Uc个数据行为单位,将对应同一输入通道Ci值的输入神经元数据和神经元梯度数据进行对位乘累加,得到所分配Co值在Ci维度上的Uc个输出点;以及
在Nk次滑动计算中,计算得到Nk*Uc个输出点,其为单个Co上、Uc个Ci上的XY面上X和/或Y维度上连续的Nk个输出点。
条款G12、根据条款G11所述的计算装置,其中每个所述从处理电路进一步用于:
每次输出其内一个运算电路运算得到的一个Co上、Uc个Ci上的XY面上同一位置的1个输出点。
条款G13、根据条款G12所述的计算装置,其中所述主处理电路进一步用于:
将所有从处理电路输出的运算结果按照Ky*Kx*Co/N*N*(Rs*Uc)的维度顺序进行拼接存储,其中N是分组数。
条款G14、根据条款G1-G13任一所述的计算装置,其中M=64字节,Uc=4字节,Ux=Uy=4。
条款G15、根据条款G8-G13任一所述的计算装置,其中NCU=4,Ns=16。
条款G16、根据条款G9-G10任一所述的计算装置,其中所述从处理电路在所述卷积拆分模式下单次运算所支持的最大权值梯度尺寸为4×4。
条款G17、一种芯片,包括根据条款G1-G16任一所述的计算装置。
条款G18、一种板卡,包括根据条款G17所述的芯片。
条款G19、一种利用条款G1-G16任一所述的计算装置执行卷积运算的方法。
以上对本披露实施例进行了详细介绍,本文中应用了具体个例对本披露的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本披露的方法及其核心思想;同时,对于本领域的一般技术人员,依据本披露的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本披露的限制。

Claims (22)

1.一种计算装置,配置用于执行卷积运算,所述计算装置包括:
主处理电路,所述主处理电路用于:获取输入特征图和/或卷积核,其中所述输入特征图和卷积核已分别按卷积拆分方案拆分成多个拆分单元并转换其维度存储顺序,其中所述卷积拆分方案是根据所述输入特征图拆分前的最低存储维度的大小确定的,所述卷积拆分方案指示所述拆分单元的形状,一个拆分单元包含的数据量不超过硬件单次最大运算量,并且一个拆分单元内的数据连续存储为一个数据行;以及
多个从处理电路,所述多个从处理电路用于对所述输入特征图和卷积核的对应拆分单元执行卷积运算。
2.根据权利要求1所述的计算装置,其中所述卷积拆分方案是按如下确定的:
将所述输入特征图拆分前的最低存储维度Ci对齐到最近的M/4n的倍数,其中M是硬件单次最大运算量,
Figure FDA0003280666320000011
将所述拆分单元在所述最低存储维度上的大小Uci确定为M/4n
存在多个最近的M/4n的倍数时,取M/4n中最大值作为所述Uci,或者取其中对齐填补量最小的M/4n作为所述Uci;以及
确定所述拆分单元在X和Y存储维度上的大小Ux和Uy,使得Uci×Ux×Uy=M,其中Ux=Uy。
3.根据权利要求1所述的计算装置,还包括分块电路,用于分别针对所述输入特征图和卷积核,按如下方式进行拆分和存储:
从以第一维度存储顺序存储的待运算数据中,以所述拆分单元为单位,按第一读取顺序读取一个或多个拆分单元,将读取的拆分单元存储到对应的存储电路上,其中每个拆分单元内的数据按照第二维度存储顺序存储,拆分单元之间按照第三维度存储顺序存储。
4.根据权利要求3所述的计算装置,其中:
所述第一维度存储顺序按照从高到低为HWC;
所述第二维度存储顺序按照从高到低为CHW;
所述第一读取顺序按照从高到低为HWC;
所述第三维度存储顺序与所述第一维度存储顺序相同;
其中H是高度维度、W是宽度维度、C是通道维度。
5.根据权利要求1-4任一所述的计算装置,其中所述主处理电路进一步用于:
基于卷积核的输出通道Co维度尺寸和可调度的从处理电路数量Ns,确定完成所述卷积运算所需的运算轮次、各轮次运算中处理的Co数量或相应的分组模式。
6.根据权利要求5所述的计算装置,其中所述分组模式为GroupN,表示当前轮次运算中调度的所有从处理电路分为N组,每个从处理电路组处理同一Co值,不同从处理电路组处理不同Co值,N=4n,n=0,1,2…。
7.根据权利要求6所述的计算装置,其中每个从处理电路组包括Rs个从处理电路,并且所述主处理电路进一步用于在所述Rs个从处理电路之间按如下划分所述输入特征图:
根据对应的输出特征图的尺寸,将所述输出特征图在HW维度上平均划分为Rs个形状相同的输出特征块;以及
根据计算每个输出特征块所需的输入特征图区域,将所述输入特征图在HW维度上划分为Rs个输入特征块,以分配给所述Rs个从处理电路。
8.根据权利要求7所述的计算装置,其中划分的所述输入特征块在HW维度上按所述拆分单元的YX维度对齐。
9.根据权利要求7-8任一所述的计算装置,还包括第一存储电路和第二存储电路,
所述输入特征图和卷积核中之一确定为多播数据,拆分后的多播数据存储在第一存储电路中;以及
所述输入特征图和卷积核中另一确定为分发数据,拆分后的分发数据存储在第二存储电路中。
10.根据权利要求9所述的计算装置,其中所述第二存储电路包括为每个从处理电路分配的存储区域,
为每个从处理电路划分的输入特征图存储在所述第二存储电路中对应的存储区域内;或者
为每个从处理电路分配的卷积核存储在所述第二存储电路中对应的存储区域内。
11.根据权利要求9-10任一所述的计算装置,其中每个所述从处理电路包括第一缓冲电路、第二缓冲电路和多个运算电路,其中:
所述第一缓冲电路用于缓存所述从处理电路对应的、来自所述第一存储电路和第二存储电路之一的多个输入特征行;
所述第二缓冲电路用于缓存所述从处理电路对应的、来自所述第一存储电路和第二存储电路另一的多个权值行;并且
每个运算电路用于在每次计算时,针对分别从所述第一缓冲电路中选取的输入特征行和从所述第二缓冲电路中选取的权值行执行对位乘累加运算。
12.根据权利要求11所述的计算装置,其中每个所述从处理电路进一步用于:
根据所述多个运算电路之间的输出点划分方式,以所述拆分单元为滑动窗口,从所述第一缓冲电路中滑动选取NCU个输入特征行,分别发送给所述从处理电路内的NCU个运算电路以供计算;
从所述第二缓冲电路中滑动选取对应的权值数据,广播给所述NCU个运算电路以供计算;以及
执行Nk次滑动选数,其中Nk根据卷积核在X和Y维度的尺寸和从处理电路在所述卷积拆分模式下单次运算所支持的最大卷积核尺寸中的较小值来确定。
13.根据权利要求12所述的计算装置,其中当所述卷积运算为三维卷积运算时,所述从处理电路进一步用于按如下选取对应的权值数据:
从所述第二缓冲电路中按照与在第一缓冲电路中对应的滑动方式选取1/Nop个权值行,将其复制Nop-1份扩展为一个扩展权值行,广播给所述从处理电路内的NCU个运算电路,其中Nop是每个运算电路单次最大可计算卷积输出点数量。
14.根据权利要求13所述的计算装置,其中每个所述运算电路进一步用于:
在每次计算时,针对来自第一缓冲电路的一个输入特征行和来自第二缓冲电路的一个扩展权值数据行,以1/Nop个数据行为单位进行对位乘累加,得到Nop个部分和;以及
将Nk次滑动计算中计算得到的Nk*Nop个部分和按照对应的卷积输出点进行累加,得到Nop个运算结果。
15.根据权利要求12-14任一所述的计算装置,其中每个所述从处理电路进一步用于:
根据所述多个运算电路之间的输出点划分方式,按特定顺序输出其内多个运算电路计算的输出点,以使得连续输出的输出点在X和/或Y维度上连续。
16.根据权利要求12-15任一所述的计算装置,其中所述多个运算电路之间的输出点划分方式包括以下任一:
在每次计算时,每个运算电路计算在X和/或Y维度上连续的多个输出点;或者
每个运算电路计算在X和/或Y维度上间隔的多个输出点。
17.根据权利要求3所述的计算装置,其中所述分块电路进一步用于:
将从所述从处理电路返回的运算结果以第四维度存储顺序存储;以及
将所述运算结果转换为期望的维度存储顺序。
18.根据权利要求3或17所述的计算装置,其中:
所述分块电路集成在所述主处理电路中;或者
所述分块电路独立于所述主处理电路。
19.根据权利要求3、17或18所述的计算装置,其中
所述分块电路对所述输入特征图和卷积核均执行所述拆分;或者
所述分块电路仅对所述输入特征图和卷积核中被确定为多播数据的数据执行所述拆分。
20.一种芯片,包括根据权利要求1-19任一所述的计算装置。
21.一种板卡,包括根据权利要求20所述的芯片。
22.一种利用权利要求1-19任一所述的计算装置执行卷积运算的方法。
CN202111131388.5A 2021-09-26 2021-09-26 计算装置、利用计算装置实施卷积运算的方法及相关产品 Pending CN115878547A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202111131388.5A CN115878547A (zh) 2021-09-26 2021-09-26 计算装置、利用计算装置实施卷积运算的方法及相关产品
PCT/CN2022/113302 WO2023045638A1 (zh) 2021-09-26 2022-08-18 计算装置、利用计算装置实施卷积运算的方法及相关产品

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111131388.5A CN115878547A (zh) 2021-09-26 2021-09-26 计算装置、利用计算装置实施卷积运算的方法及相关产品

Publications (1)

Publication Number Publication Date
CN115878547A true CN115878547A (zh) 2023-03-31

Family

ID=85720032

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111131388.5A Pending CN115878547A (zh) 2021-09-26 2021-09-26 计算装置、利用计算装置实施卷积运算的方法及相关产品

Country Status (2)

Country Link
CN (1) CN115878547A (zh)
WO (1) WO2023045638A1 (zh)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107437110B (zh) * 2017-07-11 2021-04-02 中国科学院自动化研究所 卷积神经网络的分块卷积优化方法及装置
US11487845B2 (en) * 2018-11-28 2022-11-01 Electronics And Telecommunications Research Institute Convolutional operation device with dimensional conversion
CN109919311B (zh) * 2019-03-13 2020-04-10 北京地平线机器人技术研发有限公司 生成指令序列的方法、执行神经网络运算的方法和装置
CN111738424B (zh) * 2020-06-29 2023-12-26 湖南国科微电子股份有限公司 神经网络处理方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
WO2023045638A1 (zh) 2023-03-30

Similar Documents

Publication Publication Date Title
CN113850380A (zh) 数据处理装置、数据处理方法及相关产品
CN112633490B (zh) 执行神经网络模型的数据处理装置、方法及相关产品
CN112416433B (zh) 一种数据处理装置、数据处理方法及相关产品
CN109726822B (zh) 运算方法、装置及相关产品
WO2023045446A1 (zh) 计算装置、数据处理方法及相关产品
CN110909872B (zh) 集成电路芯片装置及相关产品
US11775808B2 (en) Neural network computation device and method
CN112799598B (zh) 一种数据处理方法、处理器及电子设备
CN113850377A (zh) 数据处理装置、数据处理方法及相关产品
CN113850379A (zh) 数据处理装置、数据处理方法及相关产品
CN112084023A (zh) 数据并行处理的方法、电子设备及计算机可读存储介质
CN109740729B (zh) 运算方法、装置及相关产品
CN115878547A (zh) 计算装置、利用计算装置实施卷积运算的方法及相关产品
CN115878541A (zh) 计算装置、利用计算装置实施卷积运算的方法及相关产品
CN115878545A (zh) 计算装置、利用计算装置实施卷积运算的方法及相关产品
CN115878542A (zh) 计算装置、利用计算装置实施卷积运算的方法及相关产品
CN115878543A (zh) 计算装置、利用计算装置实施卷积运算的方法及相关产品
CN115878544A (zh) 处理电路、利用处理电路实施卷积运算的方法及相关产品
CN115878546A (zh) 计算装置、利用计算装置实施卷积运算的方法及相关产品
CN114154112A (zh) 数据处理装置、芯片和板卡
CN115221103A (zh) 计算装置、数据处理方法及相关产品
CN113850378A (zh) 数据处理装置、数据处理方法及相关产品
CN111860809A (zh) 采用伪单元填充图像传感芯片进行首层卷积层处理的方法
CN113837923A (zh) 数据处理装置、数据处理方法及相关产品
CN115470176A (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