首页 / 一种卷积神经网络推理加速器

一种卷积神经网络推理加速器有效专利 实用

技术领域

[0001] 本实用新型涉及人工智能算法的硬件实现领域,更具体地说,涉及一种卷积神经网络推理加速器。

相关背景技术

[0002] 卷积神经网络是一种深度前馈人工神经网络,是深度学习的代表算法之一,已成功地应用于计算机视觉,自然语言处理等领域。卷积神经网络中,卷积层可占整个网络总运算量和运算时间的80%以上,因此,针对卷积层的加速对于整个CNN网络而言是提升性能的关键。在卷积层的计算中,有如下几个参数:卷积核尺寸(K)、补零方式(Pa)、卷积步长(St)、输入图像通道数(Ch)、卷积核数量(Nu)、输入图像尺寸(In)、输出图像大小(Ou)。根据以上参数,输出图像的尺寸为:
[0003]
[0004] 根据对卷积算子的分析可知,卷积主要涉及乘累加运算,由于输入数据多为多通道二维数据,且卷积核数目为多个,因此深度学习中的卷积属于典型的计算密集型算法,需要强大的算力进行支撑。
[0005] 中国专利申请,申请号CN201810068051.6,公开日2018年6月19日,公开了一种卷积神经网络推理加速器及方法,所述加速器包括:输入图像缓存器模块,包括N个缓存器,用于载入输入图像数据,每个缓存器存储图像对应一行的数据;N*N个运算单元,连接所述输入图像缓存器模块,用于进行卷积运算,所述N*N个运算单元支持图像数据在相邻运算单元间传递的脉动形式,其连接缓存器的运算单元从缓存器中读取图像数据,剩余的运算单元从邻近的运算单元读取图像数据,该实用新型针对卷积神经网络带来的数据可复用性设计双向脉动阵列,提高了数据的加载效率,从而加速了卷积神经网络。其不足之处在于,该实用新型的运算单元为单次计算,每次仅能进行一批图像的卷积,无法同时处理多批输入图像,导致其并行度不足,同时运算单元的浮点运算也会大大增加硬件资源的消耗,增加额外的面积和时间开销。实用新型内容
[0006] 1.要解决的技术问题
[0007] 针对现有技术中存在的计算速度慢、功耗高、可配置性差和定点精度问题,本实用新型提供了一种卷积神经网络推理加速器,它可以提高计算速度、降低功耗、提高装置的可配置性、保证计算结果的精度。
[0008] 2.技术方案
[0009] 本实用新型的目的通过以下技术方案实现。
[0010] 一种卷积神经网络推理加速器,包括主控制模块、地址产生模块,SRAM存储模块、数据输入模块、计算引擎模块及结果输出模块,其中:
[0011] 主控制模块,接收开始信号,向地址产生模块、数据输入模块、计算引擎模块和结果输出模块分发数据;
[0012] 地址产生模块,接收主控制模块和结果输出模块的数据,向SRAM存储模块发送控制信号;
[0013] SRAM存储模块,接收地址产生模块的控制信号,向数据输入模块发送存储数据;
[0014] 数据输入模块,接收主控制模块和SRAM存储模块的数据,将数据发送至计算引擎模块;
[0015] 计算引擎模块,接收主控制模块和数据输入模块的数据,将结果数据发送至结果输出模块;
[0016] 结果输出模块,接收计算引擎模块的结果数据,将结果数据发送至地址产生模块。
[0017] 进一步的,计算引擎模块包括若干个并行计算单元。
[0018] 更进一步的,并行计算单元包括若干个乘累加单元和激活函数计算单元,乘累加单元通过数据输入总线接收数据输入模块的数据,通过结果输入总线将数据发送至激活函数计算单元。
[0019] 更进一步的,乘累加单元包括定点乘法器和定点加法器,定点乘法器与定点加法器相连接。
[0020] 更进一步的,激活函数单元包括查找表存储器、定点乘法器、定点加法器以及两个寄存器,查找表存储器和第一寄存器接收数据,查找表存储器将数据发送至定点乘法器和第二寄存器,定点乘法器与第二寄存器将数据发送至定点加法器。
[0021] 更进一步的,主控制模块向地址产生模块发送的数据包括开始信号和补零信号。
[0022] 更进一步的,地址产生模块接收补零信号,将生成的补零地址发送至结果输出模块,结果输出模块将结果数据与补零地址发送至SRAM存储模块。
[0023] 更进一步的,所述计算引擎模块接收到数据输入模块的数据包括输入数据有效信号、模块关断信号和定点位置信号。
[0024] 3.有益效果
[0025] 相比于现有技术,本实用新型的优点在于:
[0026] 本实用新型实现充分利用卷积的并发性,设计了并行计算单元,在有限的计算资源和存储资源的基础之上,实现了高并行度的性能优势;并行计算单元及其内部的乘累加单元和激活函数计算单元支持并行度可调,可以通过关闭闲置的运算单元实现减小功耗;乘累加单元和激活函数计算单元支持16bit/8bit两种定点数据类型可配置,以满足不同场景对精度的需求;乘累加单元和激活函数计算单元针对不同层的数据,支持数据定点位置动态可变,有效地保证了计算结果的精度;并行计算单元支持算法参数可配置,适用于多种场景,可扩展性强。

具体实施方式

[0034] 根据对卷积运算规则的分析可知,卷积的主要算子乘累加运算存在大量的可利用数据分片带来的计算并行性,比如多个卷积核是独立并发的,多幅输入图像也是独立并发的,这为硬件设计提供了思路。
[0035] 在硬件资源和成本的限制下,充分利用卷积运算的可并行性,首先要满足高性能、低功耗的要求;其次要满足算法及参数可配置,提高可扩展性,以满足不同应用场景;最后也需要提高计算精度,减少结果误差。
[0036] 下面结合说明书附图和具体的实施例,对本实用新型作详细描述。
[0037] 如图1所示,本实用新型提供了一种卷积神经网络推理加速器,所述加速器包括主控制模块、地址产生模块,SRAM存储模块、数据输入模块、计算引擎模块及结果输出模块,其中主控制模块接收开始信号,向地址产生模块、数据输入模块、计算引擎模块和结果输出模块分发数据;地址产生模块接收主控制模块和结果输出模块的数据,向SRAM存储模块发送控制信号;SRAM存储模块接收地址产生模块的控制信号,向数据输入模块发送存储数据;数据输入模块接收主控制模块和SRAM存储模块的数据,将数据发送至计算引擎模块;计算引擎模块接收主控制模块和数据输入模块的数据,将结果数据发送至结果输出模块;结果输出模块接收计算引擎模块的结果数据,将结果数据发送至地址产生模块。具体的:
[0038] 主控制模块,用于接收开始信号,在收到开始信号后,向数据输入模块和地址产生模块发送开始信号,同时向地址产生模块、SRAM模块、数据输入模块、计算引擎模块、结果输出模块发送配置信息,所述配置信息包括图像尺寸,通道数,卷积核尺寸,卷积核数量,图像批数,卷积步长、并行度以及激活函数等卷积参数;
[0039] 地址产生模块,用于接收主控制模块的开始信号,在收到开始信号后,生成源数据地址、权重地址和SRAM控制信号,将源数据地址、权重数地址和SRAM控制信号发送至SRAM模块;也用于接收结果输出模块的结果数据、结果数据有效信号和计算结束信号,生成对应的结果数据地址和SRAM控制信号并发送至SRAM存储模块;
[0040] SRAM存储模块,用于接收地址产生模块的地址和SRAM控制信号,根据地址和控制信号存储或读取数据,将读取到的数据发送至数据输入模块;
[0041] 数据输入模块,用于接收主控制模块的开始信号,生成计算控制信号,接收SRAM存储模块的数据,将计算控制信号和数据发送至计算引擎模块,所述计算控制信号包括输入数据有效信号、模块关断信号以及定点位置信号;
[0042] 计算引擎模块,用于接收数据输入模块的计算控制信号和数据,同时接收主控制模块的配置信息,根据配置信息和计算控制信号对数据进行计算得到结果数据,并生成结果数据有效信号和计算结束信号,将结果数据、结果数据有效信号和计算结束信号发送至结果输出模块;
[0043] 结果输出模块,用于接收计算引擎模块产生的结果数据、结果数据有效信号和计算结束信号,同时接收主控制模块的配置信息,根据配置信息对结果数据进行补零,并将补零后的结果数据、结果数据有效信号和计算结束信号发送至地址产生模块。
[0044] 具体的,本实施例中的计算引擎模块包括若干个并行计算单元,一个并行计算单元包括若干个乘累加单元(PE)和一个激活函数计算单元(ACT),本实施例的计算引擎模块包括有32个并行计算单元,一个并行计算单元包括32个乘累加单元(PE)和一个激活函数计算单元(ACT),应当注意的是,本实用新型的计算引擎的并行计算单元数量及其乘累加单元和激活函数计算单元没有特定数量限制,在具体实施中可根据实际计算所需设定具体的单元数量,这里的计算单元数量只是根据本实施例的卷积层计算参数所设置。计算引擎模块的并行计算单元之间是相互独立且可并发执行的,它们通过算法控制模块实现卷积层计算的源数据分片流水并行,并行计算单元中的乘累加单元之间也是相互独立且可并发执行的,它们通过算法控制模块实现卷积层计算的卷积核(kernel)分片流水并行,所述算法控制模块为主控制模块,地址产生模块,数据输入模块和结果输出模块。并行计算单元及其内部的乘累加单元和激活函数计算单元都具备关断功能,在接收到有效的关断信号后停止工作,本装置可以根据实际所需的计算单元数量发送关断信号,调整单元的运行数量,从而降低加速器所需功耗。
[0045] 在如图2所示的并行计算单元内部结构中,并行计算单元中的乘累加单元通过两根数据输入总线接收数据输入模块的源数据和权重数据,对数据进行计算后,乘累加单元的计算结果通过结果输入总线流水地进入激活函数计算单元进行计算,之后计算结果由结果输出总线流水地传输至结果输出模块。
[0046] 在如图3所示的乘累加单元PE内部结构中,乘累加单元包括1个定点乘法器(FM)和1个定点加法器(FA),定点乘法器接收源数据和权重数据,对数据进行乘法运算,并根据接收到的定点位置信号(trunc)对计算结果进行定点截位,所述定点截位是以定点乘法器中的数据向右移位的方式实现,乘累加单元支持16bit和8bit两种定点数据类型,同时支持定点整数位动态变化,可以满足不同场景对精度的需求,定点截位可以减少计算单元的浮点运算,从而减少硬件资源的消耗,提高运算速度。
[0047] 在如图4所示的激活函数单元ACT内部结构中,激活函数单元包括查找表存储器(LUT)、定点乘法器(FM)、定点加法器(FA)以及两个寄存器(FF),查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM,RAM中存储真值表。本实施例中,LUT和一个寄存器接收乘累加单元的计算结果数据X,LUT同时接收Trunc定点截位信号,LUT根据输入信号进行逻辑运算,即根据地址进行查表,找出当前输入x对应的参数k和b,将中间结果k存入另一寄存器,将中间结果b和一个寄存器中的x发送至定点乘法器FM,并且定点乘法器根据定点截位信号进行移位,最后将结果数据和另一寄存器中的中间结果k发送到定点加法器中,计算得到结果result=b*x+k。激活函数单元支持16bit和8bit两种定点数据类型,同时支持定点整数位动态变化,可以满足不同场景对精度的需求。
[0048] 在如图5所示的SRAM存储模块内部结构中,SRAM存储模块一共分为3个部分,分别为源数据区、权重区和结果区,本实施例中的存储模块使用128个SRAM,每个SRAM的尺寸为256bit×1k,可存储16k个16bit定点数据或者32k个8bit定点数据,SRAM存储模块所存储的定点数据位数由乘累加单元和激活函数计算单元的定点数据位数决定,数据存储地址以字节为单位,存储模块的128个SRAM分为128个bank,其中64个bank作为源数据区用于存储源数据,32个bank作为权重区用于存储权重数据,32个bank作为结果区用于存储结果数据。
[0049] 本实施例在计算引擎模块的计算结果在存入结果SRAM之前,对卷积结果进行补零(padding)操作,补零操作由主控制模块、地址产生模块、结果输出模块共同完成,主控制模块向地址产生模块发送补零信号,控制地址产生模块产生补零地址,所述补零地址对应结果数据在SRAM存储模块中需要补零的地址,结果输出模块根据补零地址将数据0存入SRAM中对应的补零地址上,通过对卷积结果进行补零操作,便于下一层卷积的计算。
[0050] 在如图6所示的并行计算单元实现分片流水并行的实施例中,并行计算单元对接收到的源数据Xabc和权重数据Wabc进行卷积计算,源数据和权重数据为二维矩阵,其中a表示二维矩阵的行,b表示二维矩阵的列,c表示图像的通道,Xabc的a、b、c确定了输入数据在源数据中的位置,Wabc的a、b、c确定了权重数据在卷积核中的位置。在计算引擎模块的卷积计算中,单个并行计算单元中所有的乘累加单元分别计算同一组源数据,而单个并行计算单元不同乘累加单元则对应不同卷积核,权重数据指的单个权重,一个卷积核可以包含多个权重数据;不同的并行计算单元对应不同的源数据,而不同的并行计算单元中相同位置的乘累加单元对应同一个卷积核,本实施例中,将一个并行计算单元称为一个计算组,每个计算组分配32个卷积核,对应32个乘累加单元PE,kernel0分配到PE0,kernel1分配到PE1,以此类推,kernel31分配到PE31,而计算组0的PE0与计算组1的PE0所对应的卷积核相同,通过为每个卷积核分配对应的乘累加单元PE,实现了并行计算单元内卷积核的并行计算,每个乘累加单元内部进行源数据和权重数据的乘累加运算,每个乘累加单元计算结束可以生成输出图像中对应通道的一个结果数据,该结果数据通过结果输入总线进入激活函数单元ACT进行激活函数计算,最终结果数据由结果输出总线输出到结果输出模块。
[0051] 分片流水并行的传输计算方式可以同时对多批源数据和多个卷积核进行并行计算,提高了卷积神经网络中卷积层的计算速度。同时,由于每个并行计算单元之间是独立计算的,且每个并行计算单元及其内部的PE和ACT都具备关断功能,因此加速器可以根据实际计算的图片数量进行调整,通过向计算引擎模块发送有效关断信号,控制对应的数量并行计算单元停止工作;加速器也可以根据实际计算的卷积数进行调整,同样向计算引擎模块发送有效关断信号,控制并行计算单元中的乘累加单元PE的工作数量,通过控制并行计算单元及乘累加单元的工作数量,实现了计算的并行度可调,关闭闲置的计算单元,降低加速器所需功耗。
[0052] 本实用新型还提供了一种卷积神经网络的推理加速方法,具体包括以下步骤:
[0053] 步骤1、主控制模块接收到卷积开始信号和算法配置信息,将配置信息传给计算引擎模块和结果输出模块,同时向数据输入模块和地址产生模块发出开始信号,配置参数用于计算引擎模块和结果输出模块对数据进行卷积运算;
[0054] 步骤2、地址产生模块收到开始信号后,产生源数据地址、权重地址和相应的SRAM控制信号传输至SRAM存储模块,这里对应的SRAM控制信号为取数据信号;
[0055] 步骤3、数据输入模块根据SRAM存储模块发送的源数据和权重数据,生成输入数据有效信号、模块关断信号和定点位置信号,将源数据、权重数据、输入数据有效信号、模块关断信号和定点位置信号,所述定点位置信号包括PE定点位置信号和ACT定点位置信号;
[0056] 步骤4、计算引擎模块接收到源数据、权重数据和输入数据有效信号、定点位置信号、模块关断信号后,开始进行卷积推理计算,得到结果数据,并生成结果数据有效信号和计算结束信号,将结果数据、结果数据有效信号和计算结束信号发送至结果输出模块;
[0057] 步骤5、结果输出模块接收到结果数据和结果数据有效信号之后,根据配置信息对结果数据进行相应的补零操作,将补零后的结果数据、结果数据有效信号和计算结束信号发送至地址产生模块;
[0058] 步骤6、地址产生模块根据接收到的补零后的结果数据、计算结束信号和结果数据有效信号,生成结果数据地址和对应的SRAM控制信号,这里对应的SRAM控制信号为存数据信号,将结果数据、结果数据地址和对应SRAM控制信号一同送至SRAM存储模块,完成结果数据的存储。
[0059] 在SRAM存储模块存放数据时,当无法将完整的输入数据全部放在相应SRAM存储模块中的时候,需要通过多次搬运源数据,因此需要对输入图像即源数据进行切割,将输入图像分为若干个片段依次搬入SRAM,并利用乒乓操作实现部分搬运时间的掩盖,提高计算效率,在图7所示的数据输入模块输入乒乓实施例中,当进行输入图像片段0的推论时,同时搬入下一个需要计算的输入图像片段1,从而实现了数据搬运时间或者计算时间的部分覆盖,提高了算法的效率。
[0060] 本方法通过卷积神经网络推理加速器的主控制模块接收外部数据和信息,并将数据分发给对应的模块,通过计算引擎单元计算输入的图像数据,实现了卷积神经网络中卷积层的流水并行计算,并将计算结果存入SRAM存储模块中,便于下一次卷积计算。
[0061] 以上示意性地对本实用新型创造及其实施方式进行了描述,该描述没有限制性,在不背离本实用新型的精神或者基本特征的情况下,能够以其他的具体形式实现本实用新型。附图中所示的也只是本实用新型创造的实施方式之一,实际的结构并不局限于此,权利要求中的任何附图标记不应限制所涉及的权利要求。所以,如果本领域的普通技术人员受其启示,在不脱离本创造宗旨的情况下,不经创造性的设计出与该技术方案相似的结构方式及实施例,均应属于本专利的保护范围。此外,“包括”一词不排除其他元件或步骤,在元件前的“一个”一词不排除包括“多个”该元件。产品权利要求中陈述的多个元件也可以由一个元件通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

当前第1页 第1页 第2页 第3页