ARM技术论坛
直播中

刘艳

7年用户 2320经验值
私信 关注
[经验]

对FPGA与ASIC/GPU NN实现进行定性的比较

一、介绍

FPGA是实现可编程数字逻辑的器件。和CPU、GPU/NPU和专用ASIC等电路架构一样,FPGA如今也开始被广泛用于神经网络(NN)的实现。
今天,赛灵思和英特尔是全球领先的两家FPGA制造商。除此之外,还有几家较小的制造商,包括Microchip,Lattice Semiconductor和GOWIN Semiconductors。
FPGA的可编程配置的部分包括可编程逻辑块和可编程互连。除了可编程配置电路之外,FPGA还可以包括不可配置的“硬”块,例如CPU、I/O外设和AI张量块等等。
那么,FPGA有什么特别之处可以使它成为比其他平台更适用于神经网络实现吗?我们先不考虑通用但相对较慢的CPU,将NN的FPGA实现与GPU / NPU和ASIC的实现进行一下对比。
事实证明,FPGA的独特优势在于其可重新配置能力。这也解释了为什么目前很多学术资源研究如何将FPGA高效地用于NN实现:由于其可编程性,FPGA是唯一允许研究人员试用和演示(除了仿真之外) 其新神经网络硬件实现的平台。
如果运行的算法和模型确定,且商用的发货规模足够大,足够可以摊薄一次性研发和投片的成本,那么ASIC将是首选,因为相比之下,FPGA价格昂贵,速度较慢且功耗相对更高。但是目前很多应用场景例如自动驾驶,使用的神经网络算法并不确定,而且制造工艺往往要求非常高,所以一次性研发和投片成本很高,使用ASIC便不是最经济实惠的方式。
而在FPGA上在针对于相同的 NN进行优化后,在速度方面可以接近高端GPU,但它需要更多工程化的工作量。因此,在早期NN模型探索阶段,为了快速周转地试验NN模型,使用高端最先进的FPGA相对通用 GPU  或NPU会更有效率。
这使得以下应用FPGA比ASIC和GPU具有独特的优势:
  • 用于 ASIC开发的数字逻辑的原型设计和测试
  • 一些最新研究的算法通过FPGA搭建自研的数字集成电路并进行演示
  • 在没有等效的ASIC可用,或者需要重新配置硬件的情况下,使用FPGA进行中小批量和高价值商业应用
与有线或无线通信等应用中为确保互操作性所需的实时处理不同,图像处理NN的FPGA实现通常不需要满足不灵活的时钟速度要求。每秒可以处理的最大帧数受到逻辑综合后实现的最快时钟频率所限制,通常其频率要慢于GPU或者AISC,但即使时钟频率,但是在功能上仍然能保持一致性,可以用于验证电路逻辑的有效性。
本文下面会对 FPGA与ASIC/GPU NN实现进行定性的比较。通常在不同的硬件之间进行同等的比较比较困难,因为最终表现的性能不仅取决于算法实现方法,还取决于所使用的特定设备。此外,GPU和FPGA技术的快速发展以及新一代设备的不断出现也时刻改变着竞争格局。

二、为什么选择FPGA?

如图所示神经网络实现的硬件架构范例。GPU是具有高灵活性的通用硬件;但是其利用率/效率相对较低,ASIC专用集成电路可以实现极高的效率和特定算法的集成化,但是不具备灵活性,可以支持的算法范围较少。
而FPGA介于GPU和ASIC之间。FPGA不会在实现神经网络的所有指标上都“击败”GPU和ASIC,但在某些方面,FPGA具有独特的优势,例如高能效和高灵活性,这些特点可以使FPGA支持大量的加速方法,如量化、稀疏性和数据管道优化等。
总之,对于快速发展的神经网络算法,FPGA将是ASIC数字逻辑原型设计以及测试和技术演示的最佳平台。


2.1 用于神经网络实现的FPGA与ASIC的对比

与ASIC相比,在同一工艺节点上具有相同逻辑功能特性的FPGA速度更慢,更耗电,单位成本更高:但是这是必要付出的代价,以换取FPGA可配置性。
对比ASIC设计和制造需要很长时间并且价格昂贵,而FPGA是可以直接获取的。因此,在中小批量和高价值应用中,FPGA比ASIC更可取,因为它们可以满足所需的容量和I/O功能,尤其是在需要硬件需要灵活可重新配置的情况下。
此类应用的一个例子是SmartNIC,Xilinx和英特尔都为AI场景下其提供了专用产品。

由于ASIC硬件不能像FPGA那样重新配置,因此在ASIC上,最好使用灵活可以执行不同模型的NPU,而不是硬编码和只支持优化特定模型的NPU。
在ASIC中,加速特定NN算子的数字硬件模块可以与通用NPU一起使用。尽管这些模块的架构是固定的,但它们还是可以在一定程度上进行配置:例如,接受不同的权重,或在任何给定时间执行一组可支持的算子当中的某一个。

2.2 用于NN实现的FPGA与GPU/NPU 的对比

GPU和NPU通常具有一组通用处理单元(张量核),并且NN由专用编译器映射在PE上部署执行。
对于运行专门针对FPGA优化的模型,FPGA可能比GPU更节能。这是因为 可以为FPGA设计专用逻辑块,以使用细粒度的量化来缩小特定模型的计算量而保持精度不变,而GPU/NPU则仅支持有限的量化的手段。

现代GPU卡具有大量非常快的内存(例如安装了GDDR),相比来说,FPGA则具有相对较少的片上内存(例如Xilinx器件中的“BlockRAM”)。为了存储模型权重,FPGA实现通常使用外部DDR SDRAM。一般来说,  FPGA实现中使用的外部存储器比GPU中使用的内存的访问速率要慢。
甚至英特尔和赛灵思也承认,FPGA在所有性能指标上都不比GPU好。但是英特尔也指出,与GPU相比,FPGA在低延迟,硬件定制,接口灵活性和功耗方面具有优势。由Berten DSP进行客观评估也给出了相似的结论如下图所示。


三、面向 FPGA 的 NN 模型优化技术

文献[3]分析了可用于为FPGA(或ASIC)实现准备神经网络的优化技术:
  • 模型压缩
1、权重量化
  • 可以量化低至1-2位,精度损失有限
2、权重裁剪
  • 如果在训练时考虑修剪,则由于修剪而导致的准确性损失会减少
3、矩阵分解SVD
在使用矩阵乘法的情况下,通过使用奇异值分解(SVD) 降低矩阵秩来减少权重和乘法的数量
  • 硬件架构优化
1、循环优化
2、数据流
3、层间融合
  • 降低复杂性的卷积实现,例如FFT和Winograd等方法


3.1 FPGA用于CNN网络加速

如表1所示列举了几种典型的基于CNN的神经网络的参数规模和计算量 。

针对于表1列举的几种典型的神经网络,收集了多种针对于CNN网络的FPGA实现方案。

从上表中我们可以看出文献【1】实现所有已知针对CNN的论文中最高的计算效率,比起其他最接近的FPGA实现方案提升了2-4倍的吞吐率和时延,并且在ImageNet的数据集上实现了3000FPS的推理速度。其主要的原因是通过在FPGA上的偏平数据流flatten streaming硬件架构加上多精度混合量化等软硬件协同设计,极大地降低了模型的尺寸以及计算复杂度。
当前大部分的CNN的加速器包括NPU都是采用同构的大规模脉动阵列。使用此体系结构,可以在不同的 PE或 PE集上并行处理多个映像的批处理。NN层可以通过重复使用相同的硬件来按顺序处理,每层具有不同的配置/权重。例如,NVIDIA GPU包括“张量核心”。此外,赛灵思和英特尔都提供带有专用硬AI模块的FPGA,可用于实现PE阵列。每个PE的复杂度可以调整:低复杂度的PE可以 只包含一组乘法/累加器,而较高复杂度的PE可以是一个小型指令集可编程处理器。因为许多不同的卷积层重复使用相同的硬件计算单元,所以脉动PE阵列的是分时复用的。然而,不同的卷积层输入数据大小、通道数、卷积核大小以及不断出现例如depthwise等新兴的卷积结构都使得在单个大型计算核心上实现高效越来越困难。
因此,在文献【1】中采用了另外一种硬件架构方式,将CNN网络按照各层进行拆解并且在按照流水线的方式stream到不同的计算单元中。每一个计算单元都是激活值输入驱动的,为了

如下图所示3个不同的卷积层(L1,L2,L3)分别在同构脉动阵列以及扁平化架构上的实现方式。在同构脉动阵列架构下采用一个大型的PE阵列的计算单元C,而扁平化架构则采用了3个较小的计算单元C1,C2和C3。由于3层卷积的大小尺寸各不相同,采用单个大型同构阵列架构会使得计算单元出现空闲的部分,从而硬件利用率低下。而扁平架构的下有多个不同大小的计算单元适配各个卷积层尺寸,因此充分利用硬件资源。如下图所示,同构阵列架构需要4个cycle才能完成3个卷积层的计算,而扁平架构只需要2个cycle。

在扁平架构设计的基础上,结合混合多精度的量化以及更多逻辑单元的FPGA甚至多块FPGA级联,作者提出一种自动化的工具框架可以将完整的CNN网络映射到FPGA当中。该框架首先使用自研的算法对预训练好的CNN模型进行多种精度下的定点化和偏移搜索,由此产生出量化后并能满足精度要求的优化后模型。也正是因为该扁平架构中由多个计算单元组成,所以可以每个计算单元可以使用不同的带宽精度进行量化,以确保精度损失最低同时也能压缩模型计算量。在上述阶段中,该框架同时也会对硬件资源进行精准的估计,包括时延,LUT以及BRAM的使用率等等。在根据产生的优化模型和资源估算后,该框架会根据事先准备好的verilog库产生systemVerilog并最终经过综合后生成FPGA硬件文件。


3.2 FPGA用于Transformer网络加速

如表3所示列举了几种典型的基于tansformer的神经网络的参数规模和计算量。

针对于表3列举的几种典型的神经网络,收集了多种针对于transformer网络的FPGA实现方案。

在上表中的实现方案中,文献【18】达到的功耗和硬件效率最高,其主要是针对transformer网络中attention模块以及前向传播网络(FFN)也叫多层感知机(MLP)进行优化。
在transformer网络中的典型self-attention公式表达如下图所示,self-attention模块中对于矩阵乘,如果有序列长度为n,那么时间复杂度就为O(n^2),同时也会消耗_N_^2的时间和存储。

前向传播网络(FFN)的结构图如下所示,分为输入层,隐藏层和输出层。其中每一层有若干个神经元,因此每层都会定义权重矩阵,具体计算细节在此不展开,重点是每层之间的计算本质也是矩阵向量乘。

针对于attention以及FFN模块当中都存在矩阵矩阵乘以及矩阵向量乘的计算,而对于矩阵进行稀疏分解是减少矩阵计算复杂度和存储空间的有效方法,即每个矩阵特定的结构都有一个压缩的表示,并相应地可以实现一个较小复杂度的乘法算法,而不是消耗O(n^2)计算复杂度的大小的矩阵向量乘法算法。

如下图所示目前学术界有多种不同的方式稀疏方案近似矩阵乘,包括有低秩(low Rank)、滑窗(Sliding Window)、蝶式(Butterfly)、随机(Randon)以及分块(Block-Wise)。

选择采用何种矩阵压缩的方式主要考虑几点因素,首先,能否在单一稀疏模式下同时捕获局部和全局信息;其次,稀疏或者压缩模型能够对于硬件设计足够友好;最后,稀疏或者压缩模式能否同时支持attention机制以及前向传输网络FFN两者需求。
对比几种矩阵压缩和稀疏方式,蝶式矩阵分解模型能够满足以上几点要求,即矩阵可以通过log(N)个稀疏的蝴蝶因子矩阵乘积来表示,可以将计算复杂度和内存复杂度从O(N2)降低到O(N logN)。

文献【17】提出了一种名叫FABNet的基于betterfly的网络架构,该架构由ABfly和FBfly两种块混合而成。其中ABfly模块主要是通过蝶式变换来实现,保留了attention模块的主干,并使用蝶式分解压缩了所有的线性层。ABfly块从三个蝶式线性层开始,生成Q, K和V矩阵后被输入到一个vanillamulti-headattention层和获得不同token之间的关系的另一个蝴蝶线性层中,最后由两个蝶式线性层组成的蝴蝶前向传输网络(FFN)进行额外的处理。而为了进一步提升硬件的效率,除了ABfly之外,网络中还有FBfly模块,该模块中首先有通过快速傅里叶变换(FFT)实现了2D傅里叶变换,将不同的输入token进行了有效地缓和,这使得FBfly模块后续的蝶式前向传输网络(FFN)可以处理更长的序列,尽管傅里叶变换可能使得精度受损,但是比起蝶式变换使用了较少的计算和存储消耗。FBfly和ABfly在网络中的数量可以作为超参进行配置,以寻求达到精度和效率的最佳平衡。

针对于transformerbased的可适应蝶式硬件加速器架构如下图所示,主要由Butterfly Processor(BP), Attention Processor(AP),Post-Processing  Processor (PostP)以及on-chip buffer等等组成。BP又包含了多个Butterfly Engine(BE),主要用来针对蝶式变换以及快速傅里叶变化进行加速。AP包含了多个Attention Engien(AE),而每个AE又由一个QK单元和SV单元组成。QK单元是用来计算query和key之间的矩阵乘以及softmax,而SV则接受来自QK单元的输出并且乘以Value向量产生attention最终的结果。

如上文提到的FABfly网络当中的ABfly模块和FBfly模块的数量可以作为超参进行配置。基于这两个参数,开发了一种软硬件协同设计方法如下图所示,实现了神经架构和硬件设计的设计空间探索。


四、结论

本文分析了FPGA和GPU以及ASIC的对比,FPGA不会在所有指标上“击败”GPU和ASIC来实现NN。通过列出多种FPGA实现神经网络加速器的方案,以及针对于CNNbased和transformerbased两个具体实例分析,FPGA在软硬件协同设计实现模型量化和稀疏化具有有独特的优势,即使最终产品商业化可能会采用ASIC形态,FPGA仍然是ASIC数字逻辑原型设计以及测试和技术演示的最佳平台。




原作者:Shawn、Andrew


更多回帖

发帖
×
20
完善资料,
赚取积分