-
摘要:
联邦学习作为一种新兴的分布式机器学习方法,保证了物联网(Internet of things,IoT)设备在数据不出本地的前提下,仅通过传递模型参数来共同维护中央服务器模型,从而达到保护数据隐私安全的目的. 传统的联邦学习方法常常在基于设备数据独立同分布的场景下进行联合学习. 然而,在实际场景中各设备间的数据样本分布存在差异,使得传统联邦学习方法在非独立同分布(non-independent and identically distributed,Non-IID)的场景下效果不佳. 面向Non-IID场景下的混合数据分布问题,提出了新型的联邦自适应交互模型(federated adaptive interaction model,FedAIM)框架,该框架可以同时对不同偏置程度的混合数据进行自适应地交互学习. 具体来说,首先,通过引入陆地移动距离(earth mover's distance,EMD)对各客户端的数据分布进行偏置程度度量(bias measurement),并设计极偏服务器和非极偏服务器2个模块分别处理不同偏置程度的数据分布. 其次,提出了基于信息熵的模型参数交互机制,使得FedAIM可以有效地聚合极偏服务器和非极偏服务器产生的模型参数,从而有效提高模型的准确率和减少服务器之间的交互轮次. 经实验表明,FedAIM在Non-IID混合数据分布场景下的MNIST,Fashion-MNIST,CIFAR-10,SVHN,FEMNIST数据集上准确率均优于已有方法.
Abstract:Federated learning is an emerging distributed machine learning method that enables mobile phones and IoT devices to learn a shared machine learning model with only transferring model parameters to protect private data. However, traditional federated learning models usually assume training data samples are independent and identically distributed (IID) on the local devices which are not feasible in the real-world, due to the data distributions are different in the different local devices. Hence, existing federated learning models cannot achieve satisfied performance for mixed distribution on the Non-IID data. In this paper, we propose a novel federated adaptive interaction model (FedAIM) for mixed distribution data that can jointly learn IID data and Non-IID data at the same time. In FedAIM, earth mover's distance (EMD) to measure the degree of bias for different client users is introduced for the first time. Then, an extremely biased server and a non-extremely biased server are built to separately process client users with different bias degrees. At the last, a new aggregation mechanism based on information entropy is designed to aggregate and interact model parameters to reduce the number of communication rounds among servers. The experimental results show that the FedAIM outperforms state-of-the-art methods on MNIST, CIFAR-10, Fashion-MNIST, SVHN and FEMNIST of real-world image datasets.
-
随着边缘智能的发展,将深度神经网络部署在边缘低功耗设备来解决实际问题的需求愈加迫切[1]. 卷积神经网络(convolutional neural network, CNN)是典型的深度神经网络,在目标检测、图像分类和语义分析等领域广泛应用[2-4]. 然而,由于CNN模型计算量庞大通常在GB数量级[5],而且CNN中主要计算类型与计算量集中在卷积操作[6],其大量的乘累加计算与庞大的模型参数量对资源受限的边缘智能设备的模型部署带来了严峻挑战.
现场可编程门阵列(field programmable gate array, FPGA)凭借其灵活的设计模式和高效能优势,成为边缘智能领域部署深度学习各类模型及应用的理想平台[7-9]. 然而,各类FPGA平台资源十分有限. 因此,以往FPGA加速器设计时,针对深度神经网络模型计算量及参数量庞大的问题,主要通过2类方法来解决[10]:一类是通过神经网络压缩(如模型量化和模型剪枝),来减少模型的参数并降低计算复杂度[11-14];另一类是通过改进卷积的计算方式,获得轻量级的神经网络模型来降低计算量[15]. 此外, 在部署模型到硬件加速平台时,期望借助主流的神经网络推理框架如TensorFlow[16], PyTorch[17]等,以便缩短研发周期、实现快速部署[18]. 但是,传统的深度神经网络加速器设计及框架优化方法在面对资源受限的FPGA平台时,以CNN为例往往存在3个挑战:
1)神经网络模型所包含的算子操作类别愈发多样,FPGA平台需要为多种算子进行独立的硬件设计,资源消耗代价高昂. 例如,MobileNet[19]采用深度可分离卷积来代替传统卷积操作以降低参数数量和计算复杂度. 深度可分离卷积可分为2种不同的计算方式,即逐通道卷积和逐点卷积[19]. 逐通道卷积在计算输出特征图时只关联单一通道的输入特征图,而逐点卷积关联所有的输入特征图到每个输出特征图中. 传统的FPGA加速器针对这2种不同的卷积操作分别设计不同的IP核进行计算加速[20-21]. 然而,作为边缘设备的嵌入式FPGA资源往往受限,无法支撑分别为逐通道卷积和逐点卷积进行单独的硬件设计.
2)传统的CNN加速器设计方案对FPGA带宽资源利用不充分、数据交换通信代价高,尤其针对低位宽数据缺乏良好的处理机制. 以往的研究工作通常采用切片方法将无法部署于FPGA的大块数据的计算分解为多个小块数据的计算,并通过优化数据交换机制来减少片上存储与片外存储之间的通信代价[18,22],以便将模型部署于嵌入式FPGA. 这些方法中,经过量化操作后其推理任务所使用的数据通常是低位宽的定点数. 然而,在片上与片外数据交换过程中,由于缺少对低位宽数据的有效组织,导致带宽资源利用不充分、并行读写效率低,从而成为制约高效计算的瓶颈. 此外,直接封装多个低位宽数据为单个高位宽数据会降低FPGA端并行解码的执行效率. 尽管采用独立分布的硬件资源可以满足并行解码的需求,但会造成碎片化的数据存储方式[23-24],导致需要大量片上存储资源才能满足并行解码需求,资源代价高昂.
3)边缘智能设备种类繁多且资源受限,嵌入式设备的资源相比于云中心设备是极端匮乏的,而传统的深度学习推理框架往往针对的是GPU等资源丰富的目标推理平台[16],难以对边缘智能设备提供支持. 由于目标设备与推理框架的特性不一致,导致模型部署时经常出现数据格式不匹配、算子描述不一致、计算流程定义各异等诸多无法规避的技术问题,从而严重降低边缘智能设备的推理性能. 尽管推理框架如TensorFlow Lite, Paddle Lite[25]也可支持模型部署到嵌入式平台,但这些端侧框架在部署模型到FPGA平台时,其经过量化压缩后的神经网络模型的量化算子和非量化算子之间的数据类型描述存在差异,无法调度量化算子到FPGA上进行加速,进而造成模型计算中存留大量碎片化的计算图[24]. 这些大量的计算图将会导致CPU与FPGA这2种执行环境频繁切换,而每次执行环境的切换都将引入数据的拷贝和预处理操作,从而降低整体的模型推理性能.
为解决这3个挑战,提出一种面向嵌入式FPGA的卷积神经网络稀疏化加速框架(sparse acceleration framework of convolutional neural network, SAF-CNN),并将SAF-CNN的FPGA加速器设计和部署方法与推理框架优化方法实现为组件,在开源深度学习框架Paddle Lite中进行集成与优化,实现了CNN的快速部署. 验证了SAF-CNN在Intel CycloneV和Xilinx ZU3EG这2种资源受限的FPGA平台上的推理性能. 实验结果表明,SAF-CNN在2种平台分别最大可实现76.3GOPS和474.3GOPS的计算性能. 与多核CPU相比,针对目标检测模型推理,SAF-CNN在这2种平台可提升推理速度最高达3.5倍与2.2倍. 其中,SAF-CNN在ZU3EG平台上可获得26.5 fps的优越性能.
本文的主要贡献包括3个方面:
1) 设计一种面向嵌入式FPGA的模型细粒度结构化块划分剪枝算法. 根据各时钟周期所需计算的权重元素,将权重矩阵划分为不同的块矩阵. 在块矩阵内进行输入通道维度上的结构化剪枝以获得稀疏的且规则的权重,从而实现时钟周期粒度上的负载均衡,避免计算流水线执行被阻塞.
2) 提出一种兼容深度可分离卷积的输入通道维度动态拓展及运行时调度策略. 根据硬件资源可支持的计算阵列处理单元数量,动态调整逐通道卷积权重的输入通道数量,并在运行时调度逐通道卷积与逐点卷积到相同的计算、存储和数据传输模块,从而实现高效的资源复用.
3) 提出一种针对量化CNN模型的硬件算子类型感知的计算图重构方法. 在量化模型的计算图中,依据硬件平台的算子库快速搜索数据类型存在差异的量化算子. 通过引入量化节点,增加硬件子图中的算子数量,进而减少CPU与FPGA执行环境的切换次数,降低不同平台数据拷贝和转换的代价.
1. 相关工作
面向嵌入式FPGA的稀疏化CNN加速框架研究主要涉及CNN模型压缩、CNN加速器设计,以及推理框架联合优化3个方面,其中模型压缩方法主要聚焦于CNN模型量化与CNN模型剪枝.
在CNN模型量化算法方面,其方法可分为低比特量化[11]、线性量化[26]以及非线性量化[27]三类. 低比特量化是通过极低的比特位数的量化来提高计算效率,模型权重通常只有1个或2个比特位,如二值化神经网络BNN[11]和三值化神经网络TWN[12]. 尽管二值化和三值化的神经网络可以实现更高的计算效率,但其精度下降严重,难以实际应用. 多比特的线性量化和非线性量化2类方法已经被成功用于各类神经网络模型和推理框架[14]. 线性量化首先寻找缩放因子,并将其数据缩放到目标范围,然后采用舍入操作实现阈值化处理. 与线性量化相比,非线性量化方法更适合处理神经网络中符合钟形分布和长尾数据分布的权值与激活值. 对于SAF-CNN,本文权衡模型精度与方法通用性,采用线性方法实现模型量化.
在CNN模型剪枝方面,通过裁剪CNN中冗余的参数,可有效减少CNN的存储参数并降低计算规模[28]. 剪枝方法可分为非结构化剪枝和结构化剪枝[29]. 非结构化剪枝将CNN中每个独立的连接看作为可被裁剪的对象,能够实现理想的剪枝率. 但是,其不规则的稀疏性难以适配通用硬件体系结构,通常需要进行硬件定制化设计[30]. 例如,Song等人[31]设计了基于高带宽存储器的稀疏矩阵向量乘的专用加速器,实现了以内存为中心的处理引擎,可支持稀疏的矩阵向量乘,但其严重依赖高带宽大容量的片上存储器,难以应用到边缘计算平台. 结构化剪枝则按照不同的粒度,将CNN权值划分为大小不同的结构进行相应裁剪,可在通用硬件体系结构下实现加速,但是剪枝率往往偏低[32]. 通道剪枝[33]和卷积核剪枝[29]是2类常用的结构化剪枝方法. 通道剪枝直接剪去输出通道的所有卷积核,生成的稀疏化模型可直接部署于现有神经网络加速器而无需修改硬件. 卷积核剪枝方法则是剪去固定输入通道的卷积核,其剪枝粒度相比通道剪枝的方法较细. 然而,通道剪枝和卷积核剪枝直接修改了模型的结构,其剪枝粒度仍旧难以实现较高的模型稀疏率. 细粒度剪枝通过构建专用的剪枝算法实现较高的稀疏率,以此可达到比肩非结构剪枝的效果[34]. 基于硬件感知的细粒度剪枝方法,例如块内剪枝[35],既可以缓解硬件效率低的问题,也可以提升模型的稀疏率. 对于SAF-CNN,本文权衡模型精度与硬件设计及其执行效率后,设计结构化的细粒度剪枝方法,获得稀疏化的CNN模型.
在嵌入式FPGA加速器设计方面,由于CNN卷积层的乘累加计算占据了模型中90%左右的计算量[6],因此基于FPGA的CNN加速器研究往往从计算和通信2方面对计算密集的卷积层进行优化[18].Wei等人[22]提出脉动阵列的架构实现卷积层计算,能够拓展到大规模计算平台加速卷积计算,大幅度降低推理延迟. Zhang等人[36]采用多种嵌套循环优化策略加速卷积层处理,如循环流水线、循环展开和循环平铺. 卢冶等人[37]从数据访问独立性的角度提出通道并行计算的方案,引入循环切割因子并在通道维度展开循环,利用数据流优化和缓存优化技术加速CNN的卷积计算. Lu等人[38]利用Winograd算法降低卷积层计算复杂度,提高卷积层的处理速度. 然而,文献[36-38]所述工作中的普通卷积计算加速器主要集中在输入输出通道维度来并行加速,对于深度可分离卷积的逐通道卷积不能进行计算,导致普通卷积加速器难以适用于深度可分离卷积. 对于设计支持深度可分离卷积的加速器,Wu等人[39]和Ding等人[21]相继提出逐通道卷积和逐点卷积的融合机制,实现跨层的融合优化,减少中间数据的通信带宽需求,提升深度可分离卷积的处理性能. 然而,这类融合机制的本质仍基于2个独立IP核,而且对模型的结构具有严格的约束,只适用于具有1×1卷积核的逐点卷积. Zhang等人[40]在处理深度可分离卷积时,对逐通道卷积和逐点卷积也采用2个IP核轮流工作. 这些工作都未针对逐通道卷积和逐点卷积设计可复用的计算引擎,导致较高的硬件资源代价. Yan等人[41]针对深度可分离卷积提出可配置加法树的方案,实现了逐通道卷积和逐点卷积共享计算引擎,但因缺少共享数据传输模块,导致资源消耗偏高. 对于加速器通信优化,ShiDianNao[42]将所有的模型参数存储于片上SRAM中,消除对DRAM的访问,但该设计需要较高存储资源,并不适用于大规模的CNN模型. FitNN[43]提出了一种跨层数据流策略来减少特征图的片外数据传输,基于资源受限的边缘设备实现低推理延迟,然而该策略只支持特定的模型结构,即只由逐通道卷积层、逐点卷积层和池化层共同构成的模型. 此外,Cong等人[6]分析了如何利用高位宽模式传输数据,将多个32b的字打包为512b的字,实现单周期传输多数据,最大化利用带宽资源. 但是,该方法没有考虑片上存储资源的分配方式,导致并行编码和解码消耗大量存储资源. 因此,本文在设计SAF-CNN时,采用资源复用方法,映射逐通道卷积与逐点卷积到可复用的硬件资源,然后设计通道维度上的并行编解码方法实现单周期传输多数据,在有限硬件资源上实现计算与数据传输效率最优.
在深度学习推理框架设计方面,通常会将神经网络的计算流程以计算图的方式呈现[44],在实际应用中计算图被定义为有向图,其中节点代表相应的计算操作,边代表数据的流入与流出. 深度学习框架中的计算图主要分为静态计算图和动态计算图[16]. 在模型开发时采用动态图编程以获得更好的编程体验、更易用的接口、更友好的调试交互机制[17]. 在模型训练或者推理部署时,通过添加装饰器将动态图代码转写为静态图代码,并在底层自动使用静态图执行器运行,获得更好的模型运行性能[25]. 主流深度学习训练框架PyTorch[17]采用动态计算图,TensorFlow[16]采用静态计算图,而PaddlePaddle[25]等新兴框架则采用动静融合的方案. 此外,推理框架的优化方法主要聚焦于:算子融合、内存优化、子图检测和生成、硬件平台相关优化、冗余算子删除、精度转换等. 对于FPGA加速器与深度学习框架集成实现联合优化方面,Li等人[45]集成卷积计算的前向传播算子和反向传播算子到TensorFlow的算子库中,加速CNN模型的训练和推理. FADES[46]提出一种针对TensorFlow Lite的稀疏矩阵和密集矩阵的硬件处理架构,支持CPU和FPGA异构加速器,并能从结构化剪枝中获益,进一步提升计算性能. Zhang等人[18]提出Caffeine,通过集成卷积计算和全连接计算的算子到Caffe框架的算子库中,来加速CNN模型的推理. 然而,FADES和Caffeine并未涉及计算图的优化,在推理过程中需进行数据转换,执行环境的频繁切换造成额外的时间代价. TVM[44]和Paddle Lite 的推理后端支持多种定制硬件平台,如NPU, ARM,x86,MLU等神经网络加速器,但是缺少对嵌入式FPGA的平台的支持. 因此,本文在设计SAF-CNN时也充分探索基于计算图的优化方法,既要发挥加速器计算性能高的优势,又要充分利用深度学习框架的可拓展性和通用性.
2. SAF-CNN稀疏加速器设计
本节首先介绍SAF-CNN稀疏化加速器的总体架构,然后着重就数据流设计、稀疏化计算引擎、数据存储与传输、算子资源复用4个方面,展开加速器设计思路和优化方法的具体论述,并阐明SAF-CNN稀疏加速器的优势.
2.1 SAF-CNN稀疏加速器架构
本文SAF-CNN所设计的FPGA架构如图1所示,包含数据引擎、片上缓存单元、指令单元、计算引擎及调度模块5个重要组成部分.
1) 数据引擎. 负责在片上存储和片外存储之间进行数据传输.FPGA加速器在运行过程中读取片外存储器中的输入特征图和模型权重参数,以及写出输出特征图,都需通过该模块进行数据传输. 此外,SAF-CNN采用高位宽的数据传输模式,单个周期传输多个字节,借此充分利用带宽资源.
2) 片上缓存单元. 片上存储器负责缓存输入特征图、模型权重参数以及输出特征图的数据,为计算单元提供并行访问的高带宽支撑. SAF-CNN采用了双缓冲的存储结构来实现计算与数据传输并行执行.
3) 指令单元. 在SAF-CNN框架中,卷积层的配置被转化为固定格式的指令. FPGA加速器启动时,通过指令单元获取卷积层的具体配置参数,并对硬件资源进行配置. 在加速器运行过程中,其他模块的执行都依赖指令的具体配置.
4)计算引擎. 对于从片上存储器读取的输入特征图和稀疏化模型权重参数,SAF-CNN的计算引擎通过乘法器和加法器来执行卷积操作,是卷积(conv)模块的核心. 此外,本文在SAF-CNN中设计了稀疏化的卷积计算模块,以此利用权重稀疏性来加速卷积层处理.
5) 调度模块. 对于深度可分离卷积的逐通道卷积和逐点卷积,SAF-CNN设计了可复用的计算引擎和数据传输模块,调度模块根据具体计算类型来决定数据传输模块所要读写的数据地址,以及计算模块的执行流程.
2.2 SAF-CNN数据流设计
由于片上资源受限,SAF-CNN采用数据分块策略来完成卷积层的计算. SAF-CNN的卷积计算数据流处理包含了3个模块,分别为加载(load)、卷积(conv)和存储(store). 在卷积操作完整的计算流程中,3个模块对应的子任务不断迭代执行. 例如,在每次迭代中,可先累加输入特征图与卷积核的卷积结果,得到输出特征图. 具体来讲,首先load模块加载必要的输入特征图数据和权重数据到片上存储器中. 然后,conv模块采用流水并行的稀疏化计算引擎对片上存储器中的数据执行卷积计算. 最后,在完成输出特征图的计算后,store模块写回输出特征图到片外大容量存储器中,而后进入到下一个输出特征图分块的计算过程.
数据流的相关处理如图2所示,其中oc, oh, ow分别表示输出特征图的通道数、行数和列数,ic表示输入特征图的通道数,kernel表示卷积核的大小. 受片上资源约束,SAF-CNN每次迭代只计算tn个通道、tr行和所有列的输出数据. 考虑到不同卷积层具有各自不同的行数和列数,SAF-CNN分配固定大小的片上缓存,tr则根据列的大小进行相应变化,以此保证所有的列可被完整计算. 通过这种设计,输入特征图和输出特征图的数据传输方能利用FPGA的猝发式[14]机制,从而充分利用带宽资源.
在conv模块执行卷积计算时,计算引擎沿着输入通道和输出通道2个维度同时并行. 输入通道并行因子和输出通道并行因子分别是tn和tm. 计算引擎使用tm个累加树, 通过共享tn个输入数据来计算得出tm个输出数据. 每个累加树包含了tn个乘法单元和tn−1个加法单元,负责计算1个输出元素. 通过并行tm个累加树,计算引擎可同时计算并得出tm个输出元素. 此外,由于SAF-CNN计算引擎采用深度流水线来提升吞吐率,每个周期都能计算出tm个输出元素. 通过设计并行和流水的硬件架构,SAF-CNN中的conv模块可以最大化资源利用率,并提升输入特征图分块的吞吐率.
为减少conv模块的数据准备等待时间,SAF-CNN将数据传输与计算进行并行,通过预先准备数据,从而掩盖数据传输的时间代价.对输入特征图、权重和输出特征图,SAF-CNN采用双缓冲存储结构来实现一边传输数据一边为conv模块提供数据.
2.3 稀疏化计算引擎
本节将详述SAF-CNN稀疏化计算引擎设计中剪枝方法如何择取、剪枝规则如何设定、剪枝后的数据如何保存,以及剪枝后如何进行计算.
1)对于剪枝方法的择取,考虑到conv模块中的计算引擎负责执行矩阵向量乘操作,共使用tm×tn个乘法器.具体来讲,如图2所示,对于一个权重张量W(tm行、tn列)和一个输入向量I(长度为tn),通过计算可得长度为tm的输出向量. 通过剪去张量W中冗余的权重参数,可以有效地降低乘法器的使用数量. 考虑到流水线过程中计算引擎的硬件资源不断被重复使用,非结构化的稀疏方式会造成不规则的存储访问和不均衡的计算负载,导致流水线被阻塞,而结构化的稀疏方式可避免此现象.因此,SAF-CNN稀疏化加速器采用结构化剪枝来保证每次参与计算的权重矩阵具有相同的稀疏率.
2)对于剪枝规则的设定,考虑到张量W的大小是oc×ic,conv模块的计算引擎每次计算的块大小是tm×tn,因此构建基于块的剪枝方法,可以保证每次计算的块具有相同的稀疏度. SAF-CNN的卷积层权重在输入通道维度所进行的块内结构化剪枝方法的具体细节如图3所示. 其中,每行元素的个数是ic,可划分为ic/tn个块,每个块包含tn个元素. 在每一块内,可设置固定的稀疏率,绝对值更小的元素则被置0. 此外,所有的行采用相同的稀疏率. 针对块内的每一行,tn个权重元素和tn个输入数据乘累加得到输出数据. 剪掉tn个权重数据中绝对值更小的项等价于舍弃tn个累加项中更小的项,这种方式可以有效地裁剪掉对输出数据影响更小的权重.
3)对于剪枝后的模型数据存储,为避免0元素参与计算,SAF-CNN对权重进行压缩处理,直接舍去0元素,例如图3中的block0可以压缩为4行1列的矩阵. 同时,SAF-CNN采用列索引方式保存非零元素的位置信息. 与CSR/COO[47]等稀疏化数据存储方式不同,块内结构化剪枝方法只需要保留列维度的位置信息. 考虑到量化后的权重数据为低位宽的定点数,索引数据使用的位宽定义为
⌈lb(tn)⌉ . 因此,权重的非零元素和对应的索引数据可以拼接在一起. 由于推理过程中,权重数据是固定不变的,因此压缩和拼接均在离线条件下完成.4)对于剪枝后的模型如何计算,SAF-CNN为充分利用权重矩阵的稀疏性,构建了稀疏化的计算引擎,负责稀疏化的矩阵向量乘操作. 稀疏化计算引擎的具体内容如图1所示,包含2个模块,采样模块和乘累加模块. 首先,片上的权重数据分离出非零权重矩阵和索引矩阵. 然后,索引矩阵和输入向量进入到采样模块,数据多路选择器根据索引矩阵从输入向量中挑选指定的数据得到输入矩阵,该矩阵每一行的元素是输入向量的子集. 接下来,具有相同元素个数的非零权重矩阵和采样模块生成的输入矩阵进行相乘,得到中间矩阵. 最后,累加中间矩阵的每一行,即可得到目标输出向量. 由此,SAF-CNN计算引擎设计充分利用了权重矩阵每一行具有相同的稀疏度的特点,即包含相同个数的非零元素,并使用相同个数的乘法器和累加器进行计算. 由于块内结构化的剪枝方法可使不同的分块具有相同的稀疏规则,因此,稀疏化计算引擎能够高效地处理所有分块,并且对不同分块具有相同的处理时间,可保证卷积计算流水线不会阻塞,即SAF-CNN所设计的稀疏化计算引擎中的乘法器和累加器都将处于忙碌状态,FPGA计算资源被高效利用.
2.4 数据存储与传输
数据存储方式是影响加速器性能的重要因素之一[14]. 针对片上存储,SAF-CNN稀疏化加速器为避免硬件资源访问端口数目限制而导致的数据访问冲突,设计了满足单周期多数据并行访问需求的存储方案. 对于片外存储,SAF-CNN利用数据重组织机制保证数据分布的连续性,来提升数据通信效率.
对于片上存储,将输入特征图、权重和输出特征图数据分布在不同的存储块(bank)上, 可符合计算引擎并行的数据访问要求. 每个bank具有1个数据读写端口,每个周期内可以执行1个数据的读写操作. 计算引擎采用流水并行的硬件架构,每个时钟周期读取tn个输入数据和tm×tn个权重数据,写入tm个输出数据. 此外,每个时钟周期读写的数据位于不同的通道. SAF-CNN加速器设计利用高层次综合HLS工具提供的pragma优化指令,针对输入特征图、权重和输出特征图数据,在通道维度上进行分割,使不同的通道数据可被存储在不同的bank上,从而满足数据并行访问需求.
对于片外存储,由于数据流的分块方式,加速器对多维张量的数据访问具有局部性[14],导致load模块和store模块每次所访问的数据在片外存储器上是碎片化分布的. 访问碎片化的数据将严重降低数据传输性能. 为了最大化提升数据传输性能,SAF-CNN利用重组织操作将片外存储中的碎片化数据进行整理,从而形成连续的数据分布. 输入特征图张量各个维度的大小是(ic, ih, iw), ic,ih, iw分别是输入通道、输入行和输入列的大小. 经过重组织后的输入特征图分布为(
⌈ic/tn⌉ , ih, iw, tn). 模块load每次加载的数据大小是tr×iw×tn,这些数据在片外存储器上是连续分布的. 此外,输出特征图采用相同的重组织方式. 未经处理的权重分布为(oc, ic, k×k). 其中,k表示卷积核的大小, 则经过重排后的权值分布为(tb, k×k, tm, tn), 进一步将稀疏化的权重从tn压缩为dn,得到(tb, k×k, tm, dn). 其中, tb是指权重拷贝的次数,tb=⌈oc/tm⌉ ×⌈ic/tn⌉ ,每次拷贝的块大小则为k×k×tm×dn. 为了降低数据重组带来的额外代价,SAF-CNN对权重进行离线压缩和重组,如算法1所示.算法1. 卷积层权重数据压缩重组算法.
输入:原始权重张量W, 原始掩码张量M, 输出通道数oc,输入通道ic, 卷积核大小k×k, 输出通道并行因子tm, 输入通道并行因子tn, 剪枝后的输入通道并行因子dn;
输出:重组织后的权重张量W'.
① booc
←⌈oc/tm⌉ ;② bioc
←⌈ic/tn⌉ ;③ for all bo<booc do
④ for all bi<bioc do
⑤ for all ti<dn do
⑥ for all tk<k×k do
⑦ for all m<tm do
⑧ computing mask_index using
bo, bi, ti, tk, m;
⑨ mask= M[mask_index];
⑩ select weight from W by mask;
⑪ computing weight_index using
bo, bi, ti,tk, m;
⑫ W' [weight_index] = weight;
⑬ W' [weight_index+1] = mask;
⑭ endfor
⑮ endfor
⑯ endfor
⑰ endfor
⑱ endfor
算法1中,行⑧⑨用来计算目标掩码数据在原始掩码矩阵的索引,并赋值给mask,行⑩利用mask从原始权重张量中选择数据weight,行⑫⑬将weight和mask拼接到一起并放置在目标权重张量中. 此外,加速器将输出数据写回片外存储器时,直接对输出数据进行重组织. 在执行接下来的卷积层时,输入特征图已经被处理,不需要额外的重组织过程. 通过这种设计,SAF-CNN只需要对CNN模型的第1层和最后1层卷积层的数据进行重组织,有效地降低数据重组引入的时间代价.
片外存储器的数据经过重组以后,每次传输输入特征图数据、权重数据和输出特征数据都将符合连续分布. 由此,可采用猝发式传输方法高效地传输这些数据. 为了进一步利用带宽资源,本文采用高位宽的传输模式,在单个周期内传输多个低位宽的数据. 通过使用128b的传输位宽,单个周期可以传输16个8b的数据. 经过重组织后,高位宽传输的批量数据处于不同的通道. 在片上存储器中,不同通道的数据位于不同的bank. 因此,单个周期读取的多个数据可以并行地写到多个bank,或者从多个bank读数据写回到片外存储器中. 通过结合重组织方法和高位宽数据传输模式,SAF-CNN可以充分利用硬件平台提供的带宽资源.
2.5 资源复用设计
SAF-CNN针对特殊卷积操作如深度可分离卷积进行了资源复用设计. 深度可分离卷积是一类特殊的卷积运算,其有逐通道卷积和逐点卷积2种卷积方式. 逐通道卷积在计算输出特征图时,只计算单一通道的输入特征图;而逐点卷积则计算所有通道的输入特征图并累加到输出特征图中. 其中,逐点卷积使用的卷积核大小是1×1. 考虑到加速器的可拓展性,SAF-CNN采用通用卷积的配置模式,并灵活支持卷积核尺寸. 为节省资源,SAF-CNN通过资源复用设计,将逐通道卷积和逐点卷积调度到同一数据传输模块和同一计算引擎,2种卷积计算的主要区别在于是否沿着输入通道进行累加,其计算方式取决于调度策略.
在SAF-CNN中,conv模块的核心即计算引擎,它采用累加树规则对tn或者被压缩后的dn个(如2.4节所述)输入通道的乘积进行累加. 然而,逐通道卷积并未在输入通道累加,而是通过计算单一通道的输入特征图得到输出特征图. 因此,SAF-CNN为了将逐通道卷积映射到计算引擎上,采用了填充策略对逐通道卷积的权重进行预处理,如图4所示. 其中,在未采用剪枝策略时,tm个输出通道的权重拓展为tm×tn个通道,这种填充策略要求tm=tn. 在填充后,输出通道和输入通道序号相同的卷积核包含有效数据,其他通道卷积核为0元素. 如图4(a)所示,原始的逐通道卷积第i个输出通道的数据,需要被放置在第i个输入通道上,以此保证计算引擎在累加tn个输入通道的数据时,能够正确计算出逐通道卷积的输出特征图. 采用剪枝策略后,权重被分为2个部分,即非零权重和索引信息. SAF-CNN利用索引信息将逐通道卷积的计算映射到稀疏化的计算引擎,如图4(b)所示. 其中,tm个输出通道的权重拓展为tm×dn个通道,逐通道卷积的第i个输出通道数据可被放置在第1个输入通道, 其他输入通道的数据置0. 同样,第i个输出通道的索引矩阵只在第1个输入通道上包含有效数据,具体的数据被设置为i. 这种填充方式可以保证稀疏化的计算引擎既可以执行稀疏的逐点卷积也可以执行逐通道卷积. 此外,针对经过剪枝后的SAF-CNN稀疏加速器的逐通道卷积权重填充策略,其tm和dn可以灵活取值便于计算引擎的设计.
除了共享复用计算引擎外,逐通道卷积和逐点卷积还可共享复用数据传输模块.在每次分块计算过程中,逐通道卷积和逐点卷积需要传输的数据块具有相同的大小和不同的地址偏置.因此,对于2种不同类型的卷积计算,通过调度策略可以映射到相同的数据传输模块和计算模块,达到复用效果.调度策略的编程实现示例如图5所示.对于逐通道卷积,load,conv,store这3个模块轮流执行.如2.4节所述,由于片上存储采用双缓冲的存储结构,因此可对3个模块进行流水线执行.对于逐点卷积,需要遍历其输入通道,并将结果累加到输出特征图.因此,load模块和conv模块所形成的计算流水线需多次执行.当输入通道计算完毕,store模块负责写回输出特征图.
3. SAF-CNN推理框架实现
为便于快速部署各类CNN模型到嵌入式FPGA平台,本文设计实现了SAF-CNN推理框架. 本节将论述SAF-CNN推理框架的具体设计及优化方法,重点聚焦于框架推理流程、算子融合方法、模型重构及硬件子图融合方法.SAF-CNN通过把加速器的设计思想与推理框架结合并进行联合优化,弥合了互相割裂的稀疏化加速器与推理框架,从而支持快速部署各类CNN模型.
3.1 SAF-CNN框架推理流程
如图6所示,利用SAF-CNN推理框架来部署稀疏化CNN模型到嵌入式FPGA的主要环节有3个方面:
1)首先利用训练框架(实验中基于PaddlePaddle)训练得到精度理想的目标模型. 其次,通过训练框架所集成的QAT[25]等量化方法对模型权重和激活值进行量化,并嵌入2.3节所设计的结构化剪枝方法到训练框架中进行模型剪枝,SAF-CNN通过掩码方法[28]将冗余的权重参数过滤. 然后,通过模型计算图重构的方法来分析模型的计算图结构,依据目标硬件平台的算子库搜索数据类型不匹配的量化算子如卷积计算、全连接计算等,在该量化算子之前插入符合硬件数据类型的量化节点,并微调CNN模型保证精度.
2) 利用训练框架导出静态图模型后,针对其计算图进行优化,主要包含算子融合、量化节点卸载到FPGA、生成硬件计算子图、模型权重预处理.其中,算子融合优化主要针对Conv层、ReLU层和BN层进行融合,并重新计算权重参数、偏置和量化参数.量化节点卸载到FPGA可与卷积计算融合.在计算图中,目标硬件支持的具有数据依赖关系的算子所构成的集合称作子图[25],将子图中计算节点的参数配置转化为硬件支持的参数配置.借此,目标硬件可一次执行多个计算任务,减少执行环境的切换次数. 此外,训练框架导出的模型参数类型通常是浮点数,利用量化参数和剪枝所采用的掩码方法可对模型参数进行量化和剪枝预处理操作.
3) 针对CPU-FPGA异构架构,SAF-CNN采用混合调度策略进行推理,由逐通道卷积和逐点卷积算子构成的子图, 通过硬件运行时接口SDK被调度到加速器平台执行,其他轻量级计算任务保留在CPU端执行.SDK对CNN模型的第1层的输入特征图和最后1层的输出特征图进行数据重组织,硬件子图遍历,并启动FPGA进行计算.
3.2 算子融合
算子融合是计算图优化的常用方法[44],通过将多个算子融合为单个算子,可避免中间数据的存储和传输带来的时间消耗,从而降低推理延迟. 卷积层、批归一化(batch normalization, BN)层和激活层是CNN模型中普遍使用的算子,且这些层的计算可被融合为1层计算. 在引入量化操作后,卷积层和BN层的权重参数与量化参数可以进行融合. 经过算子融合后,在第i个输出通道的输出特征图计算定义为
{{\boldsymbol{output}}}_i = is \times ws_i \times {{\boldsymbol{output}}}_i + {{\boldsymbol{bias}}}_i, (1) 其中output是量化后的输入特征图与权重进行卷积计算所得到的定点数张量,经过输入缩放因子is和权重缩放因子ws的缩放操作后,累加偏置参数bias得到正确的浮点数输出特征图output'. 此外,BN层的缩放参数已被融合到ws,偏置参数已被融合到bias. 经过激活层后可得到目标输出特征图.
在计算图中,如果当前算子的后继算子仍为量化算子,那么当前算子的输出特征图经过量化后成为后继算子的输入特征图. 为了提升硬件执行的效率,SAF-CNN加速器在写回输出特征图时,预先进行量化操作处理,供后继算子直接计算. 在量化输出特征图时,使用下一层的is作为当前层输出缩放因子,这里以os表示,故SAF-CNN的具体量化处理为
{{\boldsymbol{output}}}'' = clip{\text{( }}round{\text{( }}{{\boldsymbol{output}}}'/os)) , (2) 其中output''是量化后的输出特征图,函数clip和round分别代表截断和取整操作.考虑到os可以与is, ws, bias进行预先处理.因此,结合式(1) (2)可以得到
{{\boldsymbol{output}}}'' = clip{\text{( }}round{\text{( }}{{\boldsymbol{ws}}}' \times {{\boldsymbol{output}}} + {{\boldsymbol{bias}}}')), (3) 其中ws' 和bias'分别由ws和bias经过预处理得到. 加速器将量化后的output'' 写回到片外存储器中,供后继节点使用. 通过这种方式,片上存储器和片外存储器之间传输的数据都是量化后的低位宽定点数据,可有效地降低带宽需求.
3.3 模型计算图重构
经过算子融合后,目标加速器的片上存储和片外存储之间传输的数据都是低位宽定点数据,只要符合输入输出数据类型的卷积算子都能够被调度到硬件FPGA平台进行执行,并且连续的卷积算子可以构成子图,交由硬件SDK进行执行. 然而,由于数据类型的不匹配,CNN模型的计算图中普遍存在量化后的卷积算子无法调度到FPGA平台进行加速的情况,主要原因是量化的卷积算子的后继节点是无法进行量化的算子,例如slice算子、transpose算子等. 针对这种情况,SAF-CNN对模型计算图进行重构,在量化算子后加入量化节点和数据类型转换算子,来辅助完成量化算子调度到FPGA平台进行加速. 以下分为2种情形来说明.
1)单路径情形. CNN模型计算图中存在的单路径情形如图7(a)所示,量化算子q1的输入数据类型是量化后的定点数,后继算子是非量化算子. 因此,q1的输出数据类型是浮点数类型,与加速器所期望的定点数输出数据类型是不匹配的. 在这种情形中,q1算子不能被调度到FPGA加速器平台执行. 通过插入qnew量化节点,可对q1算子的输出特征图进行量化,并传递量化参数到q1算子. 由此,可实现q1算子的输入数据类型与输出数据类型皆符合硬件加速器的设计要求. 需要指出的是,qnew节点并不引入额外的计算量,其实现时已被融合到加速器设计中. 此外,利用数据类型转换算子可将低位宽的定点数据恢复为浮点数类型,供后继的非量化算子使用.
2)多路径情形. CNN模型中存在的多路径情形如图7(b)所示,q1算子具有多个后继算子,同时包含量化算子q2, q3和非量化算子nq. 与单路径情形相同,nq后继算子要求q1节点的输出特征图是浮点数类型,导致q1算子无法调度到硬件FPGA上执行. 此时,CNN模型的计算图被分割为多个计算子图,CPU和FPGA执行环境的切换将增大推理的延迟. 通过插入量化节点可以统一数据类型,并将多个计算子图合并为更大规模的计算子图,从而使FPGA平台执行更多的算子,进而减少执行环境的切换次数.
3.4 硬件子图融合
本文将硬件子图定义为具有相同数据依赖的硬件算子集合,即在CNN计算图优化过程中,多个具备数据依赖关系的算子可被封装成为1个子图,该子图可作为这些算子的集合直接交由硬件FPGA执行. 硬件子图在CNN计算图的优化过程中产生,并在推理过程中执行. 因此,各个算子的执行顺序以及硬件需要的配置参数应在子图产生过程中确定,从而避免在运行时引入额外的处理时间. 针对CNN模型的计算图,本文采用深度优先搜索方式确定算子的执行顺序. 考虑到CNN模型拓扑结构的多样性,硬件子图可能具有多个输入和多个输出. 由于输入数据来自于硬件子图的外部节点,输出数据供外部节点使用,因此在硬件子图的输入节点前面或输出节点后面插入数据重组织节点,该节点对外部存储器中的数据进行重组.
如图6所示,硬件SDK采用指令形式首先对加速器平台进行配置,然后启动加速器. 该指令包含卷积层的参数配置,如输入特征图的通道数、行数和列数以及卷积操作的配置参数. 此外,为了减少硬件资源占用,其他相关参数可预先进行配置,如分块的个数、行数等. 针对输入特征图、权重和输出特征图的数据,采用基地址加偏置的寻址方式进行访问,该偏置参数也被预置在指令中.
4. 实验评估
本节通过实验评估SAF-CNN稀疏化加速器的设计,并将SAF-CNN推理框架实现方法作为组件嵌入到深度学习推理框架Paddle Lite2.11,验证SAF-CNN加速器与框架联合优化的优势.评估实验数据集分别采用ImageNet[48]和VOC2012数据集[49],并部署典型CNN模型VGG16[2], ResNet18[50], MobileNetV1[19]到资源极端受限的边缘嵌入式设备CycloneV和ZU3EG开发板,探究SAF-CNN带来的性能收益.
4.1 实验设置
1)硬件配置. 实验采用Xilinx ZU3EG SoC FPGA开发板和Intel CycloneV FPGA开发板作为硬件加速器验证平台,如图8所示,FPGA的运行频率分别设定为333 MHz和150 MHz. 此外,配备工作站运行Vitis软件与Quartus软件,搭载Intel Xeon Silver 4210 CPU@ 2.20 GHz和64GB DDR4内存. 配备1块GeForce RTX2080Ti GPU显卡,用于模型训练.
2)软件配置. 对于Xilinx FPGA平台,实验采用集成开发环境Vitis2021.1进行FPGA加速器设计. 通过编程语言C++设计各模块,并利用Vitis HLS工具来进行高层次综合. 对于Intel FPGA平台,实验采用集成开发环境Quartus17.1进行FPGA加速器设计. 通过编程语言C++设计各模块,并利用Quartus HLS工具来进行高层次综合;此外,为进一步验证SAF-CNN的性能,实验也采用寄存器传输级(register-transfer level,RTL)语言Verilog-2001,在Intel FPGA平台上实现并部署.
3)评估指标. 面向嵌入式FPGA的CNN稀疏化加速框架SAF-CNN的实验评估选取4个定量指标来测量数据并分析性能收益.
① CNN模型各层处理时延. 该指标能够反映出加速器针对不同配置的卷积层所能实现的计算性能,并对比稀疏CNN加速器和普通CNN加速器的处理时延,反映出SAF-CNN所设计的结构化剪枝方法带来的性能增益.
②模型精度. 为验证SAF-CNN稀疏化剪枝算法对模型精度的影响,实验以VGG16, ResNet18, MobileNetV1和目标检测模型SSD_MobileNetV1为例,探究不同的稀疏率条件下模型精度的变化.
③模型端到端推理时延. 为验证SAF-CNN稀疏化加速器与推理框架实现的联合优化方法,实验以包含深度可分离卷积的SSD_MobileNetV1模型为例,以此验证SAF-CNN加速框架的推理性能.
④模型计算图重构性能增益. 为验证SAF-CNN对重构前模型和重构后模型的推理性能影响,实验对比2个模型在相同平台的推理延迟,并细粒度分析推理框架与加速器各个模块的执行时间,呈现SAF-CNN模型计算图重构的优势.
4.2 稀疏化卷积处理性能评估
本节对SAF-CNN稀疏化剪枝算法的有效性进行评估,利用结构化剪枝算法在2类不同平台上构建稀疏化加速器,并与非剪枝算法的普通加速器及其他加速器方案进行性能对比. 稀疏化加速器SAF-CNN_Sparse设置75%的剪枝率,计算引擎分别采用64, 128, 256个乘累加(MAC)单元进行验证. 输入通道并行因子和输出通道并行因子配置如表1所示. 其中,输出通道并行因子和输入通道并行因子采用的2种配置分别是16和32,经过剪枝后输入通道并行因子被压缩为4和8. 所对比的非剪枝算法的普通稠密加速器SAF-CNN_Dense方案则采用64个MAC单元,输入和输出通道并行因子皆配置为8. 此外,SAF-CNN只对逐点卷积进行结构化剪枝,逐通道卷积并没有引入稀疏性. 因为逐通道卷积的输入通道个数为1,不需要在输入通道维度进行剪枝.
表 1 加速器乘累加单元配置Table 1. Accelerator MACs Unit Configuration加速器 输出通道并行因子 输入通道并行因子 剪枝后输入通道并行因子 MACs个数 SAF-CNN_Dense 8 8 64 SAF-CNN_Sparse 16 16 4 64 32 16 4 128 32 32 8 256 SAF-CNN在ImageNet数据集上进行了图像分类实验,VGG16, ResNet18, MobileNetV1这3个模型在ZU3EG平台上的分层处理时延如图9所示. 其中,MobileNetV1的第2~14层是深度可分离卷积层,每个深度可分离卷积层包含1个逐通道卷积和1个逐点卷积.VGG16模型卷积层的通道数和特征图的尺寸大于ResNet18和MobileNetV1模型,因此,VGG16模型各层消耗的时间高于ResNet18和MobileNetV1模型. 图9中,与非剪枝算法的普通稠密加速器相比,稀疏加速器的处理速度更快. 具体来讲,在VGG16和ResNet18模型中,64个MACs的稀疏化加速器与稠密加速器相比,可分别获得2.91倍和2.86倍的计算性能提升,十分接近理论上的3倍性能提升. 实际性能提升与理论性能提升的差距在于,加速器对卷积层的处理时延不仅包含计算时间而且包含数据拷贝时间,其中,稀疏化加速器中输入特征图和输出特征图的数据拷贝时间和稠密加速器相同. 尽管SAF-CNN稀疏化加速器设计了计算与数据传输流水处理的方案,但是在流水线第1个分块和最后1个分块的处理过程中,加速器仍然有额外的数据传输时间. 因此,稀疏化加速器的计算性能相比理论性能略有下降. 在MobileNetV1中,计算引擎针对逐通道卷积的处理包含对填充数据的额外处理,因此其计算性能略低于VGG16和ResNet18. 因为逐通道卷积并没有引入稀疏性,稀疏化加速器对逐通道卷积的计算性能和稠密加速器相同. 因此,稀疏化加速器和稠密加速器相比有2.1倍的加速比. 此外,采用128个MACs和256个MACs可进一步提升稀疏化加速器的性能. 与采用64个MACs的稀疏化加速器相比,128个MACs和256个MACs的加速器分别能够达到1倍和2.86倍的性能提升,且分别实现254.9 GOPS和494.3 GOPS的计算性能. 在CycloneV平台上,基于HLS和RTL所实现的加速器皆采用64个MACs进行乘累加操作,VGG16, ResNet18,MobileNetV1这3个稀疏化模型的分层处理时延如图10所示. 与HLS加速器相比,RTL加速器设计通过更细粒度的控制,能够实现较低的处理延迟,计算性能提升近1倍. 由各个模型的计算性能可知,稀疏化加速器能够高效处理普通卷积和深度可分离卷积.
SAF-CNN稀疏化加速器与其他同是基于Xilinx的加速器的资源与性能对比如表2所示,基于CycloneV的SAF-CNN加速器资源与性能如表3所示. 其中,对比对象主要使用具有较大规模计算资源的Xilinx FPGA平台进行验证,从而取得相对较高的计算性能.SAF-CNN的加速器平台虽受限于资源条件,但仍能在CycloneV平台分别取得41.8 GOPS和76.3 GOPS的计算性能,在ZU3EG平台分别取得128 GOPS,254.9 GOPS,494.3 GOPS的计算性能. 通过对比每千个LUT的计算效率、单个DSP的计算效率及加速器功耗来评估加速器的计算效率,如图11所示. 其中,ZU3EG_64表示使用64个MACs,以此类推. 如图11(a)所示,和其他加速器相比,SAF-CNN功耗代价更低,CycloneV仅消耗5 W,ZU3EG消耗7.5 W左右. 此外,在ZU3EG平台上SAF-CNN采用3种不同的MACs资源配置进行验证. 针对LUT效率,SAF-CNN分别实现5.87 GOPS/kLUT,8.82 GOPS/kLUT,10.82 GOPS/kLUT的计算性能. 针对DSP效率,SAF-CNN分别实现0.99 GOPS/DSP,1.27 GOPS/DSP,1.5 GOPS/DSP的计算性能,远高于其他加速器. SAF-CNN基于CycloneV平台的加速器采用的是28 nm的工艺,却仍能运行在150 MHz的时钟频率. 在基于HLS的加速器设计上实现1.63 GOPS/kLUT和0.62 GOPS/DSP的计算性能,明显高于资源丰富的Suda加速器[51]和Li加速器[53]. SAF-CNN在基于CycloneV的RTL加速器设计上实现了高达3.48 GOPS/kLUT和1.19 GOPS/DSP的计算性能. 和HLS加速器相比,RTL加速器进行更细粒度的任务调度,通过数据加载模块和计算模块并行执行来充分隐藏数据传输代价,从而实现更高的计算性能.
表 2 ZU3EG加速器与其他加速器计算性能与资源占用对比Table 2. Computing Performance and Resource Utilization Comparison of ZU3EG Accelerators and Other Accelerators加速器 平台 频率/MHz 精度/b kLUTs DSP BRAM 计算性能/GOPS Suda[51] Stratix-V GSD8 16 120 760 117.8 Wei[22] Arria 10 GT1150 232 8 313 1500 834 1171.3 AccELB[52] ZC706 8 86 808 303 493 FAQ-CNN[14] ZU102 200 8 210 2483 723 1229 Caffeine[18] KU060 200 8 200 116 784 1200 Li[53] Virtex-7 VC709 200 16 273 2144 956 565.9 ZU3EG_64 ZU3EG 333 8 21.8 130 71 128 ZU3EG_128 ZU3EG 333 8 28.9 201 107 254.9 ZU3EG_256 ZU3EG 333 8 45.7 330 178 494.3 表 3 SAF-CNN加速器在CycloneV上的资源占用与计算性能Table 3. Resource Utilization and Computing Performance of SAF-CNN Accelerator on CycloneV编程语言 频率/MHz kALMs DSP 存储/Mb 计算性能/GOPS RTL 150 21.9 64 2.5 76.3 HLS 150 25.7 68 4.1 41.8 4.3 模型精度评估
本节探究结构化剪枝方法对模型精度的影响.在结构化剪枝算法中,SAF-CNN采用2阶段的剪枝方法进行剪枝:第1阶段进行非结构化剪枝以引入稀疏性;第2阶段使用结构化剪枝. 同样,输入通道并行因子tn和输出通道并行因子tm都配置为16. 此外,VGG16和ResNet18模型的稀疏率从10%增加到80%.SSD_MobileNetV1模型的稀疏率从10%增加到75%. 考虑到参数的冗余性,MobileNetV1骨干网络的逐点卷积和SSD头部网络的普通卷积层都进行剪枝操作,逐通道卷积不进行剪枝操作. 实验中加速器所设置的可处理输入通道个数为16,在稀疏率为75%的情况下,经过SAF-CNN稀疏剪枝方法得到的输入通道个数减少到4. 当块内输入通道大于4,则需裁剪为4;对于块内输入通道数等于或者小于4的输入特征图,可无需裁减而直接输入到加速器进行计算. 由于3个模型处理的RGB图像数据的输入通道个数为3,此时可将该图像数据直接输入到SAF-CNN加速器直接计算,而无需对模型的第1层进行稀疏剪枝,进而不会对第1个卷积层引入稀疏性,由此保证模型精度,因为模型第1层的精度往往会直接影响整个模型推理精度.
在量化模型的基础上,不同稀疏率下的模型准确率损失如图12所示. 在Cifar100数据集上,VGG16模型的推理准确率是71.86%,ResNet18模型的推理准确率是76.45%. 从图12可知,在VGG16模型上采用80%的稀疏率时,第2阶段剪枝算法可实现0.08%的准确率提升.当采用小于80%的稀疏率时,ResNet18模型的推理准确率损失小于1%,实现了理想的剪枝结果. 为验证剪枝方法在大规模数据集上的有效性,实验验证ResNet18模型在ImageNet数据集的剪枝效果,如图12(c)所示,其中ResNet18模型在ImageNet数据集的推理准确率是70.59%. 当稀疏率小于60%时,剪枝算法会带来准确率提升,当稀疏率设定为80%时,剪枝算法仅导致0.83%的准确率损失. SSD_MobileNetV1模型在VOC2012数据集上的推理平均准确率mAP为73.8%,经过QAT 8b量化算法处理后,mAP为72.59%. 其中,当采用50%的稀疏率时,模型的mAP损失小于1%,表明结构化算法的有效性. 当设定为75%的稀疏率时,SAF-CNN结构化剪枝算法引入了3.59%的mAP损失. 针对该损失,SSD_MobileNetV1模型采用深度可分离卷积降低模型冗余度,可通过知识蒸馏技术更好地恢复精度.
4.4 模型端到端推理性能评估
本节实验通过部署SSD_MobileNetV1模型并评测其推理时延,来揭示SAF-CNN加速器与框架实现联合优化所带来的性能增益. 实验采用8b的量化方法以及75%的稀疏率,并在Intel FPGA和Xilinx FPGA这2种平台分别部署了SAF-CNN稀疏化加速框架. 此外,将SAF-CNN与针对深度可分离卷积定制的DPU加速器[20]进行对比.
SAF-CNN加速器和DPU加速器的运行频率,以及硬件资源使用量如表3和表4所示. 当联合深度学习框架时,SAF-CNN在ZU3EG平台上实现数据重组功能,会导致资源使用量略有提升. CycloneV运行时钟频率为150 MHz,DPU和ZU3EG则基于16 nm工艺,可运行在更高的时钟频率. 和DPU相比,SAF-CNN加速器可使用更少的硬件资源,尤其是乘法器DSP,这主要得益于SAF-CNN设计了结构化剪枝算法. 表5展示了各个平台上的SSD_MobileNetV1加速器推理性能对比,CPU0和CPU1分别是采用ARMV7架构的2核处理器和ARMV8架构的4核处理器. 在加速器与框架结合的方案中,所有的卷积层都调度到FPGA执行,其他算子仍然在CPU上执行. 在CycloneV平台上采用HLS设计时,SAF-CNN稀疏化异构加速器和CPU相比能够获得1.4倍的性能提升,采用RTL实现的加速器则能够获得3.5倍的性能提升. 在ZU3EG平台上采用HLS的SAF-CNN异构加速器,使用64 MACs, 128 MACs, 256 MACs分别能够获得1.8倍、2.1倍和2.2倍的性能提升. DPU凭借自身高运行频率和丰富的资源量分别达到了31 fps和124.3 fps的推理性能. 其中DPU_L不仅对深度可分离卷积算子实现加速,而且包含了SSD_MobileNetV1中其他大量的轻量级算子,从而达到了124.3 fps的推理性能. 但为了公平对比,本文比较了单位DSP上的SAF-CNN和DPU的处理性能. SAF-CNN在CycloneV平台上,采用RTL实现0.156 fps/DSP的计算性能,在ZU3EG平台上采用64个MACs能够实现0.147 fps/DSP的计算性能, 高于DPU_S的0.146 fps/DSP的计算性能. 说明SAF-CNN的设计能够在单位硬件资源上实现较高的计算能力,该方法如应用在资源丰富的FPGA平台将获得更高性能.
表 4 加速器硬件配置对比Table 4. Hardware Configuration Comparison of Accelerators平台 硬件型号 频率/MHz LUT BRAM DSP DPU_S ZU2EG 430 31198 145 212 DPU_L ZU9EG 333 161944 711 2070 ZU3EG_64 ZU3EG 333 26575 84 137 ZU3EG_128 ZU3EG 333 33496 120 208 ZU3EG_256 ZU3EG 333 50506 191 337 表 5 SSD_MobileNetV1 推理性能对比Table 5. Inference Performance Comparison of SSD_MobileNetV1平台 编程语言 硬件配置 帧率/fps DSP 效率/(fps/DSP) CPU0 C++ ARMV7 * 2 2.2 CPU1 C++ ARMV8 * 4 8.3 DPU_S ZU2EG 31 0.146 DPU_L ZU9EG 124.3 0.06 CycloneV_64 HLS ARMV7 +CycloneV 5.3 0.078 CycloneV_64 RTL ARMV7 +CycloneV 10 0.156 ZU3EG_64 HLS ARMV8+ZU3EG 20.2 0.147 ZU3EG_128 HLS ARMV8+ZU3EG 25.6 0.123 ZU3EG_256 HLS ARMV8+ZU3EG 26.5 0.079 4.5 模型计算图重构性能增益
本节对SAF-CNN中模型计算图重构的有效性进行评估,在ZU3EG平台分别使用64个MACS、128个MACs和256个MACs设计加速器,并对SSD_MobileNetV1模型重构前和重构后的推理性能进行对比. 在SSD_MobileNetV1中,需要进行模型重构的计算图结构主要分布在MobileNetV1骨干网络和SSD头部网络的连接部分.
经过实测,SAF-CNN所实现的SSD_MobileNetV1模型,其推理时延的各部分组成与占比数据如表6所示. 其中ZU3EG_64表示使用64个MACs,以此类推. 表6中FPGA硬件子图运行时间包含了调度到FPGA平台上的所有卷积层的运行时间,框架处理时延包含轻量级的算子执行时间和未被调度到FPGA的数据类型不匹配的卷积运行时间. 模型计算图重构前,部分数据类型不匹配的卷积算子被调度到CPU执行,导致所有的卷积层被分成6个子图. 此外,CPU端执行18个卷积层,导致框架处理时延显著提升. 当经过模型计算图重构后,所有的卷积层都是互连的并且都可被调度到FPGA进行加速,因此只有1个子图. 由于子图数目的减少,数据重排的次数也会降低,促使数据重排的时延由5 ms左右降低到3 ms左右. 卷积层都被调度到FPGA平台进行加速,使得FPGA的运行时间分别从27.1 ms增加到32.1 ms、从17.1 ms增加到22 ms和从15.1 ms增加20 ms. CPU端只负责执行轻量级的算子,从而使框架处理时延分别由78.9 ms降低为14.4 ms、81 ms降低为14.5 ms和79.5 ms降低为14.7 ms,充分发挥加速器的计算优势. 当增加MAC乘累加单元数量时,SSD_MobileNetV1的推理总时延从49.6 ms降低到37.8 ms,实现了更高的推理速度. 然而,以下3方面制约了SAF-CNN在该平台进一步提升性能:1)该平台资源有限,相比于DPU_L,只能在有限条件下增加计算引擎的并行能力和片上缓存;2)通过增加输入通道并行因子和输出通道并行因子来增加MAC使用个数,会增加逐通道卷积的无效计算量,从而导致深度可分离卷积的计算性能没有明显提升;3) SSD_MobileNetV1模型中包含的其他算子被调度到CPU上进行执行,该部分算子执行过程约占用14.5 ms,使得整个模型的推理性能受到限制. 即使在资源和CPU性能受限的条件下,SAF-CNN经过模型计算图重构优化后,推理总时延分别是49.6 ms,39.6 ms和37.8 ms,仍能实现重构前的2.24倍、2.6倍和2.63倍. 由此证明,SAF-CNN的模型计算图重构方法可以有效提升SAF-CNN加速器与框架结合的推理性能.
表 6 SSD_MobileNetV1推理延迟组成Table 6. Inference Latency Components of SSD_MobileNetV1推理结果 ZU3EG_64 ZU3EG_128 ZU3EG_256 计算图重构前 计算图重构后 计算图重构前 计算图重构后 计算图重构前 计算图重构后 子图数量 6 1 6 1 6 1 CPU端卷积层数量 18 0 18 0 18 0 数据重排时延/ms 5.1 3.1 4.7 3.1 4.9 3.1 FPGA子图运行时延/ms 27.1 32.1 17.1 22 15.1 20 框架处理时延/ms 78.9 14.4 81 14.5 79.5 14.7 总时延/ms 111.1 49.6 102.8 39.6 99.5 37.8 5. 总 结
本文提出了一种面向嵌入式FPGA的稀疏化神经网络加速框架SAF-CNN,分别从加速器设计与推理框架实现方面进行设计与联合优化. 通过设计稀疏化架构、块内稀疏剪枝方法、资源复用机制、数据流设计、数据存储通信等技术实现了SAF-CNN稀疏化加速器. 然后,SAF-CNN通过设计CNN量化模型计算图重构等方法,对推理框架与模型目标加速器进行联合优化,从而实现快速部署CNN模型到资源受限的嵌入式FPGA平台. 实验结果表明,即使在资源受限的低端FPGA平台上,如CycloneV和ZU3EG,SAF-CNN仍可实现高达76.3 GOPS和494.3 GOPS的计算性能. 在目标检测模型推理中,SAF-CNN加速器与多核CPU相比可达到3.5倍和2.2倍的推理速度提升,实现26.5 fps的优越性能,且与同类方案相比,SAF-CNN的DSP效率具有明显优势.
作者贡献声明:谢坤鹏提出算法实现思路,完成实验并撰写论文;仪德智负责实验数据整理和分析;刘义情参与协助完成部分实验;刘航调研方案和数据分析;赫鑫宇负责论文校对和图表修正;龚成参与论文校对和实验数据审查;卢冶提出算法思路、实验方案,修改与审核全文.
-
表 1 在不同数据集上的实验设置
Table 1 Experimental Setting on Different Datasets
实验参数 MNIST CIFAR-10 Fashion-MNIST SVHN FEMNIST K 50 50 50 50 50 \mathrm{\alpha } 40 40 40 40 40 M 3 3 3 3 3 客户端模型 LeNet CNN ResNet-18[25] LeNet CNN LeNet CNN LeNet CNN 学习率 0.01 0.1 0.01 0.01 0.1 冲量 0.78 0.85 0.95 0.86 0.82 批大小 64 64 64 64 64 优化器 SGD SGD SGD SGD SGD 表 2 实验软硬件配置
Table 2 Software and Hardware Configurations in Experiment
软硬件 配置 操作系统 Linux 64 位发行版 Ubuntu 16.04 LTS CPU Intel® Xeon® Silver 4110 CPU @ 2.10GHz 内存/GB 32 硬盘/TB 2 GPU NVIDIA Tesla V100 显存/GB 32 硬件加速 5120 CUDA cores 表 3 不同数据集下各方法的准确率对比
Table 3 Accuracy comparisons of Each Method on Different Datasets
% 方法 MNIST CIFAR-10 Fashion-MNIST SVHN FEMNIST FedAIM(本文) 98.54 82.57 84.34 85.35 82.13 Astraea 97.92 80.11 81.36 81.41 79.46 FedShare 95.25 72.64 73.12 71.84 68.97 FedAvg 70.13 65.47 68.38 68.13 58.49 CSFedAvg 98.27 75.83 74.97 73.78 70.72 FedProx 96.65 74.49 76.54 74.17 75.69 FedNova 97.23 79.47 80.73 75.78 76.65 SCAFFOLD 94.42 75.73 77.94 76.44 78.54 注:黑体数字表示最优值. 表 4 不同本地迭代次数下的模型准确率
Table 4 Model Accuracy Under Different Local Epochs
数据集 本地迭代次数 准确率/% FedAIM Astraea MNIST 2 98.54 97.44 8 98.85 97.92 CIFAR-10 2 82.32 80.11 8 82.57 80.34 Fashion-MNIST 2 84.34 81.36 8 84.63 81.61 -
[1] 微众银行. 联邦学习白皮书 V2.0 [EB/OL]. 2020[2020-11-01].https: //www.fedai.org/# WeBank. White paper V2.0 of federated learning [EB/OL]. 2020 [2020-11-01].https://www.fedai.org/# (in Chinese)
[2] 芦效峰,廖钰盈,Lio P,等. 一种面向边缘计算的高效异步联邦学习机制[J]. 计算机研究与发展,2020,57(12):2571−2582 doi: 10.7544/issn1000-1239.2020.20190754 Lu Xiaofeng, Liao Yuying, Lio P, et al. An asynchronous federated learning mechanism for edge network computing[J]. Journal of Computer Research and Development, 2020, 57(12): 2571−2582 (in Chinese) doi: 10.7544/issn1000-1239.2020.20190754
[3] 董业,侯炜,陈小军,等. 基于秘密分享和梯度选择的高效安全联邦学习[J]. 计算机研究与发展,2020,57(10):2241−2250 doi: 10.7544/issn1000-1239.2020.20200463 Dong Ye, Hou Wei, Chen Xiaojun, et al. Efficient and secure federated learning based on secret sharing and gradients selection[J]. Journal of Computer Research and Development, 2020, 57(10): 2241−2250 (in Chinese) doi: 10.7544/issn1000-1239.2020.20200463
[4] Yang Qiang, Liu Yang, Chen Tianjian, et al. Federated machine learning: Concept and applications[J]. ACM Transactions on Intelligent Systems and Technology, 2019, 10(2): 1−19
[5] Zhao Yue, Li Ming, Lai Liangzhen, et al. Federated learning with Non-IID data [J]. arxiv preprint, arXiv: 1806.00582, 2018
[6] Huang Xixi, Jian Guan, Zhang Bin, et al. Differentially private convolutional neural networks with adaptive gradient descent [C] //Proc of the 4th IEEE Int Conf on Data Science in Cyberspace (DSC). Piscataway, NJ: IEEE, 2019: 642−648
[7] Huang Xixi, Ding Ye, Zoe L, et al. DP-FL: A novel differentially private federated learning framework for the unbalanced data[J]. World Wide Web, 2020, 23(4): 2529−2545 doi: 10.1007/s11280-020-00780-4
[8] Chen Yujing, Ning Yue, Slawski M, et al. Asynchronous online federated learning for edge devices with Non-IID data [C] //Proc of the 8th IEEE Int Conf on Big Data. Piscataway, NJ: IEEE, 2020: 15−24
[9] Kairouz P, McMahan H, Avent B, et al. Advances and open problems in federated learning[J]. Foundations and Trends in Machine Learning, 2021, 14(1): 1−210
[10] McMahan B, Moore E, Ramage D, et al. Federated learning: Communication-efficient learning of deep networks from decentralized data [C] //Proc of the 20th Int Conf on Artificial Intelligence and Statistics. Cambridge, MA: MIT, 2017: 1273−1282
[11] Sattler F, Wiedemann S, Muller K, et al. Robust and communication-efficient federated learning from Non-IID[J]. IEEE Transactions on Neural Networks and Learning Systems, 2019, 31(9): 3400−3413
[12] Li Tian, Sahu A, Zaheer M, et al 2020. Federated optimization in heterogeneous networks [C] //Proc of the 3rd Conf on Machine Learning and Systems (MLSys). Cambridge, MA: MIT, 2020 : 429−450
[13] Smith V, Chiang C, Sanjabi M, et al. Federated multi-task learning [C] //Proc of the 31st Neural Information Processing Systems (NIPS). Cambridge, MA: MIT, 2017: 4424−4434
[14] Duan M, Liu Duo, Chen Xianzhang, et al. Astraea: Self-balancing federated learning for improving classification accuracy of mobile deep learning applications [C] //Proc of the 37th IEEE Int Conf on Computer Design (ICCD). Piscataway, NJ: IEEE, 2019 : 246−254
[15] Zhang Wwenyu, Wang Xiumin, Zhou Pan, et al. Client selection for federated learning with Non-IID data in mobile edge computing[J]. IEEE Access, 2021, 9: 24462−24474 doi: 10.1109/ACCESS.2021.3056919
[16] Rubner Y, Tomasi C, Guibas J, et al. The earth mover’s distance as a metric for image retrieval[J]. International Journal of Computer Vision, 2000, 40(2): 99−121 doi: 10.1023/A:1026543900054
[17] Ren Jinfu, Liu Yang, Liu Jiming. EWGAN: Entropy-based wasserstein gan for imbalanced learning [C] //Proc of the 33rd AAAI Conf on Artificial Intelligence (AAAI). Palo Alto, CA: AAAI, 2019: 10011−10012
[18] Yao Xin, Huang Tianchi, Wu Chenglei, et al. Towards faster and better federated learning: A feature fusion approach [C] //Proc of the 26th IEEE Int Conf on Image Processing (ICIP). Piscataway, NJ: IEEE, 2019: 175−179
[19] Li Xiang, Huang Kaixuan, Yang Wenhao, et al. On the convergence of fedavg on Non-IID data [C/OL] //Proc of the 8th Int Conf on Learning Representations (ICLR). Piscataway, NJ: IEEE, 2020[2021-08-17].https://arxiv.org/abs/1907.02189
[20] Meng Fanxu, Cheng Hao, Li Ke, et al. Filter grafting for deep neural networks [C] //Proc of the 22nd IEEE/CVF Conf on Computer Vision and Pattern Recognition (CVPR). Piscataway, NJ: IEEE, 2020 : 6599−6607
[21] Cheng Hao, Lian Dongze, Gao Shenghua, et al. Utilizing information bottleneck to evaluate the capability of deep neural networks for image classification[J]. Entropy, 2019, 21(5): 456−456 doi: 10.3390/e21050456
[22] Shwartz-Ziv R, Tishby N. Opening the black box of deep neural networks via information [J]. arXiv preprint, arXiv: 1703.00810, 2017
[23] Lecun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11): 2278−2324 doi: 10.1109/5.726791
[24] LeCun Y, Bottou L, Orr G, et al. Efficient backprop [G] //LNCS 2172: Proc of the 3rd Int Conf on Coopertive Information Systems. Berlin: Springer, 1998: 9−48
[25] He Kaiming, Zhang Xiangyu, Ren Shaoqing, et al. Deep residual learning for image recognition [C] //Proc of the 21st IEEE/CVF Conf on Computer Vision and Pattern Recognition (CVPR). Piscataway, NJ: IEEE, 2016: 770−778
[26] Wang Jianyu, Liu Qinghua, Liang Hao, et al. Tackling the objective inconsistency problem in heterogeneous federated optimization [C] //Proc of the 34th Neural Information Processing Systems (NIPS). Cambridge, MA: MIT, 2020: 7611−7623
[27] Karimireddy S, Kale S, Mohri M, et al. Scaffold: Stochastic controlled averaging for federated learning [C] //Proc of the 37th Int Conf on Machine Learning (ICML). New York: ACM, 2020: 5132−5143
-
期刊类型引用(4)
1. 贾乃征,薛灿,杨骝,王智. 基于融合集成学习的鲁棒近超声室内定位方法. 计算机研究与发展. 2025(02): 488-502 . 本站查看
2. 马安佳. 数智化背景下城市交通规划研究. 办公自动化. 2024(10): 8-10 . 百度学术
3. 陈文海,黄智华,周雅欣. 基于边缘计算的继电保护海量数据轻量级传输优化方法. 电气技术与经济. 2024(06): 294-296 . 百度学术
4. 冯国富,刘桂,王娟. 边-云计算中一种结合服务产生的服务部署策略. 中南大学学报(自然科学版). 2024(07): 2578-2587 . 百度学术
其他类型引用(2)