首页> 中国专利> 一种基于FPGA的高资源利用率CNN加速器及其加速方法

一种基于FPGA的高资源利用率CNN加速器及其加速方法

摘要

本发明提出一种基于FPGA的高资源利用率CNN加速器及其加速方法,包括多个收尾相连的层处理器,所述层处理器以流水线方式完成批量连续任务的计算;所述层处理器包括相互电性连接的卷积计算单元、层内数据复用单元、层间数据复用单元,以及基于资源利用率的优化单元。所述CNN加速器使用基于Winograd快速卷积的卷积计算单元减少连续卷积运算所需乘法次数以及乘法器资源使用量,能有效提高加速器的能效;使用基于资源利用率的优化目标对加速器进行优化,减少计算资源浪费,提高FPGA上CNN加速器的性能上限。

著录项

  • 公开/公告号CN112801285A

    专利类型发明专利

  • 公开/公告日2021-05-14

    原文格式PDF

  • 申请/专利权人 南京微毫科技有限公司;

    申请/专利号CN202110157101.X

  • 发明设计人 陈雪;

    申请日2021-02-04

  • 分类号G06N3/063(20060101);G06N3/04(20060101);G06N3/08(20060101);

  • 代理机构32360 南京泰普专利代理事务所(普通合伙);

  • 代理人张磊

  • 地址 211100 江苏省南京市麒麟科技创新园(生态科技城)智汇路300号

  • 入库时间 2023-06-19 10:58:46

说明书

技术领域

本发明涉及深度学习算法的硬件加速领域,具体涉及一种基于FPGA的高资源利用率CNN加速器及其加速方法。

背景技术

CNN是深度学习算法中最重要的算法之一,因其超高的准确率,被广泛应用于目标分类、自动驾驶等领域中。CNN优越的识别准确率源自庞大的计算量与参数量,其中卷积层的计算量占据网络的90%以上,同时卷积运算比较复杂,在基于串行计算而设计的CPU上存在数据访存频繁、计算速度慢的特点。随着CNN的发展,其识别准确率越来越高,而计算量也在急剧增大,在传统CPU平台上计算已经无法满足一些高新应用对实时性的需求,因此大量研究者致力于设计高效的硬件结构来加速CNN。FPGA的资源丰富、并行计算能力强、功耗较低,其可编程特性使得基于FPGA设计出的加速器具有较高的灵活性,能够较低成本的使硬件结构随着CNN算法的更新而同步更新,因而基于FPGA的高资源利用率CNN加速器受到研究者门的广泛关注。目前,部分基于FPGA的高资源利用率CNN加速器以单个层处理器结构对网络进行加速,能够加速各种不同的CNN网络,灵活性强,但此过程中,中间数据在片内外的访存频繁,使得运算时间和功耗开销较大,对连续批量识别任务处理较弱。另一部分加速器则只针对某一特定CNN网络进行加速,将所有层全部映射到FPGA上,由多个层处理器串行处理不同的层,同时层与层之间以流水线方式执行批量任务,缩短输出间隔。此外,整个过程中所有中间数据不再返回片外,减少了片内外数据访存的功耗。其缺点在于,当网络更换时,需要重新编写代码、综合以及烧录。

目前,基于FPGA的全映射式的CNN加速器通常以Roofline模型为基准,以吞吐量为优化目标,对FPGA片上资源进行分配,提高流水线效率,但这种方式通常只考虑乘法器使用的数量,缺乏对乘法器实际有效运算时间的分析,无法最大限度的利用FPGA片上的计算资源。

发明内容

发明目的:提供一种基于FPGA的高资源利用率CNN加速器,并进一步提出一种基于上述CNN加速器的加速方法,以解决现有技术存在的上述问题。

技术方案:一种基于FPGA的高资源利用率CNN加速器,多个层处理器首尾相连,以流水线方式完成批量连续任务的计算。层处理器由卷积计算单元,层内数据复用单元,层间数据复用单元构成,层内数据复用单元与层间数据复用单元均被映射为具体的电路连接,而优化单元被映射为层处理器中的资源使用量。

在进一步的实施例中,层处理器至少包括三个,第一层处理器用于接收输入像素以及相应的权重参数,负责数据存储与计算,并将计算结果转移到第二层处理器;所述第二层处理器接收来自所述第一层处理器的数据与片外传入的权值参数,完成数据存储与计算,并将计算结果转移到第三层处理器;所述第三层处理器接收来自所述第二层处理器的数据与片外传入的权值参数,完成数据存储与计算,并将计算结果转移到片外。

在进一步的实施例中,卷积的输入数据x1,x2,x3以流水线的方式顺序更新到该卷积计算单元中,而权值参数w1,w2,w3在当前批次的计算完成前保持不变,通过sel信号控制多路选择器实现不同周期下输入数据与对应参数的乘法。其中,Winograd快速卷积算法中的乘法因子1/2被嵌入在电路中,以信号线错位的方式实现,减少乘法器使用。

在进一步的实施例中,单个输入特征图将奇偶行的数据分别存入不同的存储器中,以双路并行存储与提供数据。存储器后连接行缓存结构,周期性的为计算单元组提供数据输入数据块。配合卷积计算单元实现高效的卷积运算。

基于上述CNN加速器,本实施例提出高资源利用率CNN加速方法,步骤如下:

步骤1、特征图被裁剪为小块分批运算,层与层间数据分块连续传递,相邻卷积块包含重复的数据块;

步骤2、在存储单元初始地址a处开始连续存储数据,完成数据块A的存储;

步骤3、于地址b处存储数据块B,当AB块存储完毕后,停止接受前一层的数据,开始当前批次的运算;

步骤4、当前批次的数据计算完成后,新数据块C再从a地址存入,并且覆盖数据块A,随后与数据块B组成新的特征图,通过改变取数据的地址调整数据顺序并用于运算;

步骤5、计算随后的计算批次,更新必须的非重复数据。

在进一步的实施例中,高资源利用率CNN加速方法还包括如下步骤:首先计算所加速CNN网络的所有中间结果同时存储所需要的总存储空间

特征图被裁剪为小块后分批运算,层与层间数据分块连续传递,相邻卷积块包含重复的数据块。存储时,首先在存储单元初始地址a处开始连续存储数据,完成数据块A的存储。随后再于地址b处存储数据块B,当AB块存储完毕后,停止接受前一层的数据,开始当前批次的运算。当前批次的数据计算完成后,新数据块C再从a地址存入,并且覆盖数据块A,随后与数据块B组成新的特征图,通过改变取数据的地址调整数据顺序并用于运算。该实施例仅在第一个运算批次需要前一层提供完整的卷积块,随后的每个计算批次中,仅需更新必须的非重复数据即可,以减少特征图裁剪导致数据块B、C的数据重复问题,提高层与层间数据传递与计算的效率。

在进一步的实施例中,当给定FPGA与CNN网络后,根据加速器架构,首先为满足中间数据的存储要求,对网络进行分块;随后根据片内外的数据传输能力,决定全连接层的计算批次以降低访存;最后根据层与层间有效计算量的比值与实际资源利用效率,决定每一层分配的资源数量,实现最佳计算资源利用率,完成加速器参数的配置,并将代码综合、烧录至片上。

本发明与现有技术相比,其显著优点在于:

1)使用基于快速卷积的卷积计算单元减少连续卷积运算所需乘法次数以及乘法器资源使用量,能有效提高加速器的能效;

2)使用基于资源利用率的优化目标对加速器进行优化,减少计算资源浪费,提高FPGA上CNN加速器的性能上限。

附图说明

图1为本发明CNN加速器的系统框架图。

图2为本发明卷积计算单元的电路结构图。

图3为本发明层内数据复用方案的示意图。

图4为本发明层间数据复用方案的示意图。

具体实施方式

在下文的描述中,给出了大量具体的细节以便提供对本发明更为彻底的理解。然而,对于本领域技术人员而言显而易见的是,本发明可以无需一个或多个这些细节而得以实施。在其他的例子中,为了避免与本发明发生混淆,对于本领域公知的一些技术特征未进行描述。

申请人认为,目前,部分基于FPGA的高资源利用率CNN加速器以单个层处理器结构对网络进行加速,此过程中,中间数据在片内外的访存频繁,使得运算时间和功耗开销较大,对连续批量识别任务处理较弱。另一部分加速器则只针对某一特定CNN网络进行加速,将所有层全部映射到FPGA上,由多个层处理器串行处理不同的层,同时层与层之间以流水线方式执行批量任务,缩短输出间隔。此外,整个过程中所有中间数据不再返回片外,减少了片内外数据访存的功耗。其缺点在于,当网络更换时,需要重新编写代码、综合以及烧录。而基于FPGA的全映射式的CNN加速器通常以Roofline模型为基准,以吞吐量为优化目标,对FPGA片上资源进行分配,提高流水线效率,但这种方式通常只考虑乘法器使用的数量,缺乏对乘法器实际有效运算时间的分析,无法最大限度的利用FPGA片上的计算资源。

为此,申请人提出一种基于FPGA的高资源利用率CNN加速器,并进一步提出一种基于上述CNN加速器的加速方法,使用基于Winograd快速卷积的卷积计算单元减少连续卷积运算所需乘法次数以及乘法器资源使用量,能有效提高加速器的能效。使用基于资源利用率的优化目标对加速器进行优化,减少计算资源浪费,提高FPGA上CNN加速器的性能上限。

实施例一:

见图1,本实施例提出的基于FPGA的高资源利用率CNN加速器,多个层处理器首尾相连,以流水线方式完成批量连续任务的计算。层处理器由卷积计算单元,层内数据复用与层间数据复用方案构成,层内数据复用与层间数据复用单元均被映射为具体的电路连接,而优化单元被映射为层处理器中的资源使用量。第一个层处理器负责接收输入像素以及相应的权重参数,负责数据存储与计算,并将计算结果转移到下一个层处理器。中间的层处理机接收前一层的数据与片外传入的权值参数,完成数据存储与计算,并将计算结果转移到下一个层处理器。最后一个层处理器接收前一层的数据与片外传入的权值参数,完成数据存储与计算,并将计算结果转移到片外。

实施例二:

在图2所示的实施例中,卷积的输入数据x1,x2,x3等以流水线的方式顺序更新到该卷积计算单元中(x2替代x1,x3替代x2,x4替代x3),周期性完成乘加运算。在第一个计算周期,利用加法器和多路选择器完成(x1-x3)和(x3+x2)的运算,并将(x3-x2)的计算结果传入寄存器中暂存。利用sel信号对(x3+x2)和(x3-x2)的计算结果交替进行选择。权值参数w1,w2,w3在当前批次的计算完成前保持不变,可以独立与输入数据提前开始运算,利用加法器在片上完成(w1+w3+w2)和(w1+w3-w2)的运算。此外,MSB和MLB分别为二进制数据的最高位和最低,Winograd快速卷积算法中的乘法因子1/2被嵌入在电路中,以信号线错位的方式实现。利用sel信号同步选择对应的乘法因子,两个乘法器同时输出乘法结果,每2个周期可以完成一次输入向量长度为4、卷积长度为3、步长为1的的一维卷积,多个该结构堆积结合,可以以较少的计算资源完成Winograd快速卷积算法。

实施例三:

在图3所示的实施例中,PE由图2对应的实施例构成。单个输入特征图将奇偶行的数据分别存入不同的存储器中,以双路并行存储与提供数据。存储器后连接行缓存结构,周期性的为计算单元组提供数据输入数据块。配合卷积计算单元或图2中的实施例,实现高效的卷积运算。

实施例四:

在图4所示的实施例中,特征图被裁剪为小块分批运算,层与层间数据分块连续传递,相邻卷积块包含重复的数据块。存储时,首先在存储单元初始地址a处开始连续存储数据,完成数据块A的存储。随后再于地址b处存储数据块B,当AB块存储完毕后,停止接受前一层的数据,开始当前批次的运算。当前批次的数据计算完成后,新数据块C再从a地址存入,并且覆盖数据块A,随后与数据块B组成新的特征图,通过改变取数据的地址调整数据顺序并用于运算。该实施例仅在第一个运算批次需要前一层提供完整的卷积块,随后的每个计算批次中,仅需更新必须的非重复数据即可,以减少特征图裁剪导致数据块B、C的数据重复问题,提高层与层间数据传递与计算的效率。

当给定FPGA与CNN网络后,根据加速器架构,首先为满足中间数据的存储要求,对网络进行分块;随后根据片内外的数据传输能力,决定全连接层的计算批次以降低访存;最后根据层与层间有效计算量的比值与实际资源利用效率,决定每一层分配的资源数量,实现最佳计算资源利用率,完成加速器参数的配置,并将代码综合、烧录至片上。

实施例五:

为验证本发明方案的有效性,以xilinx VC709 FPGA为平台,以AlexNet网络为例,进行如下实验。

选取片外存储器为一块容量为4GB的DDR3存储器,AlexNet网络的卷积层较小无序裁剪,保持原尺寸,而全连接层批处理数为32。所有数据格式为16位定点数据。

确定每一层的层处理器架构后,根据AlexNet网络卷积层的尺寸和计算特点,计算得到每个层处理器在完成单次任务理论上的的层计算时间T

根据该式,代入资源的约束条件、网络的信息进行优化。当该加速器的各层处理器的乘法器数量为{386,1296,368,488,368,160,64,32}时,其理论计算资源利用率达到98.8%,基于以上参数实现的CNN加速器在处理AlexNet时,其吞吐量为973GOPs,资源效率(单位乘法器的吞吐量)为0.31GOPs/DSP。

综上所述,本发明基于FPGA的高资源利用率CNN加速器可实现资源效率与吞吐量,减少资源浪费。

如上所述,尽管参照特定的优选实施例已经表示和表述了本发明,但其不得解释为对本发明自身的限制。在不脱离所附权利要求定义的本发明的精神和范围前提下,可对其在形式上和细节上做出各种变化。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号