姜悦 李亚洲编译

基于FPGA的深度学习加速器综述:挑战与机遇

FPGA 的神经网络加速器如今越来越受到 AI 社区的关注,本文对基于 FPGA 的深度学习加速器存在的机遇与挑战进行了概述。

近年来,神经网络在各种领域相比于传统算法有了极大的进步。在图像、视频、语音处理领域,各种各样的网络模型被提出,例如卷积神经网络、循环神经网络。训练较好的 CNN 模型把 ImageNet 数据集上 5 类顶尖图像的分类准确率从 73.8% 提升到了 84.7%,也靠其卓越的特征提取能力进一步提高了目标检测准确率。RNN 在语音识别领域取得了最新的词错率记录。总而言之,由于高度适应大量模式识别问题,神经网络已经成为许多人工智能应用的有力备选项。

然而,神经网络模型仍旧存在计算量大、存储复杂问题。同时,神经网络的研究目前还主要聚焦在网络模型规模的提升上。例如,做 224x224 图像分类的最新 CNN 模型需要 390 亿浮点运算(FLOP)以及超过 500MB 的模型参数。由于计算复杂度直接与输入图像的大小成正比,处理高分辨率图像所需的计算量可能超过 1000 亿。

因此,为神经网络应用选择适度的计算平台特别重要。一般来说,CPU 每秒能够完成 10-100 的 GFLOP 运算,但能效通常低于 1 GOP/J,因此难以满足云应用的高性能需求以及移动 app 的低能耗需求。相比之下,GPU 提供的巅峰性能可达到 10TOP/S,因此它是高性能神经网络应用的绝佳选择。此外,Caffe 和 TensorFlow 这样的编程框架也能在 GPU 平台上提供易用的接口,这使得 GPU 成为神经网络加速的首选。

除了 CPU 和 GPU,FPGA 逐渐成为高能效神经网络处理的备选平台。根据神经网络的计算过程,结合为具体模型设计的硬件,FPGA 可以实现高度并行并简化逻辑。一些研究显示,神经网络模型能以硬件友好的方式进行简化,不影响模型的准确率。因此,FPGA 能够取得比 CPU 和 GPU 更高的能效。

回顾 20 世纪 90 年代,那时 FPGA 刚出现,但不是为了神经网络,而是为了电子硬件原型的快速开发而设计的。由于神经网络的出现,人们开始探索、改进其应用,但无法确定其发展方向。尽管在 1994 年,DS Reay 首次使用 FPGA 实现神经网络加速,但由于神经网络自身发展不够成熟,这一技术并未受到重视。直到 2012 年 ILSVRC 挑战赛 AlexNet 的出现,神经网络的发展渐为明晰,研究社区才开始往更深、更复杂的网络研究发展。后续,出现了 VGGNet、GoogleNet、ResNet 这样的模型,神经网络越来越复杂的趋势更为明确。当时,研究者开始注意到基于 FPGA 的神经网络加速器,如下图 1 所示。直到去年,IEEE eXplore 上发表的基于 FPGA 的神经网络加速器数量已经达到了 69 个,且还在一直增加。这足以说明该方向的研究趋势。

图 1:基于 FPGA 的神经网络加速器开发历史

论文:A Survey of FPGA Based Deep Learning Accelerators: Challenges and Opportunities


论文地址:https://arxiv.org/abs/1901.04988

摘要:随着深度学习的快速发展,神经网络深度学习算法已经广泛应用于各个领域,如图片、视频和语音处理等。但是,神经网络模型也变得越来越大,这体现在模型参数的计算上。虽然为了提高计算性能,研究者在 GPU 平台上已经做了大量努力,但专用硬件解决方案仍是必不可少的,而且与纯软件解决方案相比正在形成优势。在这篇论文中,作者系统地探究了基于 FPGA 的神经网络加速器。具体来讲,他们分别回顾了针对特定问题、特定算法、算法特征、通用模板的加速器,还比较了不同设备和网络模型中基于 FPGA 加速器的设计和实现,并将其与 CPU 和 GPU 的版本进行了比较。最后,作者讨论了 FPGA 平台上加速器的优势和劣势,并进一步探索了未来研究存在的机会。

图 2: 不同数据量化方法的比较

表 1: 不同平台上不同模型的性能比较

机遇和挑战

早在 20 世纪 60 年代,Gerald Estrin 就提出了可重构计算的概念。但是直到 1985 年,第一个 FPGA 芯片才被 Xilinx 引入。尽管 FPGA 平台的并行性和功耗非常出色,但由于其重构成本高,编程复杂,该平台没有引起人们的重视。随着深度学习的持续发展,其应用的高并行性使得越来越多的研究人员投入到基于 FPGA 的深度学习加速器研究中来。这也是时代的潮流。

基于 FPGA 加速器的优势

1)高性能,低能耗:高能效的优点不容小觑,之前的许多研究已经证明了这一点。从表 1 中可以看出,GOP/j 在 FPGA 平台上的表现可以达到在 CPU 平台上的几十倍,它在 FPGA 平台上表现的最低水平与其在 GPU 平台上的表现处于一个层级。这足以说明基于 FPGA 的神经网络加速器的高能效优势。

2)高并行性:高并行性是选择 FPGA 平台加速深度学习的主要特性。由于 FPGA 的可编辑逻辑硬件单元,可以使用并行化算法轻松优化硬件,已达到高并行性。

3)灵活性:由于 FPGA 具有可重构性,它可以适用于复杂的工程环境。例如,在硬件设计和应用设计完成之后,通过实验发现性能未能达到理想状态。可重构性使得基于 FPGA 的硬件加速器能够很好地处理频繁的设计变更并满足用户不断变化的需求。因此,与 ASIC 平台相比,这种灵活性也是 FPGA 平台的亮点。

4)安全性:当今的人工智能时代需要越来越多的数据用于训练。因此,数据的安全性越来越重要。作为数据的载体,计算机的安全性也变得更加显著。目前,一提到计算机安全性,想到的都是各种杀毒软件。但是这些软件只能被动地防御,不能消除安全风险。相比之下,从硬件架构层级着手能够更好地提高安全性。

基于 FPGA 的加速器的劣势

1)可重构成本:FPGA 平台的可重构性是一把双刃剑。尽管它在计算提速方面提供了许多便利,但是不同设计的重构所消耗的时间却不容忽视,通常需要花几十分钟到几个小时。此外,重构过程分为两种类型:静态重构和动态重构。静态重构,又叫编译时重构,是指在任务运行之前配置硬件处理一个或多个系统功能的能力,并且在任务完成前将其锁定。另一个也称为运行时配置。动态重构是在上下文配置模式下进行的。在执行任务期间,硬件模块应该按照需要进行重构。但是它非常容易延迟,从而增加运行时间。

2)编程困难:尽管可重构计算架构的概念被提出很久了,也有很多成熟的工作,但可重构计算之前并未流行起来。主要有两个原因:

  • 从可重构计算的出现到 21 世纪初的 40 年时间是摩尔定律的黄金时期,其间技术每一年半更迭一次。所以这种架构更新带来的性能提升不像技术进步那么直接、有力;

  • 对成熟的系统而言,在 CPU 上传统的编程采用高阶抽象编程语言。但是,可重构计算需要硬件编程,而通常使用的硬件编程语言(Verilog、VHDL)需要程序员花费大量时间才能掌握。

期望

尽管基于 FPGA 的神经网络加速器仍旧有这样、那样的问题,但其未来发展依然可期。以下几个方向仍然有待研究:

  1. 优化计算流程中的其他部分,现在,主流研究聚焦在矩阵运算回路,激活函数的计算少有人涉及。

  2. 访问优化。需要进一步研究进行数据访问的其他优化方法。

  3. 数据优化。使用能够自然提升平台性能的更低位数据,但大部分的低位数据使得权重和神经元的位宽一样。图 2 还可以改进与非线性映射的位宽差。所以,应该探索出更好的平衡态。

  4. 频率优化。当前,大部分 FPGA 平台的运算频率在 100-300MHz,但 FPGA 平台理论上的运算频率可以更高。这一频率主要受限于片上 SRAM 和 DSP 之间的线程。未来研究需要找到是否有方式避免或者解决该问题。

  5. FPGA 融合。据参考论文 37 中提到的表现,如果规划和分配问题能够得到良好解决,多 FPGA 集群可以取得更好的结果。此外,当前此方向没有太多研究。所以非常值得进一步探索。

  6. 自动配置。为了解决 FPGA 平台上复杂的编程问题,如果做出类似英伟达 CUDA 这样的用户友好的自动部署框架,应用范围肯定会拓宽。

理论加速器深度学习FPGA
4
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

重构技术

代码重构(英语:Code refactoring)指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果。 软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方。在极限编程的方法学中,重构需要单元测试来支持。

VGG技术

2014年,牛津大学提出了另一种深度卷积网络VGG-Net,它相比于AlexNet有更小的卷积核和更深的层级。AlexNet前面几层用了11×11和5×5的卷积核以在图像上获取更大的感受野,而VGG采用更小的卷积核与更深的网络提升参数效率。VGG-Net 的泛化性能较好,常用于图像特征的抽取目标检测候选框生成等。VGG最大的问题就在于参数数量,VGG-19基本上是参数量最多的卷积网络架构。VGG-Net的参数主要出现在后面两个全连接层,每一层都有4096个神经元,可想而至这之间的参数会有多么庞大。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

模式识别技术

模式识别(英语:Pattern recognition),就是通过计算机用数学技术方法来研究模式的自动处理和判读。 我们把环境与客体统称为“模式”。 随着计算机技术的发展,人类有可能研究复杂的信息处理过程。 信息处理过程的一个重要形式是生命体对环境及客体的识别。其概念与数据挖掘、机器学习类似。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

语音识别技术

自动语音识别是一种将口头语音转换为实时可读文本的技术。自动语音识别也称为语音识别(Speech Recognition)或计算机语音识别(Computer Speech Recognition)。自动语音识别是一个多学科交叉的领域,它与声学、语音学、语言学、数字信号处理理论、信息论、计算机科学等众多学科紧密相连。由于语音信号的多样性和复杂性,目前的语音识别系统只能在一定的限制条件下获得满意的性能,或者说只能应用于某些特定的场合。自动语音识别在人工智能领域占据着极其重要的位置。

语音处理技术

语音处理(Speech processing),又称语音信号处理、人声处理,其目的是希望做出想要的信号,进一步做语音辨识,应用到手机界面甚至一般生活中,使人与电脑能进行沟通。

图像分类技术

图像分类,根据各自在图像信息中所反映的不同特征,把不同类别的目标区分开来的图像处理方法。它利用计算机对图像进行定量分析,把图像或图像中的每个像元或区域划归为若干个类别中的某一种,以代替人的视觉判读。

推荐文章
暂无评论
暂无评论~