关键词:
FPGA
卷积神经网络加速器
并行计算
多线程计算架构
摘要:
卷积神经网络作为深度学习的重要算法之一,具有复杂的网络结构,强大的特征学习能力以及特征表达能力,并且已广泛应用到计算机视觉处理,自然语言识别和大数据分析等多个领域。基于卷积神经网络的深度学习应用分为训练和推理两个任务阶段,两个阶段都属于计算密集型,目前主要部署于高性能处理器集群上运行,如CPU、GPU和服务器等。如今,卷积神经网络已广泛应用到智能手机、无人驾驶和物联网等领域,但庞大的网络模型和过高的功耗与硬件设备能力不匹配的问题日益突出。因此,具有高能效比的卷积神经网络加速器设计成为目前的主要研究。针对上述存在的问题,本文对卷积神经网络压缩与硬件加速问题进行了研究,提出了基于FPGA(现场可编程门阵列)平台的多线程加速器设计方法。本文主要研究内容如下:首先,面向卷积神经网络计算,针对常见的网络模型计算存在冗余的问题,本文深入分析和研究了网络优化方法和参数优化问题。对于网络模型优化,在现有的网络基础上加入批量归一化作为网络模型结构的一部分,重新设计了网络结构层,有效地解决了网络梯度爆炸问题,加快网络收敛,从而减少训练次数。在网络执行推理任务时,针对网络模型参数冗余导致计算时间太长情况,文中提出了LASSO回归的通道选择算法,通过最小化输出特征映射的重建误差方法来剔除冗余通道。并且为了更快速的在硬件平台上计算,本文采用了Q格式浮点数动态定点量化的参数优化方式,进一步压缩了网络参数占用空间,提高网络计算效率。其次,对卷积神经网络计算过程中的并行性进行多线程优化分析,在卷积层的计算任务中,通过对常规空间卷积计算的加速器研究,深入分析了执行推理阶段任务的计算特点及数据传输问题,提出了多线程并行计算架构,分别在各参数级、通道级和层级上分析计算的并行性。基于流水线计算策略,对同一卷积运算过程采用缓冲器的方式,进一步减少了与外部设备数据交互的时延问题,高效地利用了FPGA(现场可编程门阵列)的计算资源;在数据存储方面对不同分块方式的片外访问数据量进行分析,对卷积的输出高度和通道进行分块,分析了不同数据复用情况下的数据量访问,对硬件加速结构在数据访存设计上提供了理论支持。最后,对卷积神经网络计算以及各模块之间的硬件资源分配提出设计方案。本文采用Xilinx XC7Z020嵌入式平台,针对卷积运算的并行性提出了网络多线程计算架构,实现卷积滑动窗口与输出通道的二维并行计算。该计算架构将计算阵列抽象为流水线计算,每个线程处理一个滑动窗口。线程内部实现多个输出维度的并行计算,线程之间实现滑动窗口并行计算。并且该方案根据不同的分块方式实现内部特征图复用,线程之间权重复用,减少了片上内存及访问带宽的需求。实验以Alex Net和VGG16为目标网络,在使用卷积神经网络进行图片识别的应用场景中,分析了FPGA在不同网络结构中计算资源的占比情况,对比了以CPU、GPU为硬件基础的卷积神经网络运算数据。相较于CPU方案,本方案能够大幅度提高计算效率;对于GPU方案,本设计能够实现在计算效率不会大幅度下降的前提下降低了系统的功耗,有效的降低了能效比。