当前位置:首页 期刊杂志

面向高能效场景的神经网络结构和加速器协同设计①

时间:2024-05-22

陈维伟 王 颖 张 磊

(∗中国科学院计算技术研究所 北京 100190)

(∗∗中国科学院大学 北京 100049)

0 引言

近年来,深度神经网络(deep neural network,DNN)在计算机视觉、自然语言处理等领域都取得了巨大的突破[1]。算法研究人员针对不同的应用设计了大量的网络结构和对应的训练方法,如在图像分类领域,从最初的AlexNet 到目前的Efficient-Net,人们对神经网络结构的改进不断提升其精度和性能表现[2]。同时针对深度学习这类计算密集和数据密集应用,业界关注开发特定领域的架构(如硬件加速器),此类硬件加速架构多采用单指令多数据流、用户控制与缓存等技术,使其在并行性及带宽利用率上比通用架构更加高效,通过结合专用领域的编程语言以继续提高计算能力[3-5],如Google公司研发的张量处理单元(tensor processing unit,TPU)在神经网络应用中平均比图形处理器(graphics processing unit,GPU)(Nvidia K80 GPU)或中央处理器(central processing unit,CPU)(Intel Haswell CPU)快15~30 倍,能效比(Tops/Watt)高出约30~80 倍[3-4]。

深度学习软硬件的兴起为构建高能效的人工智能系统提供了可能,然而,目前深度学习算法与硬件专用架构设计之间依然存在着很大的鸿沟。在算法设计方面,DNN 模型设计者通常专注于设计具有更高精度、更低参数和更小每秒浮点运算次数(floating-point operations per second,FLOPs)的DNN 模型,但是其较少考虑到DNN 在具体硬件上的执行特性,使得仅设计具有较低参数和较少FLOPs 的DNN 模型并不能直接提升性能[2,7],如NasNet 与分层网络MobileNet 相比,其有更低的参数但使用多分支结构,其碎片化的单元结构使得硬件运算效率较低[8]。在硬件设计方面,目前,对应用广泛的、具有代表性的程序进行泛化是硬件设计和优化的传统方法,其通常先构建一组基准测试程序(Benchmark,如SPEC),包含了一组特定的工作负载程序,硬件设计的目标之一就是优化这组特定程序的平均性能。例如,CPU 是为串行程序(如桌面应用程序)而优化,GPU 是为大规模并行工作负载(如图形渲染、科学计算等)而设计。深度学习硬件设计评估也沿用此方式,当前MLPerf 已成为评估深度学习加速器设计的标准Benchmark,深度学习硬件加速器在MLPerf 上的得分成为衡量硬件性能的重要指标。然而Benchmark 所选定的应用程序可能在相当长的一段时间内固定不变,这容易使得专用硬件设计对新算法的优化不够充分。特别是在深度学习领域,由于其快速发展在短时间内催生了大量精度更高、泛化能力更强、计算效率更高的模型,使得最新的DNN 模型和加速器协同度不高。例如,最新的神经网络EfficientNet,其使用了全局池化和SiLU/Swish非线性激活函数来提升精度,但最新的加速器不能很好支持此类计算[9-10],导致系统不能工作在最佳状态。

因此,针对目前软硬件设计分离问题,神经网络模型和加速硬件的协同设计对进一步提升人工智能(artificial intelligence,AI)系统的整体性能尤为重要[11]。为此,本文针对图像分类任务,提出了一种新的网络结构和加速器软硬件协同设计框架,本方法可以在统一的DNN 结构和加速器设计空间中,针对不同目标自动进行协同设计搜索,进一步提升AI系统性能,并减少人工开销。本文的主要贡献点如下。

(1)通过在统一的联合搜索空间中将DNN 模型结构和加速器搜索参数化,可以针对不同设计场景和设计约束,自动搜索DNN 结构和加速器协同设计方案,进一步扩展帕累托边界。

(2)针对协同设计搜索空间巨大的问题,提出了一种LSTM+RL 的方案,使用长短时记忆(long short-term memory,LSTM)来生成设计序列,同时使用强化学习(reinforcement learning,RL)方法指导搜索方向。实验结果表明,此方法可有效降低协同设计搜索开销。

(3)针对神经网络精度评估和硬件设计评估开销巨大问题,提出了基于HyperNet 的网络精度评估方法,候选DNN 模型可直接从HyperNet 中继承权重以避免昂贵的训练开销;同时采用高斯过程模型对硬件设计性能进行预测,减少了整体的评估开销。

1 研究现状

为进一步提升AI 系统的性能和服务质量(quality of service,QoS),神经网络软硬件协同设计已经成为近年来的研究热点[12]。当前研究工作从神经网络结构设计到硬件加速器的多个优化方面展开,主要存在3 类提升神经网络运算能效的方法。第1 类是硬件感知神经网络结构设计方法,其面向特定硬件设计更高效的DNN 模型。具体而言,硬件感知神经网络结构搜索方法根据应用设定DNN 结构设计空间,在设计过程中,依赖性能评估模型来估计候选神经网络模型在目标硬件上的性能,然后在迭代设计过程中决定是否应该保留或更新所发现的网络,最后筛选出针对目标硬件和约束的最优DNN模型。如FbNet[13]和ProxylessNAS[14]都是针对智能手机设计的DNN 模型,这2 个DNN 模型都旨在实现较高模型精度的同时,实现较高的推理速度。然而此类硬件感知神经网络结构搜索方法需要针对每一个任务专门设计网络结构搜索空间,需要丰富的专家知识,极大影响了其适应不同场景的能力。

第2 类提升神经网络计算效率的方法是针对特定任务的神经网络硬件加速方法,其需要根据DNN的计算模式来设计新的指令集架构、编程模型、编程工具,甚至是新的编程语言,来实现最大化的性能提升。如Kiseok 等人[6]针对嵌入式视觉任务,提出了一种DNN 模型和加速器的协同设计方法,其首先针对SqueezeNet,专门设计了一个DNN 加速器,然后调整 SqueezeNet 的超参数,使得修改后的SqueezeNet 在定制的加速器上运行更高效。然而针对不同场景设计专用硬件加速器耗时耗力,还需要针对性地设计专用的编译部署方法,这使得部署成本高昂。

此外,第3 类提升神经网络计算效率的方法是DNN 模型结构和硬件协同设计。如Yang 等人[15]在嵌入式现场可编程门阵列(field-programmable gate array,FPGA)上采用软硬件协同设计方法来加速ConvNet 模型。其采用1×1 的卷积块来构建DNN 模型,然后基于FPGA 设计高度定制化的1×1卷积计算单元,以提高前向推理速度。然而,该方法由于定制化程度较高,不能移植到其他应用程序和平台。Ji 等人[16]提出了工具链Neutrams,该工具链将现有神经网络模型进行转换(如算子融合),以满足神经形态芯片的硬件约束要求,然后进行硬件适配并将转换后的神经网络模型映射到神经形态芯片上。Hao 等人[1]则提出了一种FPGA/DNN 协同设计方法,其主要由两部分构成:一个是针对硬件自底向上的神经结构块构建,用于高精度网络结构搜索;另一个是针对每一个神经网络块,自顶向下的构建专用知识产权核(intelligent property,IP)实例,并在FPGA 上将这些IP 组织起来,从而实现专用的神经网络计算加速。

2 研究动机

当前的DNN 模型和加速器协同设计工作证明了其提升神经网络计算系统性能的潜力,然而它们基本都遵循着两阶段式的设计流程。图1 对当前的两阶段设计流程进行了简要描述。首先,此类设计要么修改现有的DNN 模型,要么使用人工或网络结构搜索(neural architecture search,NAS)方式设计一个高精度的DNN 模型,然后设计一个针对此DNN模型的硬件加速器。此两阶段式的设计方式限制了其只能在局部空间中进行搜索,导致可能不会收敛到最优解,特别是当需要考虑到真实部署环境中有更多实际的设计约束目标(如带宽、能耗、QoS等)[17]时,针对最高精度的DNN 模型进行专用硬件化并不一定能保证最好的系统性能[18]。此外,由于这些硬件设计流程都是针对特定的应用和加速器架构,如文献[1]中人工定制的神经操作运算IP,当移植到其他应用上时,还需要大量的人工改动从而导致高额的人工设计开销。因此,本文针对目前两阶段设计方法的缺点,提出了一种新的网络结构和加速器软硬件协同设计方法并将其命名为单阶段协同设计方法。图2 展示了此单阶段设计方式的流程图,相较于两阶段设计方式,本方法可以在统一的DNN 结构和加速器设计空间中,针对不同目标自动进行协同设计搜索,进一步提升AI 系统性能。

图1 传统的两阶段设计流程示意

图2 单阶段网络结构/加速器协同设计流程示意

本文通过实验也证明了当前两阶段设计在面向不同应用时能效提升有限的问题。图3 展示了使用3 种不同的脉动计算阵列(processor element,PE)大小,在Once-for-All[2]的网络设计空间中进行神经网络结构搜索获得的帕累托曲线。可以发现,在不同的设计约束下,最优的网络结构和硬件配置组合是不同的,如在延迟约束为8 ms 时,加速器配置3 的结果最优,而当延迟约束为6 ms 时,加速器配置2的结果最优。这也验证了,针对特定的应用场景和设计约束,需要在统一的设计空间中进行网络结构和加速器的协同设计,来进一步提升AI 系统效率。

图3 在同一网络结构设计空间中,3 种不同硬件参数配置下搜索获得的帕累托曲线图

3 单阶段协同设计搜索方法

3.1 问题定义

在给定神经网络结构的搜索空间η={η1,…,ηm}(包含m个神经网络模型结构)和加速器配置搜索空间C={c1,…,cn}(总共有n种配置选择),同时在给定用户设计约束thres情况下,此工作的设计目标是自动化生成最优网络结构η∗和相对应的加速器配置c∗,因而能在满足用户约束下,提供最优的系统性能和精度,其形式化描述如下:

其中A代表DNN 模型精度;Perf代表了系统的性能约束,在具体实验中,可代表延迟或能耗等具体指标。

3.2 方法概述

在融合后的统一协同设计空间中直接进行搜索主要面临着2 个挑战:(1)巨大的协同搜索空间;(2)高额的评估开销。由于没有成熟的理论来解释网络结构和性能之间的准确性关系,就需要对每一个网络进行训练以获得精度,以及对硬件设计进行模拟来获得性能指标,这造成了较高的网络训练以及性能模拟开销成本。基于此,本文设计了2 种技术来解决上述问题,主要为:(1)基于LSTM 的序列生成器,用来生成协同设计点(包含DNN 结构和硬件配置),同时采用强化学习进行搜索;(2)快速的DNN 精度和硬件性能评估器。图4 给出了系统的整体流程图,其主要分为3 步:

图4 整体方法设计流程概览图

(1)DNN 精度和硬件性能评估器构建。此步骤中,系统根据目标任务(如分类、检测)构建HyperNet,候选DNN 模型可视为HyperNet 的子网,其可直接从HyperNet 中进行抽取并继承权重,以便避免单独训练从而实现快速的DNN 模型精度评估。同时从硬件模拟器中采样,获取不同硬件配制下的性能数据,进而构建高斯过程模型直接预测硬件性能来替代高耗时的硬件模拟。

(2)针对目标约束的高效搜索。根据设计约束(如精度、能耗、延迟等),采用RL 进行迭代搜索。在每一步迭代中,使用LSTM 输出设计序列,然后送入第一步中构建的精度和性能评估器中进行评估,获得reward 反馈来指导RL 控制器进行下一次的迭代。

(3)确定最优设计点。当搜索迭代到一定次数,选择搜索过程中综合得分最高的前K个点,进行DNN 模型重新训练和真实的硬件评估,并选择重训后得分最高的作为最优设计点。

3.3 强化学习搜索策略

在此协同设计空间中,将每一个候选设计点当做一个序列:λ=(η,c)=(d1,…dS,dS+1,…,dS+L)。此序列包含两部分,分别是网络结构超参数(长度为S)和硬件架构超参数(长度为L),可以从每一个候选λ构建出唯一的DNN 模型和硬件加速器组合。其中,对于λ中的每一个参数的选择可看做强化学习中的一个action(动作选择),所以整个λ可被视为一个动作序列。因此,本文使用LSTM(采用120 个隐层单元)来生成此序列,图5 列出了生成序列的示意图。在生成λ的第i个参数时,LSTM 接收第i-1 个参数作为输入,并将0 作为第一个参数的输入。为提高搜索效率,本文使用强化学习来捕捉动作序列之间的相关关系来指导序列生成具有较高的奖励(reward),此rewardR(λ)的形式化表示如下:

图5 基于LSTM 的序列生成流程示意图

R(λ)由多个目标构成,其中A(λ)l(λ),e(λ)分别表示生成序列λ的精度、延迟和能耗。t_lat,t_eer分别表示有用户设定的延迟和能耗约束,α1、ω1、α2、ω2为控制系数。因此,强化学习的目标是找到最优的超参λ∗来最大化rewardR(λ),即:

φ代表LSTM 中需要被更新的参数,通过更新φ来生成具有更高reward 的序列λ。同时,使用REINFORCE 算法[19]来更新LSTM 参数φ,其具体更新方法表示如下:

其中b代表了采用当前φ的生成序列的期望reward,也即平均reward。通过引入平均reward 值可以降低参数更新的方差,从而提高了搜索效率。

3.4 基于HyperNet 的精度评估

为了快速评估DNN 模型的精度,本文利用权重共享方法[5]构建了一个超网(HyperNet)来对每一个侯选DNN 直接赋予权重值。每一个候选DNN 模型可被视为HyperNet 中的一条路径,并直接从Hyper-Net 中继承权重。从而,只需要训练这个HyperNet一次,避免了之前对每一个网络进行单独训练的高额开销。

HyperNet 结构。图6 给出了HyperNet 的结构示意图。与之前网络结构设计方法[14,18,20]相同,本文使用2 种不同的cell 结构:规约单元(reduction cell)和正常单元(normal cell)来构建HyperNet,其中reduction cell 和normal cell 有着相似的结构,但reduction cell 的步长值(stride)为2。对于每一个cell 结构,可视为由B个节点(node)组成的无向图,其中每一个node 代表着DNN 处理过程中的特征图。对于第i个nodeIi,其需要选择2 个前向node(j和k)作为输入。Node 之间的连接可视为图的边,对于每一个边,需要选择一个具体运算操作(如conv3×3、conv5×5、pooling 等),其形式化描述如下:

图6 HyperNet 结构与训练策略示意

θ(i,j)和θ(i,k)分别为(i,j)和(i,k)之间选择的运算操作,I0和I1为前2 个cell 的输出。在输出选择上,本文将所有node(除去I0和I1)进行拼接之后作为此cell 的输出。因此,每一个node 通过选择不同的前向node 作为输入以及选择不同的运算操作,从而确定不同的cell 结构,又通过不同的cell 组合构成不同的DNN 模型。因而每一个候选DNN 模型可视为整个HyperNet 中的一条路径,其可直接从HyperNet 中继承权重。在实验中,本文选取了6 种运算操作和7 个node 组成HyperNet,因此,整个HyperNet 包含(6×(B-2)!)4≈5×1011种不同的候选DNN 模型结构。

HyperNet 训练策略。为了公平地评估每一个子网DNN 模型的精度,防止子网选择偏好对精度评估造成影响,本文对HyperNet 采取了一种公平的训练策略,即在HyperNet 的每一次训练迭代中,随机采样子网并进行参数更新,可表示为

对于第i个node,其选择前向第i-1 个node 的概率为p(Ii-1)=2/i。对于每一个备选运算操作,其被选概率为1/V,V为运算操作的个数,实验中选用了6个不同的运算,所以此处为6。对比之前工作[7,18,21],此随机采样策略有效避免了采样偏差导致的精度评估不准确问题,从而对候选DNN 模型结构进行更有效的精度评估。

3.5 基于高斯过程的硬件性能评估

在传统的加速器设计中,通常需要构建一个精确的模拟器来对硬件进行时钟级的行为仿真,以反映硬件的真实运行状态,但这同时导致模拟时间开销巨大,使得在协同设计的超大空间中直接使用模拟器来进行硬件性能评估不可行。因此,为了进行快速的硬件性能评估,本文采用机器学习技术来构建硬件性能评估器,实现了近2000×的速度提升,同时预测精度误差小于4%。在实验中,本文只构建了延迟和能耗预测器,但此方法可以扩展到其他硬件性能预测。

能耗预测器。图7 比较了6 种不同的机器学习模型对能耗的预测能力。在选择具体的机器学习评估模型前,本文首先从模拟器中收集了3600 个训练样本,并使用600 个样本作为预测样本,然后使用这6 种不同的机器学习方法在此样本上进行训练,并选取预测能力最优的机器学习模型作为性能预测器。通过实验发现,基于高斯过程(采用RBF 核)的预测模型具有最高的预测精度,因此采用高斯过程模型作为能耗预测器。

图7 不同机器学习方法的能耗预测结果对比

延迟预测器。同构建能耗预测方法一样,本文比较了这6 种不同的预测模型,然后根据预测精度来筛选预测器,最后也同样使用高斯过程来构建延迟预测器。

4 实验与分析

4.1 实验设置

为验证此协同设计框架性能,本文在图像分类任务数据集Cifar10 和Eyeriss(脉动阵列架构)[22]加速器上进行实验验证。根据设计流程,此搜索框架根据用户设计约束,自动搜索DNN 模型结构和加速器配置。在加速器可配置参数中,假设可配置PE的大小、全局缓冲器大小、寄存器大小和Dataflow 的方式。表1 列出了需要搜索的一些关键参数。本文所有实验运行在单台Linux 主机上,采用Intel Xeon 8163 2.5 GHz CPU 和单卡NVIDIA V100 GPU(16 GB HBM2)配置。在实验中,使用Cuda 10.0和Tensor-Flow 1.12 实现了RL 控制器、LSTM 和HyperNet。

表1 DNN 加速器协同设计参数

4.2 HyperNet 验证

DNN 精度预测器是协同搜索中精度评估的关键,为此,实验验证了本文提出的基于HyperNet 的DNN 模型精度预测器。也就是说,通过从HyperNet继承的权重来获得DNN 模型的精度的方法,与直接单独训练DNN 模型的方法相比,是否有正相关性?因此,实验中使用6 个cell(4 个normal cell 和2 个reduction cell)来构成HyperNet 并将其训练300 个epoch。在HyperNet 的训练过程中,本文采用动量为0.9 的随机梯度下降优化器和数据增强策略,同时采用余弦学习率衰减策略并控制学习率在0.05~0.0001 之间。此外,使用L2(4×10-5)正则化对权重进行优化。

图8(a)展示了HyperNet 在训练过程中的精度变化。具体而言,在训练过程中从HyperNet 随机抽出子网模型,并以此精度来代表HyperNet 的精度。可以看出,HyperNet 的精度随着训练迭代不断提升。图8(b)展示了HyperNet 训练完成后,从HyperNet直接继承权重的DNN 模型精度与单独训练的实际精度的相关关系。由于协同设计空间中DNN模型数量巨大,不能对全部DNN 模型进行验证,本文只从DNN 设计空间中随机选取130 个模型进行了单独训练(每个模型单独训练70 个epoch)。从图8(b)中可以明显看出,直接从HyperNet 继承权重与单独训练的精度具有较高的正相关性,从而表明从HyperNet 生成权值可以用于预测DNN 模型的真实精度,进而避免了高额的单独训练开销。

图8 HyperNet 精度验证

4.3 搜索策略

在实验中,本文对比了使用强化学习与随机搜索在协同设计中的搜索过程,此两种方法都以寻找更高的网络结构和对应硬件配置为目标。此强化学习搜索算法采用了REINFORCE 算法[19]进行更新,参数更新采用Adam 优化器,其学习率为0.0035。由于此协同设计为多目标优化,在式(2)中,可以设定不同的α1、ω1、α2和ω2系数使得搜索结果偏向不同的优化目标,如精度最高、延迟最低或精度/能耗综合得分最高。因此,本文设计了2 种不同的reward 函数,以使搜索结果偏向不同的设计目标。图9(a)针对DNN 模型精度和能耗进行权衡的场景,也就是需要更高的精度/能耗综合得分目标下,使用强化学习方法进行搜索获得的结果。通过设定式(2)中的参数,具体为α1=0.6、ω1=-0.4、α2=0.3 和ω2=-0.2。可以看出,随着搜索迭代,其搜索区域逐渐向Pareto 曲线靠近。同样,在图9(b)中,根据DNN 模型精度/延迟进行权衡的场景(设定参数为α1=0.3、ω1=-0.3、α2=0.6 和ω2=-0.4),其搜索结果也不断朝着精度/延迟Pareto曲线区域靠近,证明了基于强化学习的搜索策略能根据用户需求设定,自动朝着具有较高reward 的多目标区域移动,具有自适应搜索能力。从图9(a)和(b)可以看出,相比于随机搜索,基于强化学习的搜索策略能有更好地适应此大空间搜索问题,在多次迭代过程中逐渐找到具有最高的reward 的协同设计方案。

图9 不同目标设定下的搜索过程示意

4.4 与两阶段设计方法结果对比

最后,本文将此单阶段协同设计方案与之前的两阶段设计方案进行了对比。为了进行公平比较,选择现有的具有较高精度的DNN 模型[7,18,21-24]。对每一个对比模型,在统一的加速器设计空间中,枚举所有可能的加速器配置,并选择最优配置下的结果作为对比。对于单阶段协同设计方案,由于精度和性能预测器存在一些偏差,对最终选择结果有一定影响,为此本实验首先用5×106次迭代完成搜索,然后选择搜索过程中reward 最高的前10 个协同设计方案结果,对其中每一个网络单独训练获得准确精度,最后从这10 个协同设计方案中选取综合结果最优的一组作为代表。表2 展示了协同设计搜索相对之前两阶段设计方案的性能提升结果。作为对比,ACC/Latency 代表了本方案在精度/延迟权衡情况下的搜索结果,与之前两阶段方案相比,在同精度情况下,本文提出的方案实现最低0.77 ms 的延迟。同样,ACC/Energy 代表了本方案在精度/能耗权衡情况下的搜索结果,与之前方案相比,在同精度情况下,本文提出的方案实现了最低7.5 mJ 的能耗。图10展示了与之前两阶段设计方案相比,在同精度情况下,其平均能耗大约降低40%,最高延迟降低60%左右。可以证明,更大的联合设计空间,可以进一步提升AI 系统的性能;同时通过缩减搜索空间、提升搜索效率方法,对针对不同设计约束实现自动化搜索可以进一步降低人工开销。

表2 不同设计方法结果对比

图10 在同精度设计约束下,不同设计方案结果与最优延迟和最优能耗结果的相对比例

5 结论

本文在已有的两阶段协同设计方法基础上,提出了一种直接在DNN/加速器协同设计空间中进行自动化搜索的框架,以进一步提升AI 系统的性能,并减少人工开销。针对候选协同设计点评估开销巨大的问题,设计了基于HyperNet 的网络精度评估方法,每一个候选DNN 模型可直接从HyperNet 中继承权重以避免昂贵的训练开销;同时采用高斯过程模型对硬件设计性能进行预测,减少了整体的评估开销。针对联合设计搜索空间巨大问题,分析设计序列的相关性,利用LSTM 来生成协同设计序列并使用RL 来进行搜索。这些方法能加快性能评估并显著提高搜索效率。实验证明,在基于Eyeriss 的加速器结构和Cifar10 数据集上采用此协同设计方法,能在单卡GPU 上12 h 内完成整个搜索。与之前的两阶段设计方法相对比,此协同设计方法在同精度设计要求下,能实现平均近40%的能耗降低。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!