邱陆陆作者

UIUC陈德铭教授:「万能芯片」FPGA与深度学习

人工智能的风潮从技术一路蔓延到硬件,让「芯片」成为今年行业里盛极一时的主题。人们关注通用芯片领域里 CPU 和 GPU 不断刷新的基准(benchmark),更对专用芯片(ASIC)领域不同场景下不断问世的解决方案表示出了空前的热情。

而众所周知,在专用芯片与通用芯片中间,还有一个更为灵活,也更为神秘的领域:FPGA。无论是英特尔天价的收购还是微软与 IBM 雄心勃勃的计划,都让人对其更加好奇。而「万能芯片」的名称,以及多样化的职责范围:它可以是智能手机里不起眼的一个小组件,也可以是数千美金一块的开发板,也让人对其真面目更加疑惑。

 FPGA 与深度学习的关系究竟是什么?它适合加速何种类型的运算?适合应用于何种场景?6 月,机器之心采访了美国伊利诺伊大学香槟分校电气与计算机工程系(UIUC ECE)教授、深度学习算法硬件加速解决方案创业公司 Inspirit IoT 创始人陈德铭,与他聊了聊「万能芯片」FPGA 在深度学习领域的用法。陈教授于近期宣布兼任国内计算机视觉领域创业公司触景无限的首席科学家。

 以下为采访实录。

机器之心:从算法的角度,FPGA 适合于加速哪些运算?

 FPGA 的优势在于可定制化的并行。它可以为了特定算法专门定制逻辑单元。例如,算法中需要完成一个开三次方的运算,在通用芯片上需要一长串指令实现它,但是在 FPGA 上可以为这个特定运算设计一个单元。

 定制化的一个「极限」的例子是,如果能够把神经网络中的参数全部二值化、特征图(feature map)也全部二值化,那么甚至可以不用乘法器,而是用异或门XOR gate)完成计算,会有异常强大的表现。即使不全部二值化,因为全部二值化会让准确度明显下降,只要合理使用各种低位宽的运算,仍可以让 FPGA 大放异彩。比如在我们最近和 IBM 合作的 ELB-NN 项目中,我们可以在功耗低于 5 瓦的情形下,让神经网络在 FPGA 上的算力达到 10.3 TOPS,同时依然维持非常高的准确度。

另一个例子是微软的 Brainwave FPGA 项目,通过使用特殊的 8-bit 的浮点运算,可以在高容量的 FPGA 上达到 40 TOPS。 

值得一提的是,LSTM 等神经网络每一步操作都很相似,这种整体运算过程是序列的算法也非常适用于用 FPGA 进行加速。FPGA 非常擅长处理流数据,可以设计流水线机制,使得在运算过程中不需要将中间数据存入内存而是直接送到下一步进行操作。

机器之心:相比于其他芯片,FPGA 在实现深度学习模型时有哪些结构带来的优势?

FPGA 的引脚比一般的芯片多,同时它的逻辑单元可以完全根据算法要求来重组从而产生定制化的数据通路(datapath),因此非常适合处理大批量流数据。它不像 GPU 一样需要反复调取片外存储中的数据,理想状态时,只要数据一次性流进去再流出来,算法就完成了,因此,FPGA 非常适合具有低延迟需求的任务。

另外 FPGA 的速度快、功率低的特点也让它在能耗方面相比于 CPU、GPU 也有很大优势。

比如我们在 FPGA 上实现了长期循环卷积网络(Long-term Recurrent Convolutional Network),它的速度 ( latency ) 比 GPU 快 3.1 倍,FPGA 的功率比 GPU 小 5.6 倍,最终整体能耗降低 17 倍左右。

机器之心:从行业的角度,FPGA 都能够用于哪些机器学习深度学习任务的加速?

 在终端,有些自动驾驶公司的车上系统中就采用了 FPGA 完成一些实时检测识别任务。例如,我曾经代表 UIUC 与小鹏汽车的副总裁、机器学习专家谷俊丽女士交流,她提到,FPGA 可以凭借信号处理和低能耗方面的优势,成为一个可靠的第二系统,在汽车的第一系统出现失误的时候,作为安全模式介入进来。IoT 方面的应用就更多了,无论是安防还是智能家居,FPGA 都会有机会进入市场。

在云端,也有结合 FPGA 的巨大空间。之前,微软的 Project Catapult 就搭建起了大规模的 FPGA 云服务器。现在 Catapult 正在运行搜索和数据存储方面的运算,同时,他们也在积极地思考如何把机器学习运算部署在上面,包括是否能将 FPGA 作为其 Azure 云的后端支持。亚马逊 AWS 的 FPGA 云计算已经很有规模了,并且一直在大力推动之中。最近,国内创业公司深鉴也开始结合华为的云端 FPGA 来进行深度学习算法的加速,特别在基于 LSTM 的语音识别上非常有优势。

机器之心:能否介绍一下使用高层次综合(HLS)自动生成寄存器级(RTL)实现与手工用硬件描述语言(HDL)进行实现的区别?

对于深度学习相关算法来说,HLS 是有优势的。 

当你阅读用高层语言描述的深度学习模型时,你会发现模型是有规律的。比如,卷积操作在 C 语言里就是一个六层的嵌套循环。此时我就可以针对这个循环开发一个 IP 核,确定如何进行流水线设计(pipelining),如何分配存储等,然后再将 IP 核用在 FPGA 上,进而让神经网络中的所有卷积层来共享 IP 核即可。

此时设计的优化要点是 IP 核的大小、是否需要多个 IP 核并行运算等。这是一个非常适用 HLS 的场景,因为 HLS 可以自动化地、快速地探索不同的解决方案。如果采用 RTL,则需要很多工程师,组成多个团队,每个团队根据工程师过去的设计经验着重探索一个方向,这是一个成本非常高的过程。

RTL 是一种描述硬件的空间的关系和逻辑时序等逻辑关系的硬件描述语言。这是一门难学的语言,能够熟练掌握的从业者也不多,开发和测试都很慢。夸张点说,如果 HLS 开发周期以天和周来计算,那么 RTL 通常是以月和年。

从最终结果角度讲,RTL 完全手工调制的解决方案是很可能比 HLS 自动生成的方案效果好的。我们曾经做过比较,在深度学习的情境下,HLS 和 RTL 方法的差距在 10% 左右。

因此,问题在于是否愿意花 3-5 倍的时间获得额外 10% 的效果。

机器之心:在简化 FPGA 开发过程这一任务上,研究者做了哪些工作?

我们的团队开发了一个研究工具,是一个 C 语言的模板库,能够根据 Caffe 和 TensorFlow 的代码自动生成 C 语言的表达。然后研究者可以将 C 语言的代码再交给 HLS 工具生成 RTL 代码。

C 语言是软件工程师普遍掌握的语言,这样的工具让软件工程师也具有 FPGA 开发能力,而且让开发者更专注于算法,而不用过多考虑底层硬件。

而且,这个过程中的中间结果都可以导出,专业人员也可以在自动生成的基础上再进行优化,总而言之,整个开发的效率都得到了极大的提高。 

这只是举一个例子。还有其它很多的研究人员在做相关的提升深度学习设计效率和质量的各类工具和平台。工业和学术届的都有。学术届比如 UCLA 的丛京生老师,以及 Cornell 的张志汝老师等。工业届比较领先的是赛灵思和英特尔自己设计的一些工具。

 机器之心:各个大公司在 FPGA 的应用方面都进行了哪些工作?拓展市场的思路都有哪些?

 IBM 和赛灵思正在 Power 系列上进行合作,致力于在 FPGA 上加更多的存储,在最新的原型机上,把存储加到了 64G,相比于市面上现在常见的最大 8 或 16G,极大扩展了数据带宽,来进行和大数据相关的处理。 

英特尔收购了 Altera,并且致力于帮助 Altera 进行编译等工具的开发。这是一个 FPGA 商品化的思路,就像 GPU 一样,说不定未来的 PC 里就会有一个 FPGA 协处理器在 CPU 旁边完成工作。或者在芯片层面上,CPU 片上就有一块 FPGA。总而言之,一旦工具做好,整合的机会会有很多。英特尔在智能城市、智慧制造方面都有很多的构想,并且希望借由 FPGA 实现。 

再就是微软。它的思路主要就是云计算,除了 Bing 之外,也希望在进行机器学习任务的 Azure 云中使用 FPGA。 

机器之心:能否介绍一下 Inspirit IoT 通过哪些产品实现了深度学习算法在 FPGA 上的加速?

我们公司主要有三个产品,按照层次分别是 DNN 优化器、高层次综合加速编译器(HLS compiler),以及整体 FPGA 解决方案。

 DNN 优化器的目标是定制一个 FPGA 友好的模型,把训练好的模型中对于推理来说冗余的部分去掉。例如,训练时使用的浮点数可以被替换为定点数,训练时每层有非常多的单元,但是在推理的时候可以进行剪枝Pruning),等等。DNN 优化器就是以各种高层框架的模型为基础,根据硬件的特性和场景的特性进行自动的优化。

高层次综合编译器让开发者得以绕开写 Verilog 硬件描述语言,将 C、 C++、CUDA 等代码直接编成 FPGA,旨在降低硬件开发的门槛,提高软件工程师的生产力。我们的特色是这个编译器可以自然结合深度学习算法中的各种 IP 核,从而可以最好的优化各种深度学习算法在 FPGA 上的高速及高质量的实现。

除此之外,我们也有嵌入 FPGA 的开发板,用于声音相关的应用场景。其上嵌入了 FPGA 和 4 个麦克风,可以检测声音来源、提高声音质量,也可以和摄像头等其他设备连用。例如,捕捉到车辆撞击声、尖叫声等特定声音之后,能够调转摄像头,收录相关的视频等,希望获得一个「1+1>3」的效果。

特别鸣谢:北京大学高性能计算机研究中心博士生 王硕

产业FPGA硬件芯片
1
相关数据
神经网络技术
Neural Network

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

计算机视觉技术
Computer Vision

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

逻辑技术
Logic

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

机器学习技术
Machine Learning

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

优化器技术
Optimizer

优化器基类提供了计算梯度loss的方法,并可以将梯度应用于变量。优化器里包含了实现了经典的优化算法,如梯度下降和Adagrad。 优化器是提供了一个可以使用各种优化算法的接口,可以让用户直接调用一些经典的优化算法,如梯度下降法等等。优化器(optimizers)类的基类。这个类定义了在训练模型的时候添加一个操作的API。用户基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer(tensorflow下的优化器包)等等这些算法。

参数技术
parameter

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

自动驾驶技术
self-driving

从 20 世纪 80 年代首次成功演示以来(Dickmanns & Mysliwetz (1992); Dickmanns & Graefe (1988); Thorpe et al. (1988)),自动驾驶汽车领域已经取得了巨大进展。尽管有了这些进展,但在任意复杂环境中实现完全自动驾驶导航仍被认为还需要数十年的发展。原因有两个:首先,在复杂的动态环境中运行的自动驾驶系统需要人工智能归纳不可预测的情境,从而进行实时推论。第二,信息性决策需要准确的感知,目前大部分已有的计算机视觉系统有一定的错误率,这是自动驾驶导航所无法接受的。

信号处理技术
Signal processing

信号处理涉及到信号的分析、合成和修改。信号被宽泛地定义为传递“关于某种现象的行为或属性的信息(如声音、图像和生物测量)”的函数。例如,信号处理技术用于提高信号传输的保真度、存储效率和主观质量,并在测量信号中强调或检测感兴趣的组件。我们熟悉的语音、图像都可以看做是一种信号形式。因此,对于语音、图像的增强、降噪、识别等等操作本质上都是信号处理。

剪枝技术
Pruning

剪枝顾名思义,就是删去一些不重要的节点,来减小计算或搜索的复杂度。剪枝在很多算法中都有很好的应用,如:决策树,神经网络,搜索算法,数据库的设计等。在决策树和神经网络中,剪枝可以有效缓解过拟合问题并减小计算复杂度;在搜索算法中,可以减小搜索范围,提高搜索效率。

语音识别技术
Speech Recognition

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

异或门技术
XOR gate

异或门是数字逻辑中实现逻辑异或的逻辑门,功能见右侧真值表。若两个输入的电平相异,则输出为高电平(1);若两个输入的电平相同,则输出为低电平(0)。

深度学习技术
Deep learning

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

张量技术
Tensor

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

TensorFlow技术
TensorFlow

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

推荐文章