欢迎访问一起赢论文辅导网
本站动态
联系我们
 
 
 
 
 
 
 
 
 
 
 
QQ:3949358033

工作时间:9:00-24:00
机械论文
当前位置:首页 > 机械论文
深度学习FPGA加速器的进展与趋势
来源:一起赢论文网     日期:2020-03-18     浏览数:1761     【 字体:

             2018 年  the  aspects  of  SoC  FPGA  and  standard  FPGA,  and  comparatively  analyzes  the  differences  of  the  data communication  between  CPU  and  FPGA  of  the  two  methods.  For  different  engineers  and  developers,  the development environments and tools of accelerating deep learning on FPGAs are  present in this paper from the aspects of high-level language ,such as C and OpenCL, and hardware description language, such as Verilog. It is not  hard  to  use  techniques  which  require  many  complex  low-level  hardware  control  operations  for  FPGA implementations  to  improve  performance  by  using  hardware  description.  But  that  always  requires  a  working knowledge of digital design and circuits. In contrary to hardware description language, using high-level language allows  engineers  and  developers  to  have  more  freedom  to  explore  algorithm  instead  of  designing  hardware architectures  and  it  is  suitable  for  researchers  who  need  to  quickly  iterate  through  design  cycles  and  software developers who have no knowledge of digital design. And on the basis of it, the FPGA-based accelerator for deep learning  algorithms  is  reviewed  from  the  hardware  architecture,  design  methods  and  optimization  strategy  in detail.  Three  typic  hardware  architectures  are  present  for  convolutional  neural  network,  and  hardware architectures of two typic models for recurrent neural network are introduced. Design methods are reviewed from the goal of accelerator, the way to build model of algorithms and how to find the best solution. As for optimization strategy,  it  is  present  from  the  processer  and  memory  communication,  which  are  critical  factors  for  improving performance  of  Accelerator.  Finally,  this  paper  prospects  the  research  on  FPGA-accelerated  deep  learning algorithms from the aspects of the development environments, process communications between CPU and FPGA , better compression model methods and cloud application with FPGA.  Key words  deep learning; neural network; CPU-FPGA; hardware accelerator; FPGA    1  引言 随着大数据时代的来临,人们在过去几年里创造的数据呈爆发式增长  [1]。面对如此海量的数据,相比于以前手工提取数据特征的方式,学者更加倾向于采用可以有效避免手工提取繁杂性和提高特征完备性的深度学习技术。目前,深度学习技术已在众多领域中发挥了重要作用,如图像识别[2-5]、语音识别[6-8]、自动翻译[9, 10]及智能管理[11]。但这其中很多应用场景对硬件设备的性能、功耗等都有严格的要求,所以,越来越多的研究机构对深度学习硬件加速器进行了广泛且深入的研究。本文在对比分析三种主流的深度学习硬件加速器解决方案的优缺点基础上,详细综述了采用 FPGA 加速深度学习的硬件结构、设计思路和优化策略,并展望了 FPGA 加速深度学习算法的未来前景。 1.1  深度学习算法模型简介 数据特征[12]的自动提取是通过特征学习实现的。特征学习是能让机器根据输入的原始数据自动发现分类或者检测所需要的特征的一系列方法。深度学习[12]就是一种拥有多重表现层的特征学习的方法,它利用一些简单的但是非线性的模型,将原始数据逐步转换成为更高层次的,更抽象的表达。目前,被广泛使用的深度学习基础模型有 2 种:一种是卷积神经网络;另一种是递归神经网络[13]。本文以这 2 种神经网络为例,对深度学习算法进行说明。 卷积神经网络是一个多层神经网络,而且大部分卷积神经网络“深度”较深,即有很多层。其中有 3 个主要的层:卷积层,池化层和全连接层。 1)卷积层:该层主要是利用卷积核,通过卷积计算将输入数据转换为输出数据。以图片的卷积处理为例,其中输入数据为原始图片或者特征图,输出数据为特征图,体现了图片某个方面的特征,卷积核是指特征图计算时图片共享的权值矩阵,其规模较小,一般为 5´53´3 1´1 等。特征图中每个像素是将原始图片中与卷积核同样大小的区域与卷积核进行对应点的乘法,然后对所有乘积进行加法生成的,而特征图是通过滑动卷积核,将卷积核与原始图片中不同区域不断进行卷积操作生成的,其中滑动距离的大小记为步长。图 1 展示了一个简单的 2 维卷积操作。由于原始图片以及特征图规模较大,且在进行卷积操作时一般涉及多个卷积核,因此,卷积层涉及到计算机学报—————— 本课题得到国家重点研发计划(2016YFB1000402);黑龙江省自然科学基金(F2018008).哈尔滨市杰出青年人才基金(2017RAYXJ016).  吴艳霞,女,1979年生,博士,副教授,计算机学会(CCF)会员,主要研究领域为计算机体系结构、编译技术.E-mail: wuyanxia@hrbeu.edu.cn.  梁楷,男,1993 年生,硕士,主要研究领域为计算机体系结构、可重构计算.E-mail:  liangkai@ict.ac.cn.  刘颖,女,1982 年生,博士,助理研究员,主要研究领域为异构并行编程,编译系统及相关工具.E-mail: liuying2007@ict.ac.cn.  崔慧敏(通讯作者),女,1979 年生,博士,副研究员,主要研究领域为并行计算,并行编译,并行编程.E-mail: cuihm@ict.ac.cn.   深度学习 FPGA 加速器的进展与趋势 吴艳霞1)   梁楷1,2)   刘颖2)   崔慧敏2) 1)(哈尔滨工程大学  计算机科学与技术学院,  哈尔滨  150001) 2)(中国科学院计算技术研究所  计算机体系结构国家重点实验,  北京  100190)   摘   要  随着大数据时代的来临,深度学习技术在从海量数据中提取有价值信息方面发挥着重要作用,已被广泛应用于计算机视觉、语音识别及自然语言处理等领域。本文从深度学习算法的特点和发展趋势出发,分析 FPGA 加速深度学习的优势以及技术挑战;其次,从 SoC FPGA 和标准 FPGA 两个方面介绍了 CPU-FPGA 平台,主要对比分析了两种模型在 CPU FPGA 之间数据交互上的区别;接下来,在介绍 FPGA 加速深度学习算法的开发环境基础上,重点从硬件结构、设计思路和优化策略这三个方面详细综述了采用 FPGA 加速卷积神经网络的设计方案;最后展望了 FPGA 加速深度学习算法相关研究工作的发展。  关键词  深度学习;神经网络;CPU-FPGA;硬件加速;FPGA 中图法分类号:TP302        The Progress and Trends of FPGA-based Accelerators in Deep Learning WU Yan-Xia1)   LIANG Kai1,2)   LIU Ying2)   CUI Hui-Min2)   1)(College of Computer Science and Technology, Harbin Engineering University, Harbin 150001) 2)(State Key Laboratory of Computer Architecture, Institute of Computing Technology, Chinese Academy of Sciences, Beijing 100190)  Abstract   With  the  coming  of  big  data  era,  the  technology  of  deep  learning  plays  a  critical  role  in  extracting meaningful  information  from  the  massive  data.  Also,  it  has  been  widely  applied  in  some  domains,  such  as computer  vision,  speech  recognition  and  natural  language  processing.  As  far  as  we  all  know,  deep  Learning algorithms have a large number of parameters and relevant matrix multiplication or multiply-and-add operations with the simple computing model. At the same time, researches and industries need higher and higher accuracy, the complex models which have more and more weights won the image classification and object detection contest. To speed up the inference and training of deep learning becomes much more important. This paper mainly reviews one  of  the  approaches,  accelerating  deep  learning  on  FPGAs.  Firstly,  paper  introduces  the  deep  learning algorithms and relative characteristics especially the convolutional neural network and recurrent neural network and why the FPGA approach can fit this problem, what people can be benefit compared with CPU only or GPU and what people should do to enable it. After that, this paper analyzes the challenges of accelerating deep learning on  FPGAs.  Additionally,  the  CPU-FPGA  is  the  most  welcome  architecture  at  present,  but  therere  different methods  to  set  up  an  usable  platform.  And  for  CPU-FPGA  platforms,data  communication  is  one  of  important factors for affecting the performance of acceleration. Based on these, this paper introduces different methods from 计算机学报 计  算  机  学  报   2018 年  计算量也极速增加,模型大小从 240MB 增加到了500MB,计算量从 7.2 亿操作提升到了 196 亿,而模型规模的增大和计算量的大幅度提升意味着对硬件计算能力、内存带宽及数据存储的要求也更加苛刻。为了减少模型规模及让网络模型对硬件更加友好等,学者转向设计更加高效的深度神经网络,如 2014 年的 GoogleNet 利用提出的Inception 模块等在有效提高神经网络模型层数的同时降低了模型规模的大小,最终模型规模仅为AlexNet 的十分之一;2015 年的 ResNet 利用“shortcut  connection”来跳过某些层,让更多的层能共享权值,使得该模型在网络模型深度上是VGG-19 模型的 8 倍,但在规模上仅为 VGG-19模型的一半左右。 表 1   四个经典神经网络模型的相关信息 网络模型 Top-5 Error % 层数 模型大小 (MB) 乘加计算或操作(亿) AlexNet(ILSVRC12) 15.3  8  240  7.2 VGG(ILSVRC14) 7.3  19  500  196 GoogLeNet(ILSVRC14) 6.7  22  24  15.5 ResNet(ILSVRC15) 3.57  152  240  113 2)通过减小数据精度来提高神经网络模型的效率。深度神经网络模型中的数据在默认情况下通常为 32 位或者 64 位浮点数,但文献[15, 16]提出,在不损失准确率或者准确率损失较小的情况下,用位数较低的数据如 4-8 位的数据代替全精度浮点数是可行的。相比于浮点数,使用位数相对较少的数据类型能够有效减少访存的开销及提高计算的吞吐率等。在深度神经网络中使用比32 位单精度浮点数更加紧凑的数据类型正成为一个新的趋势。在使用紧凑数据类型的深度神经网络模型中,典型的有二值神经网络(Binarized Neural Networks,简称 BNNs)和三元神经网络[17, 18]Ternary Neural Networks,简称 TNNs),其中,文献[19-21]对于二值神经网络中的数据使用的是1 位数据类型,数据值限制为+1 或者-1。该网络模型的分类准确率在小数据集中得到了验证[14];三元神经网络主要是将模型权值限制为 0+1-1这三个值。最近的文献[18]表明,TNNs 分类准确率已经非常接近全精度的 ResNet-152 的分类准确率。 3)利用稀疏性来提高神经网络模型的效率。在深度神经网络模型中,神经元值或者权值为 0的计算是没有意义的,其不会影响模型最终的计算结果,因此,人们可以通过去掉网络模型中神经元值或权值为 0 的计算来减少模型的计算量,进而提升神经网络模型的效率。对于网络模型中神经元值为 0 的情况,近几年大部分神经网络模型的激活函数均为 ReLU(Rectified  Linear  Unit)函数,该函数会将值为负数的输出神经元赋值为 0,这意味着这些网络模型中存在着一定数量的 0 值神经元,根据文献[22]提供的数据,在目前流行的神经网络模型中,有 50%左右的神经元的值为 0。对于网络模型中权值为 0 的情况,文献[15]表明在不损失分类准确率或者准确率损失较小的情况下,将网络模型中一些不重要的权值赋值为 0 是可行的,并且该文献指出,对于 AlexNet VGG-16 中的某些层,在不损失分类准确率的情况下,可赋值为 0 的权值占比高达 90%多。除此之外,还有一些神经网络因为本身的特性包含了大量的 0 值,如二值神经网络模型和三元神经网络模型。 除了上述三种主要的趋势外,人们还会通过对深度神经网络模型进行数学变换来提高神经网络模型的执行效率,如将卷积操作、全连接操作转化为目前性能较为优异的矩阵乘法,快速傅里叶变换等;以及对深度学习算法进行深度压缩,通过减少模型数据量、计算量的方式来提高整体的执行效率等。 2  深度学习算法的硬件加速 深度学习算法是以数据处理为核心,其包含大量的计算操作,如 GoogleNet 网络模型包含 15.5亿浮点操作,ResNet-152 网络模型包含了 113 亿浮点操作等。这对 CPU 来说并不友好,从硬件结构上看,CPU 中大部分晶体管都是用于构建高速缓冲存储器以及控制单元等,而负责逻辑运算的部分并不丰富。同时,在深度学习的应用领域中,有很多应用场景对性能、功耗等有一定的要求,通常需要一个高性能或者高能效的解决方案。而传统的 CPU 很难满足这些要求,因此,人们在应用深度学习技术时,通常会利用其它硬件对其进行加速。目前,主流的硬件加速器有三类:GPUs(Graphics  Processing  Units) ASICs (Application-Specific  Integrated  Circuits) , 计算机学报 吴艳霞等:深度学习 FPGA 加速器的进展与趋势  5  FPGAs(Field-Programmable Gate Array)2.1  GPU加速的特点  与传统 CPU 结构不同,GPU 的内部结构中包含了大量的逻辑计算单元,其规模远远超过结构中控制单元和寄存器等存储单元的规模,GPU 架构示意图如图 4 所示。这种结构意味着 GPU 拥有较多的计算核心,在对数据进行算术运算或者逻辑运算方面有着很大的优势。 除了拥有较多的计算核心外,GPU 的另一个优势是它的内存结构。首先,在 GPU 的架构中有一些存储单元,如寄存器等是供一些算术逻辑单元共享的,即 GPU 线程之间的通讯可以这些共享的内存而不依赖全局内存,其中计算单元与共享内存之间的数据传输速度比与全局内存之间的要快。其次,GPU 拥有相对高速且内存带宽相对较大的全局内存,如 GDDR5。虽然传统的 CPU 架构中有高速缓冲存储器的存在,但是其容量较小,无法存储深度学习算法模型所需的数据,需要存储在内存中,然而由于架构的原因,CPU 的内存带宽并不如 GPU 的。因此,GPU 更适合数据吞吐量相对较大的算法,如深度神经网络模型的训练阶段。   算术逻辑单元算术逻辑单元算术逻辑单元  算术逻辑单元算术逻辑单元算术逻辑单元  算术逻辑单元算术逻辑单元算术逻辑单元算术逻辑单元算术逻辑单元算术逻辑单元          控制单元存储单元控制单元存储单元 DDR存储器 图 4   GPU 架构示意图 目前,一些深度学习框架,如 CaffeTheano以及 TensorFlow 等能较好地应用于 GPU 上。并且 NVIDIA 公司也为 GPU 提供了较好的深度学习开发环境,如深度学习加速库 cuDNN 等,这不仅提高了 GPU 加速的性能,还很大程度上降低了编程的难度。 2.2  ASIC加速的特点 与通过调整深度学习算法来适应 CPU 或者GPU 硬件结构进而实现加速的方式不同,利用ASIC 加速深度学习算法的主要方式通过定制专用的硬件加速算法,如针对卷积神经网络算法的加速设计[23-30]。由于 ASIC 是针对某一个或者某一类算法进行硬件定制,所以利用 ASIC 加速深度学习算法通常能取得较高的性能,并且功耗较低。但是这种加速方式也有一些要求和限制:ASIC 加速器的硬件设计与开发周期较长,成本较高,硬件生成后通常无法改变,灵活性不高。 2.3  FPGA加速的特点 与 GPU ASIC 固定的硬件结构不同,FPGA具有可编程性,即开发者可以根据自己的需要通过可编程的连接将 FPGA 内部的逻辑块连接起来,实现相应的功能。因此,FPGA 硬件加速器的设计也需要开发人员有一定的硬件专业知识,这对软件开发人员来说门槛较高。不过,近几年,一些公司及研究机构不断丰富 FPGA 开发环境,目前已经允许开发人员利用高级编程语言如 CC++或者 OpenCL FPGA 进行开发,在很大程度上降低了 FPGA 开发的难度,缩短了 FPGA 开发周期,为研究者和开发者提供了便利。 2.4  FPGA加速与GPUASIC加速的对比 2.4.1  FPGA 加速与 GPU 加速的对比 1FPGA 的加速设计是硬件结构适应算法,而 GPU 加速设计是算法适应硬件结构。由于 GPU硬件结构是固定的,在加速设计时通常需要调整深度学习算法来适应 GPU 的硬件结构、执行模型等,只有这样才能获取优异的加速性能。由于FPGA 具有可重构性和可编程性,因此,在加速设计时通常是根据算法设计硬件结构,这种加速设计方式可以更快速地去加速快速发展的深度学习算法。 2FPGA 通常有较好的能效比。为了实现可重构性,FPGA 内部有很多基于查找表的基本单元,这些基本单元的计算能力在一般情况下并不如 CPU GPU 中的算术逻辑单元,同时,FPGA片上 DSP 资源通常是有限,其中 DSP 资源主要用于浮点计算,而 GPU 内部有大量的浮点计算单元,因此,FPGA 在浮点计算能力上并不如 GPU。但是随着 FPGA 技术的快速发展,FPGA 的浮点计算能力也在快速的提升,文献[14]指出 Intel Stratix  10 32 位浮点计算吞吐量预计能达到9.2TFLOP/s,已经接近最新 Titan X Pascal GPU 所提供的峰值 32 位浮点计算吞吐量:11TFLOP/s。 同时,与 GPU 相比,其功耗通常要比 GPU低。综合计算和功耗这两个方面,FPGA 通常有更加出色的能源效率[31,  32],即在通常情况下,FPGA 能在单位功耗下获取更高的性能。如 Griffin Lacey 等人在文献[33]中指出,对于卷积神经网络(CNN)的推理阶段,微软团队利用 FPGAStratix 计算机学报 吴艳霞等:深度学习 FPGA 加速器的进展与趋势  3  了大量的卷积操作,即乘加计算,这使得该层对计算能力的要求较高。并且,特征图中的每个像素点之间以及不同的特征图之间都是独立的,即不同特征图以及特征图中不同像素点的计算都是可并行的,因此卷积层中的计算通常是可并行的。 3 64 722241 47 81324卷积运算1 00 110 136 86 5995×1×1×0×0卷积核 图 1   卷积操作示例 2)池化层:该层主要作用是将特征图分为多个区域,然后通过对各个区域求像素平均值或者最大值等来减小特征图的尺寸。图 2 简单展示了这一过程。 7484最大值池化平均值池化52.552.5区域大小:2*2 步长:21748132434672224 2   池化层示例 3)全连接层:全连接层主要是将卷积层等提取的特征表示映射到对应的样本空间。由于这些特征表示规模一般较大,并且全连接层中基本每个输出数据的计算都与所有的输入数据相关。因此在计算时,涉及到的数据规模较大。图 3 简单展示了全连接层。  图 3   全连接层示例 卷积神经网络有两个阶段:训练阶段和推理阶段。下面以图片识别为例对这两个阶段进行说明。 在训练阶段,大量已分好类的图片数据作为输入数据输入到卷积神经网络中,此时卷积神经网络模型的参数,如卷积核的权值均为初始值;然后卷积神经网络会逐层处理数据,即下层的输入数据是上层的输出数据,直到输出图片的分类结果;接着根据分类结果和实际图片分类结果的差别进行反向逐层调整模型的参数;重复训练该神经网络,直到训练出合适的模型参数。无论是正向处理数据的过程还是反向调整模型参数的过程,卷积神经网络层与层之间的数据都是相互依赖的,一般下一层数据处理的开始需要等到上层数据处理的结束。 推理阶段是在训练阶段后,利用额外的图片数据测试该卷积神经网络的图片分类能力。其过程主要是卷积神经网络逐层处理数据直到得出图片分类结果的过程,层与层之间同样存在数据依赖。 递归神经网络与卷积神经网络类似,也是一个多层的神经网络,同样有训练和推理阶段,数据的处理也是逐层进行,并且数据的计算主要是乘加计算。递归神经网络与卷积神经网络最大的区别是在递归神经网络中含有循环的连接,如神经网络中隐藏层神经元之间循环连接,这使得在计算输出数据时不仅要考虑当前的输入数据,还需要考虑先前历史输入数据对该输出数据的影响。 综上所述,深度学习对应的神经网络模型一般包含两个阶段:训练阶段和推理阶段,相比于推理阶段,训练阶段包含更多的数据处理,以及反向调整模型参数的过程。这些神经网络模型无论是正向处理数据还是反向调整参数都是逐层进行的,因此,神经网络层与层之间存在数据的依赖,通常很难将这些层作为独立的个体进行并行的处理。神经网络模型主要的层有三个:卷积层、池化层和全连接层。其中卷积层中包含大量可并行的乘加计算,对计算能力要求较高,全连接层涉及的数据较多,通常需要频繁地进行数据交互。 1.2  深度学习算法模型的发展趋势 Eriko  Nurvitadhi 等人在其文献[14]中对深度神经网路的发展趋势进行了总结,其中主要的发展趋势有三个: 1)虽然更深的网络结构能提高分类的准确率,但是这些规模较大的模型正变得难以处理。表 1 展示了近几年在 ImageNet 挑战赛中获取冠军的四个经典神经网络模型的相关信息。根据表 1可以看出,从 2012 年到 2015 年,Top-5 的错误率从 15.3%降低到了 3.57%,神经网络模型的层数也从 8 层增加到了 152 层。在 2012 年到 2014 年期间,随着神经网络模型层数的增加,模型参数和输入数据    输出数据权值计算机学报 计  算  机  学  报   2018 年  V D5)实现了高性能的加速,其加速性能为每秒处理 134 张图片,功耗仅为 25 瓦,并且如果使用更高端的 FPGAArria 10 GX1150),这个加速性能预计能达到每秒处理 233 张图片,而功耗基本不变;而对于高性能的 GPU 实现(Caffe+cuDNN),其加速性能为每秒处理 500-824 张图片,功耗为235 瓦。这意味着 FPGA 的能源效率能达到 GPU2-3 倍。这对于某些深度学习应用,如超大型数据中心,资源有限的嵌入式应用来说尤为重要。目前,一些国内外知名公司,如亚马逊,微软,腾讯,阿里巴巴等,也逐步尝试将 FPGA 部署到数据中心中。 3GPU 更适合深度学习算法的训练阶段,FPGA 更适合深度学习算法的推理阶段。在深度学习算法的训练领域,其使用的多为单指令多数据流的计算。以 AlexNet 模型的训练阶段为例,在训练时通常一次输入多张图片,然后以相同的操作统一处理这些图片。这与 GPU 的架构非常契合,能充分发挥 GPU 高带宽、计算能力强的特点。而对于推理阶段,这部分的计算通常为单数据多指令流的特点。以 AlexNet 模型的推理阶段为例,在推理时输入一张图片,然后通过计算对图片进行分类。由于数据量的限制,在推理阶段 GPU 并不能充分发挥高带宽,多计算核心的特点。同时,在未来很多深度学习技术都用于分类、推断,特别是在移动终端上,这要求硬件加速器有低功耗、高性能、低延时等的特性,相比于 GPUFPGA拥有较高的能效比,因此,FPGA 更适合加速深度学习算法的推理阶段。 4FPGA 更适合新兴的深度神经网络。文献[14]提出了深度神经网络的趋势,其中包括了利用稀疏性和减小数据精度,其中稀疏性意味着神经网络中可并行的计算并不会像原有的那样整齐有规律,这对以算术逻辑单元为主而控制器相对简单的 GPU 来说并不友好,该文献对 GPU 计算稠密矩阵乘法和以跳过 0 值的方式计算稀疏矩阵乘法的性能进行了测试,实验结果表明,GPU 计算稀疏矩阵乘法的性能要低于计算稠密矩阵乘法的性能;对于减小数据精度,GPU 目前只能较好的支持 32 位浮点型和 8 位整型数据,并不能较好的支持自定义位数的数据类型。而无规律的并行计算和自定义位数的数据类型对 FPGA 来说并不是问题,有的甚至更适合 FPGA,如在 FPGA 上实现二值神经网络时可以用位运算代替原本的乘加计算。该文献对 FPGA GPU 实现新趋势下的深度神经网络的性能进行了测试,实验结果表明,FPGAStratix 10)在稀疏深度神经网络、数据类型为 6 位整型的深度神经网络以及二值深度神经网络的矩阵乘法操作中的性能(TOP/sec)比 GPUTitan X Pascal)提升了 10%50%5.4 倍,在三元 ResNet 网络模型中的能效比 GPU 要高 2.3倍。 2.4.2  FPGA 加速与 ASIC 加速的对比 1ASIC 加速在性能上通常优于 FPGA。与具有可重构性的 FPGA 不同,ASIC 是针对特定算法的专用电路,其硬件结构生成后便无法更改。由于 ASIC 在设计时不需要像 FPGA 那样考虑通用性及可重构性等,ASIC 无论在性能上还是在功耗上通常都会优于 FPGA,以近年来一些经典的应用于深度学习领域的 ASIC 设计为例:IBM 公司设计的 TrueNorth 芯片在加速典型复杂的递归神经网络时,功耗只有 65 毫瓦,对应的计算功耗是每瓦 460 亿次神经突触操作[34];寒武纪系列芯片中 DianNao 的平均性能与当时主流的 GPGPU相当,但功耗和面积仅为主流 GPGPU 的百分之一量级[35]DaDianNao 单芯片性能超过了当时主流 GPU 21 倍,而能耗仅为当时主流 GPU 1/330[36]Google 公 司 研 发 的 TPU Tensor Processing Unit)在神经网络应用中平均比当前的GPUNvidia  K80  GPU)或 CPUIntel  Haswell CPU)快 15-30 倍,能效比(TOPS/Watt)高出约30-80 倍,此外,如果在 TPU 中采用 GPU 常用的GDDR5 存储器能使性能 TPOS 指标再高 3 倍,并将能效比指标 TOPS/Watt 提高到 GPU 70 倍,CPU 200 [37]。而 FPGA 的功耗通常为瓦这个量级,并且在加速深度学习方面,FPGA 的能效比通常为同代 GPU 2-3 倍。 2FPGA 加速具有更好的灵活性、更低的开发门槛以及更少的开发周期。虽然 ASIC 在性能和功耗上优于 FPGA,但是其在设计和制造时要经过很多的验证和物理设计,导致开发周期较长,并且,ASIC 的设计通常需要开发人员有硬件专业知识,开发门槛高。同时,ASIC 是针对某一类应用而设计的专用硬件且硬件结构在生成后无法改变,然而深度学习算法正处于快速发展的阶段,对于一些使用广泛但算法并不成熟的应用场景,想要设计一个高性能的通用 ASIC 来适应所有应用场景非常困难。FPGA 更适合加速目前处于快计算机学报 吴艳霞等:深度学习 FPGA 加速器的进展与趋势  9  而不需要考虑后续 FPGA 硬件结构映射的工作,这样在一定程度上降低了 FPGA 的开发门槛。但是,采用这些工具对 FPGA 进行开发也面临着一些问题:这些工具支持的开发板通常是有限的,开发人员并不能任意的选择板卡;对于大多数开发人员来说,采用这些工具实现高性能的 FPGA硬件结构并不是件容易的事情,通常需要不断地调整和修改高级语言的程序。 同时,不同的开发工具及开发板,在性能,资源使用等方面也是不一样的。R.  Tapiador 等人在文献[39]中对利用 Xilinx Altera 提供的基于OpenCL 的开发工具及开发板加速卷积神经网络进行了研究,该研究结果表明,Xilinx 公司的工具能实现更快地综合,有更高的资源利用率等,而 Altera 公司的开发社区更加成熟,程序的执行时间更短。 2)采用底层硬件设计方式。虽然 SDAccel等开发工具提供了方便的 OpenCL 开发环境,但是这些工具支持的板卡是有限的,并且工具将OpenCL 程序转换为 FPGA 可部署字节流文件的过程是封闭的,即开发人员很难将其它性能更优的特定硬件模块加入到工程中。因此,也有部分学者选择利用硬件描述语言和 IP 核来编写底层硬件结构。Xilinx Altera 等公司也为其提供了相应的开发环境,如 Xilinx 公司的 Vivado 工具、Vivado HLS 工具,以及相应的 IP 核,如 PCIe 对应的 IP 核,内存管理对应的 IP 核。其中 Vivado工具的编程语言为硬件描述语言,其主要功能为对编写的程序进行综合、仿真、布局布线以及生成 FPGA 所需的字节流文件,虽然 Vivado HLS 也是高层次综合工具,但是其主要功能只是将C/C++程序转换为 IP 核,接下来仍需要对硬件整体的结构进行设计,并不能像 SDAccel 工具那样提供完整的系统设计,因此,这种方式能按照需要灵活地设计硬件结构,但是需要相关的硬件专业知识。 目前,一些公司将 FPGA 和云计算进行了结合,在云端提供了统一的硬件平台和中间件,让用户在云端使用 FPGA 成为可能,如亚马逊公司提供的 FPGA 加速云服务、华为公司提供的 FPGA加速云服务器等。这些 FPGA 云服务在很大程度上降低了 FPGA 加速器的开发和部署成本,也使开发人员能够快速、便捷地使用 FPGA 进行开发。但由于 FPGA 加速云服务处于刚起步的阶段,很多地方还需要进一步的完善。 在加速深度学习算法方面,FPGA 供应商也在不断完善 FPGA 加速深度学习算法的开发环境,为开发者提供了算法相关的框架和库,如Xilinx 公司已面向终端和云端提供了框架 Caffe mxnet。这在一定程度上为开发人员开发深度学习相关应用提供了便利。 3.3  卷积神经网络的FPGA加速设计 由于卷积神经网络推理阶段的计算特点为单数据多指令流,且在实际应用中通常有低功耗、高性能、低延迟等的要求,因此比较适合 FPGA。利用 FPGA 加速卷积神经网络的性能瓶颈主要体现在两个方面:计算和数据传输。因此,在进行FPGA 加速设计时,通常采用转换模型算法和优化硬件结构的方式,通过充分发挥卷积神经网络中的并行计算能力来提升计算效率;采用减少数据量、减少访存次数等方式来减少数据传输带来的开销。 基于此,本小节将从 FPGA 加速卷积神经网络推理阶段的硬件结构、设计思路以及优化策略这三个方面对 FPGA 的加速设计进行阐述。 3.3.1  FPGA 加速卷积神经网络的硬件结构 本小节将根据本文第 1.2 小节说明的深度神经网络的发展趋势,总结 FPGA 加速卷积神经网络推理阶段的硬件结构。 1)卷积神经网络对应的基础硬件结构。这里的基础硬件结构指的是在对深度神经网络算法模型未进行减小数据精度、剪枝等优化的情况下的FPGA 加速硬件结构。文献[40]针对计算吞吐和内存带宽不匹配的问题对卷积神经网络的卷积层设计了相应的 FPGA 硬件加速结构,具体结构如图9 所示,FPGA 硬件结构主要有两个部分:计算部分和数据传输部分。 计算机学报 吴艳霞等:深度学习 FPGA 加速器的进展与趋势  7  速发展阶段的深度学习算法。 综上所述,由于 FPGA 在加速深度学习方面与 GPU ASIC 相比有着自己独特的优势,利用FPGA 加速深度学习算法备受学者关注。 3  FPGA 加速深度学习算法 目前,利用 FPGA 加速深度学习同样面临着一些问题和挑战: 1)有限的 FPGA 资源如何满足神经网络的计算和数据需求。随着深度学习算法和数据的规模不断增大,开发人员已经很难将深度学习算法和数据完全地映射到 FPGA 片上资源上。而且,不同的 FPGA 设计,最终的加速性能以及 FPGA片上资源的使用会千差万别。因此,对于每一个FPGA 开发人员来说,如何更高效地利用有限的FPGA 片上资源,避免资源的浪费以及如何利用更少的资源获取更高的性能是一个巨大的挑战。 2)硬件知识不足的编程人员如何能自如地设计和开发出高效的硬件加速器。众所周知,高效率、高性能的硬件加速器的设计需要一定的专业硬件知识,这对大多数编程人员来说要求较高。目前,虽然有很多高层次综合工具为 FPGA 提供了高级语言编程环境,允许编程人员在不具备硬件知识的情况下利用高级语言进行开发,但是想要使用这些工具生成一个高性能的硬件结构并不是一件容易的事情,通常需要编程人员不断地调整和优化代码才有可能达到预期的性能。如何降低 FPGA 加速设计的门槛,让不具备硬件知识的编程人员能自如快速地开发出高效、高性能的硬件加速器是一个需要重点关注的问题。 基于这些问题和挑战,本小节首先简介常用于加速深度学习的 CPU-FPGA 平台,随后说明FPGA 加速深度学习的开发环境,最后详细地阐述了对卷积神经网络和递归神经网络的 FPGA 加速设计方法。 3.1  CPU-FPGA平台 在 加 速 深 度 学 习 算 法 时 通 常 会 采 用CPU-FPGA 平台,即 FPGA 主要负责对计算能力要求较高的并行计算部分,如加速卷积神经网络中的卷积操作等,CPU 则负责系统的剩余工作,通过两者的协同工作,实现对深度学习算法的加速。从 CPU FPGA 耦合程度的角度分析,常用的 CPU-FPGA 平台有两种:SoCSystem on ChipFPGA 和标准 FPGA3.1.1  SoC FPGA SoC FPGA CPU FPGA 是紧耦合的,即 CPU FPGA 是封装在一个芯片中,通过总线连接,其中 CPU 通常分为两种:硬核和软核。目前FPGA供应商如XilinxAltera提供的最新SoC开发板使用的 CPU 通常为 ARM 硬核。SoC FPGA架构如图 5 所示,此架构的主要特点是集成度高、功耗低及通信带宽较高,通常用于嵌入式应用中。 高速缓冲存储器片上内存处理器CPU相关部分FPGA逻辑总线SoC FPGA 5   SoC FPGA 架构图 对于利用 CPU-FPGA 平台加速深度学习算法,CPU FPGA 之间的数据交互效率是影响加速性能的关键因素之一。因此,本文以 Altera 公司的 Arria  10  SoC 为例对 SoC  FPGA CPU FPGA 之间的数据交互进行说明。图 6 展示了 Arria 10 SoC 中硬处理器系统内部及与 FPGA 逻辑之间的峰值带宽。从图中可以看出 FPGA 逻辑和微处理器之间通讯的峰值带宽为 3.2Gbps,并且 FPGA可以通过 F2H 桥接器连接高速缓冲存储器、片上内存等,进而实现较小数据量的数据快速交互。同时,微处理器和 FPGA 逻辑共享一个 SDRAMSynchronous Dynamic Random Access Memory,简称 SDRAM),并通过 L3  SDRAM 互联实现与SDRAM 的数据快速交互,两者带宽峰值分别能达到 4.8Gbps 4Gbps,而 L3  SDRAM 互联和SDRAM 控制器之间的峰值带宽高达 17Gbps。 计算机学报 计  算  机  学  报   2018 年   图 6   Arria 10 SoC CPU FPGA 之间的峰值带宽 3.1.2  标准 FPGA So C FPGA 不同,标准 FPGA CPU 是松耦合结构,即 FPGA CPU 不在一个芯片中,两者 一 般 通 过 PCIe peripheral  component interconnect express)接口等进行连接。由于标准FPGA 的芯片中未嵌入微处理器,因此在同等芯片面积的情况下,标准 FPGA 相比于 SoC  FPGA中的 FPGA 逻辑部分拥有更丰富的硬件资源,能实现更为复杂的应用。 对于标准 FPGA CPU FPGA 之间的数据交互,目前常用的方式有两种:基于 PCIe 总线的数据交互和基于 QPI(Quick Path Interconnect)总线的数据交互。 1)基于 PCIe 总线的数据交互。在该数据交互模式中,CPU 端和 FPGA 端都有各自的内存,其中 FPGA 端内存是指 FPGA 片外的存储器,如DRAM(Dynamic  Random  Access  Memory)CPUFPGA 之间数据的交互是通过 PCIe 总线实现的。图 7 为基于 PCIe 数据交互的结构。 CPU端内存 FPGA端内存缓存核CPUFPGADMA模块用户逻辑内存控制模块PCIePCIe模块 图 7   基于 PCIe 数据交互的结构 2)基于 QPI 总线的数据交互。在该数据交互的模式中,CPU 端有独立的内存,而 FPGA 端没有独立的内存,CPU 端和 FPGA 端通过 QPI 总线进行数据交互。在 FPGA 端,需要系统协议层模块为用户逻辑提供地址转换等功能。图 8 表明了基于 QPI 数据交互的结构。 CPU端内存缓存核CPUFPGA端系统协议层模块用户逻辑QPIQPI模块 图 8   基于 QPI 数据交互的结构 对比这两种数据交互的模式。在结构上,基于 PCIe 总线的数据交互结构,其 CPU 端与 FPGA端数据的交互实质上是两个内存之间数据的交互。而基于 QPI 总线的数据交互结构,其 CPU 端与 FPGA 端共享一个内存,FPGA 通过一个高效的数据通道来实现数据交互。在性能方面,Young-kyu  Choi 等人在文献[38]对这两种数据交互模式进行了对比分析,其研究结果指出 QPI 总线的带宽最大为 7.0GB/sPCIe-DMA 的带宽最大为 1.6GB/sPCIe-DMA 带宽较低的一个主要因素为 PCIe-DMA 数据传输不仅包含 PCIe 的传输,还包括 CPU 端缓存区的分配和内存拷贝。在一般情况下,基于 QPI 总线的数据交互在带宽上是优于基于 PCIe 总线的。同时,其研究对有效延时也进行了分析,研究结果指出 PCIe Gen3 x8 的有效延时高于基于 QPI 总线的内存的有效延时,两者相差最大能达到两个数量级。因此,基于 QPI 总线的数据交互模式更加适合对延时较为敏感的应用,特别是当传输数据量小且传输次数较多的时候。 3.2  FPGA开发环境 目前在 FPGA 上开发应用有两种主要的方式,一种是底层硬件设计,即开发人员利用硬件描述语言或者 IP 核(Intellectual Property core)对硬件结构进行设计;另一种方式是采用高层次综合工具,即开发人员只需要利用高级语言实现算法,而算法程序到 FPGA 硬件结构的映射由编译器自动完成。下面将对这两种方式进行简要的说明。  1)采用高层次综合工具方式。近几年,一些公司如 AlteraXilinx FPGA 提供了高级语言开发环境,并开发了相应的集成开发环境:Xilinx公司的 SDAccel 以及 Altera 公司的面向 OpenCL的软件开发套件等。利用这些工具,开发设计人员只需要考虑如何采用 OpenCL 实现应用程序,FPGA逻辑微处理器L 3  S D R A M互联S D R A M控制器4Gbps1281Gbps323.2Gbps641.6Gbps324Gbps1284Gbps1282Gbps644Gbps1284.8Gbps644.8Gbps644.8Gbps641286412817Gbps2563.2Gbps64H2F桥接器32/64/128H2F桥接器32F2H桥接器32/64/128F2S端口32/64/128F2S端口32/64F2S端口32/64/1283.2Gbps64L3主互联计算机学报  吴艳霞等:深度学习 FPGA 加速器的进展与趋势  11  的平移操作将一维向量的乘法转变为了矩阵的乘法。图 12 展示了输入特征图规模为 11´11,卷积核规模为 2´2,步长为 1 2 维卷积操作转换为矩阵乘法的过程。由于稀疏卷积神经网络模型中大约有 5%-50%的值为非零值,并不是极致的稀疏(1%或更少的非零值),其在使用矩阵时是以稠密的格式而非稀疏的格式。 对于跳过非零值结构的设计,其利用稀疏管理单元确定零值位置并提供给矩阵乘法单元,随后处理单元中的调度器根据相关信息提供非零值给计算单元进行计算。实验结果表明,Stratix  10 FPGA 利用该硬件结构执行矩阵乘法的性能(TOP/sec)比 Titan X Pascal GPU 的性能提升了10%[14]11224410´101110´10权值矩阵 特征图矩阵 输出矩阵输入特征图 图 12   2 维卷积操作转换为矩阵 虽然这种硬件结构能跳过卷积神经网络模型中的无效计算,有效提高模型的执行效率,但同样有一些限制和提升的空间: (1)矩阵乘法的转换是以数据复制为代价的,这对于带宽有限的 FPGA 开发板来说,模型整体的执行性能会降低[41]。文献[42]对将 AlexNetVGG16 网络模型中卷积操作转换为矩阵乘法后数据复制量进行了统计,结果表明转换后的每一层输入特征图数据量是原始数据量的 7.6-25倍,中间特征图和权值数据量是原始数据量的1.35-4.8 倍。 (2)稀疏矩阵乘法的计算是不规则,可能会使计算在多个处理单元中分布不均匀,导致部分处理单元利用不充分,影响模型整体的执行性能。 3)针对紧凑数据类型卷积神经网络的硬件结构。在对 FPGA 硬件结构进行设计时,数据的位数本身由开发者设定,因此,FPGA 通常能较好地支持自定义位数的数据类型,且在应用低精度数据类型时,通常不需要对原有硬件整体结构进行修改。由于在极端精度的情况下,如数据位数为 1,数据的乘加计算可以转换为简单的位运算,其对应的硬件结构与高精度数据类型对应的硬件结构不同,因此本文重点说明二值神经网络对应的加速硬件结构。文献[43]对此提出了一种硬件结构的设计,具体硬件结构如图 13 所示。  图 13   二值神经网络硬件结构[43] 在该硬件结构中,其用同或门代替了乘法器,这在很大程度上降低了 FPGA 片上资源的使用和计算的难度,提高了计算的效率。由于其在硬件结构设计中重点关注的是计算结构的设计,忽略了数据交互相关的优化,如使用双缓冲区等,因此该硬件结构加速性能还有一定的提升空间。 文献[43]利用 Aria 10 FPGA 实现了该硬件结构,并将其执行性能与 CPU GPU 进行了对比,结果表明 FPGA 的能效比远高于 CPU GPU3.3.2  FPGA 加速卷积神经网络的设计思路 在采用 FPGA 加速卷积神经网络时,一般设计思路是根据提出的设计目的、针对的目标以及卷积神经网络算法本身的特点等进行数学建模,将其转换为利用数学公式求最大值或者最小值的问题。数学建模完成后会利用穷举,动态规划等方法找到最优的解决方案,然后依据最优解决方案的参数,神经网络拓扑结构等生成最终的 FPG 计  算  机  学  报   2018 年  交叉开关交叉开关  输出缓冲区 输出缓冲区输入缓冲区 输入缓冲区片外数据传输管理控制器FIFOFIFO计算引擎 图 9   典型的基础硬件结构[40] 对于计算部分,其利用多个计算引擎并行执行,不同的计算引擎计算不同卷积核的卷积操作,计算引擎中的硬件结构为“树形”结构,即最下层为乘法器,用于并行执行卷积操作中的乘法计算,剩下的为多层加法器,用于并行计算卷积操作中的求和运算,这种硬件结构充分利用了卷积神经网络卷积层中可并行执行的计算:不同卷积核的卷积操作可并行执行、卷积操作中的乘法计算可并行执行以及卷积操作中的加法计算可部分并行执行等,这样的硬件结构有效提高了计算的效率。 对于数据传输部分,其对输入和输出部分分别使用了两个缓冲区,通过利用“乒-乓”的数据传输机制有效地用计算时间掩盖了数据传输的时间,有效减少了程序整体的执行时间。同时,由于每个计算引擎计算的是不同卷积核对同一输入数据的卷积操作,因此输入数据只需要从片外存储器中读取一次便可以在片上多次使用,这有效提高了本地数据的使用率,一定程度上减少了访问片外存储的次数。这种硬件结构的设计在当时取得了优异的性能:在 100MHz 的频率下实现了61.62GFLOPS 的峰值性能,并显著优于以前的设计方法[40]。  虽然这种硬件结构取得了优异的性能,但是依然存在一些问题: (1)该结构主要针对的是卷积神经网络的卷积层,并未考虑全连接层,而全连接层中包含了大量的模型参数,会造成频繁的数据交互,大量数据传输带来的开销可能会成为性能提升的瓶颈。 (2)计算引擎中的“树状”结构适合规则的卷积操作,并不适合通过“剪枝”处理后的不规则卷积计算。因此,该结构不适合对进行稀疏性处理后的卷积神经网络。 (3)计算涉及的数据为浮点数,并不是定点数。使用定点数不仅能节省 FPGA 片上资源的使用,还能提升 FPGA 整体的执行性能。 2)针对卷积神经网络稀疏性设计的 FPGA硬件结构。卷积神经网络模型由于 ReLu 激活函数等原因通常包含一些零值,而这些零值参与的计算并不影响网络模型最终的计算结果,如果在计算时能合理地跳过这些零值,程序整体的执行性能将得到有效地提高。对于该种方式,FPGA 硬件结构设计的难点在于零值数据处理和不规则计算硬件结构的设计。文献[14]对此提出了一种硬件结构的设计,具体结构如图 10 所示。其中处理单元的硬件结构如图 11 所示。 内存数据管理单元ꁴ  稀疏管理单元片上数据管理器卷积层和池化层对应的矩阵乘法(GEMM)单元处理单元(PE)处理单元(PE)处理单元(PE)处理单元(PE)           片上数据管理器稀疏管理单元混合层单元(激活层、池化层等) 图 10   针对卷积神经网络稀疏性设计的硬件结构[14] 多个累加器(ACCs)跳过零值的调度器乘加计算(FMA)单元处理单元(PE)输入数据输入数据输出数据 图 11   处理单元的硬件结构[14] 从图 11 可以看出,卷积层和全连接层的硬件结构是针对矩阵乘法设计的,即其将卷积层和全连接层中的计算转换为了矩阵乘法。由于全连接层本身可以看做卷积核为 1 的卷积操作,因此,本文以卷积操作为例说明该转换的常用方式。对于一次卷积操作,其通常为两个规模相同的矩阵进行点对点的乘法,然后累加求和,该计算过程与一维向量乘法的计算过程吻合,因此,一次卷积操作可以转换为两个一维向量相乘,而卷积核计算机学报

[返回]
上一篇:基于约束的空间众包多阶段任务分配
下一篇:极限学习机前沿进展与趋势