一种高能效的神经网络处理器、加速系统及方法与流程

文档序号:17374915发布日期:2019-04-12 23:11阅读:204来源:国知局
一种高能效的神经网络处理器、加速系统及方法与流程

本发明涉及神经网络处理装置领域,具体地说是一种高能效的神经网络处理器、加速系统及方法。



背景技术:

深度学习技术是人工智能技术发展的助推器,深度学习采用深度神经网络的拓扑结构进行训练、优化及推理。

卷积神经网络是深度学习的基础,在卷积运算在整个算法中计算量大,需要大量的乘法器单元,是影响性能的一个瓶颈。目前采用的方法是;并行地做乘法再做累加,形成若干乘法器的输出接入到一颗加法树的结构。现有的系统以及方法在并行地做乘法再做累加时,需要多次读取权重数据以及相关数据,对存储单元以及乘法器的损耗较大,且计算速度慢。

如何减小对乘法器以及数据存储器的读写次数,加速神经网络的计算,是需要解决的技术问题。



技术实现要素:

本发明的技术任务是针对以上不足,提供一种高能效的神经网络处理器、加速系统及方法,来解决如何减小对乘法器以及数据存储器的读写次数,加速神经网络的计算的问题。

第一方面,本发明实施例提供一种高能效的神经网络处理器,为包含arm核的主控芯片,包括:

处理器单元,用于获取输入数据、权重数据并根据神经网络的模型生成指令数据;

逻辑计算单元,其通过总线接口与处理器单元电连接,包括指令fifo子单元、数据fifo子单元、排序子单元、加法子单元以及多个pe计算子单元,其中:

指令fifo子单元,用于实现指令数据的fifo,并根据指令数据激活适量个数的pe计算子单元以及pe计算子单元的资源;

数据fifo子单元,用于实现权重数据和输入数据的fifo;

排序子模块,用于基于为正数的权重数据优先输出、为负数的权重数据后输出、为零的权重数据不输出的原则,依序输出权重数据和输入数据;

pe计算子单元,用于对权重数据和输入数据进行卷积运算和池化运算,并用于判断是否自动终止卷积运算;

上述pe计算子单元共多个,其以数据复用的方式获取输入数据,并通过并行计算的方式对权重数据和输入数据进行卷积运算和池化运算;

加法子单元,用于对上述多个pe计算子单元输出的数据进行加法运算。

本实施方式中,对权重数据按照正数优先输出、负数后输出、零不输出的原则进行排序,在pe计算子单元进行卷积运算时,可减少卷积运算次数,对每个pe计算子单元的输入数据复用,可进一步减少从外部存储模块读写频次,从而降低了外部存储器的外部读写,也降低了内部卷积运算相关单元的使用资源。

优选的,pe计算子单元包括:

多个卷积计算微单元,用于以数据复用的方式获取输入数据,通过串行计算的方式对权重数据和输入数据进行卷积运算;

激活函数,配置为relu函数,用于判断是否终止卷积计算微单元内的卷积运算,判断原则为:如果卷积计算微单元内对当前m个权重数据和相关的输入数据的卷积运算为负数,则自动终止卷积计算微单元内的卷积运算并输出零;否则,对n个权重数据和相关的输入数据进行卷积运算并输出为正数的卷积数据;其中,m<n,n为位于卷积计算微单元内的权重数据的总数;

池化层,用于对每个卷积计算微单元的输出数据进行池化操作。

该优选实施方式中,卷积计算微单元之间复用输入数据和权重数据,即每个pe计算子单元内部卷积计算时,每个卷积计算微单元将输入的数据输出到下个卷积计算微单元进行卷积计算,从而不需要重复从外部或内部存储区读写,降低了外部存储器或内部存储区的读写频次,从而降低了功耗;根据激活函数的特性,在通过卷积计算微单元进行卷积计算时,如果前几项卷积结果已经为负值,那么剩下的卷积计算可以省略,从而减少了卷积计算微单元的利用。

优选的,逻辑计算单元还包括:

压缩/解压单元,用于按照神经网络的层次并根据游程编码压缩算法对权重数据进行压缩,或者对压缩后的权重数据进行无损解压。

该优选实施方式中,通过压缩/解压单元实现对权重数据的压缩,将压缩后的权重数据存储在外部存储器中或者内部缓存区,可简约存储空间;对权重数据进行了无损压缩,相当于减少了外部存储的读写次数,因此降低了能耗。

优选的,逻辑计算单元还包括:

缓存子单元,用于暂存权重数据、输入数据以及指令数据。

优选的,总线接口为axi接口,其支持dma数据传输方式。

优选的,所述主控芯片为zynq芯片,zynq芯片的ps端作为处理器单元,zynq芯片的pl端作为逻辑计算单元。

第二方面,本发明实施例提供一种高能效的神经网络加速系统,包括:

如第一方面的一种高能效的神经网络处理器;和

存储模块,与主控芯片电连接,用于存储权重数据以及加法单元的输出数据。

该实施例一种高能效的神经网络加速系统用于进行神经网络加速计算。

第三方面,本发明实施例提供一种高能效的神经网络加速方法,包括:

将权重数据存储于存储模块中;

获取权重数据和输入数据,并根据神经网络的模型生成指令数据;

以fifo的方式获取指令数据,并根据指令数据激活适量个数的pe计算子单元以及pe计算子单元的资源;

以fifo的方式获取输入数据和权重数据,并基于为正数的权重数据优先输出、为负数的权重数据后输出、为零的权重数据不输出的原则,对权重数据和输入数据进行选择排序;

以数据复用的方式获取输入数据,以多个pe计算子单元并行计算的方式对权重数据和输入数据进行卷积运算和池化运算,并在卷积运算过程中根据卷积运算的结果判断是否终止卷积运算;

获取上述每个pe计算子单元的输出数据并进行加法运算得到最终数据,并将最终数据存储于存储模块。

优选的,pe计算子单元对权重数据和相关的输入数据进行卷积运算和池化运算,包括:

以数据复用的方式获取输入数据,以多个卷积计算微单元串行计算的方式对权重数据和相关的输入数据进行卷积运算;

在卷积计算微单元内进行卷积运算过程中,通过激活函数判断是否终止当前卷积计算微单元内的卷积运算,包括:如果卷积计算微单元内对当前m个权重数据和相关的输入数据的卷积运算为负数,则自动终止卷积计算微单元内的卷积运算并输出零;否则,对n个权重数据和相关的输入数据进行卷积运算并输出为正数的卷积数据;其中,m<n,n为位于卷积计算微单元内的权重数据的总数;

对每个卷积计算微单元的输出数据进行池化运算。

优选的,将权重数据存储于外置的存储模块中之前,按照神经网络的层次并根据游程编码压缩算法对权重数据进行压缩,将压缩后的权重数据存储于外置的存储模块中;

对权重数据和输入数据进行选择排序之前,对压缩后的权重数据进行无损解压。

本发明提供的一种高能效的神经网络处理器、加速系统及方法具有以下优点:

1、通过排序子模块对权重数据和输入数据进行排序,便于后续pe计算子单元内优先对为正数的权重数据和相关的输入数据进行卷积运算,后对为负数的权重数据和相关的输入数据进行卷积运算,在卷运算过程中可根据卷积运算结果判断是否自动终止卷积运算,从而可减少卷积计算相关单元的使用,并加快计算速度;

2、pe计算子单元之间以数据复用的方式获取输入数据,同时,pe计算子单元内卷积计算微单元之间通过数据复用的方式获取输入数据,可减少对外部存储的读写,降低了功耗,提高了输入数据的利用率,并提高了计算速度;

3、对权重数据进行压缩存储,降低了对存储空间的占用。

附图说明

为了更清除地说明本发明实施例中的技术方案,下面将对实施例中描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

附图1为实施例1一种高能效的神经网络处理器的结构示意图;

附图2为实施例1改进后一种高能效的神经网络处理器的结构示意图;

附图3为实施例2一种高能效的神经网络加速系统的结构示意图;

附图4为实施例3一种高能效的神经网络加速方法的流程框图。

具体实施方式

下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。

需要理解的是,在本发明实施例中的“多个”,是指两个或两个以上。

本发明实施例提供一种高能效的神经网络处理器、加速系统及方法,用于解决如何减小对乘法器以及数据存储器的读写次数,加速神经网络计算的技术问题。

实施例1:

如附图1所示,实施例提供一种高能效的神经网络处理器,为包含arm核的主控芯片,包括处理器单元和逻辑计算单元,处理器单元和逻辑计算单元通过总线接口电电连接。

其中,处理器单元包含多核arm处理器,用于获取输入数据、权重数据并根据神经网络的模型生成指令数据。

总线接口为axi接口,支持dma数据传输方式。

逻辑计算单元包括指令fifo子单元、数据fifo子单元、排序子单元、加法子单元以及多个pe计算子单元。

指令fifo子单元,选用fifo存储器,连接于总线接口于多个pe自动单元之间,用于实现指令数据的fifo,并根据指令数据激活适量个数的pe计算子单元以及pe计算子单元的资源。

数据fifo子单元,选用fifo存储器,实现总线接口与排序子单元以及总线接口与pe计算子单元之间的电连接,用于实现权重数据和输入数据的fifo。

排序子模块,从数据fifo子单元获取权重数据,用于基于为正数的权重数据优先输出、为负数的权重数据后输出、为零的权重数据不输出的原则,对权重数据和输入数据进行排序,依序向pe子单元输出权重数据和对应的输入数据。

pe计算子单元,用于对权重数据和输入数据进行卷积运算和池化运算,并用于根据卷运算过程中卷积运算的结果判断是否自动终止卷积运算。

本实施例中,每个pe计算子单元均包括n个卷积计算微单元、激活函数和池化层。

其中,n个卷积计算微单元具有如下功能:从排序子单元获取排序后的权重数据和相关的输入数据,且n个卷积计算微单元之间以数据复用的方式获取输入数据、通过串行计算的方式对权重数据和输入数据进行卷积运算。其中,n个卷积计算微单元以数据复用的方式获取输入数据的模式为:

每个卷积计算微单元中均获取了部分输入数据以进行卷积运算,上述多个卷积计算微单元依次串行进行卷积运算,每个卷积计算微单元当前获取的部分输入数与权重数据卷积运算结束后,该个卷积计算微单元将当前获取的部分输入数据寄存至周围的下个卷积计算微单元,从而卷积计算微单元之间可通过数据复用的方式获取输入数据,减少从外部获取数据的频次。

激活函数,配置为relu函数,用于判断是否终止卷积运算,判断原则为:如果卷积计算微单元内对当前m个权重数据和相关的输入数据的卷积运算为负数,则自动终止卷积运算并输出零;否则,对n个权重数据和相关的输入数据进行卷积运算并输出为正数的卷积数据;其中,m<n,n为通过排序子单元输出的权重数据的总数。其原理为:每个卷积计算微单元中,优先输入为正数的权重数据,后输入为负数的权重数据,即进行卷积计算时优先对为正数的权重数据和对应的输入数据进行卷积运算,所有为正数的权重数据和对应的输入数据卷积运算后,再对为负数的权重数据和对应的卷积数据进行卷积运算,如果计算完为正数的权重数据和对应的输入数据以及部分为负数的权重数据和对应的输入数据后,卷积数据出现负数,那么最终结果肯定为负数,由于激活函数的特性,后续的卷积计算自动停止,该卷积计算微单元的卷积运算结束并输出零。

池化层,用于对上述每个卷积计算微单元的输出数据进行池化操作。

上述pe计算子单元共多个,其为具有如下功能的子单元:其以数据复用的方式获取输入数据,并通过并行计算的方式对权重数据和输入数据进行卷积运算和池化运算。多个pe计算单元的工作模式理解为:

每个pe计算子单元中均获取了部分输入数据,该部分输入数据与权重数据进行卷积运算和池化运算,上述pe计算子单元同步并行进行计算工作,每个pe计算子单元当前获取的部分输入数与权重数据的最后一个卷积运算结束后,该pe计算子单元将当前获取的部分输入数据寄存至周围的下个pe计算子单元,从而pe计算子单元可通过数据复用的方式获取输入数据,减少从外部获取数据的频次。

加法子单元,与上述多个pe计算子单元电连接,用于从pe计算子单元中获取池化运算后的数据并进行加法运算,得到最终数据。

本实施例一种高能效的神经网络处理器,可用于与外置的存储模块配合,加速神经网络的计算。

如附图2所示,作为本实施例的进一步改进,逻辑计算单元还包括压缩/解压单元,用于按照神经网络的层次并根据游程编码压缩算法对权重数据进行压缩,或者对压缩后的权重数据进行无损解压。

该压缩/解压单元在神经网络的加速运算应用中,具体功能为:在进行神经网络计算之前,将训练好的神经网络的权重数据按照该神经网络的层次、采用游程编码压缩算法对权重数据进行压缩,便于节省存储空间。在对权重数据和输入数据进行运算之前,对压缩后的权重数据进行无损解压。

作为本实施例的进一步改进,逻辑计算单元还包括缓存子单元,缓存子单元用于暂存权重数据、输入数据以及指令数据。缓存单元连接通过总线接口获取权重数据、输入数据以及指令数据,并将指令数据传输至指令fifo子单元,将权重数据和输入数据传输至排序子单元。

在该实施例中,该主控芯片选用zynqmp芯片,zynqmp芯片的ps端作为处理器单元,zynqmp芯片的pl端作为逻辑计算单元。

实施例2:

如附图3所示,本实施例提供一种高能效的神经网络加速系统,包括存储模块和实施例1公开的一种高能效的神经网络处理器。该存储模块用于存储权重数据以及通过加法子单元输出的结果数据。其中权重数据可为为解压的权重数据或经过压缩后的权重数据。

该实施例提供的一种高能效的神经网络加速系统可实现神经网络计算的加速。

实施例3:

如附图4所示,本实施例提供一种高能效的神经网络加速方法,其基于实施例2公开的一种高能效的神经网络加速系统实现,包括如下步骤:

s100、将权重数据存储于外置的存储模块中;

s200、通过处理器单元获取权重数据和输入数据,并根据神经网络的模型生成指令数据;

s300、通过指令fifo子单元获取指令数据,实现指令数据的fifo,并根据指令数据激活适量个数的pe计算子单元以及pe计算子单元的资源;

通过数据fifo子单元获取输入数据和权重数据,实现输入数据和权重数据的fifo,并基于为正数的权重数据优先输出、为负数的权重数据后输出、为零的权重数据不输出的原则,通过排序子单元对权重数据和输入数据进行选择排序;

s400、以数据复用的方式获取输入数据,以多个pe计算子单元并行计算的方式对权重数据和输入数据进行卷积运算和池化运算,并在卷积运算过程中根据卷积运算的结果判断是否终止卷积运算;

s500、获取每个pe计算子单元的输出数据并进行加法运算得到最终数据,并将最终数据存储于存储模块。

其中,步骤s300中,执行步骤优选为:

s310、通过指令fifo子单元获取指令数据,实现指令数据的fifo,并根据指令数据激活适量个数的pe计算子单元以及pe计算子单元的资源;

s320、通过数据fifo子单元获取输入数据和权重数据,实现输入数据和权重数据的fifo;

s330、基于为正数的权重数据优先输出、为负数的权重数据后输出、为零的权重数据不输出的原则,通过排序子单元对权重数据和输入数据进行选择排序。

步骤s400中,多个pe计算子单元以数据复用的方式获取输入数据,根据多个pe计算子单元并行计算的方式对权重数据和输入数据进行卷积运算和池化运算,其工作模式为:每个pe计算子单元中均获取了部分输入数据,该部分输入数据与权重数据进行卷积运算和池化运算,上述pe计算子单元同步并行进行计算工作,每个pe计算子单元当前获取的部分输入数与权重数据的最后一个卷积运算结束后,该pe计算子单元将当前获取的部分输入数据寄存至周围的下个pe计算子单元,从而pe计算子单元可通过数据复用的方式获取输入数据,减少从外部获取数据的频次。

pe计算子单元对权重数据和相关的输入数据进行卷积运算和池化运算,包括:

s410、以数据复用的方式获取输入数据,以多个卷积计算微单元串行计算的方式对权重数据和相关的输入数据进行卷积运算;

在卷积计算微单元内进行卷积运算过程中,通过激活函数判断是否终止当前卷积计算微单元内的卷积运算,包括:如果卷积计算微单元内对当前m个权重数据和相关的输入数据的卷积运算为负数,则自动终止卷积计算微单元内的卷积运算并输出零;否则,对n个权重数据和相关的输入数据进行卷积运算并输出为正数的卷积数据;其中,m<n,n为位于卷积计算微单元内的权重数据的总数;

s420、对每个卷积计算微单元的输出数据进行池化运算。

步骤s410中,多个卷积计算微单元以数据复用的方式获取输入数据,并根据多个卷积计算微单元串行计算的方式对权重数据和输入数据进行卷积运算,其工作模式为:每个卷积计算微单元中均获取了部分输入数据以进行卷积运算,上述个卷积计算微单元依次串行进行卷积运算,每个卷积计算微单元当前获取的部分输入数与权重数据卷积运算结束后,该卷积计算微单元将当前获取的部分输入数据寄存至周围的下个卷积计算微单元,从而卷积计算微单元可通过数据复用的方式获取输入数据,减少从外部获取数据的频次。

作为本实施例的进一步改进,在执行步骤s100将权重数据存储于外置的存储模块中之前,通过压缩/加压子单元对权重数据进行压缩,压缩步骤为:根据神经网络的层次、采用游程编码算法对权重数据分层压缩,并将压缩后的权重数据存储至外置的存储模块中;在执行步骤s330之前,即对权重数据进行选择排序之前,对权重数据进行无损解压。

对权重数据进行压缩,可节省存储空间。

以上所述实施例仅是为充分说明本发明而所举的较佳的实施例,本发明的保护范围不限于此。本技术领域的技术人员在本发明基础上所作的等同替代或变换,均在本发明的保护范围之内。本发明的保护范围以权利要求书为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1