面向边缘计算的可重构CNN协处理器研究与设计
源自:电子与信息学报
作者:李伟, 陈億, 陈韬, 南龙梅, 杜怡然
摘要
随着深度学习技术的发展,卷积神经网络模型的参数量和计算量急剧增加,极大提高了卷积神经网络算法在边缘侧设备的部署成本。因此,为了降低卷积神经网络算法在边缘侧设备上的部署难度,减小推理时延和能耗开销,该文提出一种面向边缘计算的可重构CNN协处理器结构。基于按通道处理的数据流模式,提出的两级分布式存储方案解决了片上大规模的数据搬移和重构运算时PE单元间的大量数据移动导致的功耗开销和性能下降的问题;为了避免加速阵列中复杂的数据互联网络传播机制,降低控制的复杂度,该文提出一种灵活的本地访存机制和基于地址转换的填充机制,使得协处理器能够灵活实现任意规格的常规卷积、深度可分离卷积、池化和全连接运算,提升了硬件架构的灵活性。本文提出的协处理器包含256个PE运算单元和176 kB的片上私有存储器,在55 nm TT Corner(25 °C,1.2 V)的CMOS工艺下进行逻辑综合和布局布线,最高时钟频率能够达到328 MHz,实现面积为4.41 mm2。在320 MHz的工作频率下,该协处理器峰值运算性能为163.8 GOPs,面积效率为37.14 GOPs/mm2,完成LeNet-5和MobileNet网络的能效分别为210.7 GOPs/W和340.08 GOPs/W,能够满足边缘智能计算场景下的能效和性能需求。
关键词:
硬件加速 / 卷积神经网络 / 可重构 / ASIC
1. 引言
随着人工智能(Artificial Intelligence, AI)技术和物联网(Internet of Things, IoT)技术的不断发展,融合AI技术和IoT技术的边缘智能计算成为相关领域的研究热点[1–3],当前大部分的AI处理还是依赖于云端的大型服务器,然而由于边缘设备与云端服务器进行数据交换时信道传输的不稳定性和用户数据隐私安全性等原因,越来越多的AI应用将迁徙到边缘终端设备进行处理。自2012年用于ImageNet大规模识别数据集分类的AlexNet网络[4]出现以来,卷积神经网络(Convolution neural network, CNN)算法以其卓越的性能,在实际应用中最为广泛,但由于其模型具有计算密集和存储密集的特点,在那些受限于资源、功耗和算力等因素的边缘终端设备上部署CNN通常会面临计算性能低下和资源开销大的问题,因此,学术界和工业界提出了各种优化方法,来满足不同边缘计算场景下CNN部署的需求。然而根据实际应用需求的不同,使用的CNN结构也不同,当前主流的CNN结构众多,算子灵活多变,因此在资源受限的边缘终端设备上部署可重构的CNN以此来满足不同应用场景下的需求具有巨大的挑战性。
在CNN中,卷积运算占据了90%以上,因此为了加快边缘侧的AI处理速度,在硬件结构研究方面通过充分挖掘卷积运算时的计算并行性,设计了专用的运算和存储架构来实现对卷积运算的加速,以FlexFlow[5]为代表的2维PE阵列架构充分利用了特征图并行、神经元并行和卷积核并行这3种类型的计算并行性,提高了硬件的利用率和运算的吞吐率;三星团队[6]提出的NPU架构利用卷积运算的输入通道和输出通道计算的并行性和神经网络的稀疏性来加速运算,但该NPU中庞大数量的MAC运算单元和本地存储器使得其具有很高的运算功耗和较大的面积资源开销,不适用于功耗和面积受限的边缘设备中。为了降低对片外存储器的访问频率,进一步提升CNN系统的整体能效,研究者设计了权重固定[7]、输出固定[8]、无本地复用[9]和行固定[10]的数据流模式,来提升对权重和输入特征图数据的重用率,降低访存功耗。然而在硬件资源和算力受限的情况下,已有的计算方案和数据流模式形成可重构计算架构会带来高昂的资源开销和复杂的控制流,无法同时高效支持任意规格的常规卷积、深度可分离卷积[11]和全连接运算,无法灵活支持涉及多种神经网络算子时较为复杂的应用场景。当前主流架构中使用集中式的本地存储方案会使得在运算过程中大量的数据在相邻的PE运算单元中进行传播,大量的数据移动将会带来额外的功耗开销,且大多方案忽略了连续两个卷积层中间特征图重新编排引起的大规模片上数据搬移,导致访存带来的额外功耗和运算时间的开销,降低了整体系统的能效。由于CNN往往具有运算量庞大,参数量众多的特点,大量的浮点运算往往会带来巨大的存储资源和功耗的开销,这给在边缘侧部署CNN带来了巨大的挑战,因此,当前的研究以损失部分精度为代价,对CNN模型进行了量化处理[12–15],将浮点运算转化为定点运算来提升整体系统的性能和能效,并降低对参数量的存储需求。
因此,为了降低不同CNN算法在边缘设备上部署的难度,提升CNN的运算能效,本文提出一种面向边缘计算的可重构CNN协处理器,主要完成了如下的研究工作:(1)基于按通道处理的数据流模式,提出了两级分布式的存储方案,并采用纵横交错的PE阵列排列方式,单个PE单元能够完成单个输入通道的运算,单行PE单元能够完成单个输出通道的运算,使得输出结果能够点对点发送回对应的分布式缓冲区中,解决了片上大规模的数据搬移和重构运算时PE单元间的大量数据移动导致的功耗开销和性能下降的问题;(2)提出一种灵活的本地访存机制和基于地址转换的填充机制,通过将本地缓存读取的数据广播到PE单元中进行运算的方式,避免了加速阵列中复杂的数据互联网络传播机制,降低了控制的复杂度,并能够灵活实现任意规格的常规卷积、深度可分离卷积、池化和全连接运算,提升了硬件架构的灵活性。根据以上的设计思路,本文提出的加速器架构无需消耗额外的时间提前进行参数配置,且在运算时保持较高的硬件利用率和较低的功耗开销,能够有效提升硬件加速器的运算能效。
2. 卷积神经网络核心算子分析
在CNN中,卷积运算是其核心运算,其次为全连接运算,其运算性能的高低决定了硬件实现CNN加速的性能上限,因此本节将对卷积层和全连接层的运算特征进行分析,提取出共同的运算特征。
2.1 常规卷积运算
常规3D卷积运算过程如图1所示,通道数为IC,大小为IH×IW的输入特征图与OC个通道数为IC,大小为KH×KW的卷积核进行运算,滑动步长为S,卷积核的每次滑动都会计算得到一个输出特征值,将输入特征图映射为输出通道数为OC,大小为OH×OW的输出特征图。常规3D卷积算法如算法1所示,通过多次将输入特征图If与卷积核K进行乘累加计算得到输出特征图Of。
图 1 常规3D卷积运算示意图
在常规的3D卷积运算中,不同的卷积核对应不同的输出通道,同一个卷积核中的不同通道与输入特征图的通道一一对应,因此存在输出并行计算的可行性。
算法1 常规3D卷积 |
输入:IC, OC, OH, OW, KH, KW, If, K, S |
输出:Of |
FOR no=0; no<OC; no++ { |
FOR ni=0; ni<IC; ni++ { |
FOR Or=0; Or<OH; Or++ { |
FOR Oc=0; Oc<OW; Oc++ { |
FOR i=0; i<KH; i++ { |
FOR j=0; j<KW; j++ { |
Of[no][Or][Oc] += K[no][ni][i][j]×If[ni][S×Or+i][S×Oc+j]; |
} } } } } } |
2.2 深度可分离卷积运算
深度可分离卷积包括逐通道卷积(DepthWise Convolution, DWC)和逐点卷积(PointWise Convolution, PWC),其计算过程如图2所示,DWC与PWC运算过程与常规3D卷积计算类似,核心运算均为特征图与卷积核的乘累加计算。
图 2 深度可分离卷积运算示意图
2.3 全连接运算
全连接运算如式(1)所示,将输入特征图中的每一个像素值与对应的权重相乘,并加上偏置,得到输出特征图的像素值。
(1) |
以上3种运算的核心操作均为乘累加计算,且输出均可并行计算,因此本文提出的CNN协处理器结构将复用相同的PE阵列完成以上3种不同结构的重构运算,充分利用输出运算的并行性,减少了额外的硬件资源开销。此外,基于按通道处理的数据流模式,采用了一种灵活的片上访存方案,降低了可重构运算时的难度,提升了计算架构的灵活性。
3. 按通道处理的数据流模式
CNN中使用的数据流模式决定了其硬件架构中PE阵列的排列方式以及完成各种运算时的映射关系,本文采用的按通道处理的数据流处理模式和两级分布式存储方案,能够有效利用计算输出的并行性并提高对输入特征图数据和权重数据的复用,有效降低了对外部存储器的访问频率,并避免了相邻PE之间的大量数据的移动,以此来降低运算时的功耗开销。
对于算法1而言,1次循环只能进行1次乘累加操作,使得运算的时间开销过大,因此为了加快卷积的运算速度,充分利用卷积运算的输出并行性,一次进行多个输入通道和输出通道的并行计算,能够极大提升卷积运算的效率。假设硬件架构一次计算所支持的最大输入/输出通道为N,算法2所示为按通道处理的常规3D卷积算法,在最内部的循环进行输入输出通道的并行计算,当算法2中所访问输出特征图Of、卷积核K或输入特征图If的地址越界时,其值均作为“0”来处理。
算法2 按通道处理的常规3D卷积 |
输入:IC, OC, OH, OW, KH, KW, If, K, S, N |
输出:Of |
FOR no=0; no<⌈OC/N⌉⌈OC/�⌉; no++ { |
FOR ni=0; ni<⌈IC/N⌉⌈IC/�⌉; ni++ { |
FOR Or=0; Or<OH; Or++ { |
FOR Oc=0; Oc<OW; Oc++ { |
FOR i=0; i<KH; i++{ |
FOR j=0; j<KW; j++ { |
Of[no×N][Or][Oc] += K[no×N][ni×N][i][j]×If[ni×N][S×Or+i] [S×Oc+j]+ K[no×N][ni×N+1][i][j]×If[ni×N+1][S×Or+i] [S×Oc+j]+…+K[no×N][ni×N+N–1][i][j]×If[ni×N+N–1] [S×Or+i][S×Oc+j]; |
Of[no×N+1][Or][Oc] += |
K[no×N+1][ni×N][i][j]×If[ni×N][S×Or+i][S×Oc+j]+ |
K[no×N+1][ni×N+1][i][j]×If[ni×N+1][S×Or+i][S×Oc+j]+…+ |
K[no×N+1][ni×N+N–1][i][j]×If[ni×N+N–1][S×Or+i][S×Oc+j]; |
… |
Of[no×N+N–1][Or][Oc] += |
K[no×N+N–1][ni×N][i][j]×If[ni×N][S×Or+i][S×Oc+j] + |
K[no×N+N–1][ni×N+1][i][j]×If[ni×N+1][S×Or+i] [S×Oc+j]+…+ |
K[no×N+N–1][ni×N+N–1][i][j]×If[ni×N+N–1][S×Or+i][S×Oc+j]; |
} } } } } } } |
图3为按通道处理的数据流硬件框架图,以N=4为例进行叙述。其中全局缓冲区(Global Buffer, GB)和本地缓冲区(Local Buffer, LB)构成了两级分布式的存储层次,LB只能接收来自GB中的数据,GB可以接收外部存储器和后处理单元(Post Process Unit, PPU)完成运算后的部分和或结果数据。当需要进行运算时,将权重和特征图数据分别加载到权重缓冲区(Weight Buffer, WB)和GB中,而后将GB中的特征图数据搬移到LB中。这样做有两个好处,一个是降低了GB的读出带宽,可以使部分和数据和特征图读取运算的同时进行;另一个是可以使得LB中的特征图数据得到复用,PPU中的输出结果可以覆盖已读出的特征图数据部分,增加了输出结果的存储空间。采用两级分布式存储方案,能够使得运算的结果点对点地发送到GB中,且保持相应的顺序,避免了大规模数据的搬移,同时也降低了访存时的功耗。LB中的特征图数据将采用广播的方式,将同一个数据同时发送到PE中4个乘累加单元中进行运算,4个PE的每行乘累加结果将会送入PPE中进行累加,从而实现多个输入通道的并行计算,PPE中的4个PPU计算的结果将送入GB中存储,实现多个输出通道的并行计算。
图 3 按通道处理数据流框架示意图
4. CNN运算数据流映射及内存访问机制
基于提出的按通道处理的数据流模式,可以实现对任意规格的常规卷积、深度可分离卷积等运算的映射,并充分利用PE运算单元,提升运算能效。
4.1 运算数据流映射
4.1.1 常规3D卷积数据流映射
以实现输入3通道,输出4通道为例,常规的3D卷积计算映射如图4所示。 3个通道的输入特征图数据分别加载到PE0~PE2对应的GB中,4个卷积核的第1, 2, 3个通道分别加载到PE0~PE2对应的WB中,每个PPU计算得到1个输出通道的结果,并将该结果写回GB中,作为下一次参与运算的中间特征图数据。
图 4 常规3D卷积计算数据流映射
4.1.2 逐通道卷积数据流映射
逐通道卷积与常规卷积不同的是,在最后不需要对多个通道计算的结果进行累加,输出通道数与输入通道数一致,且仅需要1个卷积核。以输入3通道为例,计算映射如图5所示,3个输入特征图数据加载到相应的GB中,卷积核的第1个通道加载到PE0中的第1个WB中,第2个通道加载到PE1中的第2个WB中,第3个通道加载到PE2中的第3个WB中,后处理单元将3个输出通道的计算结果写回相应的GB中。
图 5 逐通道卷积计算数据流映射
4.1.3 逐点卷积数据流映射
逐点卷积本质上与常规3D卷积运算规则一致,只是卷积的尺寸固定为1×1,因此能够使用常规3D卷积数据流的映射方案来计算逐点卷积。
4.1.4 全连接数据流映射
全连接运算有两种模式,一种是将全连接转化为卷积运算,另一种是进行向量矩阵的乘法运算。在一般的CNN结构中,最后一个卷积层后通常会连接一个全连接层,因此在进行第一个全连接运算时需要将全连接运算转化为卷积运算,此时的不同通道卷积运算结果分别存储在不同的GB中。当进行下一次全连接运算时,采用向量矩阵相乘的形式,以输入长度为25,输出数据长度为10为例,如式(2)所示
(2) |
其中A, B, C, D分别表示4个GB中存储的数据,根据GB中存储的数据,将权重矩阵进行分块处理,1次处理4个输出数据。数据流映射如图6所示,权重1, 2, 3, 4中分别包含了WA0~WA9, WB0~WB9, WC0~WC9和WD0~WD9。由于N=4,因此1次计算只能得到4个全连接数据的输出,一共需要3次计算才能完成本次全连接运算。运算结果将一对一写回相应的GB中。
图 6 全连接运算数据流映射
4.1.5 池化运算映射
本文提出的数据流模式支持任意规格的平均池化和最大池化操作。由于中间特征图数据均存储在GB中,且池化与卷积均存在滑动窗口,因此可以采用卷积计算的访存模式来访问需要进行池化操作的数据。由于中间特征图数据存储在GB中,且在最大池化运算中只涉及特征值的比较,因此不需要将GB中的数据搬移到LB中,直接读取GB中的数据进行池化操作即可,池化结果写回相应的GB中。对于平均池化操作,为了避免额外的硬件资源开销,将复用PE阵列进行运算,将其权重输入默认为1,得到的计算结果为该滑动窗口对应的数据总和,在后处理单元中乘上对应的比例因子即可得到平均池化的最终结果。
4.2 内存访问机制
在计算卷积和全连接时,运算所需的数据分别存储在LB和WB中,只需给出相应的读地址和读使能信号,就能够访问所需要的数据,因此本文提出的访存方案能够降低全局控制器和用户配置的复杂度。
4.2.1 常规3D卷积访存
以输入特征图大小为5×5,卷积核大小为3×3,步长为1为例,乘累加单元能够在1个时钟周期内计算出结果,共需要81个时钟周期完成1次单通道的卷积运算。数据在LB和WB中按行进行存储,卷积运算过程如图7所示,图中的数字表示数据存储的地址,每经过9个时钟周期便会计算得出1个输出特征值。
图 7 常规3D卷积访存方案
4.2.2 深度可分离卷积访存
在逐通道卷积计算中,其访问内存的方式与常规3D卷积一致。在逐点卷积计算中,由于卷积核的大小为1×1,如若使用常规3D卷积的访存方案,那么将极大浪费WB的存储空间,因此,为了加快计算速度,以及充分利用WB的存储空间,将多个1×1的卷积核按顺序排列写入WB中。以输入通道为3,输入特征图大小为3×3,输出通道为16的逐点卷积计算为例,一共有16个1×1的卷积核,因此映射到硬件上如图8所示。
图 8 逐点卷积数据流映射
第1, 5, 9, 13个卷积核第1通道的数据按顺序存入PE0对应的第1个WB,第2, 6, 10, 14个卷积核第1通道的数据存入PE0对应的第2个WB,第3, 7, 11, 15个卷积核第1通道的数据存入PE0对应的第3个WB,第4, 8, 12, 16个卷积核第1通道的数据存入PE0对应的第4个WB中,同理将卷积核的第2, 3通道的数据分别存入PE1和PE2对应的WB中。在完成1次逐点卷积运算后,马上进行下一次计算,内存访问方案如图9所示,一共需要36个时钟周期得到完整的输出特征图数据。
图 9 逐点卷积访存方案
4.2.3 全连接访存
全连接计算模式下,实现的是向量矩阵相乘,权重不存在复用的情况,输入特征图与权重数据均为连续寻址,访问WB和LB的地址每个时钟周期自增1。
根据不同的计算模式,采用不同的访存方案,能够灵活重构卷积和全连接计算,极大简化了CNN协处理器的控制复杂度。
5. 基于地址转换的填充机制
在常用的CNN结构中,大部分网络在卷积计算前均需要进行填充操作,然而在硬件实现中,大部分的中间特征图数据均存储在本地缓存中,进行填充操作往往会带来额外的硬件资源开销和增大控制逻辑的复杂程度。本文基于提出的内存访问方案,实现了填充操作的“0”硬件资源开销,仅仅改变了地址访问的逻辑部分。
假设存储在LB中的中间特征图宽度为W,高度为H,需要进行填充Padding=P,如图10所示。其中Ax表示地址控制逻辑给出的虚拟地址,下标x表示特征图数据在LB中的实际存储物理地址,在访问到Padding部分的地址时,默认将该地址置为0,且给出无效的地址访问标志信号,输出到PE阵列的特征图数据为0;在访问到特征图数据部分时,需要将地址Ax转化为x,而后对LB进行访存,取出相应的数据送入PE阵列进行运算。
图 10 填充示例图
当Line<P或Line≥P+H时,表明地址访问的是Padding部分,其中Line表示当前实际访问到LB中特征图的行数,则此时不需要进行地址转换;否则虚拟地址到LB中实际的物理地址转换数学表达式如式(3)所示,化简结果如式(4)所示。这存在两种情况,一种情况是该地址访问的是Padding部分,另一种情况则是访问LB中的数据,该情况发生的数学表达式如式(5)所示。
按以上提出的填充方案,能够在不增加额外的存储空间情况下实现任意大小的填充,提高了加速器的灵活性,并减少了额外的硬件资源开销。
6. 8 bit对称量化方案
Google的研究表明[15],在CNN中,相比于32位的浮点运算,使用8位定点运算的推理预测准确率仅有微小的损失,且采用8位的数据表示形式能够将参数量的存储减小为原有的1/4。本文采用8位对称量化的方式,以减少运算的能耗和硬件资源的开销。
对称量化和反量化的表达式分别如式(6)、式(7)所示,R和Q分别表示浮点数据和量化后的8位数据,其中Rmax = –Rmin,Qmax = –Qmin。将FP32量化为INT8如图11所示。
图 11 8 bit对称量化示意图
Q=clamp(round(R/S),Qmin,Qmax) |
(6) |
R=Q×S |
(7) |
S=Rmax/Qmax |
(8) |
(9) |
(10)
卷积运算和全连接运算的统一表达式如式(9)所示。在CNN中,前一层运算的输出通常会作为下一层的输入,因此在这个过程中会涉及量化—反量化—量化的操作,为了减少量化操作的次数,将其合并为一个统一的量化过程,如式(10)所示,只需对前一层的运算结果乘上一个提前计算出的比例因子,就可以得到下一层的量化输入。 Sw, Sx, SM分别表示本层权重、输入特征图和下一层输入特征图的比例因子;Qwi, Qxi, Qb分别表示本层权重、输入特征图和偏置的量化值。
7. CNN协处理器结构设计
7.1 整体架构
整体CNN协处理器平台搭建如图12所示,包含3个部件:片外存储器、CPU和CNN协处理器。片外存储器中的数据分为指令域和数据域两个部分,指令域用于存放驱动CNN协处理器运算的专用指令,数据域存放输入特征图、权重、偏置和部分和数据。
图 12 CNN协处理器硬件结构
CNN协处理器包含数据路径和控制器两个部分。数据路径为CNN计算的核心部件,其中PE阵列的规模设置为16×16,单个GB, LB和WB的容量分别设置为8 kB, 2 kB和64 B,协处理器单次最大支持输入16通道、输出16通道的并行运算,后处理单元中包含了累加单元、量化单元、激活单元和最大池化单元,负责对PE阵列或从GB中读出的数据进行处理,并将结果写回GB中。CNN协处理器中内置了一个DMA模块,使其能够在PE阵列进行本轮计算时加载下一轮的权重参数,当PE阵列运算结束后使用少量的时钟周期将多个权重参数注入到WB中,能够有效降低大量权重参数的加载所带来的时间开销。CNN协处理器的控制器主要为取指、译码和控制执行3个部分,取指(Fetch Unit)部分负责向外部存储器的指令区域获取CNN指令,并将指令发送到指令队列(Instruction Queue)中;译码部分负责将指令队列中的第1条指令进行译码,得到CNN运算时的配置参数信息,将其发送到参数寄存器(Param Register)和控制器(Controller),控制器接收到译码逻辑发送的信息后,判断当前执行的指令,驱动CNN协处理器数据路径进行运算。当控制器识别到的是配置指令时,将解码出的比例因子(Scale)或偏置(Bias)数据写入到配置表 (Configuration Table) 中。控制器中设置了2个控制寄存器,分别对应的是CNN指令在外部存放的基地址(BaseAddr)和指令的总长度(Length),通过AXI-Lite接口与总线相连接,当CPU写完Length寄存器后,CNN协处理器开始工作,当CNN指令全部运算完成后,协处理器向CPU发送一个有效的中断信号,通知CPU当前CNN处理完成。
7.2 硬件单元结构
7.2.1 乘累加单元结构
在本文提出的数据流模式中,乘累加单元负责完成卷积、全连接的乘累加计算和平均池化的累加计算,如图13所示。当乘累加单元不工作时,Sel0的值为0,使乘法器的输入端均为0,能够有效降低功耗。当进行卷积或全连接计算时,Sel1的值为0;进行平均池化时,Sel1的值为1,只对输入特征图进行累加,即默认权重的值为1。
图 13 乘累加单元硬件结构
7.2.2 累加单元和后处理单元结构
累加单元负责将PE阵列一行的乘累加数据求和,如图14的加法树所示。后处理单元进行运算时存在以下几种情况:(1) 当前进行的是第1次卷积或全连接计算,且部分和结果需要存储,那么直接输出部分和(Psum_o)至GB中存储;(2) 当前进行的卷积或全连接计算需要与前一轮的部分和(Psum)结果进行累加,且部分和同样需要存储,那么将与从GB中读出的Psum进行相加,并将结果写回GB中;(3) 当前计算为1轮卷积或全连接的最后一次运算,需要同时读取Psum和偏置数据(Bias),并与其相加得到最终未被量化的输出结果;(4) 只进行1轮计算就能得到最终结果,那么累加的数据将与Bias进行累加输出到量化单元。
图 14 累加单元和后处理单元硬件结构图
量化单元将进行两步操作,一是对输入的整型数据进行格式转换,将INT类型表示的数据转换为FP32单精度浮点表示形式;二是将转换后的数据与提前配置好的比例因子数据进行反量化的乘法操作,得到最终的反量化后的输出结果。在CNN中,卷积和全连接运算后通常会进行非线性操作,而ReLU函数的特性更适合硬件实现,因此在数据进行量化后会进行ReLU运算。
后处理单元还负责最大池化运算,通过读取对应GB中的数据,将串行读取的数据进行大小的比较,如图15所示。在CNN中,每轮运算通常会进行非线性操作,因此输入数据均大于等于0。当输入数据Data_i有效时,有两种情况,一种是输入数据是进入最大池化单元的滑动窗口的第一个数据,那么Sel=0,即使用数据0与Data_i进行比较,将较大的结果保存在寄存器中;否则Sel=1,Data_i将与存储在寄存器中最大的数据进行比较。
图 15 最大池化单元硬件结构
8. 实验结果分析
采用Verilog HDL对本文提出的CNN协处理器进行了实现,并完成了功能仿真验证和后仿功耗分析。在CMOS 55 nm TT Corner (1.2 V, 25 °C)工艺库下对CNN协处理器进行了逻辑综合和布局布线,关键路径延时为3.05 ns,最高时钟频率能够达到328 MHz,协处理器逻辑综合后的总面积为4.41 mm2。图16展示了CNN协处理器的各个模块面积资源占用分布情况,为了更大限度地保存中间特征图数据和加载更多的权重数据以此来减少对片外存储器的访问,因此在协处理器中使用了大量的本地私有存储器。
图 16 CNN协处理器资源占用分布
8.1 CNN协处理器性能评估
为了评估本文提出的实现方案在实际进行CNN处理时的算力,本文分别选取了基于Fashion-Mnist和Cifar-10数据集的LeNet-5[16]和MobileNet[11]的轻量级网络进行前向推理的测试。使用专用指令分别将以上两个网络映射到CNN协处理器上,在320 MHz的运行频率下,协处理器能够达到的峰值算力为163.8 GOPs,完成LeNet-5[16]和MobileNet[11]网络运算的性能分别为29.16 GOPs与95.23 GOPs。LeNet-5网络的吞吐率明显小于MobileNet网络的吞吐率有以下2个原因:
(1) LeNet-5网络的卷积运算深度不够,PE计算阵列运用不够充分;
(2) LeNet-5网络中应用了多个最大池化层,使得进行乘累加的次数大大减少,占用了大量的运算时间。
8.2 CNN协处理器能效评估
为了更加准确地评估计算协处理器运算时产生的功耗,本实验将对布局布线后的网表进行时序仿真,获得记录各个节点翻转率信息的saif文件。结合PT-PX功耗分析工具,将saif文件、CNN协处理器布局布线后生成的网表文件和后仿真产生的SDF时序文件导入,进行平均功耗分析。在工作电压为1.2 V,时钟频率为320 MHz的条件下,得到LeNet-5与MobileNet网络的平均计算功耗分别为 138.4 mW, 279.6 mW,其各个模块的功耗分布分别如图17和图18所示。根据能效计算公式:能效值=运算吞吐率/运算功耗,可以得出本文提出的CNN协处理器完成LeNet-5和MobileNet网络的能效值分别为210.7 GOPs/W与340.0 GOPs/W。
图 17 LeNet-5网络功耗分布
图 18 MobileNet网络功耗分布
8.3 能效性能对比
边缘计算的终端设备对能耗具有较高的敏感性,因此将本文设计的CNN协处理器与其他通用硬件加速平台进行了能效方面的对比。通用硬件加速平台分别选取了AMD Ryzen 5 3550H CPU和NVIDIA GTX 1650 GPU,测试模型均为LeNet-5与MobileNet网络,测试结果如表1所示。软件实现神经网络的框架为Pytorch,前向推理时将模型精度量化为INT8类型,在进行CPU能效测试时,测试10000张Fashion Mnist数据集和Cifar-10数据集图像分别耗时1.14 s和16.58 s,能耗分别为3.4 W和6.3 W, GPU能效测试耗时分别为0.81 s和1.78 s,能耗分别为3.9 W和25.1 W。本文提出的协处理器在实现LeNet-5网络时,能效是CPU, GPU的95倍和76倍;在实现MobileNet-V1网络时,能效分别是CPU和GPU的38倍和17倍。
表 1 不同硬件加速平台的能效对比
CPU | GPU | 本文 | ||||
工艺(nm) | 12 | 12 | 55 | |||
精度 | INT8 | INT8 | INT8 | |||
测试模型 | LeNet-5 | MobileNet | LeNet-5 | MobileNet | LeNet-5 | MobileNet |
功耗(W) | 3.4 | 6.3 | 3.9 | 25.1 | 0.138 | 0.279 |
能效(GOPs/W) | 2.21 | 8.97 | 2.75 | 19.85 | 210.7 | 340.0 |
识别率(Images/s) | 8771 | 602 | 12345 | 5617 | 41851 | 1272 |
表2将本文的实现方案与其他应用于边缘端侧设备的CNN加速器的ASIC实现方案在性能上进行了对比。本文提出的协处理器在320 MHz的工作频率下运算,进行峰值运算时的面积效率为37.14 GOPs/mm2,分别是文献[17–19]和文献[20, 21]提出方案的5.7倍、2.4倍、2.5倍、1.9倍和1.2倍。
表 2 不同CNN加速器性能对比
JSSC 2017 DISP[17] |
TOCC 2020 ZASCAD[18] |
AICAS 2020[20] |
TCAS-I 2021 CARLA[19] |
TCAS-I 2021 IECA[21] |
本文方案 | |
工艺制程(nm) | 65 | 65 | 40 | 65 | 55 | 55 |
测量方案 | Chip | Post-Layout | Post-Layout | Post-Layout | Chip | Post-Layout |
On-Chip SRAM (KB) | 139.6 | 36.9 | 44.3 | 85.5 | 109.0 | 176.0 |
电压(V) | 1.2 | – | – | – | 1.0 | 1.2 |
PE单元数量 | 64 | 192 | 144 | 192 | 168 | 256 |
工作时钟频率(MHz) | 250 | 200 | 750 | 200 | 250 | 320 |
峰值性能(GOPs) | 32 | 76.8 | 216 | 77.4 | 84.0 | 163.8 |
面积(mm2) | 12.25 | 6 | 8.04 | 6.2 | 2.75 | 4.41 |
(1)面积效率(GOPs/mm2) | 6.48 | 15.12 | 19.53 | 14.75 | 30.55 | 37.14 |
(1) 工艺比例: process/55nm |
表3将本文设计的CNN协处理器与其他基于ASIC的CNN实现方案进行了能效对比。原始的Eyeriss[10]实现方案虽然在AlexNet网络上具有较高的能效,但其PE结构的密集性使得在实现MobileNet等轻量级的移动网络时能效不高[22]。文献[23]提出了不同工作电压域的高能效CNN实现模型,其结构在低阈值电压0.45 V的情况下能够达到最大能效,但在1.2 V的工作电压下,其能效值仅为45.8 GOPs/W,是本文能效的13.4%。Eyeriss v2[22]根据轻量级移动网络的运算特征,设计了稀疏的PE阵列结构,以此来高效支持不同的神经网络结构,其结构在200 MHz的时钟频率下实现MobileNet网络的能效值能够到达193.7 GOPs/W,本文实现方案的能效值是其1.75倍。CARLA[19]虽然完成VGG-16等稠密网络具有较高的能效,但其仅针对3×3的卷积计算做了特定的优化,使得其架构无法在任意的CNN网络中保持较高的能效。
表 3 不同CNN加速器能效对比
JSSC 2017 Eyeriss[10] |
JETCAS 2019 Eyeriss V2[22] |
AICAS 2021[23] |
TCAS-I 2021 CARLA[19] |
本文方案 | |
工艺(nm) | 65 | 65 | 65 | 65 | 55 |
测量方案 | Chip | Post-Layout | Post-Layout | Post-Layout | Post-Layout |
On-Chip SRAM (KB) | 181.5 | 246 | 216 | 85.5 | 176 |
量化精度(bit) | 16 | 8 | 8 | 16 | 8 |
电压(V) | 1.0 | – | 1.2 | – | 1.2 |
工作时钟频率 | 200 | 200 | – | 200 | 320 |
测试模型 | AlexNet | MobileNet | MobileNet | VGG-16 | MobileNet |
功耗(mW) | 278 | – | – | 247 | 279.6 |
能效(GOPs/W) | 166.2 | 193.7 | 45.8 | 313.4 | 340.0 |
通过以上与其他硬件加速器和不同硬件平台实现方案的对比,本文提出的CNN协处理器能够满足边缘计算的高能效需求的同时保持较高的运算性能,并能够根据实时应用场景的需求,重构实现不同的神经网络推理算法。
9. 结束语
针对于边缘计算对于CNN处理高能效的需求,本文提出了一种面向边缘计算的可重构CNN协处理器,通过采用分布式两级存储方案和按通道处理的数据流映射方法,能够高效支持任意尺寸的常规卷积、深度可分离卷积、池化、ReLU和全连接运算。实验表明本文提出的CNN协处理器最高时钟频率能够达到328 MHz,在320 MHz的工作频率下,实现LeNet-5和MobileNet网络的平均功耗分别为138.4 mW和279.6 mW。相较于其他基于ASIC实现的CNN硬件加速器,本文的实现方案具有较高的能效和面积效率,能够适用于对能效和性能要求较高边缘终端设备中。
声明:公众号转载的文章及图片出于非商业性的教育和科研目的供大家参考和探讨,并不意味着支持其观点或证实其内容的真实性。版权归原作者所有,如转载稿涉及版权等问题,请立即联系我们删除。