1.3 FPGA的应用领域
FPGA从最初的逻辑黏合、接口互联的角色逐渐成为大规模计算硬件平台之一。FPGA未来的发力点分别在机器学习领域、5G无线通信领域、嵌入式视觉领域、工业物联网领域、云计算平台领域五大方面。
1.3.1 机器学习
要想明白“深度学习”“机器学习”需要什么样的硬件,必须了解深度学习的工作原理。首先在表层上,我们有一个巨大的数据集,并选定了一种深度学习模型。每个模型都有一些内部参数需要调整,以便学习数据。而这种参数调整实际上可以归结为优化问题,在调整这些参数时,就相当于在优化特定的约束条件。
百度的硅谷人工智能实验室(SVAIL)已经为深度学习硬件提出了Deep Bench基准。这一基准着重衡量的是基本计算的硬件性能,而不是学习模型的表现。这种方法旨在找到使计算变慢或低效的瓶颈。因此,重点在于设计一个对于深层神经网络训练的基本操作执行效果最佳的架构。那么基本操作有哪些呢?现在的深度学习算法主要包括卷积神经网络(CNN)和循环神经网络(RNN)。基于这些算法,Deep Bench提出以下4种基本运算:
·矩阵相乘(Matrix Multiplication) 几乎所有的深度学习模型都包含这一运算,它的计算十分密集。
·卷积(Convolution) 这是另一个常用的运算,占用了模型中大部分的每秒浮点运算(浮点/秒)。
·循环层(Recurrent Layers) 模型中的反馈层,并且基本上是前两个运算的组合。
·All Reduce 这是一个在优化前对学习到的参数进行传递或解析的运算序列。在跨硬件分布的深度学习网络上执行同步优化时(如AlphaGo的例子),这一操作尤其有效。
除此之外,深度学习的硬件加速器需要具备数据级别和流程化的并行性、多线程和高内存带宽等特性。另外,由于数据的训练时间很长,硬件架构必须低功耗,因此效能功耗比(Performance per Watt)是硬件架构的评估标准之一。
1. GPU VS CPU
在如今的深度学习平台上,CPU面临着一个很尴尬的处境:它很重要又不是太重要。它很重要,是因为它依旧是主流深度学习平台的重要组成部分,机器学习领域的专家吴恩达曾利用16000颗CPU搭建了当时世界上最大的人工神经网络Google Brain并利用深度学习算法识别出了“猫”,又比如名震一时的AlphaGo就配置了多达1920颗CPU。
但是它又不是太重要,相比于其他硬件加速工具,传统的CPU在架构上就有着先天的弱势。图1.12所示为CPU和GPU的区别。
图1.12 CPU VS GPU
图1.12是CPU与GPU内部结构的对比。总体上来说,二者都是由控制器(Control)、寄存器(Cache、DRAM)和逻辑单元(Arithmetic Logic Unit,ALU)构成的,但是三者的比例却有很大的不同。在CPU中,控制器和寄存器占据了结构中很大一部分;与之相反,在GPU中,逻辑单元的规模则远远超过其他二者之和。
说明
这种不同的构架就决定了CPU在指令的处理/执行、函数的调用上有着很好的发挥,但由于逻辑单元所占比重较小,相对于GPU而言,在数据处理方面(算术运算或者逻辑运算)的能力就弱了很多。
GPU进行数据处理的过程可以描述成:GPU从CPU处得到数据处理的指令,把大规模、无结构化的数据分解成很多独立的部分,然后分配给各个流处理器集群。每个流处理器集群再次把数据分解,分配给调度器所控制的多个计算核心,同时执行数据的计算和处理。如果一个核心的计算算作一个线程,那么在这颗GPU中就有32×4×16=2048个线程同时进行数据的处理。
尽管每个线程/Core的计算性能、效率与CPU中的Core相比低了不少,但是当所有线程都并行计算时,累加之后它的计算能力又远远高于CPU。对于基于神经网络的深度学习来说,它的硬件计算精度要求远远没有对其并行处理能力的要求来的迫切。而这种并行计算能力转化为对于硬件的要求就是尽可能大的逻辑单元规模。通常我们使用每秒钟进行的浮点运算(Flops/s)来量化参数。不难看出,对于单精度浮点运算,GPU的执行效率远远高于CPU。
除了计算核心的增加外,GPU另一个比较重要的优势就是它的内存结构。
(1)共享内存。在NVIDIA披露的性能参数中,每个流处理器集群末端设有共享内存。相比于CPU每次操作数据都要返回内存再进行调用,GPU线程之间的数据通信不需要访问全局内存,而在共享内存中就可以直接访问。这种设置带来最大的好处就是线程间通信速度的提高。
(2)高速的全局内存(显存)。目前GPU上普遍采用GDDR5的显存颗粒,不仅具有更高的工作频率,从而带来更快的数据读取/写入速度,还具有更大的显存带宽。我们认为在数据处理中,速度往往最终取决于处理器从内存中提取数据以及流入和通过处理器要花多少时间。
在传统的CPU构架中,尽管有高速缓存(Cache)的存在,但是由于其容量较小,大量的数据只能存放在内存(RAM)中。进行数据处理时,数据要从内存中读取,然后在CPU中运算,最后返回内存中。由于构架的原因,二者之间的通信带宽通常在60Gb/s徘徊。与之相比,大显存带宽的GPU具有更大的数据吞吐量。在大规模深度神经网络的训练中,必然带来更大的优势。
目前而言,越来越多的深度学习标准库支持基于GPU的深度学习加速,通俗点描述就是深度学习的编程框架会自动根据GPU所具有的线程/Core数去自动分配数据的处理策略,从而达到优化深度学习的时间,而这些软件上的全面支持也是其他计算结构所欠缺的。
2. FPGA的潜在优势
“CPU+GPU”或者“MIC”的计算模型被广泛地应用于各种深度学习中。CPU与GPU都是利用现有的成熟技术去提供一种通用级的解决方法来满足深度学习的要求,尽管Intel与NVIDIA不断推出了KNL和Pascal等系列加速芯片来助阵深度学习,但这仅仅是大公司对于深度学习的一种妥协,并不是一种针对性的专业解决方案。
目前,在深度学习模型的训练领域使用的基本是SIMD(Single Instruction Multiple Data,单指令多数据流架构)计算,即只需要一条指令就可以平行处理大批量数据。但是,在平台完成训练之后,它还需要进行推理环节的计算。这部分的计算更多的是MISD(Multiple Instruction Single Data,多指令流单数据流)。比如讯飞语音输入法在同一时间要对数以百万计的用户的语音输入进行识别并转化为文字输出。
在这个阶段,它们的作用远不如训练阶段那么得心应手。未来,至少95%的深度学习都用于推断,尤其是在移动端,只有不到5%的深度学习用于模型训练。因此,寻找低功耗、高性能、低延时的加速硬件成了当务之急。在这种情况下,人们把目光投向了FPGA与ASIC。
与GPU/CPU相比,FPGA与ASIC拥有良好的运行能效比,在实现相同性能的深度学习算法中,GPU所需的功耗远远大于FGPA与ASIC。浪潮与Intel于2016年底推出了FPGA加速卡F10A,是目前最高性能的加速卡,单芯片峰值运算能力达到1.5TFlops,功耗才35W,每瓦特功率为42GFlops,是GPU的数倍之高。其次,对于SIMD计算,GPU/CPU尽管具有很多逻辑核心,但是受限于冯诺依曼结构,无法发挥其并行计算的特点。FPGA与ASIC不仅可以做到并行计算,还能实现流水处理。这大大减小了输入与输出的延时比。
针对移动端的深度学习,FPGA或者ASIC更多的会以SOC形式出现,以更好地优化神经网络结构,从而提升效率。
1.3.2 5G无线
图1.13展示了Xilinx 5G应用及对应解决方案示意图,FPGA在推动5G发展中有很大的作用。
图1.13 Xilinx 5G应用及对应解决方案示意图
到2020年,预计将有超过500亿的互联设备。因此,5G网络必须具有更高的可扩展性、智能性和异构性。分布式小型基站、支持数百个天线的海量MIMO以及通过CloudRAN进行的集中式基带处理等技术将显著增大覆盖范围与数据吞吐量。网络将需要通过回程及光前传来进行安全连接,以完成处理。
对于5G而言,FPGA的技术正在帮助解决容量、连接以及性能挑战,并灵活支持多标准、多频带和多子网络,实现多样物联网驱动的5G应用。
只有FPGA能够提供这样一个灵活的、基于标准的解决方案,融软件可编程能力、多标准、多频带硬件优化为一体,并将任意(any-to-any)连接以及保密性等功能紧密结合在一起,以满足5G网络的需求。客户可在Zynq MPSoC和UltraScale FPGA芯片平台上使用Vivado HLS、SDSoC和SDAccel软件定义环境快速开发其应用。Xilinx推出业界首款带有RF级模拟技术的RF SoC器件,可实现高性能ADC/DAC和SD-FEC与SoC的突破性集成。
1.3.3 嵌入式视觉
图1.14所示为Xilinx嵌入式视觉应用及对应解决方案的内容。
图1.14 Xilinx嵌入式视觉应用及对应解决方案示意图
1. 嵌入式的发展前景
当前嵌入式设计发展迅猛,有很多需求无法被现有的产品满足。现有的产品包括单个处理器、单个ASIC、ASSP或者单纯的FPGA方案,甚至这些方案的组合也都无法满足需求。根据市场调查显示,全新的嵌入式应用(比如汽车驾驶员辅助系统、智能视频监视、先进的工业控制、先进的工业遥测、先进的工业制导、企业级的工作站、广播级的摄像机、多功能打印机、航空航天电子等应用)设计随市场需求的旺盛,将成为新的利润增长点。
深入了解下一代嵌入式处理器的需要,我们会发现提高性能、减少成本、降低功耗、缩小外形、增加灵活性是主要需要。现有方案的局限性也是相当明显的,例如现有的微处理器缺乏足够的信号处理能力,需要多芯片方案来搭建下一代的处理器系统。多芯片方案成本较高,功耗大,占用更多的空间,不利于缩小外形,同时如果采用现有的ASIC或ASSP方案,更新换代的速度或者说差异化的能力都会受限,不能适应快速变化的需求,也很难提供差异化的竞争优势,这些局限性使我们看到下一代处理器需要解决和应对的问题。在市场需求推动下,为了满足下一代应用处理的需求,Xilinx定义了Zynq-7000系列产品,并首先推出了4款(7010、7020、7030和7045)。它们都是高性能和低功耗的处理器平台,是灵活和可扩展的解决方案。
下面我们一起来初步了解Zynq-7000 AP SoC平台的ARM+FPGA体系结构。此体系结构的左上角方块就是ARM部分,在Zynq-7000 AP SoC平台里称为Processing System(PS)。外面包着它的是FPGA部分,称为Programmable Logic(PL)。FPGA部分就是我们上一节介绍的7系列FPGA,内部的资源和结构与7系列FPGA一样。
Zynq-7000系列的亮点在于它包含完整的ARM处理子系统,每一颗Zynq-7000系列的处理器都包含双核的CortexTM-A9处理器,整个处理器的搭建都以处理器为中心,而且处理器子系统中集成了内存控制器和大量的外设,使CortexTM-A9的核在Zynq-7000中完全独立于可编程逻辑单元,也就是说,如果暂时没有用到FPGA的部分,ARM处理器的子系统也可以独立工作,这与以前的FPGA处理器有本质区别,其是以处理器为中心的。
另外,在可编程逻辑部分紧密地与ARM的处理单元相结合。FPGA的部分用于扩展子系统,有丰富的扩展能力,有3000多个内部互连,连接资源非常丰富,可提供100Gb/s以上的内部带宽。此外,在I/O接口方面,FPGA的优点是I/O可以充分自定义,并在FPGA部分集成高速串行口(Multi Gigabit Transceiver)。同时,在FPGA内也继承了模数转换器(XADC)。
2. Xilinx嵌入式视觉解决方案
Xilinx可为嵌入式视觉开发人员提供一系列支持软硬件设计的技术。Xilinx器件包括FPGA、SoC以及MPSoC。
Xilinx的Vivado HLx设计环境可帮助硬件及平台开发商开发最新嵌入式视觉硬件。这些工具支持业界最新高带宽传感器接口。Xilinx包括SDSoC在内的SDx工具有助于软件及算法开发人员在基于Eclipse的熟悉环境中采用C、C++和OpenCL等计算机语言进行开发。
Xilinx reVISION堆栈建立在SDx概念基础之上,支持OpenCV和机器学习推断,从而支持AlexNet、GoogLeNet、SqueezeNet、SSD和FCN等最普及的神经网络以及构建定制神经网络(CNN/DNN)所需的功能元件。同时,该堆栈还允许设计团队将预定义的优化CNN实现方案用于网络层。这得到了加速型OpenCV函数的有力补充,支持计算机视觉处理。
1.3.4 工业物联网
图1.15所示为Xilinx工业物联网应用及对应解决方案示意图。
工业物联网(IIoT)正在推动第4轮工业革命。它极大地改变着制造、能源、交通运输、城市、医疗以及其他工业行业。大部分专家认为IIoT时代已悄然来到,带来了实实在在可测量的业务影响。IIoT可帮助企业从传感器收集、聚集和分析数据,从而最大限度地提高机器效率以及整个工作的吞吐量。应用包括运动控制、机器与机器通信、预测性维护、智能能源/电网、大数据分析以及智能互联医疗系统等。
图1.15 Xilinx工业物联网应用及对应解决方案示意图
Xilinx提供了面向工业物联网的灵活标准化解决方案,包括全可编程、实时处理、硬件优化和针对保密和安全的“任意”互联。Xilinx SDAccel、SDSoC和Vivado HLS可帮助客户快速开发更智能的互连差异化应用。
1.3.5 云计算
图1.16所示为Xilinx云计算应用及对应解决方案示意图。
图1.16 Xilinx云计算应用及对应解决方案示意图
数据中心需要工作负载优化,以迅速适应来自广泛虚拟化软件应用不断变化的吞吐量、延迟和功率需求。这些应用包括机器学习、视频转码、图像和语音识别、CloudRAN和大数据分析,以及存储与网络加速、高度灵活的高性能连接。
Xilinx可使服务器通过工作负载优化,以类似CPU和GPU方案的1/10时延及功耗实现10倍吞吐量。应用通过OpenCL、C和C++等语言编写。灵活、基于标准的解决方案融软件可编程能力、负载优化和高性能数据中心互联为一体,并与保密性紧密结合在一起,以满足下一代云计算的需求。
Xilinx产品系列包含UltraScale技术,其可作为可扩展、可重新配置的加速平台,针对任何工作负载按需进行优化。Xilinx软件定义开发环境SDAccel可帮助客户使用OpenCL、C和C++的任意组合来开发其独特应用。SDAccel部署独有的架构优化型编译器和部分重新配置技术,这两者的结合可通过灵活的运行时功能提供最高质量的结果。
1.3.6 FPGA硬件加速平台
1. 算法加速
卷积神经网络(Convolutional Neural Network,CNN)是一种典型的多层神经网络,是首个真正意义上成功训练多个层次网络的结构模型。权值共享的网络结构使之在图像处理、语音识别等领域有着重要的应用价值。CNN算法通常是在CPU或GPU上以软件编程的方式进行实现的,方法虽简单却无法发挥CNN并行性的特点、训练速度慢。FPGA含有丰富的计算资源,基于SRAM结构的FPGA能够在运行过程中对片上的资源进行重新配置,实现系统逻辑功能的切换、提高系统的灵活性和资源利用率。
对生物大分子进行结构预测是生物信息学研究的重要领域,具有重大的理论和应用价值。随着基因测序技术的不断发展,RNA和蛋白质序列数据库的规模急剧膨胀,现有结构测定技术无法满足不断增长的序列数据库的发展需求,基于序列信息对生物大分子的空间结构进行预测成为生物信息学研究的热点。
生物大分子的结构预测算法计算复杂性高,对数据的处理能力提出了更高的要求,迫切需要高性能计算的支持。基于FPGA平台的算法加速器是高性能计算研究的重要方向之一,能较好地适应生物信息学算法特征多样性的特点,在提高生物信息学算法性能方面具有广阔的应用前景。
2. 数据库加速
FPGA领域研发需要软件与硬件两方面的支持。其中,硬件部分包括FPGA开发板与相应下载器,软件部分包括FPGA设计过程中对应的EDA工具。FPGA芯片数据库是实现软、硬件协同工作的纽带,实现一种简明、精准的芯片数据库描述方法是FPGA高效开发的一项重要内容,同时对所描述的芯片数据库信息实现简洁、高效管理是至关重要的。
针对现存芯片数据库中存在的描述结构单一、描述信息管理效率低的问题,研究人员提出了一种新型芯片结构描述与管理方法,提高了FPGA芯片数据库信息的准确性,并实现了芯片数据库信息的高效率智能化管理。