【读书笔记】《深度神经网络FPGA设计与实现》(孙其功)第五章 FPGA神经网络开发基础

1. FPGA开发简介

可以使用硬件描述语言(Verilog、VHDL)或C/C++/OpenCL语言编写程序并烧录到FPGA上。通过这种方式对FPGA上的门电路以及存储器之间的连线进行调整,从而修改它的功能。这种烧录是可重复的,它给算法程序的设计、实现和优化留出了更多的空间,解决了ASIC灵活性不足的问题。在算法需要不断改进或者芯片需求量不多的情况下,FPGA大大地降低了从算法编程到芯片电路的调试成本,是实现半定制人工智能芯片的最佳选择之一。

2. FPGA的结构特性与优势

(1) 原始计算能力

Xilinx的研究表明,Ultrascale+TM XCVU13P FPGA(38.3 INT8 TOP/s)与目前最先进的 NVidia Tesla P40加速卡以基础频率运行(40 INT8 TOP/s)相比,具有几乎相同的计算能力。片上存储器对于减少深度学习应用中的延迟是至关重要的,FPGA可以显著提高计算能力。大量的片上高速缓存可以减少与外部存储器访问相关的内存的瓶颈,以及高内存带宽设计的功耗和成本。

Xilinx的研究表明,Ultrascale+TM XCVU13P FPGA(38.3 INT8 TOP/s)与目前最先进的 NVidia Tesla P40加速卡以基础频率运行(40 INT8 TOP/s)相比,具有几乎相同的计算能力。片上存储器对于减少深度学习应用中的延迟是至关重要的,FPGA可以显著提高计算能力。大量的片上高速缓存可以减少与外部存储器访问相关的内存的瓶颈,以及高内存带宽设计的功耗和成本。

(2) 效率和功耗

FPGA以其功效而闻名。研究表明,Xilinx Virtex Ultrascale+在通用计算效率方面的性能几乎是NVidia Tesla V100的四倍。GPU耗电的主要原因是它们需要围绕其计算资源的额外复杂性以促进软件的可编程性。虽然NVidia Tesla V100利用针对深度学习的Tensor操作设计的Tensor内核提供了与Xilinx FPGA相当的效率,但是也无法估计NVidia的Tensor内核的设计是否能在快速发展的深度学习领域保持有效。

(3)灵活性和易用性

GPU中的数据流由软件定义,由GPU的复杂内存层次结构(如CPU的情况)指导。当数据通过存储器层次结构时,与存储器访问和存储器冲突相关的延迟和功率迅速增加。另一个重要的事实是GPU的架构,即单指令多线程(Single Instruction Multiple Threads,SIMT),该功能允许GPU比CPU更节能。但是,很明显,在接收大量GPU线程的情况下,只有部分工作负载可以有效地映射到大规模并行体系结构中,如果在线程中找不到足够的并行性,则会导致性能降低。FPGA可以提供更灵活的架构,这些架构是DSP和BRAM(Block Random Access Memory,块随机存取存储器)模块混合体的硬件可编程资源。

(4)功能安全

GPU最初的设计是用于不需要安全的图形和高性能计算系统中,但某些应用程序(如高级驾驶辅助系统,Advanced Driver Assitance Systems,ADAS)却需要功能安全性。在这种情况下,GPU的设计应满足功能安全要求。对于GPU供应商来说,这可能是一个耗时的挑战。而FPGA已用于功能安全在其上起着非常重要的作用的行业,如自动化、航空电子和国防。因此,FPGA的设计旨在满足包括ADAS在内的广泛应用的安全要求。

3. FPGA深度学习神经网络加速计算的开发过程

(1) 神经网络模型计算量分析

神经网络模型由多层神经网络层组成,其他每个神经网络层的基本结构可参见如下公式。根据公式我们可以看出,网络模型中每一层的大量计算是上一层的输出结果和其对应的权重值这两个矩阵的乘加运算。
        Yi = Xi × Wi + Bi
  式中:Yi 表示当前层输出;Xi 表示当前层输入;Wi表示当前层权重;Bi 表示当前层偏置。

计算平台系统有两个主要指标:计算力与带宽。其定义如下:
(1) 计算力(也称计算平台的性能上限):一个计算平台倾尽全力每秒所能完成的浮点运算数,单位是FLOPS。  (2) 带宽(也称计算平台的带宽上限):一个计算平台倾尽全力每秒所能完成的内存交换量,单位是B/s。

神经网络模型同样有两个主要指标:计算量与访存量。其定义如下:
(1) 计算量(也称时间复杂度):输入单个样本(对于CNN而言就是一幅图像),模型完成一次前向传播过程所发生的浮点运算数,单位是FLOPS。
(2) 访存量(也称空间复杂度):输入单个样本,模型完成一次前向传播过程所发生的内存交换总量,单位是字节(B)。

在神经网络模型中,我们常用的网络层有卷积层、POOL层、Plat层、激活层、全连接层等,为了更方便得出理论性能,这里只讨论常用网络层计算量的计算。
卷积层的计算量公式为:
卷积层计算量 = Pow(M, 2) × Pow(K, 2) × Cin × Cout

式中:M表示每个卷积核输出特征图的边长;K表示每个卷积核的边长;Cin 表示每个卷积核的通道数,即输入通道数,也即上一层的输出通道数;Cout 表示本卷积层具有的卷积核个数,也即输出通道数。

全连接层的计算量公式为

全连接层计算量 = H × W

式中:H表示当前层权重矩阵的行数;W表示当前层权重矩阵的列数。
对于常用的神经网络模型,这里以VGG16模型为例来说明。VGG16模型由13层卷积层与全连接层组成,其网络模型如图所示。
在这里插入图片描述
VGG16模型运行时,输入一幅224 × 224的RGB图像,经过预处理后,得到(224,224,4)的特征数据,再经过卷积层后,特征数据尺寸越来越少,通道数越来越多,卷积层随后平展开来,经过全连接层,最后输出1000种分类概率情况,通过每种分类的概率情况便可得知该图像的分类。VGG16模型运行数据规模图如图所示。
在这里插入图片描述
VGG16模型运行数据规模图

以此类推,便可得到VGG16模型的计算量,如表所示。
在这里插入图片描述

4. 神经网络模型访问带宽分析

神经网络模型带宽,也就是模型的空间复杂度,严格来讲包括三部分:输入量、参数量、输出量。

(1)输入量:

输入特征图的数据量的总和,其计算公式为

在这里插入图片描述

式中:I为在卷积层时输入特征图的边长;C为在卷积层时输入特征图的通道数;H为在全连接层时当前层输入矩阵的行数。

(2)参数量:

模型所有带参数的层的权重参数总量(即模型体积),其计算公式为
在这里插入图片描述
式中:K为在卷积层时每个卷积核的边长; Cin 为在卷积层时每个卷积核的通道数,也即输入通道数;Cout 为在卷积层时本卷积层具有的卷积核个数,也即输出通道数;H为在全连接层时当前层权重矩阵的行数;W为在全连接层时当前层输出矩阵的列数。

(3)输出量:

输出特征图的数据量的总和,其计算公式为
在这里插入图片描述

式中:O为在卷积层时输出特征图的边长;Cout 为在卷积层时本卷积层具有的卷积核个数,也即输出通道数;W为在全连接层时当前层输出矩阵的列数。

5. 加速硬件芯片选型

根据产品需求对相关功能模块进行器件选型时,应该遵循以下原则:

(1) 开源性原则:

尽量选择有开源IP的芯片。

(2) 普遍性原则:

元器件要被广泛使用和验证过,尽量少用冷偏芯片,减少开发风险。

(3) 高性价比原则:

在功能、性能、使用率都相近的情况下,尽量选择价格低的器件,减少成本。

(4) 采购方便原则:

尽量选择容易买到、供货周期短的元器件。

(5) 持续发展原则:

尽量选择在可预见的时间内,不会停产的、生命周期长的元器件。

(6) 可替代原则:

尽量选择有较多可替代型号的元器件。

(7) 向上兼容原则:

尽量选择被大量使用或者在市场上应用较为成熟的器件,减少开发风险。

(8) 资源节约原则:

器件资源选择以满足设计需求为原则,以节约成本。

(9) 归一化原则:

尽量精简器件种类,方便产品化后的批量生产和器件采购,减轻供应链压力。

一般情况下,加速硬件产品的选型一般涉及FPGA、DDR、CPLD、Ethernet Phy、Flash、EEPROM、时钟IC、电源芯片等主要器件。

FPGA芯片选型

2.FPGA芯片选型应该从器件资源、规模大小、速度、引脚、IP的可用性、器件的生命周期和功耗等方面来评估。
(1) 器件资源:评估是否需要高速接口,需要多少个通道,每个通道的最高收发速度为多少,是否需要DSP模块和RAM模块。
(2) 规模大小:把功能模块、IP核以及调试过程中耗费的资源评估进去,再留出20%~30%的余量即可。
(3) 速度:分析功能需求和平衡资源后,估算速度等级要求,然后留出一定的余量即可。
(4) 引脚:设计时需要评估I/O引脚数量、接口类型、标准和驱动强度以及外部接口的电气标准,以此来选择适合的FPGA封装和类型。
(5)  IP的可用性:选型时应注意芯片厂家的IP核是否足够多以覆盖设计,是否能免费提供。因为IP可以大大缩短开发周期,降低开发成本。
(6) 器件的生命周期:选型时应注意芯片的生命周期,防止选到将要停产或者已停产的芯片。
(7) 功耗:根据设计的功能需求,确定FPGA需要使用的电源。

内存芯片选型

内存芯片选型需要根据系统的设计需求,以及确认FPGA主芯片能支持的类型和参数,从SDRAM种类(例如DDR4 SDRAM)、内存容量、数据位宽、内存速率等方面进行选择。

CPLD芯片选型

CPLD芯片可以实现对系统和单元的管理,主要功能包括实现对FPGA的配置、电源管理、温度监控、锁相环配置、单板信息和日志管理等。

时钟芯片选型

时钟芯片应该根据系统需求和系统时钟拓扑,选择满足功能需求的、低噪声的芯片。

电源芯片选型

电源芯片选型也应根据系统的电源分配网络和功能器件的规格需求,确认电源设计的电源类型、电压、电流、上下电时序等设计参数,进而选择适合本系统的电源模块和具体型号。

6. 加速硬件系统设计

SC-OPM产品的设计规格如表所示。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
SC-OPM加速卡的系统框图如下图所示。该系统主要包括FPGA逻辑模块、3个DDR4内存模块通道、1个PCIE3.0 8X接口、2个40 GB高速互连接口,以及存储、时钟、电源等模块。
在这里插入图片描述

7. FPGA在深度学习方面的发展

(1)计算密集型任务

计算密集型任务包含矩阵计算、图像处理、机器学习等内容。一般将计算密集型任务通过CPU下发到计算板卡(GPU、FPGA等)中。Intel Stratix V FPGA 的整数乘法运算性能与20核的CPU基本相当;浮点乘法运算性能与8核的CPU基本相当,但比GPU低一个数量级。新一代的FPGA Intel Stratix 10将配备更多的乘法器和硬件浮点运算部件,从而在理论上可达到与现在的顶级GPU计算卡旗鼓相当的计算能力。

(2)通信密集型任务

通信密集型任务指的是需要从外部不断交换数据的计算任务。传统的通信方式是CPU中的数据包需要经过网卡进行接收,然后下发到GPU上进行计算,得到计算结果后通过网卡发送出去。这就凸显了FPGA任意的I/O连接的优势。FPGA的收发器可以直接连接网线,以网线的速度进行数据处理,而不必经过多级的数据转发。

现在国际上的主流厂家有Xilinx、Intel、Lattice和Microsemi。FPGA被广泛运用在单设备电动控制器、视频传输、无线技术和高性能计算等领域。FPGA在深度学习中的研究大致可以分为四个部分:对特定的应用程序进行加速,对特定的算法进行加速,对算法的公共特性进行加速,以及带有硬件模板的通用加速器框架。对于前两种情况,现有的设计较为普遍,难度相对较小;后两种仍处于探索阶段,虽未被普及,但具有巨大的发展潜力。

🚀 获取工程代码及更多详细资料可点击链接进群领取,谢谢支持!👇

点击免费领取更多资料

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值