- 文献综述(或调研报告):
- PYNQ平台介绍
FPGA是一种集成芯片,允许在现场进行门级硬件重配置。它包含大量的小型逻辑元件(或查找表),可以编程到各种各样的数字模块中,以满足不同的应用需求。传统的FPGA-CPU和FPGA-RAM接口要求设计人员掌握FPGA硬件实现方面的知识。这为潜在的软件设计人员尝试在其应用程序中使用FPGA加速器创造了障碍。这一障碍限制了FPGA开发人员社区的发展,导致FPGA应用程序的开发速度变慢。另一方面,FPGA加速器的主要对手GPU一直欢迎软件开发人员使用类似C语言的编程语言和框架(例如OpenCL[1]),从而形成一个非常成功的GPU开发人员社区和生产供应GPU应用程序链。
如今,FPGA行业已经将重点放在创建更加用户友好的开发框架上。最近,XilinxTM发布了PYNQ项目,这是一个创新的框架,嵌入式工程师可以在Python中实例化预合成的FPGA IP(或“Overlay”),而无需深入研究硬件级别。
该平台特别适用于实现嵌入式神经网络系统。PYNQ-Z2上的CPU核心内置Linux Ubuntu 16.04 LTS操作系统。这使得PYNQ能够完全在CPU上运行软件神经网络框架,如Theano,Tensorflow等。可并行化的Theano层将被分派到PYNQ预合成的“Overlays”中,并以标准的Theano语法进行实例化。因此,无需用户进行广泛的寄存器传输语言(RTL)设计,就可以在Theano上实现CNN的FPGA加速。此外,PYNQ-Z2上的Zynq FPGA具有53200个LUT,4.9MB(280个18KB块)的BRAM和220个DSP(18 x 25MACC)。这些片上资源足以让工程师实现大多数常见的CNN。
- 神经网络部署的替代平台
在嵌入式GPU板上实现神经网络系统的研究也很多。最受欢迎的平台之一是Nvidia的Jetson移动GPU板。Jetson是一个配备Nvidia GPU的嵌入式系统。许多开发人员一直试图在这个框架上部署神经网络,并取得了很好的性能。但是,Nvidia Jetson板比PYNQ-Z2板贵上许多。同时,PYNQ FPGA比GPU系统更节能,这对于电源有限的嵌入式应用至关重要[2,3]。下表比较了FPGA性能与嵌入式GPU,显示在场景标记任务中FPGA平台具有更高的功效和更低的硬件成本[4]。
Implementation |
Device |
Sustained Performance |
Performance per Power |
Cost |
fpgaConvNet |
Zynq-7000 XC7Z020 |
12.73 GOp/s |
7.27 GOp/s/W |
$65 |
Scene Labelling |
TK1 |
76.00GOp/s |
6.91GOp/s/W |
$196.14 |
- 现有的FPGA CNN框架及其高级接口
Venieris等人提出一个fpgaConvNet框架[4],从现有网络(如Caffe和Theano)读取CNN描述,并将CNN映射到特定的基于FPGA的平台。开发的框架首先在高级域特定方案中将CNN模型作为输入,然后通过操纵SDF CNN模型执行快速设计空间探索,并通过生成可合成的Vivado高级综合(HLS)硬件来完成设计。它们的设计实现了手动调谐设计的高达1.62倍的性能密度。然而,他们的设计更侧重于将CNN映射到FPGA平台的自动设计方法。在生成FPGA比特流之后,工程师仍然需要构建CPU-FPGA数据传输架构,这需要广泛的FPGA知识。
Nallatech公司所做的FPGA卷积神经网络提出了基于高级语言的框架,FPGA的CNN层结合在了Caffe框架中[5]。用户只需要更改Caffe XML网络描述文件中CNN层的描述,以定位FPGA中的卷积神经网络。这使软件设计人员能够继续开发他们熟悉的框架,从而缩短原型制作时间。我的框架将在PYNQ平台上使用类似的模型。
- FPGA片上的神经网络架构
国内外已经有许多研究人员尝试在FPGA上搭建神经网路模型,他们的基本架构总共可以分为三大类:
(1)单个处理引擎结构[6-8],通常采用收缩阵列的形式,按照顺序处理每一层。
(2)矢量处理器[9],其指令专用于加速卷积的基元运算。
(3)流式架构[4,10-12],由每个网络层一个处理引擎组成。
4.1 单个处理引擎结构(收缩阵列)
Zhang等人描述了一个单处理引擎风格的体系结构[6],将批量输入加载到片上存储器中,然后通过流水线操作和在FPGA上铺开的并行计算32位浮点卷积来实现单个处理引擎样式架构。这最大化了算法的并行性,但利用了大量的片上BRAM和DSP,使其不适合PYNQ板上的有限资源(4.9MB片上BRAM和220个DSP片)。Chen等人的Eyeriss[7]使用16位固定点而不是浮点,并结合了几种不同的数据重用策略。每个2D卷积被映射到跨多个处理引擎的1D卷积,允许每个处理元素的完全规则的访问模式。作者报告说,他们的数据重用比其他方法提供了2.5倍更高的能源效率。Andri等人的YodaNN[8]具有与Zhang等人类似的设计,但探索了固定尺寸窗口的二进制权重。
4.2 矢量处理器
Farabet等人描述了一种可编程ConvNet处理器(CNP)[9],它是一种RISC矢量处理器,具有针对CNN的特定宏指令,包括2D卷积,2D空间池,点积和元素非线性映射函数。作者还创建了一个工具,用于将高级网络描述编译成用于调用CNP的主机代码。
4.3 流式架构
Venieris提出了一种同步数据流(SDF)模型[4],用与在FPGA上搭建卷积神经网络。模型实现了手动调谐设计的高达1.62倍的性能密度。Alemdar等人在MNIST数据集上实现了完全连接的三元权重神经网络[10],并且每秒高达255K帧,但其工作专注于这些网络的训练方面。Di Carlo S.等人提出的另一种设计使用行缓冲区和窗口执行卷积[11]。这种设计最初用于2D卷积,但也可以通过一些微小的变化执行3D卷积。在每个时钟,缓冲器向下移动并且新的像素流入。窗口捕获缓冲器中的一些像素,并且窗口中的所有像素并行执行MAC。该模型非常适合AXI4流式I/O接口,使用最小内存带宽和最大数据吞吐量。Sharan Chetlur等人提出了一种设计,它使用CPU首先使用名为“im2col”的函数将卷积转换为矩阵乘法[12]。此设计最初是针对CPU和GPU架构提出的。矩阵乘法的FPGA加速已经得到了广泛的研究,可以很容易地实现高加速度。但是,输入数据流不仅仅是输入要素图,而是“im2col”函数的输出。这尤其成问题,因为在“im2col”之后特征地图的大小显着扩大,这实质上是内存展开过程。因此,这种设计会导致巨大的内存传输延迟。
单个处理引擎和矢量处理器的方式虽然旨在最大化FPGA架构的并行性,但它们使用浮点数会导致非常高的片上内存使用率。此外,具有单个处理引擎意味着需要不断地将特征映射传入和传出DDR存储器。特别是,功能映射的大小在CNN SDFG的中间显着扩展,这意味着预计DDR内存的数据传输延迟会更长。这两个问题都使它们不太适合嵌入式系统。Venieris提出的fpgaConvNet框架将CNN解释为流媒体应用程序,采用SDF计算模型作为其基础,其中滑动窗口单元(即im2col)和矩阵乘法都是使用流接口在芯片上处理的。该模型有效地消除了先前设计中过多的片外存储器转换开销。此外,流式接口意味着每层的输出特征映射不需要在片上存储器上进行缓冲,因此减少了存储器占用空间。流数据接口使FPGA能够以流水线的形式利用数据并行性。因此,该模型提出的SDF模型对本项目规范来说是最理想的。
- CNN量化
研究表明,CNN实际上对输入数据和权重中的噪声不敏感,CNN前向传播的精度不一定是32位浮点。固定点数表示足够准确,因为CNN前向传播对量化噪声非常稳健[13,14]。CNN模型可以在32位浮点中进行训练,以提高精度,然后在部署中进行量化,以实现加速和内存压缩。固定点表示可以显著降低片上存储器资源的使用和DSP的使用。除了使用恒定定点位宽外,研究还表明,CNN的动态量化可以最大限度地减少位宽使用,同时最大限度地提高精度。
XilinxTM FPGA还具有INT8 DSP硬件架构加速设计,在加速INT8中的MACC操作时优于其他FPGA[15]。但是在制作IP时,Vivado HLS无法利用此功能。它只能通过手动调节HDL来利用。在FPGA 2017大会上,XilinxTM发布了他们的二进制神经网络推理实现[3]。通过利用一组新的优化功能,可实现二值神经网络到硬件的高效映射,它们实现了完全连接,卷积和池化层,每层计算资源可根据用户提供的吞吐量要求进行定制。目前,该设计可以提供一些分类基准报告的最快分类率。利用二进制数据表示,FPGA设计需要最少的BRAM和DSP,从而实现高可扩展性。
在CNN的FPGA实现中,量化可以显著减少资源使用,确保更好的可扩展性和更多的并行性。本课题将比较不同的量化方案,并选择最佳的CNN部署设计。
参考文献:
[1] John E. Stone D G, Guochun Shi. OpenCL: A Parallel Programming Standard for Heterogeneous Computing Systems[J]. Computing in Science amp; Engineering, 2010, 12(3): 66-73.
[2] Qiu J, Song S, Yu W, et al. Going Deeper with Embedded FPGA Platform for Convolutional Neural Network[C]. Acm/sigda International Symposium on Field-programmable Gate Arrays, 2016.
[3] Umuroglu Y, Fraser N J, Gambardella G, et al. FINN: A Framework for Fast, Scalable Binarized Neural Network Inference[C]. Acm/sigda International Symposium on Field-programmable Gate Arrays, 2017.
[4] Venieris S I, Bouganis C S. fpgaConvNet: A Framework for Mapping Convolutional Neural Networks on FPGAs[C]. IEEE International Symposium on Field-programmable Custom Computing Machines, 2016.
[5] Nallatech. Fpga acceleration of convolutional neural networks[J], 2016.
[6] Zhang C, Li P, Sun G, et al. Optimizing fpgabased accelerator design for deep convolutional neural networks[C]. Acm/sigda International Symposium on Field-programmable Gate Arrays, 2015.
[7] Chen Y H, Emer J S, Sze V. Eyeriss: A Spatial Architecture for Energy-Efficient Dataflow for Convolutional Neural Networks[J]. IEEE Micro, 2016, PP(99): 1-1.
[8] Andri R, Cavigelli L, Rossi D, et al. YodaNN: An Ultra-Low Power Convolutional Neural Network Accelerator Based on Binary Weights[C]. Vlsi, 2016.
[9] Farabet C, Poulet C, Han J Y, et al. CNP: An FPGA-based processor for Convolutional Networks[C]. International Conference on Field Programmable Logic amp; Applications, 2009.
[10] Alemdar H, Leroy V, Prost-Boucle A, et al. Ternary neural networks for resource-efficient AI applications[C]. International Joint Conference on Neural Networks, 2017.
[11] Ovtcharov K, Ruwase O, Kim J-Y, et al. Accelerating deep convolutional neural networks using specialized hardware[J], 2015.
[12] Park J, Sung W. Fpga Based Implementation of Deep Neural Networks Using On-chip Memory Only[C]. IEEE International Conference on Acoustics, 2016.
[13] Rastegari M, Ordonez V, Redmon J, et al. XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks[C]. European Conference on Computer Vision, 2016.
[14] Russakovsky O, Deng J, Su H, et al. ImageNet Large Scale Visual Recognition Challenge[J]. International Journal of Computer Vision, 2015, 115(3): 211-252.
[15] Xilinx. Deep learning with int8 optimization on xilinx devices[J], 2016.
- 文献综述(或调研报告):
- PYNQ平台介绍
FPGA是一种集成芯片,允许在现场进行门级硬件重配置。它包含大量的小型逻辑元件(或查找表),可以编程到各种各样的数字模块中,以满足不同的应用需求。传统的FPGA-CPU和FPGA-RAM接口要求设计人员掌握FPGA硬件实现方面的知识。这为潜在的软件设计人员尝试在其应用程序中使用FPGA加速器创造了障碍。这一障碍限制了FPGA开发人员社区的发展,导致FPGA应用程序的开发速度变慢。另一方面,FPGA加速器的主要对手GPU一直欢迎软件开发人员使用类似C语言的编程语言和框架(例如OpenCL[1]),从而形成一个非常成功的GPU开发人员社区和生产供应GPU应用程序链。
如今,FPGA行业已经将重点放在创建更加用户友好的开发框架上。最近,XilinxTM发布了PYNQ项目,这是一个创新的框架,嵌入式工程师可以在Python中实例化预合成的FPGA IP(或“Overlay”),而无需深入研究硬件级别。
该平台特别适用于实现嵌入式神经网络系统。PYNQ-Z2上的CPU核心内置Linux Ubuntu 16.04 LTS操作系统。这使得PYNQ能够完全在CPU上运行软件神经网络框架,如Theano,Tensorflow等。可并行化的Theano层将被分派到PYNQ预合成的“Overlays”中,并以标准的Theano语法进行实例化。因此,无需用户进行广泛的寄存器传输语言(RTL)设计,就可以在Theano上实现CNN的FPGA加速。此外,PYNQ-Z2上的Zynq FPGA具有53200个LUT,4.9MB(280个18KB块)的BRAM和220个DSP(18 x 25MACC)。这些片上资源足以让工程师实现大多数常见的CNN。
- 神经网络部署的替代平台
在嵌入式GPU板上实现神经网络系统的研究也很多。最受欢迎的平台之一是Nvidia的Jetson移动GPU板。Jetson是一个配备Nvidia GPU的嵌入式系统。许多开发人员一直试图在这个框架上部署神经网络,并取得了很好的性能。但是,Nvidia Jetson板比PYNQ-Z2板贵上许多。同时,PYNQ FPGA比GPU系统更节能,这对于电源有限的嵌入式应用至关重要[2,3]。下表比较了FPGA性能与嵌入式GPU,显示在场景标记任务中FPGA平台具有更高的功效和更低的硬件成本[4]。
以上是毕业论文文献综述,课题毕业论文、任务书、外文翻译、程序设计、图纸设计等资料可联系客服协助查找。