基于FPGA的深度学习CNN加速器设计方案

时间:2025-05-02  作者:Diven  阅读:0

因为CNN的特有计算模式,通用处理器对于CNN实现效率并不高,不能满足性能要求。 近来已经提出了基于FPGA,GPU甚至ASIC设计的各种加速器来提高CNN设计的性能。 在这些方法中,基于FPGA的加速器引起了研究人员越来越多的关注,因为具有性能好,能源效率高,开发周期快,重构能力强等优点。

基于FPGA的深度学习CNN加速器设计方案

在实验中,研究人员发现在FPGA相同的逻辑资源利用率情况下,两种不同解决方案可能会有多达90%的性能差异。所以找出最佳解决方案是很重要的,特别是当考虑到FPGA平台的计算资源和存储器带宽的限制时。 实际上,如果加速器结构没有精心设计,其计算吞吐量与提供FPGA平台的内存带宽不匹配。 这意味着由于逻辑资源或存储器带宽的利用不足将造成性能的降级。

不幸的是,FPGA技术和深度学习算法的进步同时加剧了这个问题。 一方面,由最先进的FPGA平台提供的日益增加的逻辑资源和存储器带宽扩大了设计空间。 当应用各种FPGA优化技术(如循环平铺和变换)时,设计空间进一步扩大。 另一方面,为了适应现代应用的需求,深度学习算法的规模和复杂性也在不断增加。所以,在设计空间中找出最优解是比较困难的。 迫切需要有效的方法来探索基于FPGA的CNN设计空间。

然而现有的大部分工作主要关注计算引擎优化,有的忽略外部存储器操作,有的将其加速器直接连接到外部存储器。还有些研究工作通过精细的数据重用减少外部数据访问来加速CNN应用。这种方法并不一定会导致最佳的整体性能。这种方法需要重新配置不同层次的FPGA计算。这在某些情况下是不可行的。

为了有效地探索设计空间,有研究人员提出了分析设计方案。这种方案考虑到缓冲区管理和带宽优化,以更好地利用FPGA资源并实现更高的性能。同时加速器能够跨越不同的层执行加速作业,而无需重新编程FPGA。下面我们具体来看一下这种方案。

考虑到在应用中基本都是将训练好的CNN模型部署到现有计算平台上进行预测操作,所以,很多的FPGA加速方案中仅考虑优化前向操作。同时又有研究表明,卷积操作占据了CNN模型将近90%的计算时间,所以, 本方案也是仅考虑优化CNN模型前向计算中的卷积运算 ,优化的模型选择为经典的AlexNet。同时为了更好的分析网络的性能,研究人员借助Roofline Model进行优化方案的设计。通过这个 model,既可以评估一个设计的效率,还能很容易看出设计到底是 computation-limited 还是 memory bandwidth-limited,可以帮助确定进一步优化的思路。

我们先来了解一下CNN中的卷积运算的规则,CNN中的卷积运算如图1所示,代码1表示其伪代码。图1代码1

几乎所有的基于FPGA的加速方案,都如图2显示的那样,FPGA上的CNN加速器设计主要由处理元件(PE),片上缓冲器,外部存储器和片上/片外互连几个组件组成。其中PE是卷积的基本计算单元。用于处理的所有数据都存储在外部存储器中。由于片上资源限制,数据首先被缓存在片上缓冲区中,然后再馈送给PE。双缓冲区用于通过数据传输时间来覆盖计算时间。片内互连专用于PE和片上缓冲存储器之间的数据通信。图2

通过观察图2,我们可以发现有几个设计问题妨碍了FPGA平台上高效的CNN加速器设计。为了适应芯片上的一小部分数据,循环平铺是必须的。不正确的平铺可能会降低数据重用的效率和数据处理的并行性。第二,应仔细考虑PE和缓冲库的组织以及之间的互连,以便有效地处理片上数据。第三,PE的数据处理吞吐量应与FPGA平台提供的片外带宽匹配。

为了解决上述问题,下面逐条分解实现方案。

1) 方案采用 循环平铺 (代码2)。注意,循环迭代器i和j由于CNN中卷积窗口大小K的相对小的尺寸(通常在3到11之间)而不是平铺的。其循环迭代器(row,col,to和ti)平铺到图形循环和点循环中(代码2中的trr,tcc和tii)。代码2

2)片上计算优化的实现

计算优化的目的是在充分利用FPGA硬件平台提供的所有计算资源的实现高效的循环展开/流水线化。

循环展开可用于增加FPGA设备中大规模计算资源的利用率。在给定阵列上循环维度的不同循环迭代之间的数据共享关系可分为三类:不相干,独立,有依赖关系。对应如图3所示。如代码2所示,CNN代码中的数据共享关系如表1所示。图3表1

因此在设计展开时,选择对too和tii进行展开,以避免所有阵列的复杂连接拓扑。too和tii被置换到最内层循环,以简化HLS代码生成。生成的硬件实现如图4所示。图4

循环流水线化是高级合成中的关键优化技术,通过重复来自不同循环迭代的操作的执行来提高系统吞吐量。因此方案使用基于多面体的优化框架来执行自动循环变换以将并行循环水平置换到最内层,以避免循环依赖。

最终循环展开和循环流水线优化后的代码结构如代码3所示。代码3

3)内存访问优化的实现

代码4展示了一个CNN层的存储器传送操作。输入/输出特征图和权重在计算引擎启动之前就已被加载,计算完成后,将生成的输出特征图写回主存储器。代码4

通过分析可知,通信部分中的最内层循环(代码4中的ti)与数组无关,因此在不同的循环迭代之间存在冗余的存储器操作。所以方案使用本地存储提升来减少相关冗余操作。代码4中,最内圈的维数ti与阵列输出特征图无关。可以将对阵列输出特征图的访问提升到外部循环。请注意,升级过程可以迭代执行,直到访问周围的最内层循环最终相关。通过本地存储提升,阵列输出特征图上的存储访问操作的行程计数从降到了 。

循环转换数据重用。 为了通过本地存储提升最大化数据重用的机会,方案使用基于多面体的优化框架来识别所有合法的循环转换。表2显示了循环迭代和数组之间的数据共享关系。每个合法循环调度中都会使用本地存储提升功能,以减少总通信量。表2

通过上述操作,方案明显提升了CTC Ratio。

4)设计空间探索

以CNN模型的第5层为例,图5描绘了CNN模型的第5层在rooline模型坐标系中的所有合理的解决方案。横轴表示CCT Ratio,纵轴表示计算性能(GFLOPS)。任何点与原点(0,0)之间的线的斜率表示该实现的最小带宽要求。图5

图6中,带宽Roof和计算Roof的线由平台的规格定义。带宽Roof线的左侧的任何一点都需要比平台提供的带宽更高的带宽。例如,尽管图中A方案实现了最高的计算性能,但是目标平台无法满足该方案所需的存储器带宽。所以,综合分析比较,最终选择方案C作为第5层的设计方案,带宽要求为2.2GB/s。图6

5)多层CNN加速器设计

在此之前,我们讨论了如何找到每个卷积层的最优实现方案。但是,在CNN应用中,这些参数可能在不同的层之间需要变化。表3描述了该应用CNN模型中所有层的最优展开因子(Tm和Tn)。为了解决这个问题,本方案采用的方法是在不同卷积层之间设计具有均匀展开因子的硬件架构。具有统一展开因子的CNN加速器设计和实现简单,但可能对某些层是次优的。表3显示,使用统一展开因子<64,7>,与每个优化卷积层的总执行周期相比,退化在5%以内。方案选择了CNN加速器在卷积层上的统一展开因子。表3

解决完上述问题,图7就是整个实现方案架构。实验是在具有Xilinx FPGA芯片Virtex7 485t的VC707板上完成。其工作频率为100 MHz。 为了比较性能,CPU软件实现在具有15MB高速缓存的Intel Xeon CPU E5-2430(@ 2.20GHz)上运行。图7

该实验的资源利用情况如表4所示。表4

加速器的性能比较如表5所示。表5

表6显示,CPU软件实现和FPGA实现之间的消耗能量的比例至少为24.6x。 FPGA实现使用的能量远远低于其CPU实现。表6

如表7所示,如果使用定点计算引擎,该设计方案可以实现更好的性能和性能密度,因为定点处理元件使用的资源少得多。表7

猜您喜欢

模拟前端(AFE)是连接传感器与数字处理单元之间的重要桥梁,其性能直接影响到信号的质量与系统的整体效果。AFE的参数主要包括增益、带宽、噪声、输入阻抗和功耗等。...
2013-01-23 00:00:00

贴片电阻472是一种常用的电子元件,广泛应用于各种电路中。它体积小巧,适合表面贴装技术(SMT),方便自动化生产,因此在现代电子产品中得到广泛应用。「472」代...
2025-04-14 15:03:25


贴片电阻,作为电子电路中很重要的元件,其尺寸大小直接影响着电路板的设计和整体性能。不同的应用场景需要选择不同大小的贴片电阻,了解常见的贴片电阻尺寸及对比,对于电...
2024-11-29 10:26:03

贴片电阻由于体积小,无法像传统电阻一样直接印上阻值,因此采用数字或字母编码来表示。理解这些编码对于正确选择和使用电阻至关重要。一般来说,三位数编码的贴片电阻遵循...
2024-11-26 11:29:51

电容器是电路中重要的元件。能储存电能,影响电流和电压。本文将介绍电容器在电路中的主要作用。储能电容器可以储存电能。的工作原理是通过电场。电容器充电时,能量被储存...
2025-03-25 04:30:02

电子设备中,Murata电容是常见的元件。正确识别Murata电容对电路设计和维修很重要。本文将介绍几种识别方法,帮助大家更好地了解Murata电容。观察电容外...
2025-03-23 04:31:07

对电阻器的性能要求也越来越高。作为电子元器件领域的知名品牌,Murata(村田)在升功率电阻领域有着很好的表现。本文将全面介绍Murata升功率电阻的主要参数及...
2018-06-15 15:56:17

1 前言随着集成电路工艺技术的不断发展,集成电路的特征设计尺寸进入到深亚微米,芯片规模扩大到百万门级,从计算量、后端布局布线(placement&routin...
2018-08-06 09:10:00

二极管是电子电路中重要的元件,应用于整流、信号调制、波形产生等领域。了解不同类型二极管的符号,对于电子工程师和爱好者来说非常重要。本文将为您详细介绍各种二极管的...
2025-03-29 11:30:34