神经网络FPGA实现的关键计算单元电路的设计文献综述

 2023-08-15 05:08

文献综述(或调研报告):

卷积神经网络硬件加速研究的文献综述

摘要:本文介绍了卷积神经网络的硬件实现加速方式,重点在于FPGA的实现加速上,列举了近年来不同方式的FPGA实现,并且对未来的方向有一些估计。

关键词:卷积神经网络 FPGA

针对卷积神经网络的优化,仅使用软件方式已经不能满足速度和功耗要求,近年用硬件加速的方式受到越来越多的研究。目前,卷积神经网络加速主要研究集中在三个方面:图形图像处理器(GPU)、专用集成电路(ASIC)和现场可编程门阵列(FPGA)。

在大数据运算过程中,GPU可以很好地利用其高主频、高宽带的特点实现并行运算,利用这一特点可以很好实现卷积神经网络模型的加速功能。Alex Krizhevsky针对手写数字识别提出的AlexNet架构,创新使用ReLU作为CNN的激活函数,成功解决了Sigmoid在网络较深时的梯度弥散问题;训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合;在CNN中使用重叠的最大池化[1],这些措施得到了很好的效果。贾扬清构建的Caffe框架清晰、可读性高、快速,实现了CPU和GPU的无缝结合,很好展现了GPU在深度学习中的优秀的加速能力[2]。由谷歌人工智能团队谷歌大脑(Google Brain)开发和维护的TensorFlow也是在GPU的基础上进行加速,并且极大降低了后学者的编程难度[3]。但是GPU在运算时功耗比较高,同时提及过大,对很多应用场景不友好;另外,利用GPU设计卷积神经网络加速器时需要根据GPU的硬件结构和执行模型来调整神经网络算法,以便达到更好的效果[4]。

与GPU相比,ASIC在高性能、低功耗方面有很明显的优势,因此在卷积神经网络领域应用广泛。谷歌发布的Tensor Processing Unit(TPU) 芯片就是ASIC,其乘累加的数量和存储器容量更大,单位耗能的学习效率比GPU和FPGA更高,并且具有很好的容错性,在相同学习效果的情况下,TPU比通用芯片需要的晶体管更少[5]。陈天石等人提出了基于硬件的深度学习指令集 DianNaoYu,其中第三版PuDianNao 更是可以适用于朴素贝叶斯、线性回归、支持向量机和神经网络等其中比较常用机器学习算法[6]。但是ASIC也存在不足,一方面ASIC加速器是为指定算法设计开发的硬件,硬件结构一旦确定便不能修改,因此只能在特定范围内使用,缺乏灵活性和可重构性;另一方面,针对ASIC的研发对设计者要求极高,需要很强的硬件知识,并且开发周期长导致研发成本高[7]

FPGA具有可编程性和可重构性,在使用时灵活性高。同时利用 FPGA 开发卷积神经网络加速器时主要通过编程完成硬件设计,这种软硬件协同的方式缩短了开发周期,另外 FPGA 有高级编程语言使得代码可读性增强,这大大降低了开发难度,为研发者们提供了便利。并且,提供了足够的内存访问(通过本地和外部存储器)来有效地实现卷积神经网络。在通过 FPGA 的加速研究中,从不同角度解决问题的方案都被提出。Norman R Jouppi 等人提出了通过 FPGA 加速玻尔兹曼机的解决方案,即通过使用消息通信方式控制数据流传递,充分调度计算单元和存储模块实现加速效果[5]。与此同时,Kim 等人也设计出了一种基于 FPGA 的玻尔兹曼机加速算法,该算法提出了一种新的环形神经网络计算方式,可以通过玻尔兹曼机多个模块并行运算对其实现加速[8]。Sankaradas主要利用特征映射和卷积核中的并行性,通过高带宽和动态重新配置实现了一个完整的CNN应用,并且性能良好[9]。Bing Liu提出的基于Roofline模型的ZYNQ平台的可配置系统结构,并且有效集成了标准卷积和深度可分离卷积[10]。Jiantao Qiu分析证明卷积层是以计算为中心的,而全连接层是以内存为中心的,提出了动态精确数据量化的自动流程,并探索了各种数据量化配置,因此可用于大规模图像分类[11]。大部分FPGA 加速器都是用于处理CNN 的推理过程, 近年来也有在FPGA 上实现CNN 训练的相关工作。清华大学与哈尔滨工业大学提出,使用FPGA 加速CNN 训练过程需要解决3 个方面问题: (1)模块化。一个CNN 模型包含了多种类型的层,所以为了完成在FPGA 上训练CNN,需要对不同的层进行模块化设计。(2) 统一的数据路径。为了减少模块间耦合的消耗并提高整个架构的有效性,需要设计统一的数据流路径,便于最好地利用存储带宽。(3) 运行时重配置性。为了适应整个CNN 模型的训练过程,需要整个架构具有可重配置性。因此Wenlai Zhao提出CPU-FPGA 协同处理架构,其中CPU 用做控制器,FPGA 用来加速计算,同时FPGA 上的DRAM 用于存储每个计算模块的输入输出数据。在该架构中,模块控制器负责根据不同的层配置定制不同的计算模块,并且按照特定顺序将模块重新配置到FPGA上:在一个训练周期中先是从底层到顶层的前向计算模块,然后是从顶层到底层的反向计算模块。数据控制器将训练数据分成不同的minibatch,并将它们加载到DRAM 中用于训练[12]。根据之前所述,绝大多数的FPGA 皆是对传统卷积算法进行实现。因为传统卷积算法共有六重循环,有着庞大的设计探索空间,并且FPGA 灵活可重配的特性进一步增大了设计的空间。

给定了某种卷积算法后, 如何将其合理地部署到FPGA 上也是学界讨论的重点, 各个维度的优化被人们不断提出。可以将其分为四类:设计空间探索, 数据通路优化,片上资源优化,硬件单元生成,设计空间探索。大多数设计空间探索的工作都是针对空间卷积算法,由于循环层数众多,因此存在广泛的探索空间。 探索过程的目标为最大化FPGA性能,而相应的限制为网络参数与FPGA资源限制. 大多数工作从计算资源与数据传输带宽两个角度入手建立模型[13];数据通路优化一般可分为片上数据传输和片外数据传输。文献[14]采用脉动阵列结构传输数据, 减少计算单元对片上缓存的访问, 可以使设计达到极高的频率;片上资源优化旨在提高FPGA 内各个资源的利用率。文献[15]指出各个算法对于资源的需要不相同, 因此采用异构算法可以提高FPGA 的资源利用率。硬件单元生成的工作在近几年出现的较多, 其目的是提高开发效率, 通过一些高层的描述就能自动生成高效的RTL 电路;近两年来, 随着FPGA 设计被不断完善, 基于空间卷积算法的FPGA 加速器设计更加侧重于自动化设计,顶层设计优化, IP化。 硬件单元生成旨在缩短开发周期, 可以达到快速部署深度学习到FPGA 的目标[16]

为了促进深度学习快速发展,现已有许多软件库与开源框架来帮助人们迅速、高效地执行深度学习网络,这些开源框架提供高级抽象的API 使人们能简便地运行深度学习网络;另一方面, 当前神经网络发展趋势倾向于更深, 拓扑结构更复杂,因此,神经网络稀疏化是将庞大的神经网络部署到FPGA上的有效手段。卷积神经网络的发展日新月异,各种加速技术也紧跟着发展,未来的速度会更快。

剩余内容已隐藏,您需要先支付 10元 才能查看该篇文章全部内容!立即支付

以上是毕业论文文献综述,课题毕业论文、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。