F-CNN:用FPGA框架训练卷积神经网络

原创内容,转载请注明:  [http://www.ssdfans.com]  谢谢!

作者 琥珀

 

自从2012年AlexNet赢得了当年ImageNet挑战赛之后,深度学习技术越来越多的被用于人工智能的各个领域。其中卷积神经网络(CNN)也在图片分类问题上大放异彩。不过由于卷积神经网络计算代价较大,现有的卷积神经网络模型大都是利用GPU进行运算加速。随着相关应用的普及,CNN模型在嵌入式系统上部署的需求越来越迫切,因此利用FPGA代替GPU进行CNN模型的加速计算成为了另一种深度学习模型的加速方案。

 

一个经典的CNN模型——LeNet5如图1所示。从图中可以看到,LeNet5含有2个卷积层、两个池化层和两个全连接层。

 


图1 LeNet5模型

 

为了方便分析我们将该结构的细节用表1列出。其中L1~L6表示该模型的第一层到第6层,和分别表示输入和输出feature map的个数,和分别表示该层输入和输出feature map的尺寸。每个卷积层中含有个卷积滤波器,每个滤波器的尺寸为并且卷积的步长为。每个池化层的池化的尺寸为。整个CNN模型的训练过程就是一个利用反向传播(BP)算法不断调整模型参数的过程,显然这是一个迭代的过程。

 

表1 LeNet5模型配置


 

可以看到,CNN的训练过程中的每次迭代中具有相似的计算模式,正是这种计算模式向我们展示了基于FPGA平台进行CNN训练加速的潜力。已有不少研究人员在进行这方面的研究。在这篇文章中我们将介绍其中一种经典方案:F-CNN。

 

通过分析卷积神经网络的模型结构可以得到,为了更好的设计基于FPGA的CNN的训练架构,首先要考虑以下几个方面:

1)模块化。最先进的FPGA上也无法单独完成整个CNN模型的训练过程,所以为了完成在FPGA上训练CNN,需要对不同的层进行模块化设计。

2)统一的数据路径。为了减少模块间耦合的消耗并提高整个架构的有效性,需要设计统一的数据流路径,便于最好的利用存储带宽。

3)运行时重配置性。为了适应整个CNN模型的训练过程,需要整个架构具有可重配置性。

 

考虑到上面3点后,一个经典的基于FPGA的CNN训练架构就可以设计成如图2所示。该架构是一个CPU/FPGA混合平台,其中CPU用做控制器,FPGA用来加速计算,同时FPGA卡上的DRAM用于存储每个计算模块的输入输出数据。在该架构中,模块控制器负责根据不同的层配置定制不同的计算模块,并且按照特定顺序将模块重新配置到FPGA上:在一个训练周期中先是从底层到顶层的前向计算模块,然后是从顶层到底层的反向计算模块。数据控制器将训练数据分成不同的minibatch,并将它们加载到DRAM中用于训练。同时对于multi-FPGA平台,数据控制器还要控制FPGA间的数据转换。运行控制器负责调用模块配置完成计算。在该架构中数据的读写地址作为参数传递,使得模块可以访问DRAM中的数据。除了数据之外,模块还需要相应的权重。由于与训练数据比起来权重的数据量要小的多,同时考虑到BP算法中需要相应的权重进行计算,因此在该架构中将权重和偏差存储在CPU中,并通过PCI-E将它和其他参数一起传输到FPGA。这种设计方式可以减少DRAM的I/O负载,充分利用PCI-E带宽,使模块设计独立于权重。最终CPU在从FPGA接收到偏导数后负责更新权重。

 


图2 基于FPGA的CNN训练架构

 

总结来说,对于一个给定的CNN模型,该架构首先将不同层模块化,利用数据控制器将训练数据划分为不同的minibatch。然后进行如下迭代训练过程:

1,将模块重新配置到FPGA中;

2,在DRAM中准备数据,这一步有三种情况:

a)对于第一个模块,将训练数据从CPU加载到DRAM中;

b)对于单个FPGA架构下的剩余模块,中间数据已经在DRAM中,无需数据间传输;

c)对于multi-FPGA架构下的剩余模块,中间数据将从一个FPGA传输到另一个;

3,调用模型进行计算;

4,回读结果并更新权重,然后判断是否结束,如果不结束,跳转到第一步继续执行。

 

整体架构设计清晰后,如何将CNN模型进行具体的模块化呢?

 

参数化模块的整体框架如图3所示。其中输入控制器包含一个地址生成器和一个调度器,地址生成器负责产生地址并且读取每个时钟周期的输入数据,调度器负责缓存输入数据并且将该数据送给计算单元。输出控制器包含一个用来将输入数据存储到DRAM中地址生成器,并且负责通过PCI-E将更新过的权重传送回CPU。

 


图3 参数化模块的整体框架

 

众所周知,CNN结构中最重要和最典型的结构就是卷积计算和池化计算,为了达到并行加速的目的,该架构中要设计适合在FPGA中计算的卷积核和池化核,因此在该架构中将卷积核和池化核分别设计为如图4和5所示。

 


图4 卷积核


图5 池化核

 

除了卷积层和池化层,卷积神经网络中还有一个重要的组成——全连接层。从数学角度来看,全连接层的计算就是矩阵相乘运算,算法1描绘了该架构中全连接层的计算方式。


 

为了验证模型的有效性,研究人员LeNet5部署到基于该架构上进行了实验。

 

实验结果如表2所示,在LeNet5模型结构上基于FPGA的架构比采用Caffe实现的CPU架构速度快了约4倍,同时稍微弱于使用Caffe的GPU架构的执行速度,但是该架构是使用Caffe的GPU架构的能源效率的7.5倍。从该架构的实验结果来看,FPGA进行CNN加速是一件非常有效的手段。

 

表2 LeNet5在F-CNN、CPU、GPU上每次迭代平均执行时间(S)


 

相信在嵌入式系统上部署CNN模型具有迫切需求的今天,利用FPGA等进行CNN模型的加速计算将越来越多地被应用。

 

参考文献

Zhao W, Fu H, Luk W, et al. F-CNN: An FPGA-based framework for training Convolutional Neural Networks[C] Application-specific Systems, Architectures and Processors (ASAP), 2016 IEEE 27th International Conference on. IEEE, 2016: 107-114.

分类目录 闪存.
扫一扫二维码或者微信搜索公众号ssdfans关注(添加朋友->点最下面的公众号->搜索ssdfans),可以经常看到SSD技术和产业的文章(SSD Fans只推送干货)。
ssdfans微信群介绍
技术讨论群 覆盖2000多位中国和世界华人圈SSD以及存储技术精英
固件、软件、测试群 固件、软件和测试技术讨论
异构计算群 讨论人工智能和GPU、FPGA、CPU异构计算
ASIC-FPGA群 芯片和FPGA硬件技术讨论群
闪存器件群 NAND、3D XPoint等固态存储介质技术讨论
企业级 企业级SSD、企业级存储
销售群 全国SSD供应商都在这里,砍砍价,会比某东便宜20%
工作求职群 存储行业换工作,发招聘,要关注各大公司招聘信息,赶快来
高管群 各大SSD相关存储公司高管和创始人、投资人

想加入这些群,请微信扫描下面二维码,或搜索nanoarchplus,加阿呆为微信好友,介绍你的昵称-单位-职务,注明群名,拉你进群。SSD业界需要什么帮助,也可以找阿呆聊。