论文部分内容阅读
卷积神经网络(CNN)已经被广泛应用于字符识别,图片分类和自然语言理解等领域。由于CNN中特定的计算方法,因此在通用处理器上效率不高,很难达到很高的性能。在实践中,图形处理器(GPU)被广泛应用于CNN的训练以及分类任务中,然而,它们受限于较低的能效收益。除了 GPU被应用于CNN以外,基于专用集成电路(ASCI)和现场可编程门阵列(FPGA)的CNN加速器也被提出。综合比较这些平台,基于FPGA的加速器因为具有可重构性高,开发周期短和能效收益高等优点,越来越受欢迎。但是,使用FPGA来加速CNN仍然存在很多挑战。众所周知,FPGA平台主要受限于有限的计算资源和昂贵的片外内存访问。然而,在最先进的CNN模型中,存在大量的计算操作(>1G)和大量的参数(>50M),这会消耗大量的能量。随着技术的发展,为了达到更高的精度,CNN模型会变得越来越大,越来越复杂,更将加剧这种情况。因此,需要设计一个高能效的CNN加速器。CNN中有多个卷积层,而在已有的加速器设计中,都使用单一的处理引擎来处理所有的卷积层,这种“一体适用”的方法会导致硬件资源利用率很低。针对这个问题,我们设计并实现了 PiPe。在PiPe工作的基础上,我们发现卷积层和全连接层的计算都可以转化成为矩阵乘法计算,这样就可以设计使用多个相同的处理引擎来计算卷积神经网络。基于这个发现,我们设计并实现了 UniCNN。具体来说,本文主要做了如下的工作:PiPe:采用流水线方式运行的高能效的卷积神经网络加速器。在该加速器中,包含多个处理引擎,每一个处理引擎对应卷积神经网络中—层的计算。所有的处理引擎都映射到同一个FPGA芯片上,这样不同的层能够以流水线的方式同时工作。除此之外,我们还使用了一种方法来平衡各个流水线阶段。对于访存密集型的全连接层,我们采用了剪枝和压缩存储的方法,同时还使用了批处理的方法来减少所需的内存带宽。作为实例研究,我们在两块FPGA开发板,Zedboard和Virtex-7,实现了 AlexNet模型。实验结果表明,与已有的CNN加速器相比,PiPe实现了更高的能效收益。UniCNN:采用统—的处理引擎计算卷积神经网络的加速器。在该加速器中,通过重排输入特征图的方法,将卷积层的计算转化为矩阵乘法计算;通过批处理的方法将全连接层的计算也转化为矩阵乘法计算;在此基础上,UniCNN采用了流水线计算的方法来优化整个的处理过程。实验结果表明,和已有的CNN加速器相比,UniCNN实现了更高的计算资源利用率。在PiPe和UniCNN的基础上,本文还对这两个加速器的编程模型进行了研究,使得用户能够更加方便地使用我们所提出的加速器来加速他们的应用。综上所述,本文提供了基于单块FPGA的高性能、低功耗、易用的卷积神经网络解决方案。