预处理Winograd卷积的方法、计算机可读存储介质及装置与流程

文档序号:31562899发布日期:2022-09-20 18:09阅读:38来源:国知局
预处理Winograd卷积的方法、计算机可读存储介质及装置与流程
预处理winograd卷积的方法、计算机可读存储介质及装置
技术领域
1.本发明一般地涉及神经网络领域。更具体地,本发明涉及预处理winograd卷积的神经元数据与权值数据的方法、计算机可读存储介质及组合处理装置。


背景技术:

2.随着信息化时代的高速发展,人工智能与机器学习领域的研究炙手可热,相关产业蓬勃发展。卷积神经网络在计算机视觉、自动驾驶、机器翻译、语音识别、智能家居等各方面都有着广泛的作用。
3.卷积神经网络的参数量大,运算量大,使得卷积神经网络模型在便携移动终端有限面积和算力下被严重的限制其执行性能,同时非专用性设计的处理器在进行卷积运算时也会造成功耗的巨大开销。
4.winograd卷积是一种基于多项式插值算法的卷积加速实现方式。它通过对卷积操作的两个输入:神经元及权值进行一定规模切分后,分别做线性变换,也就是winograd正变换,再将变换后的神经元和权值进行对位乘法,把对位乘法结果再次进行线性变换,即winograd逆变换,最后得到与原卷积操作等价的卷积结果。
5.由于在winograd卷积操作的过程中,神经元和权值的正逆变换矩阵都由简单的固定数值构成,故而可以仅利用加法来实现winograd神经元和权值的正逆变换过程。而winograd算法中所需的乘法操作仅出现在对位乘过程中,此过程的乘法复杂度较原始卷积算法有相当程度缩减。由于硬件实现乘法运算的开销(时序、功耗、面积)比实现同位宽的加法要高很多,因此以winograd卷积替代原始卷积操作能够带来硬件能效比和运算时间上的明显收益。
6.然而,目前没有一种硬件针对winograd卷积加速算法来设计,使得现有人工智能芯片无法完全展现winograd卷积运算的优势。因此,一种能够高效预处理winograd卷积算法的方案是迫切需要的。


技术实现要素:

7.为了至少部分地解决背景技术中提到的技术问题,本发明的方案提供了一种涉及预处理winograd卷积的神经元数据与权值数据的方法、计算机可读存储介质及组合处理装置。
8.在一个方面中,本发明揭露一种预处理winograd卷积的神经元数据与权值数据的方法,包括:设定数据单元的大小为向量化方向与数据位数的乘积;以及以所述数据单元为单位对齐存储所述神经元数据。
9.在另一个方面,本发明揭露一种计算机可读存储介质,其上存储有预处理winograd卷积的神经元数据与权值数据的计算机程序代码,当所述计算机程序代码由处理装置运行时,执行前述的方法。
10.在另一个方面,本发明揭露一种预处理winograd卷积的神经元数据与权值数据的
组合处理装置,包括处理装置及片外内存。处理装置用以设定数据单元的大小为向量化方向与数据位数的乘积,片外内存用以依数据单元为单位对齐存储神经元数据。
11.本发明提出的预处理方案能够匹配winograd卷积加速算法,具有保证网络精度、性能加速、面积缩减以及功耗降低的技术效果。
附图说明
12.通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,并且相同或对应的标号表示相同或对应的部分其中:
13.图1是示出卷积核与输入神经元图像进行卷积运算的示意图;
14.图2是示出f(2
×
2,3
×
3)的原始卷积转换成winograd卷积的示意图;
15.图3是示出对位乘运算的可视化示意图;
16.图4是示出正变换数据与权值进行同质操作的示意图;
17.图5是示出本发明实施例的板卡的结构图;
18.图6是示出本发明实施例的集成电路装置的结构图;
19.图7是示出二维奇数元素的神经元数据进行填充预处理的示意图;
20.图8是示出本发明实施例预处理winograd卷积的流程图;
21.图9是示出本发明实施例的计算装置的内部结构示意图;
22.图10是示出正变换时重叠部分的示意图;
23.图11是示出示出本发明实施例的神经元缓存的示意图;
24.图12是示出本发明实施例的正变换单元的示意图;
25.图13是示出本发明实施例的正变换数据缓存的示意图;
26.图14是示出本发明实施例的权值缓存的示意图;
27.图15是示出本发明实施例的正变换数据缓存输出侧的示意图;
28.图16是示出本发明实施例的权值缓存输出侧的示意图;
29.图17是示出本发明实施例的逆变换单元的示意图;以及
30.图18是示出本发明实施例的结果缓存的连接关系示意图。
具体实施方式
31.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
32.应当理解,本发明的权利要求、说明书及附图中的术语“第一”、“第二”、“第三”和“第四”等是用于区别不同对象,而不是用于描述特定顺序。本发明的说明书和权利要求书中使用的术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
33.还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的,而并不意在限定本发明。如在本发明说明书和权利要求书中所使用的那样,除非上下文
清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。还应当进一步理解,在本发明说明书和权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
34.如在本说明书和权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。
35.下面结合附图来详细描述本发明的具体实施方式。
36.winograd卷积加速算法(以下简称winograd算法或winograd卷积)是利用对卷积运算中的操作数进行线性变换,进而找出需要乘法数最少的变换方法,再通过增加部分加法操作代替所需要的乘法操作。从硬件层面来说,乘法器的结构相比于加法器更加复杂,面积功耗更大,综合处理性能更差,实务上以加法取代乘法的winograd算法在处理卷积运算时具有极大优势。
37.对于二维卷积来说,假设输入神经元图像的大小为h
×
w(h为输入神经元图像的高度,w为输入神经元图像的宽度),权值的大小为r
×
s(r为权值的高度,s为权值的宽度),卷积结果可以表示为f(m
×
n,r
×
s),其中m
×
n为输出神经元图像的大小,m为输出神经元图像的高度,n为输出神经元图像的宽度。本发明的实施例为了降低硬件涉及的复杂度、提高通用性,并实现良好的加速效果,设定不大于3
×
3的卷积核(即权值)作为基卷积单元,来组合进行任意规模且卷积操作步长(stride)为1的winograd卷积运算。本发明的实施例将任意的f(m
×
n,r
×
s)拆解成运算规模为3
×
3、3
×
2(或2
×
3)、3
×
1(或1
×
3)、2
×
2、2
×
1(或1
×
2)等5种基卷积的计算,再进行组合。更详细来说,本发明的实施例将任意的f(m
×
n,r
×
s)拆解成f(2
×
2,3
×
3)、f(2
×
2,3
×
2)、f(2
×
2,2
×
3)、f(2
×
2,3
×
1)、f(2
×
2,2
×
2)及f(2
×
2,2
×
1)的基卷积计算组合。需注意的是,由于1
×
1的卷积运算无法利用winograd卷积来加速,故1
×
1的规模不属于本发明的实施例设定的基卷积单元。
38.以输入神经元图像的大小为6
×
6,步长为1的f(2
×
2,5
×
5)为例,在利用本发明实施例的计算装置进行winograd卷积加速运算前,需先将6
×
6的输入神经元图像和5
×
5的卷积核基于基卷积单元进行线性拆分,其拆分过程如图1所示。
39.图1示出一个5
×
5的卷积核101与一个6
×
6的输入神经元图像102进行卷积运算,以获得2
×
2的卷积结果103。卷积核101需拆分成3
×
3、3
×
2(或2
×
3)、3
×
1、2
×
2、2
×
1等规模,且此实施例较佳地优先选择3
×
3,3
×
2(或2
×
3)次之,3
×
1再次之,2
×
2再次之,最后为2
×
1。根据此规则,卷积核101被拆分为4个基卷积核:3
×
3的第一基卷积核104、3
×
2的第二基卷积核105、2
×
3的第三基卷积核106、2
×
2的第四基卷积核107,也就是f(2
×
2,5
×
5)会被拆解为一个f(2
×
2,3
×
3)、一个f(2
×
2,3
×
2)、一个f(2
×
2,2
×
3)及一个f(2
×
2,2
×
2)。输入神经元图像102相应的也拆分为4个子神经元数据:4
×
4的第一子神经元数据108、4
×
3的第二子神经元数据109、3
×
4的第三子神经元数据110、3
×
3的第四子神经元数据111。
40.接着进行winograd卷积运算,即:第一基卷积核104与第一子神经元数据108做卷积,以产生第一子卷积结果112;第二基卷积核105与第二子神经元数据109做卷积,以产生第二子卷积结果113;第三基卷积核106与第三子神经元数据110做卷积,以产生第三子卷积结果114;第四基卷积核107与第四子神经元数据111做卷积,以产生第四子卷积结果115。
41.最后将第一子卷积结果112、第二子卷积结果113、第三子卷积结果114及第四子卷积结果115相加,便获得卷积结果116,卷积结果116与卷积结果103相同。以上便是利用
winograd卷积算法来实现原始卷积运算的示例。
42.进一步来说,winograd算法可以用以下式子来表示:
43.y=a
t
[(ggg
t
)

(b
t
db)]a
[0044]
其中,y表示卷积操作的输出矩阵,a
t
为逆变换左乘常量矩阵,g为权值变换左乘常量矩阵,g为原始卷积的权值,g
t
为权值变换右乘常量矩阵,

表示按位乘法,b
t
为神经元变换左乘常量矩阵,d为神经元数据,b为神经元变换右乘常量矩阵,a为逆变换右乘常量矩阵。各变换的左乘矩阵和右乘矩阵仅为转置关系。
[0045]
以f(2
×
2,3
×
3)为例,前述各常数矩阵如下所示:
[0046][0047][0048][0049]
图2示出f(2
×
2,3
×
3)的原始卷积转换成winograd卷积的示意图。如图所示,神经元数据201与卷积核202进行卷积运算。计算时,将神经元数据201根据滑动窗口203中的元素按一行排列,滑动窗口203滑动4次形成4
×
9矩阵204,再将卷积核202的元素按一列排列,形成9
×
1矩阵205,4
×
9矩阵204与9
×
1矩阵205进行卷积运算,得到4
×
1卷积结果206。
[0050]
再根据图中虚线进行切分,4
×
9矩阵204转变成2
×
3矩阵207,9
×
1矩阵205转变成3
×
1矩阵208,4
×
1卷积结果206转变成2
×
1卷积结果209。在线性变换后,2
×
1卷积结果209的第一个元素r0=m0+m1+m2,且r1=m
1-m
2-m3。而m0、m1、m2、m3可以用以下式子表示:
[0051]
m0=(k
0-k2)
·
w0[0052]
m3=(k
1-k3)
·
w2[0053]
通过前述的切分与线性变换,原本卷积运算涉及36次乘法,而winograd算法仅需执行16次乘法,降低了2.25倍的乘法计算复杂度。
[0054]
由上述二维卷积的winograd算法的转换可以看出,winograd算法主要分为以下几个步骤。首先,对权值进行权值常数矩阵的左乘和右乘,即ggg
t
,得到winograd线性变换之后的权值,即winograd权值数据;接着,对神经元数据进行正变换操作,也就是神经元常数矩阵的左乘和右乘,即b
t
db,得到winograd线性变换之后的正变换数据。再者,将正变换数据和winograd权值数据矩阵进行对位乘操作,即(ggg
t
)

(b
t
db),得到对位乘数据。最后,将对位乘数据进行逆变换操作,也就是winograd逆变换常数矩阵的左乘和右乘操作,即a
t
la,
其中l为[(ggg
t
)

(b
t
db)],最终得到与原始卷积等价的卷积结果。
[0055]
从硬件设计的角度来说,本发明的实施例针对上述三个过程之间的依赖性以及运算区别特征,将这三个大的变换步骤进行流水化设计,以实现更高效的加速性能。以下将针对正变换操作、对位乘操作与逆变换操作的设计分别说明。
[0056]
本发明的实施例利用正变换单元来实现正变换操作,即执行b
t
db,根据winograd卷积的规则,正变换左乘矩阵b
t
的大小为(m+r-1)
×
(m+r-1),右乘矩阵b的大小为(n+s-1)
×
(n+s-1)。由于正变换左乘矩阵b
t
与右乘矩阵b的元素都是由0、1、-1所构成,故正变换的矩阵乘操作可以分解为固定模式的加法操作,本发明的实施例的计算装置据此配置特定数量的浮点加法运算器来完成整个矩阵乘需要的线性加法操作。由于本发明的实施例将任何原始卷积转换成基卷积来计算,故正变换单元的规模与前述5种基卷积规模的运算有关,因此以下将以2
×
2的卷积结果为例(即m=n=2),分别针对前述5种基卷积运算fp32的数据做说明。
[0057]
以3
×
3的基卷积为例,其可以表示为:
[0058][0059]
基于上述算式,正变换单元的正变换算力需求直接对应至加法个数,而加法个数为4
×
(n+s一1)+4
×
(m+r-1)=32flops(每秒执行浮点运算次数),而正变换单元的输入输出量分别为:输入数据和输出数据均为(r+1)(s+1)
×
32=16
×
32比特,前述算式乘上32比特的原因是针对fp32的数据,其为32比特的数列。当正变换单元的输入输出量与运算时间相同时,正变换单元的硬件使用率最为理想,因此正变换单元的输入输出带宽与加法运算的比例较佳为16∶32=1∶2。换言之,当缓存带宽(或称向量化长度)为l时,正变换单元的输入带宽和输出带宽为l
×
32比特,而正变换单元的加法器组的算力为2
×
l flops。每次运算会产生16个最终结果,再考虑到运算过程中会产生8个中间结果,寄存器堆的最少寄存器数为l
×
32
×
(16+8)个。
[0060]
以3
×
2的基卷积为例,其可以表示为:
[0061][0062]
基于上述算式,正变换单元的正变换算力需求为4
×
(n+s-1)+2
×
(m+r-1)=20flops,而正变换单元的输入输出量分别为:输入数据和输出数据均为(r+1)(s+1)
×
32=12
×
32比特。为提升正变换单元的硬件使用率,因此正变换单元的输入输出带宽与加法运算的比例较佳为12∶20=3∶5。也就是输入带宽和输出带宽为l
×
32比特,而加法器组的算力为每次计算会产生12个最终结果以及6个中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l
×
32
×
(12+6)个。
[0063]
以2
×
2的基卷积为例,其可以表示为:
[0064][0065]
基于上述算式,正变换单元的正变换算力需求为2
×
(n+s-1)+2
×
(m+r-1)=12flops,而正变换单元的输入输出量分别为:输入数据和输出数据均为(r+1)(s+1)
×
32=9
×
32比特,因此正变换单元的输入输出带宽与加法运算的比例较佳为9∶12=3∶4。也就是输入带宽和输出带宽为l
×
32比特,而加法器组的算力为每次计算会产生9个最终结果,以及6个中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l
×
32
×
(9+6)个。
[0066]
以3
×
1的基卷积为例,其可以表示为:
[0067][0068]
基于上述算式,正变换单元的正变换算力需求为4flops,而正变换单元的输入输出量分别为:输入数据和输出数据均为(r+1)
×
32=4
×
32比特。因此正变换单元的输入输出带宽与加法运算的比例较佳为4∶4=1∶1。也就是输入带宽和输出带宽为l
×
32比特,而加法器组的算力为l flops。每次计算会产生4个最终结果以及2个中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l
×
32
×
(4+2)个。
[0069]
以2
×
1的基卷积为例,其可以表示为:
[0070][0071]
基于上述算式,正变换单元的正变换算力需求为2flops,而正变换单元的输入输出量分别为:输入数据和输出数据均为(r+1)
×
32=3
×
32比特,因此正变换单元的输入输出带宽与加法运算的比例较佳为3∶2。也就是输入带宽和输出带宽为l
×
32比特,而加法器组的算力为每次计算会产生3个最终结果以及1个中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l
×
32
×
(3+1)个。
[0072]
为同时满足并支持前述5种基卷积运算,本发明的实施例选择正变换单元的输入带宽及输出带宽相同,且加法运算的算力为输入带宽及输出带宽的二倍,即输入带宽与输出带宽均为l
×
32比特,而加法器组的算力为2
×
lflops,寄存器堆的个数为l
×
32
×
(16+8)。
[0073]
接着考虑对位乘累加运算器,本发明的实施例基于硬件设计、调度策略和执行性能的通盘考虑,将对位乘操作和卷积神经元数据的特征图方向两者结合起来,利用同一套对位乘累加运算器,不仅能够有效降低硬件设计总体复杂度以及资源消耗,还能够减少片
上缓存的访问量,节省功耗面积的同时能够提高性能。
[0074]
假设卷积层的参数为:输入批处理(batch)数n、输入神经元通道数ci、输入神经元数据的高度hi、输入神经元数据的宽度wi、输出神经元通道数co、输出神经元数据的高度ho、输出神经元数据的宽度wo、卷积核大小为r
×
s、步长为1。由于此实施例支持f(2
×
2,r
×
s)的运算,故ho=hi-r+1,wo=wi-s+1,且winograd运算单元数其中t为沿着hw方向的切块数。
[0075]
由于片上缓存容量有限,实施例的计算装置是以单批处理量(n=1)进行计算,因此输入至计算装置的输入神经元数据规模为[1ci hi wi],正变换数据的规模为[1ci t(r+1)
×
(s+1)],原始权值的规模为[co cirs],而winograd权值数据的规模则为[1co ci(r+1)
×
(s+1)]。
[0076]
图3示出前述对位乘运算的可视化示意图。由于n=1,因此前述各数据可以降维成三维来表示,即正变换数据301的规模是[ci t(r+1)
×
(s+1)],其三维分别ci、t(即hw切块数)与(r+1)
×
(s+1);winograd权值数据302则为[co ci(r+1)
×
(s+1)],其三维分别co、ci与(r+1)
×
(s+1),对位乘运算是在co于hw方向交叉对位相乘,并在ci方向进行累加,以获得对位乘数据303,其规模为[co t(r+1)
×
(s+1)],其三维分别co、t与(r+1)
×
(s+1)。
[0077]
更详细来说,正变换数据301包括t个[ci(r+1)
×
(s+1)]的数据单元进行对位相乘,且winograd权值数据302包括co个[ci(r+1)
×
(s+1)]的数据单元进行对位相乘,以获得[ci(r+1)
×
(s+1)]的中间结果。接着再沿着ci方向进行累加,此过程与矩阵乘运算过程相同,故而可以将其合并为矩阵乘运算,更加有效的使用硬件资源,减少中间存储的寄存器资源消耗。
[0078]
由于正变换数据301包括t个[ci(r+1)
×
(s+1)]的数据单元,winograd权值数据302包括co个[ci(r+1)
×
(s+1)]的数据单元,每一个正变换数据301的数据单元都需要和每一个winograd权值数据302的数据单元相乘。如图4所示,在进行对位乘运算时,正变换数据301的其中一个数据单元401与co个权值数据单元进行同质的操作,即co方向作为并行计算的方向,并产出中间结果402。接着自正变换数据301中取出下一个数据单元与co个权值数据单元再进行同质的操作,产出下一个中间结果,以此方式进行运算直到所有t个数据单元均计算完毕,便获得对位乘数据303。
[0079]
当前述数据单元进行对位乘并在特征图方向进行累加时,所需的运算量为(ci+ci-1)
×
(r+1)
×
(s+1)flops。由于ci值往往很大,实务上难以将其作为真正运算时的粒度输入给对位乘累加运算器,故此实施例可以进一步对ci进行拆分,以向量化长度l为单位进行乘法累加操作,并将另一维度(r+1)
×
(s+1)的乘累加运算拆分于(r+1)
×
(s+1)拍中依序完成,最后沿ci方向把所有结果相加以获得最终结果。
[0080]
由于正变换单元的输出带宽为l
×
32比特,为了确保从正变换单元到对位乘累加运算器的整体流水时间相同,在此实施例中对位乘累加运算器中的每个对位乘累加单元的算力设定为l+(l-1)flops,其包括l个乘法运算及l-1个加法运算。如果对位乘累加运算器拥有ω个并行维度,也就是包括ω个同时运算的对位乘累加单元,则对位乘累加运算器的算力为ω
×
(l+(l-1))flops,同时为ω与l的函数。
[0081]
此实施例还配置有逆变换单元,用以执行逆变换操作,根据逆变换左乘矩阵
及右乘矩阵a
(n+s-1)
×2进行a
t
la计算,其中l为(ggg
t
)

(b
t
db)。由于逆变换左乘矩阵a
t
与右乘矩阵a的元素亦是由0、1、-1所构成,故逆变换的矩阵乘操作同样可以分解为固定模式的加法操作。逆变换单元的加法器组据此配置特定数量的浮点加法运算器来完成整个矩阵乘需要的线性加法操作。以下亦根据5种基卷积分别做说明以决定逆变换单元的规模。
[0082]
以3
×
3的基卷积为例,其可以表示为:
[0083][0084]
基于上述算式,itu 915的逆变换算力为24f10ps,而输入带宽为(r+1)(s+1)
×
32=16
×
32比特,输出带宽为(s+1)
×
32=4
×
32比特。同样地,当逆变换单元的输入带宽与算力相同时,逆变换单元的硬件使用率最佳,因此输入带宽与加法运算的比例较佳为16∶24=2∶3,即输入带宽为l
×
32比特,而加法器组的算力为每次计算会产生16个最终结果,不会出现中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l
×
32
×
16个。
[0085]
以3
×
2的基卷积为例,其可以表示为:
[0086][0087]
基于上述算式,逆变换单元的逆变换算力为16flops,而输入带宽为12
×
32比特,输出带宽为4
×
32比特,输入带宽与加法运算的比例较佳为12∶16=3∶4,即输入带宽为l
×
32比特,而加法器组的算力为flops,每次计算会产生12个最终结果,不会出现中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l
×
32
×
12个。
[0088]
以2
×
2的基卷积为例,其可以表示为:
[0089][0090]
基于上述算式,逆变换单元的逆变换算力为10flops,而输入带宽为9
×
32比特,输出带宽为4
×
32比特,因此输入带宽与加法运算的比例较佳为9∶10,即输入带宽为l
×
32比特,而加法器组的算力为每次计算会产生9个最终结果,不会出现中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l
×
32
×
9个。
[0091]
以3
×
1的基卷积为例,其可以表示为:
[0092][0093]
基于上述算式,逆变换单元的逆变换算力为4flop,而输入带宽为4
×
32比特,输出带宽为2
×
32比特,因此输入带宽与加法运算的比例较佳为4∶4=1∶1,即输入带宽为l
×
32比特,而加法器组的算力为l flops,每次计算会产生4个最终结果,2个中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l
×
32
×
(4+2)个。
[0094]
以2
×
1的基卷积为例,其可以表示为:
[0095][0096]
基于上述算式,逆变换单元的逆变换算力为2flops,而输入带宽为3
×
32比特,输出带宽为3
×
32比特,因此输入带宽与加法运算的比例较佳为3∶2,即输入带宽为l
×
32比特,而加法器组的算力为每次计算会产生3个最终结果,1个中间结果,在最大化流水使用寄存器堆的前提下,寄存器堆的最少寄存器数为l
×
32
×
(3+1)个。
[0097]
为同时满足并支持前述5种基卷积运算,逆变换单元的加法运算的算力可以设定为输入带宽的倍,即当输入带宽为l
×
32比特,加法器组的算力为
[0098]
然而为了使硬件设计相对单纯,此实施例可以进一步考虑让正变换单元与逆变换单元的硬件配置相同。在同时满足正变换单元与逆变换单元的需求的前提下,此实施例选择逆变换单元采用正变换单元的设计,也就是输入带宽及输出带宽相同,加法运算的算力为输入带宽及输出带宽的二倍。换言之,逆变换单元的输入带宽为l
×
32比特,输出带宽亦为l
×
32比特,加法器组的算力为2
×
l flops。
[0099]
综上所述,此实施例进行winograd卷积运算的3个核心模块(正变换单元、对位乘累加运算器及逆变换单元)的带宽和算力均已匹配完毕,即3个核心模块的输入带宽均设定为l
×
32比特,输出带宽亦均设定为l
×
32比特,正变换单元的算力为2
×
l flops,对位乘累加运算器的算力为ω
×
(l+(l-1))flops,逆变换单元的算力为2
×
l flops。
[0100]
由前述可知,winograd卷积运算直接与向量化长度参数l有关。向量化长度参数l是最小处理长度,关系到此实施例的计算装置的神经元变换复用情况,参数l越大,复用率越高,同时所需的访存量、运算量、功耗以及平均硬件设计面积会成比例下降。但是神经网络卷积层参数会随着网络模型的变化而变化,随着向量化长度参数l的增大,当出现部分网络模型的通道数目小于向量化长度l时,算力浪费便发生了,从而影响加速效果以及导致面积功耗的额外开销。因此,在确定向量化长度l的时候需要对这两个因素做权衡分析,才能够规划最适合的向量化长度参数配置。
[0101]
根据经验值,对此实施例中的几个主要的硬件(如fp32加法器、对位乘单元、寄存器等)设定权重以获得其算力与资源开销函数,发现当l大于16时,就能保证硬件资源的利用率处于较高的水平。再将目前常用的神经网络模型(例如lenet、vgg16、vgg19、alexnet)
的输入通道数与输出通道数列入考虑,计算其算力损失,发现当l大于64时综合算力损失将大幅提升。从以上两方面的量化分析中可以得出,当向量化长度参数l介于16至64间时,此实施例的计算装置具有较好的表现。如果进一步考虑通用性以满足未来可能的网络结构与网络参数,此实施例较佳地选择l=16。
[0102]
图5示出前述实施例以板卡形式呈现的结构示意图。如图5所示,板卡50包括芯片501,其是一种系统级芯片(system on chip,soc),或称片上系统,集成有一个或多个组合处理装置,组合处理装置是一种人工智能运算单元,用以支持各类深度学习和机器学习算法,满足计算机视觉、语音、自然语言处理、数据挖掘等领域复杂场景下的智能处理需求。特别是深度学习技术大量应用在云端智能领域,云端智能应用的一个显著特点是输入数据量大,对平台的存储能力和计算能力有很高的要求,此实施例的板卡50适用在云端智能应用,具有庞大的片外存储、片上存储和大量的计算能力。
[0103]
芯片501通过对外接口装置502与外部设备503相连接。外部设备503例如是服务器、计算机、摄像头、显示器、鼠标、键盘、网卡或wifi接口等。待处理的数据可以由外部设备503通过对外接口装置502传递至芯片501。芯片501的计算结果可以经由对外接口装置502传送回外部设备503。根据不同的应用场景,对外接口装置502可以具有不同的接口形式,例如pcie接口等。
[0104]
板卡50还包括用于存储数据的存储器件504,其包括一个或多个存储单元505。存储器件504通过总线与控制器件506和芯片501进行连接和数据传输。板卡50中的控制器件506配置用于对芯片501的状态进行调控。为此,在一个应用场景中,控制器件506可以包括单片机(micro controller unit,mcu)。
[0105]
图6是示出此实施例的芯片501中的组合处理装置的结构图。如图6中所示,组合处理装置60包括计算装置601、接口装置602、处理装置603和dram 604。
[0106]
计算装置601配置成执行用户指定的操作,主要实现为单核智能处理器或者多核智能处理器,用以执行深度学习或机器学习的计算,特别是winograd卷积运算,其可以通过接口装置602与处理装置603进行交互,以共同完成用户指定的操作。
[0107]
接口装置602用于在计算装置601与处理装置603间传输数据和控制指令。例如,计算装置601可以经由接口装置602从处理装置603中获取输入数据,写入计算装置601片上缓存。进一步,计算装置601可以经由接口装置602从处理装置603中获取控制指令,亦写入计算装置601片上缓存中。替代地或可选地,接口装置602也可以读取计算装置601的片上缓存中的数据并传输给处理装置603。
[0108]
处理装置603作为通用的处理装置,执行包括但不限于数据搬运、对计算装置601的开启和/或停止等基本控制。根据实现方式的不同,处理装置603可以是中央处理器(central processing unit,cpu)、图形处理器(graphics processing unit,gpu)或其他通用和/或专用处理器中的一种或多种类型的处理器,这些处理器包括但不限于数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,并且其数目可以根据实际需要来确定。如前所述,仅就本发明的计算装置601而言,其可以视为具有单核结构或者同构多核结构。然而,当将计算装置601和处理装置603整合共同考虑时,二者视为形
成异构多核结构。
[0109]
dram 604用以存储待处理的数据,为片外内存,大小通常为16g或更大,用于保存计算装置601和/或处理装置603的所需数据,尤其是存储欲进行winograd卷积运算的神经元数据及权值。
[0110]
此实施例在进行winograd卷积前,需要针对winograd算法进行数据预处理和指令预处理工作,以确保winograd算法能够在计算装置601上正确高效的运行。相关的预处理工作说明如下。
[0111]
首先需要考虑填充(padding)。与原始卷积的填充操作不同的是,winograd卷积的填充必须确保填充后的神经元数据能够完整地切分出数据单元,并满足输入输出规模参数。对于神经元数据的输入规模为奇数的卷积,处理装置603需要额外填充一行及一列的元素使得神经元输入规模变为偶数,相应地,winograd卷积产生的卷积结果也会增多一部分元素。
[0112]
图7示出二维奇数元素的神经元数据进行填充预处理的示意图。原始卷积的神经元数据701包括两个部分:神经元图像702及填充703,其中神经元图像702为5
×
5的原始神经元数据,填充703则是在进行原始卷积前完成的2,使其成为神经元数据701。神经元数据701用以与权值进行卷积以生成原始卷积的卷积结果704。如图所示,卷积结果704为5
×
5的数据矩阵。在此实施例中,当原始卷积的神经元数据701欲转换成适用于winograd卷积的神经元数据时,由于神经元数据701的元素数量为奇数(7
×
7),处理单元603会在填充703外再增加一行与一列元素的填充705,使其成为偶数元素数量(8
×
8)的神经元数据706。计算装置601基于神经元数据706与winograd权值数据进行winograd卷积,以生成卷积结果707。从图中可以看出,卷积结果707相较于卷积结果704多了一行与一列的额外元素708,多出来的额外元素708最终会被丢弃,使得两种卷积方式的结果一致。
[0113]
至于原本就是偶数元素数量的维度,处理装置603不对其进行额外的填充,维持原输入规模不为奇数的维度即可。在偶数元素数量的维度上,原始卷积结果与winograd卷积结果的大小一致。
[0114]
接着考虑基卷积指令调度方案。如前所述,此实施例会将所有卷积核拆分成3
×
3、3
×
2(或2
×
3)、2
×
2、3
×
1(或1
×
3)、2
×
1(或1
×
2)这五种基卷积单元。为加速运算,此实施例在指令调度的过程中,尽可能采用一致化且数量少的基卷积来进行运算。因此,在预处理时,处理装置603需要根据卷积核的规模拆分成尽可能多的相同基卷积单元,再依以下的优先顺序选择拆分结果:3
×
3优于3
×
2(或2
×
3),再优于2
×
2,再优于3
×
1(或1
×
3),最后是2
×
1(或1
×
2)。例如一个6
×
6的卷积核可以拆分成4个3
×
3基卷积单元,或是9个2
×
2基卷积单元,或是2个3
×
3基卷积单元加上3个2
×
3基卷积单元等,在这种情况下,处理装置603优先选择4个3
×
3基卷积单元,资源消耗最低。
[0115]
最后考虑原始权值的变换。此实施例的计算装置601仅接受经过winograd变换后的权值数据,故处理装置603需要预先对原始权值进行winograd变换。由于计算装置601支持的基卷积只有5种,因此当处理装置603将原始权值数据变换成winograd权值数据时,需要相应地设计完整的5种变换实现程序。对于一维基卷积而言,直接进行相应的矩阵运算所需的加法即可完成权值的变换;对于二维或更多维的基卷积而言,权值的变换与神经元正变换/逆变换相同,处理装置603先进行权值变换的左乘矩阵运算,然后再进行右乘运算,即
执行ggg
t
,ggg
t
计算后的结果便是winograd权值数据。
[0116]
最后再考虑输入数据的存储维度重构。如前所述,对于计算装置601而言,数据的摆放方式有着如下的要求。由于神经元数据的传输是以ci维度方向为向量化方向,且以l
×
32比特为数据单元进行的,这就要求神经元数据在dram 604中存储时是沿着ci方向的连续存储,并且较佳地以64b为数据单位对齐存储。基于这些要求,处理装置603会参考dram 604的结构,对神经元数据根据前述的顺序和向量宽度进行数据存储的重构。在进行winograd卷积计算时,winograd权值数据自dram 604发送到计算装置601亦是以ci维度方向作为向量化方向,并以l
×
32比特为数据单元进行的,故处理装置603将winograd权值数据存储至dram 604中的顺序同样需要与片上运算顺序直接对应,如此才能够确保输入/输出与片上运算流水执行达到最高的性能。
[0117]
综上所述,此实施例提供一种预处理winograd卷积的神经元数据与权值数据的方法,图8示出其流程图。
[0118]
首先为神经元数据进行填充。在步骤801中,处理装置603判断神经元数据中任一维度的输入规模是否为奇数,所述输入规模指的是神经元数据为执行原始卷积所做的填充后的元素数量,也就是神经元数据701。如为奇数,则执行步骤802,处理装置603填充输入规模为奇数的维度使输入规模为偶数,例如在二维中以神经元数据701为基础填充一行与一列,以形成神经元数据706。如为偶数,则执行步骤803,维持原输入规模不为奇数的维度。
[0119]
接着进行基卷积指令调度。在步骤804中,处理装置603设定基卷积的大小,即根据卷积核大小拆分并选择合适的基卷积组合。在步骤805中,处理装置603根据所选择的基卷积大小,将原始权值数据转换为winograd权值数据。
[0120]
最后进行输入数据的存储维度重构。在步骤806中,处理装置603设定数据单元的大小为向量化方向与数据位数的乘积,即l
×
32比特。在步骤807中,处理装置603以数据单元为单位对齐神经元数据。在步骤808中,处理装置603以数据单元为单位对齐winograd权值数据。在步骤809中,处理装置603将预处理后的神经元数据与winograd权值数据存储至dram 604中,dram 604以数据单元为单位对齐存储神经元数据与winograd权值数据。至此,winograd卷积运算的预处理工作已完成。
[0121]
图9示出计算装置601的结构图。计算装置601包括总线901、直接存储器访问(dma)模块902、指令缓存(iram)907、译码单元(idu)908、神经元缓存(nram)909、正变换单元(ntu,neuron transformation unit)910、正变换数据缓存(wnram)911、权值缓存(wram)912、对位乘累加运算器(mac)913、对位乘数据缓存(wrram)914、逆变换单元(itu)915、结果缓存(rram)916及逻辑运算模块(alu,arithmetic logic unit)917。
[0122]
总线901是各装置之间传送信息的公共通信干线,由导线组成的传输线束,按照组合处理装置60所传输的信息种类,总线901为数据总线、地址总线和控制总线的统称,用来分别传输数据、数据地址和指令。总线901作为dram 604与计算装置601的通讯渠道,在此实施例中具体为pcie。
[0123]
dma模块902用以将数据从一个地址空间复制到另外一个地址空间,通常是将数据在外部内存(如dram 604)与计算装置601内部缓存间进行搬运。在实现dma传输时,处理装置603把总线控制权交给dma模块902,dma模块902控制总线901进行数据搬运,结束dma传输后,dma模块902把总线控制权交回给处理装置603。
[0124]
dma模块902包括神经元直接存储器访问(ndma)903、权值直接存储器访问(wdma)904、指令直接存储器访问(idma)905及结果直接存储器访问(rdma)906。ndma 903用以自dram 604输入神经元数据,wdma904用以自dram604输入winograd权值数据,idma905用以自dram 604输入指令,rdma 906用以将计算结果输出至dram 604。在其他实施例中,ndma903、wdma904、idma905及rdma 906可以由同一个直接存储器访问来实现。
[0125]
iram 907用以暂存idma905输入的指令,idu908自iram 907取出指令进行译码,并根据译码后的指令以控制其他单元运作。idu 908是整个计算装置601的译码调度单元,负责译码从dram 604获取的控制指令,转换为控制信号协调片上各个模块/单元的运作,同时还要负责指令的保序、解依赖,进行分支预测、异常处理、中断处理等诸多任务。图9中细线箭头为控制流,粗线箭头为数据流。
[0126]
由于计算装置601主要针对winograd卷积计算,其不具备通用处理能力或者通用处理能力较低,故而在执行任务的过程中将很大程度上依赖处理装置603的调度和数据通信,这导致计算装置601与处理装置603的输入/输出通信十分频繁,对计算装置601的运行性能产生极大的限制。为此,计算装置601设置了多个小容量的片上缓存,用来缓存能够复用暂存的数据,例如nram 909、wnram 911、wram 912、wrram 914等。
[0127]
在进行片上片外的数据搬运时,神经元数据和winograd权值数据是以单批量(n=1)的数据规模为单位进行搬运的,即神经元数据的数据单元为[ci hi wi],而winograd权值数据的数据单元为[co ci(r+1)
×
(s+1)],winograd卷积运算完后得到的结果规模为[co ho wo]。前两者为输入数据,后者为输出数据,这些都是计算装置601中传输及计算的最小吞吐量,至于实际的数据吞吐量,需要根据片上缓存的大小以及运算调度流程决定,以下将进一步做说明。
[0128]
根据卷积运算的特点可知,以上规模的输入数据所涉及的卷积运算可以在多个维度进行拆分,例如在ci方向、hw图像方向或co方向,但涉及到winograd变换时,最小运算拆分单元即为f(2
×
2,r
×
s),且在hw方向上的最小拆分单元为(r+1)
×
(s+1)。再考虑到计算装置601实现winograd加速的基卷积规模不超过3
×
3,故此实施例以片上缓存资源以消耗最多的3
×
3基卷积为基准估算缓存容量。
[0129]
根据winograd卷积的规则,在进行正变换操作的时候需要在ci方向以向量化长度参数l为单位并行处理,在进行对位乘累加操作的时候会在co方向上以l为单位并行进行运算,在进行逆变换的时候需要在co的方向上以l为单位并行运算,故可以推知参与运算的最小神经元输入数据块大小为[l(r+1)
×
(s+1)]。由于以3
×
3基卷积来估算,神经元变换结果数据块大小便为[l4
×
4],需要与其进行对位乘累加的winograd权值数据块大小为[l l4
×
4],对位乘输出数据块大小[l4
×
4],逆变换输出结果大小[l2
×
2]。
[0130]
按照如此规模进行片上缓存设计,虽然可以满足所有需求,也兼顾了复用和低功耗的设计思路,但是以上规模数据只不过是实现功能的最小输入输出存储数据规模,还需要进一步考虑winograd卷积运算的输入/输出量的优化潜力。此实施例针对缓存进一步规划如下。
[0131]
在神经元正变换过程中,是基于f(2
×
2,r
×
s)及l为向量化长度的最小实施单元来运算的,每次取出的数据块大小为[l 4 4],且保持神经元取数的步长为2。如图10所示,待变换的数据单元1001和滑动窗口所产生的上下左右四个数据块1002、1003、1004、1005之
间均存在四分之一的重叠部分1006,而重叠部分1006的规模为[l 4 4],从图中可以看出,在数据单元1001进行正变换的过程中,数据块1002、1003、1004、1005均包括1个重叠部分1006,因此共产生4个重叠部分1006。当将其按照最小数据单位[l 4 4]拆分进行数据搬移时,重叠部分1006所需的数据吞吐量增至四倍,以至于冗余数据增加。为解决此问题,此实施例通过将设置规模更大的数据单元缓存在计算装置601的片上缓存,进一步减少输入/输出量。
[0132]
如前所述,规模为[ci hi wi]的神经元数据会和规模为[co ci(r+1)
×
(s+1)]的winograd权值数据进行卷积操作。此实施例尽可能保留更多的winograd权值数据存在片上,即在片上暂存尽可能多的个[l l(r+1)
×
(s+1)],如此一来只要进行一遍权值载入操作,便可对批量神经元数据进行计算,以节省权值数据的输入/输出量。
[0133]
对于输出数据,由于卷积神经网络还存在激活、池化、归一化等其他网络层操作,所以卷积结果需要缓存在片上,继续进行后续网络层的操作,为此,计算装置601将保留出固定容量的缓存存储卷积结果。这部分数据缓存可以和最终经过各种其它层操作的结果共用缓存空间,如此就降低了其他层操作重新载入卷积结果和将计算结果传输出去的数据吞吐量。
[0134]
经过上述优化分析可以看出,神经元数据的缓存容量应该尽可能大,从而降低神经元数据的总吞吐量,且由于神经元数据是沿着ci方向累加,因此沿ci方向存储的数据量越大,越能够减少重新载入再进行累加的次数。再者,针对winograd权值数据的缓存空间同样需要尽可能的大。最后,此实施例还需要保留相应的输出结果空间供其他层运算。综上所述,此实施例将片上缓存主要分为三大块分别负责不同的功能:nram 909负责存储神经元数据,wram 912负责存储winograd权值数据,rram 916负责存储卷积结果。计算装置601进一步设置2个缓存负责暂存中间结果:wnram 911负责暂存正变换后的数据,wrram 914负责暂存对位乘累加后的数据。
[0135]
虽然存储神经元数据、winograd权值数据及卷积结果的缓存容量越大越好,但缓存的大小和运算器资源的配置息息相关,一旦配置过大,将会损失计算装置601的运算能力。而判断的标准是输入/输出瓶颈压力与运算算力压力的均衡。此实施例设定nram 909大小为其中α为的方向系数,β为hw的方向系数;设定wram 912大小为α
×
γ
×
[l l 4 4],其中γ为的方向系数;设定rram 916的规模为β
×
γ
×
[l 2 2]。完成这些规模数据的运算所需要的时间为l
×
α
×
β
×
γ。
[0136]
较佳地,此实施例选择l为16,α为4,β为64,γ为16,再考虑到每个fp32的数据大小为4b,则nram 909的存储阵列的存储容量为909的存储阵列的存储容量为wram 912的存储容量为α
×
γ
×
[l l 4 4]
×
4b=1mb,rram 916的存储容量为β
×
γ
×
[l 2 2]
×
4b=256kb。
[0137]
回到图9,nram 909根据译码后的指令,用以暂存ndma 903发送的神经元数据,ntu 910根据译码后的指令,自nram 909读取神经元数据进行正变换,也就是进行b
t
db的运算,以产生正变换数据,所产生的正变换数据暂存在wnram 911中。图11示出nram 909的示意
图。在此实施例中,nram 909包括4个存储阵列1101、1102、1103、1104,每个存储阵列包括4个存储块1105、1106、1107、1108,每个存储块的规模为d个w比特的存储单元,其中d亦表示存储单元中的地址数。较佳地,w为128且d为1024,则每个存储块的大小为16kb,每个存储阵列的大小为64kb,而nram 909的总存储量为256kb,其总宽度为4
×
w=64b,深度为4
×
d=4
×
1024。
[0138]
在宽度方向,nram 909的输入带宽设定为4b,而输出带宽要匹配ntu 910的输入带宽。如前所述,ntu 910的输入带宽设定为l
×
32比特,而l较佳地为16,则ntu 910的输入带宽为64b,故nram 909的输出带宽亦为4
×
w=64b。nram 909的输入输出需要同时进行,故采用输入输出双端口的设计。
[0139]
图12示出ntu 910的示意图。ntu 910包括输入缓存1201、寄存器堆1202、加法器组1203及输出缓存1204。
[0140]
当ntu 910收到指令欲从nram 909载入神经元数据时,输入缓存1201作为先入先出队列缓存,用以基于输入带宽64b暂存神经元数据。载入神经元数据的阶段将会持续到所有数据接收完成,整体过程由idu 908发送指令控制。
[0141]
寄存器堆1202根据译码后的指令,按照规划好的运算顺序,自输入缓存1201取出暂存的神经元数据,存储至寄存器堆1202的特定地址,这些存储在寄存器堆1202的特定地址的神经元数据成为加法操作数。在此实施例中,由于ntu 910的输入、运算、输出三个阶段的流水时间长度应该相等,故而会出现缓存硬件资源依赖的现象,为了解决资源依赖的问题,寄存器堆1202切分为相同大小的乒存储单元1205与乓存储单元1206,第i个加法操作数及计算完所产生的正变换数据暂存在乒存储单元1205中,第i+1个加法操作数及第i+1个正变换数据则暂存在乓存储单元1206,第i+5个加法操作数及第i+5个正变换数据又暂存在乒存储单元1205,覆盖第i个加法操作数及第i+5个正变换数据,寄存器堆1202依此规则进行存储。
[0142]
加法器组1203根据译码后指令,自寄存器堆1202的特定地址依序读取加法操作数进行加法运算。在此实施例中,加法器组1203的数量为2组以对应加法运算调度方向,每组包括16个加法器以对应向量化方向l,每个加法器为fp32加法器,在神经元数据的通道方向按照特定顺序执行winograd卷积的正变换中的加法运算,此特定顺序为先计算winograd卷积的左乘矩阵bt的加法,再计算winograd卷积的右乘矩阵b的加法,最后产生正变换数据,再将正变换数据存回寄存器堆1202中。运算顺序以及寄存器分配、运算时间均与卷积滤波器规模相关,由idu 908发送指令控制。此运算阶段与前述载入神经元数据的阶段产生数据依赖,以流水方式执行,由硬件通过计数实现。
[0143]
输出缓存1204亦为先入先出队列缓存,用以暂存依序来自乒存储单元1205及乓存储单元1206的正变换数据。此输出阶段需要依赖于运算阶段的整体完成,才能基于输出带宽64b进行相应缓存的输出。
[0144]
由于需要对正变换数据进行复用以节省开销,故而配置wnram 911进行暂存并多次重复发送。其包括多个缓存单元,图13示出一种示例性的wnram 911的示意图,如图所示,wnram 911包括4个缓存单元:第一缓存单元1301、第二缓存单元1302、第三缓存单元1303、第四缓存单元1304。来自ntu 910的正变换数据是通过路由分发方式发送至这些缓存单元的一个或多个。
[0145]
wnram 911将正变换数据按照一定顺序发送到mac 913进行后续运算。wnram 911的设计是缓存一部分正变换数据,将这些数据发送给mac 913后再进行下一部分的正变换数据存储,通过流水降低wnram 911的规模。进一步来说,考虑到正变换数据会和γ
×
[l l 4
×
4]规模的winograd权值数据进行对位乘运算,wnram 911配置成以γ个数据块为单位打包传送给mac 913做运算。如此一来,平均每隔γ拍才需要进行正变换数据的输出,能够有效地降低wnram 911的功耗开销。据此,前γ个正变换数据被下γ个正变换数据有序覆盖,这样可以将wnram 911的最小存储规模限制在[l(r+1)(s+1)]
×
4b,也就是如前所述的[l 4 4]
×
4b=1kb。
[0146]
具体地,第一缓存单元1301、第二缓存单元1302、第三缓存单元1303、第四缓存单元1304的宽度均为w1字节,深度为d1,且在深度方向分割为m份。在此实施例中,较佳地m为8,w1为64,d1为128,因此每个缓存单元的宽度为64b,深度为128,深度方向上为了数据复用将地址空间均分为8份,每个缓存单元的大小为8kb,即wnram 911的总容量设定为32kb。
[0147]
回到图9,wram 912根据译码后的指令,暂存wdma 904发送来的winograd权值数据,mac 913根据译码后的指令,自wram 912读取winograd权值数据,并自wnram 911读取正变换数据,对正变换数据与winograd权值数据进行对位乘累加运算,也就是进行[(ggg
t
)

(b
t
db)]的运算,以产生对位乘数据,并将对位乘数据暂存至wrram 914。
[0148]
图14示出wram 912的示意图。在此实施例中,wram 912包括4个存储阵列1401、1402、1403、1404,wdma 904将winograd权值数据通过路由分发方式发送到存储阵列1401、1402、1403、1404。每个存储阵列包括4个存储块1405、1406、1407、1408,每个存储块包括4个存储单元1409、1410、1411、1412,每个存储单元的大小为4
×d×
w。如前所述,w为128且d为1024,故每个存储块的大小为64kb,而每个存储阵列的大小为256kb,wram 912的总容量为1mb。对于每个存储块来说,其宽度为4
×
w=512比特,其在深度方向进行地址块切分,分为4段地址独立存储空间,每段深度为d=1024,总深度为4
×
d=4096。
[0149]
在此实施例中,每个存储阵列1401、1402、1403、1404独立拥有4
×
wb的输入带宽及输出带宽,wram 912的总输出带宽及总输出带宽为4
×4×
w b。具体来说,当w为128时,每个存储阵列的输入带宽及输出带宽为64b,总输出带宽及总输出带宽为256b。
[0150]
在此实施例中,mac 913包括64个mac运算器,均分为4组分别进行4个不同批量的运算,每组的16个mac运算器为独立分布。wnram911的正变换数据需要同时发送给这64个mac运算器,使其与不同的winograd权值数据进行对位乘累加运算,因此wnram 911以广播或者分发路由的方式发送正变换数据。由于输出负载大,为保证驱动能力和时序,wnram 911的正变换数据通过n1、n2两级广播或者分发路由,首先发送给4个n1节点,每个n1节点广播或者分发路由给4个n2节点,每个n2节点再广播或者分发路由给4个mac运算器。
[0151]
图15示出wnram 911输出侧的示意图。mac 913首先进行对位相乘,然后将得到的结果向量依次累加,逻辑功能相当于求向量内积或者进行矩阵乘法中元素值的运算。每组mac包括16个mac单元1501,即ω=16,由于l较佳为16,故每组mac的算力为16
×
(16+(16-1))=496flops。
[0152]
图16示出wram 912输出侧的示意图。wram 912的4个输出分别负责16个mac单元1501的数据传输,事实上,此实施例是由每个存储阵列1401、1402、1403、1404来负责单一n1节点上的16个mac单元1501的数据传输。由于输出带宽只有64b,故而需要对带宽进行时分
复用,每个n2节点仅占用八分之一的带宽时间,另一半带宽时间闲置以降低功耗。更详细来说,wram 912基于64b的带宽将winograd权值数据发送至n1节点,n1节点基于64b的带宽以广播的方式发送至n2节点,n2节点再基于64b的带宽采用路由分发的方式发送至每个mac单元1501。每一个mac单元1501都可以进行长度为l的fp32乘累加操作。
[0153]
itu 915根据译码后的指令,自wrram 914读取对位乘数据,逆变换对位乘数据,也就是进行a
t
la的运算,以获得卷积结果,卷积结果暂存在rram 916中。
[0154]
图17示出itu 915的示意图。itu 915包括输入缓存1701、寄存器堆1702、加法器组1703及输出缓存1704。
[0155]
当itu 915收到指令欲从wrram 914载入对位乘数据时,输入缓存1701作为先入先出队列缓存,用以基于输入带宽暂存对位乘数据。载入对位乘数据的阶段将会持续到所有数据接收完成,不同规模的卷积滤波器会配置固定且独立的缓存资源划分和输入计数,整体过程由idu 908发送指令控制。
[0156]
寄存器堆1702根据译码后的指令,按照固定的运算顺序,自输入缓存1701取出暂存的对位乘数据,存储至寄存器堆1702的特定地址,这些存储在寄存器堆1702的特定地址的对位乘数据成为加法操作数。同样地,为了解决资源依赖的问题,寄存器堆1702具有相同大小的乒存储单元1705与乓存储单元1706,第i个加法操作数及计算完所产生的卷积结果暂存在乒存储单元1705中,第i+1个加法操作数及第i+1个卷积结果则暂存在乓存储单元1706,第i+5个加法操作数及第i+5个卷积结果又暂存在乒存储单元1705,覆盖第i个加法操作数及第i个卷积结果,寄存器堆1702依此规则进行存储。
[0157]
加法器组1703根据译码后指令,自寄存器堆1702的特定地址依序读取加法操作数进行加法运算。与加法器组1203相同,加法器组1703的数量为2组以对应加法运算调度方向,每组包括16个加法器以对应向量化方向,每个加法器为fp32加法器,在对位乘数据的通道方向按照特定顺序执行winograd卷积的逆变换中的加法运算,此特定顺序为先计算winograd卷积的左乘矩阵a
t
的加法,再计算winograd卷积的右乘矩阵a的加法,最后产生卷积结果,再将卷积结果存回寄存器堆1702中。运算顺序以及寄存器分配、运算时间均与卷积滤波器规模相关,由idu 908发送指令控制。此运算阶段与前述载入对位乘数据的阶段产生数据依赖,以流水方式执行,由硬件通过计数实现。
[0158]
输出缓存1704亦为先入先出队列缓存,用以暂存依序来自乒存储单元1705及乓存储单元1706的卷积结果。此输出阶段需要依赖于运算阶段的整体完成,才能基于输出带宽进行相应缓存的输出。
[0159]
除了winograd卷积外,计算装置601还能够执行所有神经网络相关的运算,alu 917用以根据译码后的指令,执行两大任务:第一个任务是卷积融合操作的运算,即运算可以和卷积层在片上一次性完成不需要依赖更多数据的运算,这些运算包括激活、加偏置、方向部分和累加等运算过程;第二个任务是非卷积运算。alu 917产生的运算结果亦暂存于rram 916中。alu 917的存在可以保证卷积神经网络中的各种运算在计算装置601中都可以完整实现,使得计算装置601具有神经网络的通用性和完整性。
[0160]
rdma 906根据译码后的指令,将卷积结果自rram 916中取出并输出至dram 604,至此完成整个卷积运算。同样地,rdma 906亦可根据译码后的指令,将alu 917生成的其他运算结果自rram 916中取出并输出至dram 604。在此实施例中,rram 916的输出带宽为w字
节,同样包括4个存储阵列,每个存储阵列包括4
×
d个4
×
w比特的存储单元,即宽度512比特,深度为4096,故每个存储阵列的大小为256kb,而rram 916的大小为1mb。每个存储阵列的输入输出双端口带宽均为64b,在深度方向的地址被划分为16份,每份地址空间为256,用来存储神经元复用方向的结果。
[0161]
图18示出rram 916的连接关系示意图。rram 916的输入端口与itu 915和alu 917相连,接收其输出数据。由于卷积操作和其他操作不会进行,不需要让这两个输入端口同时工作,因此保持每个存储阵列的输入带宽为64b,时分复用这64b的带宽接入itu 915和alu 917的数据即可。rram 916的输出端口亦有2个,一个连接至rdma 906,另一个连接至alu 917。在alu 917运算完成之后,rram 916才会将计算结果通过rdma 906发送至dram 604,因此在输出端同样采用时分复用的方式,使用64b的输出带宽实现向rdma 906及alu 917的数据传输。
[0162]
本发明还揭露一种计算机可读存储介质,其上存储有计算机程序代码,当所述计算机程序代码由处理装置603运行时,执行前述的预处理方法。
[0163]
本发明基于winograd算法的特性进行硬件设计,以实现加速通用性,并提出加速winograd卷积运算速度的流水级操作方式,还在硬件实现过程中通过时分复用、广播路由等方法充分利用可复用资源。本发明提出的预处理方案能够匹配winograd卷积算法,具有保证网络精度、性能加速、面积缩减以及功耗降低的技术效果。
[0164]
根据不同的应用场景,本发明的电子设备或装置可以包括服务器、云端服务器、服务器集群、数据处理装置、机器人、电脑、打印机、扫描仪、平板电脑、智能终端、pc设备、物联网终端、移动终端、手机、行车记录仪、导航仪、传感器、摄像头、相机、摄像机、投影仪、手表、耳机、移动存储、可穿戴设备、视觉终端、自动驾驶终端、交通工具、家用电器、和/或医疗设备。所述交通工具包括飞机、轮船和/或车辆;所述家用电器包括电视、空调、微波炉、冰箱、电饭煲、加湿器、洗衣机、电灯、燃气灶、油烟机;所述医疗设备包括核磁共振仪、b超仪和/或心电图仪。本发明的电子设备或装置还可以被应用于互联网、物联网、数据中心、能源、交通、公共管理、制造、教育、电网、电信、金融、零售、工地、医疗等领域。进一步,本发明的电子设备或装置还可以用于云端、边缘端、终端等与人工智能、大数据和/或云计算相关的应用场景中。在一个或多个实施例中,根据本发明方案的算力高的电子设备或装置可以应用于云端设备(例如云端服务器),而功耗小的电子设备或装置可以应用于终端设备和/或边缘端设备(例如智能手机或摄像头)。在一个或多个实施例中,云端设备的硬件信息和终端设备和/或边缘端设备的硬件信息相互兼容,从而可以根据终端设备和/或边缘端设备的硬件信息,从云端设备的硬件资源中匹配出合适的硬件资源来模拟终端设备和/或边缘端设备的硬件资源,以便完成端云一体或云边端一体的统一管理、调度和协同工作。
[0165]
需要说明的是,为了简明的目的,本发明将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本发明的方案并不受所描述的动作的顺序限制。因此,依据本发明的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本发明所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本发明某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本发明对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本发明某个实施例中没有详述的部分,也可以参见其他实施例的相关
描述。
[0166]
在具体实现方面,基于本发明的公开和教导,本领域技术人员可以理解本发明所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行拆分,而实际实现时也可以有另外的拆分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。
[0167]
在本发明中,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元示出的部件可以是或者也可以不是物理单元。前述部件或单元可以位于同一位置或者分布到多个网络单元上。另外,根据实际的需要,可以选择其中的部分或者全部单元来实现本发明实施例所述方案的目的。另外,在一些场景中,本发明实施例中的多个单元可以集成于一个单元中或者各个单元物理上单独存在。
[0168]
在另外一些实现场景中,上述集成的单元也可以采用硬件的形式实现,即为具体的硬件电路,其可以包括数字电路和/或模拟电路等。电路的硬件结构的物理实现可以包括但不限于物理器件,而物理器件可以包括但不限于晶体管或忆阻器等器件。鉴于此,本文所述的各类装置(例如计算装置或其他处理装置)可以通过适当的硬件处理器来实现,例如中央处理器、gpu、fpga、dsp和asic等。进一步,前述的所述存储单元或存储装置可以是任意适当的存储介质(包括磁存储介质或磁光存储介质等),其例如可以是可变电阻式存储器(resistive random access memory,rram)、动态随机存取存储器(dynamic random access memory,dram)、静态随机存取存储器(static random access memory,sram)、增强动态随机存取存储器(enhanced dynamic random access memory,edram)、高带宽存储器(high bandwidth memory,hbm)、混合存储器立方体(hybrid memory cube,hmc)、rom和ram等。
[0169]
依据以下条款可更好地理解前述内容:
[0170]
条款a1、一种预处理winograd卷积的神经元数据与权值数据的方法,包括:设定数据单元的大小为向量化方向与数据位数的乘积;以及以所述数据单元为单位对齐存储所述神经元数据。
[0171]
条款a2、根据条款a1所述的方法,还包括:判断所述神经元数据中任一维度的输入规模是否为奇数;以及如是,填充所述输入规模为奇数的维度使所述输入规模为偶数。
[0172]
条款a3、根据条款a2所述的方法,其中如所述神经元数据中任一维度的输入规模不为奇数,所述方法还包括:维持所述输入规模不为奇数的维度。
[0173]
条款a4、根据条款a1所述的方法,还包括:设定基卷积的大小;以及根据所述基卷积的大小,将所述权值数据转换为winograd权值数据。
[0174]
条款a5、根据条款a4所述的方法,还包括:以所述数据单元为单位对齐存储所述winograd权值数据。
[0175]
条款a6、一种计算机可读存储介质,其上存储有预处理winograd卷积的神经元数据与权值数据的计算机程序代码,当所述计算机程序代码由处理装置运行时,执行条款a1
至5任一项所述的方法。
[0176]
条款a7、一种预处理winograd卷积的神经元数据与权值数据的组合处理装置,包括:处理装置,用以设定数据单元的大小为向量化方向与数据位数的乘积;以及片外内存,用以依所述数据单元为单位对齐存储所述神经元数据。
[0177]
条款a8、根据条款a7所述的组合处理装置,其中所述处理装置判断所述神经元数据中任一维度的输入规模为奇数,则所述处理装置填充所述输入规模为奇数的维度使所述输入规模为偶数。
[0178]
条款a9、根据条款a8所述的组合处理装置,其中所述处理装置判断所述神经元数据中任一维度的输入规模不为奇数,则所述处理装置维持所述输入规模不为奇数的维度。
[0179]
条款a10、根据条款a7所述的组合处理装置,其中所述处理装置设定基卷积的大小,并根据所述基卷积的大小,将所述权值数据转换为winograd权值数据。
[0180]
条款a11、根据条款a10所述的组合处理装置,其中所述片外内存以所述数据单元为单位对齐存储所述winograd权值数据。
[0181]
以上对本发明实施例进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1