CN109063825B - 卷积神经网络加速装置 - Google Patents
卷积神经网络加速装置 Download PDFInfo
- Publication number
- CN109063825B CN109063825B CN201810865157.9A CN201810865157A CN109063825B CN 109063825 B CN109063825 B CN 109063825B CN 201810865157 A CN201810865157 A CN 201810865157A CN 109063825 B CN109063825 B CN 109063825B
- Authority
- CN
- China
- Prior art keywords
- convolution
- floating point
- layer
- group
- block floating
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N3/00—Computing arrangements based on biological models
- G06N3/02—Neural networks
- G06N3/04—Architecture, e.g. interconnection topology
- G06N3/045—Combinations of networks
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Biophysics (AREA)
- Computational Linguistics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- Artificial Intelligence (AREA)
- Molecular Biology (AREA)
- Computing Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Complex Calculations (AREA)
Abstract
本公开涉及一种卷积神经网络加速装置,通过将输入特征图组和卷积核分别转换为块浮点格式,用块浮点运算代替传统的浮点运算,卷积计算的输入和输出都是定点格式,解决了FPGA进行浮点运算代价巨大的难题。浮点‑块浮点和块浮点‑浮点转换过程中都只需要移位操作,四舍五入操作应用到转换过程中来避免误差积累,数据传输和卷积计算都只需要块浮点格式的尾数部分,计算过程中会将数据位宽进行扩充,不会发生位截断。因此,本公开还可以保证卷积神经网络模型的准确率,有效避免了卷积神经网络模型参数在正向传播过程中的偏差,因此在卷积神经网络的前向推断过程中,无需对卷积神经网络模型进行重新训练。
Description
技术领域
本公开涉及神经网络技术领域,尤其涉及一种卷积神经网络加速装置。
背景技术
卷积神经网络在人工智能的应用领域中,尤其是图像识别、自然语言处理和战略部署等方面取得了优秀的表现。卷积神经网络的成功主要来自计算设备性能的提升。但随着网络层数的增加,卷积神经网络的权值数据会达到几百兆比特甚至超过千兆比特,网络进行正向特征提取计算、分类以及误差传播消耗的计算资源非常巨大。因此对卷积神经网络进行加速是提高卷积神经网络模型计算效率的关键。
相关技术中,FPGA(Field-Programmable Gate Array,现场可编程逻辑门阵列)是一种能够程式化的逻辑门阵列单元,具有出色的并行计算能力。经过专门设计的FPGA具有功耗低、速度快、可重构等特点,而且,FPGA不使用操作***,可以专注于某一项确定性的任务,可以降低问题出现的可能性。因此,基于FPGA平台的卷积神经网络加速方案成为一类热门的发展方向。
然而,在FPGA平台上部署卷积神经网络存在两大障碍:FPGA片外传输瓶颈和巨大的浮点运算代价。片外传输主要来自网络参数和特征图的频繁访问,网络层数的增加等导致FPGA的带宽需求增加。FPGA上缺少浮点运算单元,在FPGA上完成浮点运算操作会造成吞吐率和功耗效率的同时下降。
许多方法,例如数据复用、压缩和剪枝,被提出来满足FPGA的带宽需求。然而,这些方法需要对网络进行重训练或熵编码,会比原来的网络消耗更多的时间,阻碍了卷积神经网络的实时处理。
定点运算常用来代替浮点运算提高FPGA的计算性能。然而,这些方法的共同缺点是需要重新训练来更新参数。重新训练是非常消耗资源的过程,当应用于深度网络模型中时,会需要更多的硬件资源。
发明内容
有鉴于此,本公开提出了一种卷积神经网络加速装置,以解决上述问题,提高吞吐量以及功耗效率。
根据本公开的一方面,提供了一种卷积神经网络加速装置,包括:
浮点-块浮点转换器,对卷积层的第一输入特征图组和第一卷积核组分别进行转换生成第二输入特征图组和第二卷积核组;
其中,所述第二输入特征图组和所述第二卷积核组中的数据为块浮点数据;
移位器,根据所述第二输入特征图组和所述第二卷积核组中数据的块指数,将卷积层的第一偏置集合转换为第二偏置集合;
其中,所述第二偏置集合中的数据为定点数据;
卷积层加速器,根据所述第二输入特征图组、所述第二卷积核组和所述第二偏置集合进行卷积乘加操作获得所述卷积层的块浮点输出结果;
块浮点-浮点转换器,对所述卷积层的块浮点输出结果进行转换得到所述卷积层的浮点输出结果作为所述卷积层的输出特征图。
在一种可能的实现方式中,所述卷积层加速器包括多个处理引擎;
卷积层加速器,根据所述第二输入特征图组、所述第二卷积核组和所述第二偏置集合进行卷积乘加操作获得所述卷积层的块浮点输出结果,包括:
每个处理引擎分别从所述第二卷积核组中获取该处理引擎对应的多个卷积核;
每个处理引擎分别从所述第二输入特征图组中获取该处理引擎对应的第二输入特征图;
每个处理引擎同时根据该处理引擎对应的第二输入特征图和卷积核进行卷积操作,得到多个卷积结果;
所述卷积层加速器对所述多个卷积结果进行累加操作和激活操作得到所述卷积层的块浮点输出结果。
在一种可能的实现方式中,每个处理引擎包括多个处理单元;
每个处理引擎分别从所述第二卷积核组中获取该处理引擎对应的多个卷积核,包括:
处理引擎中的每个处理单元分别获取每个处理单元对应的卷积核。
在一种可能的实现方式中,处理引擎进行的卷积操作包括处理引擎中的处理单元进行的多次卷积操作;
在处理引擎中的多个处理单元每次同时进行卷积操作时,处理引擎中的多个处理单元共享处理引擎通过卷积窗从处理引擎对应的第二输入特征图中获取的多个像素,其中,处理单元进行每次卷积操作时,卷积窗从处理引擎对应的第二输入特征图中获取像素的位置不同。
在一种可能的实现方式中处理引擎中的多个处理单元多次同时进行以下卷积操作,得到每个处理单元对应的卷积结果:
处理单元同时根据该次获得的所述多个像素和处理单元对应的卷积核进行卷积操作,得到处理单元对应的卷积结果。
在一种可能的实现方式中,一次卷积操作中的所述多个像素包括所述卷积窗分两次获取的第一像素组和第二像素组,所述处理单元包括乘法器、第一累加器、第二累加器、与第一累加器连接的第一寄存器、与第二累加器连接的第二寄存器;
处理单元根据所述多个像素和处理单元对应的卷积核进行卷积操作,得到处理单元对应的卷积结果,包括:
所述乘法器每次从第一像素组中获取第一像素和从第二像素组中获取第二像素组合而成第三像素组、对第三像素组以及卷积核中的与第一像素、第二像素对应的权值进行乘法计算得到乘积;
其中,第一像素、第二像素的位数为M,M为正整数,依次将第一像素、M位空位和第二像素组成第三像素组;
所述第一累加器将所述乘积的前2M位数据进行累加,得到第一像素组对应的第一累加结果;
其中,所述第一寄存器用于存储第一累加器每次获得的第一累加结果;
所述第二累加器将所述乘积的后2M位数据进行累加,得到第二像素组对应的第二累加结果;
其中,所述第二寄存器用于存储第二累加器每次获得的第二累加结果;
所述第一累加结果和所述第二累加结果组成所述处理单元对应的卷积结果。
在一种可能的实现方式中,所述卷积层加速器还包括多个第三累加器、和每个第三累加器对应的激活模块,每个第三累加器连接多个处理引擎中的一个处理单元;
所述卷积层加速器对所述多个卷积结果进行累加操作和激活操作得到所述卷积层的块浮点输出结果,包括:
针对每个第三累加器,该第三累加器对不同处理单元使用同一输出通道的卷积核得到的卷积结果进行累加,得到第三累加结果,并将所述第三累加结果输出到该第三累加器对应的激活模块;
针对每个激活模块,该激活模块针对对应的第三累加器得到的第三累加结果进行激活操作得到所述卷积层的块浮点输出结果。
在一种可能的实现方式中,卷积神经网络加速装置还包括存储模块,所述存储模块包括第一存储器,所述第一存储器包括第一分块、第二分块、第三分块和第四分块;
所述第一分块用于存储第一层卷积层对应的第一输入特征图组;
所述第二分块用于存储奇数层卷积层对应的第一卷积核组和第一偏置集合;
所述第三分块用于存储不是最后一层的偶数层卷积层对应的输出特征图;
所述第四分块用于存储全连接层的输出向量。
在一种可能的实现方式中,所述存储模块包括第二存储器,所述第二存储器包括第五分块和第六分块;
所述第五分块用于存储偶数层卷积层对应的第一卷积核组和第一偏置集合;
所述第六分块用于存储不是最后一层的奇数层卷积层对应的输出特征图。
在一种可能的实现方式中,所述卷积神经网络加速装置还包括:
卷积层输入缓存,连接浮点-块浮点转换器、块浮点-浮点转换器以及卷积层加速器,用于存储卷积层的第二输入特征图组、第二卷积核组和第二偏置集合,并将卷积层的第二输入特征图组、第二卷积核组和第二偏置集合发送至卷积层加速器;
卷积层输出缓存,连接块浮点-浮点转换器、卷积层加速器以及全连接层输入缓存,用于存储所述块浮点输出结果,并将不是最后一层卷积层的块浮点输出结果发送至浮点-块浮点转换器,将最后一层卷积层的块浮点输出结果发送至全连接层输入缓存;
全连接层输入缓存,连接全连接层加速器,用于接收和存储最后一层卷积层的块浮点输出结果,并发送至全连接层加速器;
全连接层加速器,连接全连接层输出缓存,用于根据最后一层卷积层的块浮点输出结果,进行全连接操作,得到块浮点最终结果,并将块浮点最终结果发送至全连接层输出缓存;
全连接层输出缓存,连接块浮点-浮点转换器,用于将块浮点最终结果发送至块浮点-浮点转换器,以使块浮点-浮点转换器将所述块浮点最终结果转换为浮点最终结果。
有益效果:
本公开通过浮点-块浮点转换将输入特征图组和卷积核分别转换为块浮点格式,用块浮点运算代替传统的浮点运算,卷积计算的输入和输出都是定点格式,巧妙的避开了FPGA上缺少浮点运算单元的缺陷,解决了FPGA进行浮点运算代价巨大的难题,大幅降低了在FPGA平台上部署卷积神经网络加速装置的功耗、提高吞吐量。
浮点-块浮点和块浮点-浮点转换过程中都只需要移位操作,四舍五入操作应用到转换过程中来避免误差积累,数据传输和卷积计算都只需要块浮点格式的尾数部分,计算过程中会将数据位宽进行扩充,不会发生位截断。因此,本公开还可以保证卷积神经网络模型的准确率,有效避免了卷积神经网络模型参数在正向传播过程中的偏差,因此在卷积神经网络的前向推断过程中,无需对卷积神经网络模型进行重新训练,不同的卷积神经网络模型可以通过调整参数配置到本公开的加速装置上。
根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。
附图说明
包含在说明书中并且构成说明书的一部分的附图与说明书一起示出了本公开的示例性实施例、特征和方面,并且用于解释本公开的原理。
图1是根据一示例性实施例示出的一种卷积神经网络加速装置的框图。
图2示出根据本公开一示例的卷积层加速器的示意图。
图3示出根据本公开一示例的处理单元的示意图。
图4示出根据本公开一示例的数据格式的示意图。
图5示出根据本公开一实施例的卷积神经网络的基于块浮点运算的加速方法的流程图。
图6示出根据本公开一实施例的卷积神经网络加速装置的单输出通道的数据流图。
具体实施方式
以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
另外,为了更好的说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的装置、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。
图1是根据一示例性实施例示出的一种卷积神经网络加速装置的框图。本公开的卷积神经网络加速装置可以应用于各类FPGA或ASIC(Application Specific IntegratedCircuit,专用集成电路),在此不做限定,如图1所示,该卷积神经网络加速装置可以包括:浮点-块浮点转换器、移位器和卷积层加速器、块浮点-浮点转换器。
浮点-块浮点转换器,对卷积层的第一输入特征图组和第一卷积核组分别进行转换生成第二输入特征图组和第二卷积核组;其中,所述第二输入特征图组和所述第二卷积核组中的数据为块浮点数据。
移位器,根据所述第二输入特征图组和所述第二卷积核组中数据的块指数,将卷积层的第一偏置集合转换为第二偏置集合;其中,所述第二偏置集合中的数据为定点数据。
其中,第一输入特征图组和第一卷积核组中包含的都可以是浮点数。
浮点数可在计算机中用以近似表示任意某个实数,这种表示方法类似于基数为10的科学记数法。例如,这个实数可以由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,规范的(Normalized)浮点数表达方式具有如下形式:
±m×βe
其中,m是尾数,假如m的精度为p,那么m(即尾数)可以是形如±d.ddd...ddd的p位数,0≤d<β;β为基数,e是指数。
定点数据可以表示为计算机中采用的另一种数的表示方法,参与运算的数的小数点位置固定不变。例如Q格式表示为:Qm.n,表示数据用m比特表示整数部分,n比特表示小数部分,共需要m+n+1位来表示这个数据,多余的一位用作符合位。
块浮点算法可以表示为在定点数字信号处理器上用软件的方法模仿浮点运算,以获取较高的计算精度及较大的动态范围。
块浮点数据可以为一个数据块共享相同的指数,例如,假设X是包含N个浮点数的块,X可以表示为:
其中xi是X中的第i个元素,mi和ei是xi的尾数和指数部分;块中最大的指数位被定义为块指数位∈X
在导出块指数位之后,xi的尾数位被右移di位,其中di=∈X-ei;因此,X的块浮点格式X'被表示为
其中,m′i=mi>>di是转换后的尾数位。
第一输入特征图组中可以包括一个或多个输入通道对应的第一输入特征图,其中,第一输入特征图可以表示为对待处理数据进行特征提取而得到的输入特征图。例如,若待处理数据为彩色图像,可以对彩色图像分别进行红光通道特征提取、绿光通道特征提取和蓝光通道特征提取,分别得到红光通道、绿光通道和蓝光通道对应的输入特征图。
通常来讲,在图像处理时,针对给定的输入图像,在输出图像中每一个像素值是输入图像中一个小区域中各像素值的加权平均值,其中,权值由一个函数定义,这个函数可以称为卷积核。第一卷积核组可以包括一个或多个第一卷积核。
浮点-块浮点转换器可以通过存储接口分别获取第一输入特征图组、第一卷积核组,并将第一输入特征图组和第一卷积核组中的数据转换为块浮点数据,得到第二输入特征图组和第二卷积核组。
卷积层加速器可以包括多个处理引擎,例如,图2示出根据本公开一示例的卷积层加速器的示意图,本公开的示例中以每次处理16通道为例,卷积层加速器可以包括16个处理引擎PE1、PE2…PE16。
每个处理引擎分别从所述第二卷积核组中获取该处理引擎对应的多个卷积核。每个处理引擎可以包括多个处理单元,一个处理单元对应一个输出通道,处理引擎中的每个处理单元可以分别获取每个处理单元对应的卷积核。
所有输入通道的输入特征图的像素组成一个块,共享同一个块指数位。每个输出通道的所有权值(即对应所有输入通道的卷积核)组成一个块,共享同一个块指数位。这种分块方法使所有输入数据在卷积计算之前对齐,数据传输和卷积计算都只需要块浮点格式的尾数部分。
如图2所示,一个处理引擎可以包括64个处理单元,第二卷积核组中的64个卷积核与每个处理引擎中的64个处理单元对应,也就是说对于一个处理引擎中的64个处理单元,每个处理单元采用与自身对应的卷积核进行卷积乘加操作。处理单元的指数位等于对应的输入特征图的指数位与权值(卷积核)的指数位的和,例如,以PU1_1为例,其指数位等于PE1的输入特征图的指数位与PU1_1对应的卷积核的指数位的和。
第一偏置集合可以包括多个第一偏置,卷积层的一个输出通道对应一个第一偏置。
移位器可以根据卷积层的每个输出通道的第一偏置与处理单元的指数位之差,将第一偏置移位得到对应的定点格式的第二偏置,如图2所示的b1、b2…b64,从而得到第二偏置集合。
浮点-块浮点转换器和移位器也可以对全连接层的参数(卷积核和偏置)根据以上过程进行转换。
卷积神经网络加速装置还可以包括存储模块,存储模块可以包括:第一存储器DDR3M1、第二存储器DDR3M0,第一存储器DDR3M1和第二存储器DDR3M0分别与存储接口连接,第一存储器DDR3M1和第二存储器DDR3M0存储容量都可以为4GB。
可以将第一输入特征图组、第一卷积核组以及第一偏置集合存储至第一存储器DDR3M1和/或第二存储器DDR3M0。
所述第一存储器可以包括第一分块、第二分块、第三分块和第四分块,所述第二存储器可以包括第五分块和第六分块。
卷积神经网络加速装置还可以包括:PCIe接口,PCIe接口分别与第一存储器和第二存储器连接,通过PCIe接口可以将待处理数据(例如,第一输入特征图组)以及参数(例如卷积层的第一偏置集合和第一卷积核组)写入第一存储器和第二存储器。
所述第一分块用于存储第一层卷积层对应的第一输入特征图组,例如,通过PCIe接口可以将第一输入特征图组写入第一存储器的第一分块中。
所述第二分块用于存储卷积层和全连接层的奇数层的参数,所述参数可以包括卷积核、偏置。例如,所述第二分块可以用于存储奇数层卷积层对应的第一卷积核组和第一偏置集合。
所述第五分块用于存储卷积层和全连接层的偶数层的参数,所述参数可以包括卷积核、偏置。例如,所述第五分块可以用于存储偶数层卷积层对应的第一卷积核组和第一偏置集合。
所述第三分块用于存储不是最后一层的偶数层卷积层对应的输出特征图;所述第六分块用于存储不是最后一层的奇数层卷积层对应的输出特征图。所述第四分块用于存储全连接层的输出向量。
卷积神经网络加速装置还可以包括:卷积层输入缓存、卷积层输出缓存、全连接层输入缓存、全连接层加速器以及全连接层输出缓存。
卷积层输入缓存,连接浮点-块浮点转换器、块浮点-浮点转换器以及卷积层加速器,可以用于存储卷积层的第二输入特征图组、第二卷积核组和第二偏置集合,并将卷积层的第二输入特征图组、第二卷积核组和第二偏置集合发送至卷积层加速器。
浮点-块浮点转换器可以通过存储接口(根据卷积层的层数)从第一存储器或第二存储器读取卷积层的第一输入特征图、第一卷积核组,对卷积层的第一输入特征图组和第一卷积核组分别进行转换生成第二输入特征图组和第二卷积核组,移位器可以通过存储接口(根据卷积层的层数)从第一存储器或第二存储器读取卷积层的第一偏置集合,对第一偏置集合进行移位得到第二偏置集合。
卷积层输入缓存可以存储浮点-块浮点转换器转换后的卷积层的第二输入特征图组和第二卷积核组。
卷积层输入缓存可以包括一个卷积窗、两个像素存储器、两个权值存储器和一个块指数位存储器。因此,卷积层输入缓存可以对从浮点-块浮点转换器读取的数据进行存储。
卷积层加速器,根据所述第二输入特征图组、所述第二卷积核组和所述第二偏置集合进行卷积乘加操作获得所述卷积层的块浮点输出结果。卷积层加速器可以根据卷积层输入缓存存储的卷积层的第二输入特征图组和第二卷积核组,以及移位器输出的第二偏置集合进行卷积乘加操作。
具体地,每个处理引擎分别从所述第二卷积核组中获取该处理引擎对应的多个卷积核。具体地,处理引擎中的每个处理单元分别获取每个处理单元对应的卷积核。
如上所述,每个处理引擎包括64个处理单元,每个处理单元分别从第二卷积核组获取对应的卷积核。
每个处理引擎分别从所述第二输入特征图组中获取该处理引擎对应的第二输入特征图。
每个处理引擎同时根据该处理引擎对应的第二输入特征图和卷积核进行卷积操作,得到多个卷积结果。
在一种可能的实现方式中,处理引擎中的多个处理单元进行多次卷积操作以得到多个卷积结果。在处理引擎中的多个处理单元每次同时进行卷积操作时,处理引擎中的多个处理单元共享处理引擎通过卷积窗从处理引擎对应的第二输入特征图中获取的多个像素。所述多个像素的数量可以根据卷积核中权值的数量确定,例如,卷积核为2×2的矩阵,那么可以从第二输入特征图中获取2×2个像素,该2×2个像素在第二输入特征图中也是以矩阵的形式分布。
其中,处理单元进行每次卷积操作时,卷积窗从处理引擎对应的第二输入特征图中获取像素的位置不同,在一个示例中,卷积窗从第二输入特征图中获取像素的步长可以为1。
以某一次卷积操作为例,多个处理单元同时进行如下操作:多处理单元在获得多个像素后,同时根据所述多个像素和处理单元对应的卷积核进行卷积操作,得到处理单元对应的卷积结果。
在该次卷积操作中,所述多个像素可以包括所述卷积窗分两次获取的第一像素组和第二像素组。例如,卷积窗两次分别从第二输入特征图中获取2×2个像素,作为第一像素组和第二像素组,两次之间获取的步长为1。如图2所示,ix(m,n)是第x个输入通道在位置(m,n)上的像素。
图3示出根据本公开一示例的处理单元的示意图,如图3所示,所述处理单元可以包括乘法器、第一累加器、第二累加器、与第一累加器连接的第一寄存器、与第二累加器连接的第二寄存器。
其中,kxy是第x个输入通道中第y个输出通道的卷积核。
在该次卷积操作中,所述乘法器将从第一像素组中获取的第一像素和从第二像素组中获取的第二像素组合成第三像素组、对第三像素组以及卷积核中的与第一像素、第二像素对应的权值进行乘法计算得到乘积。
乘法器从第一像素组和第二像素组中获取像素的方式、数量相同。
例如,第一像素、第二像素的位数为M,M为正整数,依次将第一像素、M位空位和第二像素组成第三像素组。图4示出根据本公开一示例的数据格式的示意图,如图3所示,A表示第三像素组,A的0-7位中为第一像素、7-15位为空位、15-23位中为第二像素;B为处理单元对应的卷积核中与第一像素和第二像素对应的权值。
乘法器对第三像素组以及卷积核中的与第一像素、第二像素对应的权值进行乘法计算得到乘积,可以是指,将第三像素组中的第一像素与对应的权值分别相乘,第二像素与对应的权值分别相乘,得到的乘积位数为4M位。两个乘法操作可以通过如图3中所示的一片DSP48E1实现。得到的乘积如图3中所示的P,乘积中的前2M位为第三像素组中的第一像素与对应的权值分别相乘得到的结果,乘积中的后2M位为第二像素与对应的权值分别相乘得到的结果。
所述第一累加器将所述乘积的前2M位数据进行累加,得到第一像素组对应的第一累加结果;所述第二累加器将所述乘积的后2M位数据进行累加,得到第二像素组对应的第二累加结果。
其中,所述第一寄存器用于存储第一累加器每次获得的第一累加结果,所述第二寄存器用于存储第二累加器每次获得的第二累加结果。
所述第一累加结果和所述第二累加结果组成所述处理单元对应的卷积结果。数据传输和卷积计算都只需要块浮点格式的尾数部分,计算过程中会将数据位宽进行扩充,不会发生位截断。
在卷积处理阵列中设计三级并行:输入通道并行、输出通道并行和像素级并行,通过采用三级并行卷积处理阵列和乒乓存储结构,提高***的计算性能。
所述卷积层加速器对所述多个卷积结果进行累加操作和激活操作得到所述卷积层的块浮点输出结果作为所述卷积层的输出特征图。
具体地,所述卷积层加速器还包括多个第三累加器、和每个第三累加器对应的激活模块,每个第三累加器连接多个处理引擎中的一个处理单元。激活模块中可以包括Relu激活函数。
例如,如图2所示,卷积层加速器可以包括64个第三累加器A1、A2…A64,每个第三累加器连接多个处理引擎中的一个处理单元,例如累加器A1分别与每个处理引擎中的处理单元PU1_1、PU2_1…PU64_1连接,累加器A2分别与每个处理引擎中的处理单元PU1_2、PU2_2…PU64_2连接,等等。一个第三累加器连接的所有处理单元使用的卷积核可以相同。
针对每个第三累加器,该第三累加器对不同处理单元使用同一输出通道的卷积核得到的卷积结果进行累加,得到第三累加结果,并将所述第三累加结果输出到该第三累加器对应的激活模块。
多个处理引擎同时对不同的输入通道执行卷积,计算结果在累加器中相加。
针对每个激活模块,该激活模块针对对应的第三累加器得到的第三累加结果进行激活操作得到所述卷积层的块浮点输出结果。
在一种可能的实现方式中,所述卷积层输出缓存用于存储所述块浮点输出结果,并将不是最后一层卷积层的块浮点输出结果发送至块浮点-浮点转换器。
块浮点-浮点转换器,对所述块浮点输出结果进行转换得到所述卷积层的浮点输出结果作为所述卷积层的输出特征图。
对于不是最后一层的偶数层卷积层的输出特征图可以存储到第三分块作为下一层卷积层的第一输入特征图,对于不是最后一层的奇数层卷积层的输出特征图可以存储到第六分块作为下一层卷积层的第一输入特征图。
对于输出特征图的块指数位可以存储到卷积层输入缓存,作为下一层卷积层的第二输入特征图组的块指数位。
对于最后一层卷积层的块浮点输出结果,卷积层输出缓存将块浮点输出结果发送至全连接层输入缓存,全连接层输入缓存接收和存储最后一层卷积层的块浮点输出结果并发送给全连接层加速器。全连接层加速器,用于根据最后一层卷积层的块浮点输出结果,进行全连接操作,得到块浮点最终结果,并将块浮点最终结果发送至全连接层输出缓存。
全连接层输出缓存,用于将块浮点最终结果发送至块浮点-浮点转换器,以使块浮点-浮点转换器将所述块浮点最终结果转换为浮点最终结果。浮点最终结果可以为全连接层的输出向量,块浮点-浮点转换器可以将全连接层的输出向量存储至第四分块。
浮点-块浮点和块浮点-浮点转换过程中都只需要移位操作,四舍五入操作应用到转换过程中来避免误差积累。
图5示出根据本公开一实施例的卷积神经网络的基于块浮点运算的加速方法的流程图。图6示出根据本公开一实施例的卷积神经网络加速装置的单输出通道的数据流图。
如图5所示,所述方法包括:
步骤S10,卷积层输入缓存读取卷积层的第一输入特征图组、以及卷积层的第一偏置集合和第一卷积核组;
在步骤S10之前,可以通过PCIe接口将第一输入特征图组写入第一存储器的第一分块,将第一卷积核和第一偏置根据所述的卷积层写入第一存储器或第二存储器中相应的分块。
在一种可能的实现方式中,可以将卷积层和全连接层的奇数层的参数写入第一存储器的第二分块,将卷积层和全连接层的偶数层的参数写入第二存储器的第五分块。卷积层和全连接层的参数可以是如上所述的卷积核、偏置以及块指数位。
卷积层输入缓存可以根据以上存储规则,从相应的位置读取当前要处理的卷积层的第一输入特征图组、以及卷积层的第一偏置集合和第一卷积核组。
一个卷积层的全部参数在初始阶段,全部直接读入片上存储器中,可以提高吞吐量。
步骤S11,对卷积层的第一输入特征图组和第一卷积核组进行浮点-块浮点转换,得到块浮点数据格式的第二输入特征图组和第二卷积核组,对第一偏置集合进行移位得到第二偏置集合。
其中,第二偏置集合仍然为定点数据。浮点-块浮点转换如上文所述,不再赘述。
步骤S12,将卷积层的第二输入特征图组、第二卷积核组和第二偏置集合发送至卷积层加速器。
步骤S13,卷积层加速器根据所述第二输入特征图组、所述第二卷积核组和所述第二偏置集合进行卷积乘加操作获得所述卷积层的块浮点输出结果。
如图6所示,根据所述第二输入特征图组、所述第二卷积核组和所述第二偏置集合进行卷积乘加操作。
步骤S14,如果所述卷积层不是最后一层卷积层,卷积层输出缓存将块浮点输出结果发送至块浮点-浮点转换器(如图6),如果所述卷积层是最后一层卷积层,卷积层输出缓存将块浮点输出结果发送至全连接层输入缓存。
步骤S15,块浮点-浮点转换器对块浮点输出结果进行转换得到所述卷积层的浮点输出结果作为所述卷积层的输出特征图。
如图6所示,对于不是最后一层的偶数层卷积层的输出特征图可以存储到第三分块(外部存储器中的第一存储器内)作为下一层卷积层的第一输入特征图,对于不是最后一层的奇数层卷积层的输出特征图可以存储到第六分块(外部存储器中的第二存储器内)作为下一层卷积层的第一输入特征图。
步骤S16,全连接层输入缓存接收最后一层卷积层的块浮点输出结果并发送给全连接层加速器。
步骤S17,全连接层加速器根据最后一层卷积层的块浮点输出结果,进行全连接操作,得到块浮点最终结果,并将块浮点最终结果发送至全连接层输出缓存。
步骤S18,全连接层输出缓存,将块浮点最终结果发送至块浮点-浮点转换器,以使块浮点-浮点转换器将所述块浮点最终结果转换为浮点最终结果。
本公开通过浮点-块浮点转换将输入特征图组和卷积核分别转换为块浮点格式,用块浮点运算代替传统的浮点运算,卷积计算的输入和输出都是定点格式,巧妙的避开了FPGA上缺少浮点运算单元的缺陷,解决了FPGA进行浮点运算代价巨大的难题,大幅降低了在FPGA平台上部署卷积神经网络加速装置的功耗、提高吞吐量。
浮点-块浮点和块浮点-浮点转换过程中都只需要移位操作,四舍五入操作应用到转换过程中来避免误差积累,数据传输和卷积计算都只需要块浮点格式的尾数部分,计算过程中会将数据位宽进行扩充,不会发生位截断。因此本公开还可以保证卷积神经网络模型的准确率,有效避免了卷积神经网络模型参数在正向传播过程中的偏差,因此在卷积神经网络的前向推断过程中,无需对卷积神经网络模型进行重新训练,不同的卷积神经网络模型可以通过调整参数配置到本公开的加速装置上。
以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (7)
1.一种卷积神经网络加速装置,所述装置应用于现场可编程逻辑门阵列FPGA或专用集成电路ASIC,其特征在于,包括:
浮点-块浮点转换器,对卷积层的第一输入特征图组和第一卷积核组分别进行转换生成第二输入特征图组和第二卷积核组;
其中,所述第二输入特征图组和所述第二卷积核组中的数据为块浮点数据;
移位器,根据所述第二输入特征图组和所述第二卷积核组中数据的块指数,将卷积层的第一偏置集合转换为第二偏置集合;
其中,所述第二偏置集合中的数据为定点数据;
卷积层加速器,根据所述第二输入特征图组、所述第二卷积核组和所述第二偏置集合进行卷积乘加操作获得所述卷积层的块浮点输出结果;
块浮点-浮点转换器,对所述卷积层的块浮点输出结果进行转换得到所述卷积层的浮点输出结果作为所述卷积层的输出特征图;
所述卷积层加速器包括多个处理引擎;每个处理引擎包括多个处理单元;
每个处理引擎同时进行卷积操作,处理引擎进行的卷积操作包括处理引擎中的处理单元进行的多次卷积操作;
在处理引擎中的多个处理单元每次同时进行卷积操作时,处理引擎中的多个处理单元共享处理引擎通过卷积窗从处理引擎对应的第二输入特征图中获取的多个像素,其中,处理单元进行每次卷积操作时,卷积窗从处理引擎对应的第二输入特征图中获取像素的位置不同;
一次卷积操作中的所述多个像素包括所述卷积窗分两次获取的第一像素组和第二像素组,
所述处理单元包括乘法器、第一累加器、第二累加器、与第一累加器连接的第一寄存器、与第二累加器连接的第二寄存器;
处理单元根据所述多个像素和处理单元对应的卷积核进行卷积操作,得到处理单元对应的卷积结果,包括:
所述乘法器每次从第一像素组中获取第一像素和从第二像素组中获取第二像素组合而成第三像素组、对第三像素组以及卷积核中的与第一像素、第二像素对应的权值进行乘法计算得到乘积;
其中,第一像素、第二像素的位数为M,M为正整数,依次将第一像素、M位空位和第二像素组成第三像素组;
所述第一累加器将所述乘积的前2M位数据进行累加,得到第一像素组对应的第一累加结果;
其中,所述第一寄存器用于存储第一累加器每次获得的第一累加结果;
所述第二累加器将所述乘积的后2M位数据进行累加,得到第二像素组对应的第二累加结果;
其中,所述第二寄存器用于存储第二累加器每次获得的第二累加结果;
所述第一累加结果和所述第二累加结果组成所述处理单元对应的卷积结果。
2.根据权利要求1所述的装置,其特征在于
卷积层加速器,根据所述第二输入特征图组、所述第二卷积核组和所述第二偏置集合进行卷积乘加操作获得所述卷积层的块浮点输出结果,包括:
每个处理引擎分别从所述第二卷积核组中获取该处理引擎对应的多个卷积核;
每个处理引擎分别从所述第二输入特征图组中获取该处理引擎对应的第二输入特征图;
每个处理引擎同时根据该处理引擎对应的第二输入特征图和卷积核进行卷积操作,得到多个卷积结果;
所述卷积层加速器对所述多个卷积结果进行累加操作和激活操作得到所述卷积层的块浮点输出结果。
3.根据权利要求2所述的装置,其特征在于,
每个处理引擎分别从所述第二卷积核组中获取该处理引擎对应的多个卷积核,包括:
处理引擎中的每个处理单元分别获取每个处理单元对应的卷积核。
4.根据权利要求2所述的装置,其特征在于,所述卷积层加速器还包括多个第三累加器、和每个第三累加器对应的激活模块,每个第三累加器连接多个处理引擎中的一个处理单元;
所述卷积层加速器对所述多个卷积结果进行累加操作和激活操作得到所述卷积层的块浮点输出结果,包括:
针对每个第三累加器,该第三累加器对不同处理单元使用同一输出通道的卷积核得到的卷积结果进行累加,得到第三累加结果,并将所述第三累加结果输出到该第三累加器对应的激活模块;
针对每个激活模块,该激活模块针对对应的第三累加器得到的第三累加结果进行激活操作得到所述卷积层的块浮点输出结果。
5.根据权利要求1所述的装置,其特征在于,卷积神经网络加速装置还包括存储模块,所述存储模块包括第一存储器,所述第一存储器包括第一分块、第二分块、第三分块和第四分块;
所述第一分块用于存储第一层卷积层对应的第一输入特征图组;
所述第二分块用于存储奇数层卷积层对应的第一卷积核组和第一偏置集合;
所述第三分块用于存储不是最后一层的偶数层卷积层对应的输出特征图;
所述第四分块用于存储全连接层的输出向量。
6.根据权利要求5所述的装置,其特征在于,所述存储模块包括第二存储器,所述第二存储器包括第五分块和第六分块;
所述第五分块用于存储偶数层卷积层对应的第一卷积核组和第一偏置集合;
所述第六分块用于存储不是最后一层的奇数层卷积层对应的输出特征图。
7.根据权利要求5或6所述的装置,其特征在于,所述卷积神经网络加速装置还包括:
卷积层输入缓存,连接浮点-块浮点转换器、块浮点-浮点转换器以及卷积层加速器,用于存储卷积层的第二输入特征图组、第二卷积核组和第二偏置集合,并将卷积层的第二输入特征图组、第二卷积核组和第二偏置集合发送至卷积层加速器;
卷积层输出缓存,连接块浮点-浮点转换器、卷积层加速器以及全连接层输入缓存,用于存储所述块浮点输出结果,并将不是最后一层卷积层的块浮点输出结果发送至块浮点-浮点转换器,将最后一层卷积层的块浮点输出结果发送至全连接层输入缓存;
全连接层输入缓存,连接全连接层加速器,用于接收和存储最后一层卷积层的块浮点输出结果,并发送至全连接层加速器;
全连接层加速器,连接全连接层输出缓存,用于根据最后一层卷积层的块浮点输出结果,进行全连接操作,得到块浮点最终结果,并将块浮点最终结果发送至全连接层输出缓存;
全连接层输出缓存,连接块浮点-浮点转换器,用于将块浮点最终结果发送至块浮点-浮点转换器,以使块浮点-浮点转换器将所述块浮点最终结果转换为浮点最终结果。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810865157.9A CN109063825B (zh) | 2018-08-01 | 2018-08-01 | 卷积神经网络加速装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810865157.9A CN109063825B (zh) | 2018-08-01 | 2018-08-01 | 卷积神经网络加速装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109063825A CN109063825A (zh) | 2018-12-21 |
CN109063825B true CN109063825B (zh) | 2020-12-29 |
Family
ID=64832421
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810865157.9A Active CN109063825B (zh) | 2018-08-01 | 2018-08-01 | 卷积神经网络加速装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109063825B (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109409509A (zh) * | 2018-12-24 | 2019-03-01 | 济南浪潮高新科技投资发展有限公司 | 一种针对基于fpga的卷积神经网络加速器的数据结构和加速方法 |
CN109697083B (zh) * | 2018-12-27 | 2021-07-06 | 深圳云天励飞技术有限公司 | 数据的定点化加速方法、装置、电子设备及存储介质 |
CN109740733B (zh) * | 2018-12-27 | 2021-07-06 | 深圳云天励飞技术有限公司 | 深度学习网络模型优化方法、装置及相关设备 |
US20200210839A1 (en) * | 2018-12-31 | 2020-07-02 | Microsoft Technology Licensing, Llc | Neural network activation compression with outlier block floating-point |
CN109901814A (zh) * | 2019-02-14 | 2019-06-18 | 上海交通大学 | 自定义浮点数及其计算方法和硬件结构 |
CN110059817B (zh) * | 2019-04-17 | 2023-06-13 | 中山大学 | 一种实现低资源消耗卷积器的方法 |
CN110059823A (zh) * | 2019-04-28 | 2019-07-26 | 中国科学技术大学 | 深度神经网络模型压缩方法及装置 |
CN110147252A (zh) * | 2019-04-28 | 2019-08-20 | 深兰科技(上海)有限公司 | 一种卷积神经网络的并行计算方法及装置 |
CN112016693B (zh) * | 2019-05-30 | 2021-06-04 | 中兴通讯股份有限公司 | 机器学习引擎实现方法及装置、终端设备、存储介质 |
CN110442323B (zh) * | 2019-08-09 | 2023-06-23 | 复旦大学 | 进行浮点数或定点数乘加运算的装置和方法 |
CN110930290B (zh) * | 2019-11-13 | 2023-07-07 | 东软睿驰汽车技术(沈阳)有限公司 | 一种数据处理方法及装置 |
CN111047010A (zh) * | 2019-11-25 | 2020-04-21 | 天津大学 | 降低cnn加速器首层卷积计算延时的方法及装置 |
CN111091183B (zh) * | 2019-12-17 | 2023-06-13 | 深圳鲲云信息科技有限公司 | 一种神经网络加速***和方法 |
CN111178508B (zh) * | 2019-12-27 | 2024-04-05 | 珠海亿智电子科技有限公司 | 用于执行卷积神经网络中全连接层的运算装置及方法 |
CN111738427B (zh) * | 2020-08-14 | 2020-12-29 | 电子科技大学 | 一种神经网络的运算电路 |
WO2022041188A1 (zh) * | 2020-08-31 | 2022-03-03 | 深圳市大疆创新科技有限公司 | 用于神经网络的加速器、方法、装置及计算机存储介质 |
CN112232499B (zh) * | 2020-10-13 | 2022-12-23 | 华中光电技术研究所(中国船舶重工集团公司第七一七研究所) | 卷积神经网络加速器 |
CN112734020B (zh) * | 2020-12-28 | 2022-03-25 | 中国电子科技集团公司第十五研究所 | 卷积神经网络的卷积乘累加硬件加速装置、***以及方法 |
CN113554163B (zh) * | 2021-07-27 | 2024-03-29 | 深圳思谋信息科技有限公司 | 卷积神经网络加速器 |
CN113780523B (zh) * | 2021-08-27 | 2024-03-29 | 深圳云天励飞技术股份有限公司 | 图像处理方法、装置、终端设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107239829A (zh) * | 2016-08-12 | 2017-10-10 | 北京深鉴科技有限公司 | 一种优化人工神经网络的方法 |
CN108133270A (zh) * | 2018-01-12 | 2018-06-08 | 清华大学 | 卷积神经网络加速方法及装置 |
CN108229670A (zh) * | 2018-01-05 | 2018-06-29 | 中国科学技术大学苏州研究院 | 基于fpga的深度神经网络加速平台 |
-
2018
- 2018-08-01 CN CN201810865157.9A patent/CN109063825B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107239829A (zh) * | 2016-08-12 | 2017-10-10 | 北京深鉴科技有限公司 | 一种优化人工神经网络的方法 |
CN108229670A (zh) * | 2018-01-05 | 2018-06-29 | 中国科学技术大学苏州研究院 | 基于fpga的深度神经网络加速平台 |
CN108133270A (zh) * | 2018-01-12 | 2018-06-08 | 清华大学 | 卷积神经网络加速方法及装置 |
Non-Patent Citations (4)
Title |
---|
A 200MHZ [email protected] VGG16 accelerator in Xilinx VX690T;Chunsheng Mei 等;《2017 IEEE Global Conference on Signal and Information Processing (GlobalSIP)》;20180308;全文 * |
Computation Error Analysis of Block Floating Point Arithmetic Oriented Convolution Neural Network Accelerator Design;Zhourui Song 等;《arXiv:1709.07776v2》;20171124;论文第1-8页 * |
End-to-End DNN Training with Block Floating Point Arithmetic;Mario Drumond 等;《arXiv:1804.01526v2》;20180409;全文 * |
Zhourui Song 等.Computation Error Analysis of Block Floating Point Arithmetic Oriented Convolution Neural Network Accelerator Design.《arXiv:1709.07776v2》.2017, * |
Also Published As
Publication number | Publication date |
---|---|
CN109063825A (zh) | 2018-12-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109063825B (zh) | 卷积神经网络加速装置 | |
US10096134B2 (en) | Data compaction and memory bandwidth reduction for sparse neural networks | |
US20220027717A1 (en) | Convolutional Neural Network Hardware Configuration | |
CN110070178B (zh) | 一种卷积神经网络计算装置及方法 | |
CN107256424B (zh) | 三值权重卷积网络处理***及方法 | |
CN110705703B (zh) | 基于脉动阵列的稀疏神经网络处理器 | |
CN111898733B (zh) | 一种深度可分离卷积神经网络加速器架构 | |
CN112434801B (zh) | 一种按照比特精度进行权重拆分的卷积运算加速方法 | |
WO2022134465A1 (zh) | 加速可重构处理器运行的稀疏化数据处理方法和装置 | |
CN109086879B (zh) | 一种基于fpga的稠密连接神经网络的实现方法 | |
WO2022041188A1 (zh) | 用于神经网络的加速器、方法、装置及计算机存储介质 | |
CN111079078B (zh) | 面向结构网格稀疏矩阵的下三角方程并行求解方法 | |
CN111008691B (zh) | 一种权值和激活值都二值化的卷积神经网络加速器架构 | |
CN112639839A (zh) | 神经网络的运算装置及其控制方法 | |
CN114003201A (zh) | 矩阵变换方法、装置及卷积神经网络加速器 | |
US20210044303A1 (en) | Neural network acceleration device and method | |
US20230259743A1 (en) | Neural network accelerator with configurable pooling processing unit | |
CN110766136A (zh) | 一种稀疏矩阵与向量的压缩方法 | |
Zhan et al. | Field programmable gate array‐based all‐layer accelerator with quantization neural networks for sustainable cyber‐physical systems | |
CN114154621A (zh) | 一种基于fpga的卷积神经网络图像处理方法及装置 | |
Solovyev et al. | Real-Time Recognition of Handwritten Digits in FPGA Based on Neural Network with Fixed Point Calculations | |
CN112001492A (zh) | 关于二值权重DenseNet模型的混合流水式加速架构及加速方法 | |
US20230177320A1 (en) | Neural network accelerator with a configurable pipeline | |
US20240004719A1 (en) | Just-In-Time Re-Partitioning of Feature Maps for Efficient Balancing of Compute Core Workloads | |
TWI727643B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |