NNest:神经网络加速器设计探索工具

NNest:神经网络推理加速器的早期设计空间探索工具

摘要

深度神经网络(DNN)近年来取得了显著的成功。为了应对 DNN巨大的计算需求和内存占用,研究人员提出了众多推理加速器。然而,DNN在算法层面和并行化层面的多样性使得难以实现“一刀切”的硬件设计。本文中,我们开发了 NNest,一种早期设计空间探索工具,能够基于高层网络拓扑和架构特征,快速且准确地估算DNN推理加速器的面积/性能/功耗,而无需依赖低级RTL代码。NNest采用通用化空间架构框架,能够在广泛的架构/微架构参数范围内进行高效高维设计空间探索。我们提出的新型数据移动策略和多层适配方案使NNest能更有效地利用DNN中的固有并行性。NNest生成的结果表明:1)发现了此前未被识别的加速器设计点,在能效方面比当前最先进的实现提升了39.3%;2)提供了帕累托前沿曲线,全面且定量地揭示了定制DNN加速器中的多目标权衡;3)实现了对不同量化技术层级的整体设计探索,包括近期提出的二值神经网络(BNN)。

1 引言

自2012年AlexNet [1]在ImageNet竞赛中取得突破性表现以来,一类机器学习方法——深度神经网络(DNN)已获得显著成功,广泛应用于计算机视觉、自然语言处理和机器翻译等领域。这些分层网络模型通常采用数十甚至数百个相互连接的神经网络层,导致巨大的计算需求和内存占用,使其在传统基于CPU的计算平台上执行效率极低。尽管如此,DNN在其计算模型中表现出大量的固有并行性,可被利用以加速DNN计算。大量工具链和框架已建立在通用图形处理单元(通用GPU)利用其卓越的并行处理能力来执行深度神经网络任务[1];现场可编程门阵列(FPGA)系统[5]由于其可编程结构能够容纳灵活的并行处理原语,并适应快速演进的算法,因此受到了广泛关注;最后,定制DNN加速器如谷歌的张量处理单元(TPU)也取得了巨大进展,将理论计算吞吐量推向了数十每秒万亿次浮点运算(TFLOPs)的范围。

然而,计算速度/吞吐量并不是唯一重要的性能指标。功率和成本是深度神经网络(DNN)硬件加速器最关注的问题之一,尤其是在为移动或嵌入式边缘设备部署的神经网络推理任务中[2]。与以云为中心的平台相比,边缘设备具有更严格的功耗预算和对成本更敏感的考虑,这使得基于专用集成电路(ASIC)的解决方案更具吸引力[8]。尽管已提出大量神经网络推理加速器[13, 14],但由于深度神经网络在网络层面和微架构(μArch)层面均具有多样性,因此很难实现一种“一刀切”的实现方案。深度神经网络加速器复杂且高维的设计空间需要一种早期探索工具,能够快速而准确地遍历可用的设计点并估算其性能。此类工具可使多种应用场景受益。

例如,深度神经网络加速器的架构师可以更清楚地了解在不同微架构设计下各种性能指标之间的权衡;电路设计人员和器件工程师可以提前了解器件/电路级创新如何影响整个系统;算法开发者可以更深入地理解其模型参数和算法技术在定制 ASIC加速器上的潜在优势与代价,而不受特定实现的限制。

本文中,我们提出了NNest——一种早期阶段的工具,旨在促进基于专用集成电路的深度神经网络推理加速器的系统性设计空间探索。我们的主要贡献包括:
我们提出了一种空间加速器架构模板,可推广以涵盖多种深度神经网络加速器实现,能够在寄存器传输级(RTL)之前捕捉设计权衡。
我们开发了参数化数据移动策略和多层适配方案,能够高效地表达深度神经网络模型中的固有并行性。
NNest生成的结果不仅能够定量分析存储层次结构、数据重用以及能效/面积分解的影响,而且还揭示了此前未知的设计点,其能效高出39.3%。
• NNest 支持在考虑软硬件协同设计的情况下对深度神经网络模型和算法技术进行整体评估与比较。AlexNet 与 VGG 以及二值化量化的示例展示了这一能力。

2 背景与相关工作

2.1 深度神经网络初步

深度神经网络模型通常由不同层的级联组成,包括卷积、激活函数、归一化、池化和全连接。由于卷积和全连接层往往主导计算和内存访问,NNest主要关注探索这两种类型的层。深度神经网络模型通常采用由NNest中定义的神经网络结构参数(nnsPMs)决定的独特层形状和大小,这使得很难找到一种针对所有层和神经网络模型都优化的固定硬件配置。

2.1.1 全连接(FC)层

全连接层的计算模式采用三个神经网络结构参数维度:输入批量大小(N)、输入神经元数量(I)以及输出神经元数量(O)。每个输出神经元都与输入层中的所有神经元相连。它接收多个输入向量(N × I),并将其与一个权重矩阵(I × O)相乘,以得到输出向量(N × O)。每个输出的计算包含 I 次逐元素乘法,并将所有乘积累加以生成输出向量中的一个激活值。在全连接层中存在三种数据重用机会(图1)。1)输入复用:同一个输入向量被权重矩阵的不同列重复使用,以计算一个输出向量。2)权重复用:权重矩阵的同一列被多个输入向量重复使用,以计算不同的输出。3)部分和复用:旧的部分和(PSum)通过与新的逐元素乘积累加,从而被重复使用以获得更新的部分和。

示意图0

2.1.2 卷积(Conv)层

为了从输入特征图(ifmap)中提取特征,输出特征图(ofmap)中的每个输出神经元仅与输入特征图的一个局部区域相连,这称为卷积的局部连接特性,且与该局部输入特征图区域大小相同的权重矩阵被称为滤波器。输入特征图、输出特征图和滤波器的尺寸由卷积的神经网络结构参数(nnsPMs)定义。卷积层的计算模式可视为一个 C × R × S 的滑动窗口(SW)(图2)在输入特征图上移动。在一个滑动窗口内的输入特征图数据在累加前,会与一个 C × R × S 的滤波器进行逐元素相乘。每个在输入特征图上移动的滑动窗口(从 SW1 到 SW2)生成下一个输出值。当滑动窗口移动时,连续窗口之间重叠的数据形状为 (S − U) × R × C。其中 U 为步幅。因此,仅需 U × R × C 的新输入数据即可获得一个新的输出值。总共,一个滑动窗口在垂直方向移动 F 步,在水平方向移动 E 步,以得到 E × F 个输出值。三维滤波器的数量(M)对应于输出特征图中的通道数。

与全连接层相比,由于局部连接,卷积具有权重共享特性,因为全连接(C × H × W)被减少为局部区域(C × R × S)。一个通道的输出激活(× F)也共享相同的三维滤波器。因此,在卷积层中存在额外的重用机会,本文将其称为滑动窗口重用。它有两种形式:1)相同的三维滤波器在 × F 个滑动窗口上被重用;2)两个滑动窗口之间的重叠部分可以被重用,只需加载新步幅(U × R × C)。

示意图1

2.2 现有神经网络加速器

我们调研了先前关于神经网络推理加速器的工作,并根据数据流 [19] 将它们分类:1) 无局部重用 (NLR) 表示那些不为每个乘累加单元(MAC)分配寄存器文件或寄存器形式的本地存储的设计。因此,所有 MAC 共享一个全局缓冲区(GB),用于加载输入和权重以及存储中间部分和。2) 权重复用 (WS) 指的是采用本地存储来重用权重的设计,以最小化因不同输入特征图频繁获取权重所带来的能耗 [8, 12, 17, 18]。输入和部分和仍存储在全局缓冲区中。3) 输出重用 (OS) 将部分和本地存储 [13, 24],而非权重。类似地,其目标是最小化读取旧的部分和并写回更新后的部分和所需的能量。4) 行重用 (RS) 提出将权重、输入和部分和都进行本地存储,以增加数据重用的机会 [21]。我们的框架涵盖了所有这些先前提出过的架构。

2.3 神经网络设计自动化

已经提出了 [4, 6, 23] 专注于在 FPGA 上进行神经网络加速的工具。这些工具将特定的深度神经网络模型作为输入,并自动生成适用于兼容 FPGA 的实现。由于它们针对固定的硬件平台设计,因此优化重点在于最大化片上资源利用率以及给定 FPGA 平台下的最高吞吐量。先前的研究提出了基于现场可编程门阵列的深度神经网络加速器设计空间探索 [10]。然而,该研究未明确处理全连接层和多级存储器层次结构,也没有提供关于芯片面积和功耗的探索结果。

在定制化ASIC领域,已开发出用于探索通用计算内核加速的工具[22],但这些工具仅能应用于有限的神经网络设计空间[2]。已有方法提出对深度神经网络(DNN)的能耗进行粗略估计,以指导架构选择[16],但未提供全面的面积/功率/性能权衡或通用架构框架,无法系统性地评估不同的并行化/复用策略。最后,已有专为二值化神经网络(BNN)设计的工具[9]用于执行估算与分析,但它难以直接适用于研究具有不同量化方案的通用神经网络加速器更广泛的设计空间。

3 方法论

3.1 通用架构模板

为了进行有效的和彻底的设计空间探索,我们首先提出了一种空间神经网络加速器架构模板(图3),该模板可泛化以生成众多设计点。它借鉴了许多现有加速器原型的设计灵感,能够涵盖以往探索过的具有不同数据流方案(包括NLR、WS、OS和RS)的架构。

在我们的加速器框架中,片上组件包括各种分块全局缓冲器(GB)、本地缓冲器(LB)、以1对多和1对1形式的广播总线(BBus)构成的通信网络,以及一个二维阵列的算术单元(ALU)。作为SRAM建模的大容量片上内存,GB用于存储从外部DRAM获取的输入和权重数据,并保存中间部分和在计算过程中,将最终的输出激活值写回DRAM。LB表示位于GB和ALU阵列之间的小容量存储器,ALU可以更快、更高效地访问它。根据数据移动策略(见第3.2节),LB会本地存储某些驻留数据以便后续复用,而无需访问GB。具体而言,I-LB和W-LB分别向ALU阵列广播输入(I)和权重(W)数据,以实现输入和权重的复用。每个ALU单元接收广播的 I/W数据,并执行逐元素乘法以及与从P-LB加载的部分和进行一次累加,得到更新后的部分和t,然后存回P-LB。这样,P-LB中的部分和可以在所有相同激活值的计算完成前被复用,而无需写回到GB。我们的架构允许将LB设置为零(在NLR情况下)或部分旁路(在WS和OS情况下)。

示意图2

直观地说,如果没有面积限制,将所有数据存储在全局缓冲区(GBs)中可以避免对同一数据进行多次高能耗的动态随机存取存储器(DRAM)访问。然而,即使对于单个层,输入/权重/输出(I/W/P)数据量也可能相当大,并且在不同的神经网络(NN)层之间变化范围很广。考虑到大容量片上内存的成本,实际系统中全局缓冲区(GB)的大小受限,一次只能容纳一个tile的数据。显然,全局缓冲区大小也会影响局部缓冲区(LBs)和ALU阵列中的数据重用效率。因此,我们必须确定在分区的全局缓冲区和局部缓冲区之间以及跨区传输和替换数据的最佳策略,以最小化外部/片上内存访问并实现最大程度的数据重用,下文将对此进行讨论。

3.2 数据移动策略(DMS)

随着先进工艺技术的发展,数据移动在延迟和能量方面的成本显著高于计算 [14]。由于深度神经网络(DNN)模型对内存需求较高,为了实现更高的性能和能效,必须仔细制定数据移动策略(DMS),以充分利用神经网络加速器并行处理中存在的数据重用机会。最大限度的数据重用非常理想,其实现方式包括:1)将输入/权重数据广播到多个算术逻辑单元(ALU)进行并行处理;2)将数据保持在片上存储中,避免在下一个计算周期中进行耗能的内存访问。在本节中,我们推导了NNest中用于定义内存和计算引擎的微架构参数(μAPMs),并表达不同的数据移动策略。通过这种方式,我们能够通过扫描表1中列出的这些微架构参数值,有效遍历广泛的神经网络加速器设计空间。计算微架构参数(comp μAPMs)定义了ALU阵列的大小,表示神经网络加速器的计算速度。内存微架构参数(mem μAPMs)和神经网络结构参数(nnsPMs)定义了全局缓冲区(GBs)和局部缓冲区(LBs)的存储容量。

表1:NNest μ架构参数列表

参数名称 计算微架构性能模型 内存微架构参数模型
全连接层 tti, tto Tn, Ti, To
卷积层 ttm, tte, ttc, ttr, tts Tm, Te, tm, te, tc
3.2.1 全连接层中的数据流

由于全连接层中权重(I × O)数量庞大,将所有权重保存在全局缓冲区中是不现实的。相反,我们假设仅有一个权重块 Ti × To(见表1中的内存微架构参数模型),存储在片上,由此决定W-GB大小。分块批处理大小 Tn用于表示并发处理的输入数量,从而以广播方式实现权重复用。对于全连接层数据流管理系统,我们认为滑动窗口在权重矩阵上无重叠地移动以获取数据。然而,不同的滑动窗口移动顺序对全局缓冲区的实现影响很大。我们在众多移动顺序组合中研究了两种有效的策略(图4(a)(c)),这两种策略具有合理的内存访问消耗并实现了较高的数据重用率。针对每种策略,详细描述了全局缓冲区和局部缓冲区中的数据移动策略。

示意图3

输入重用(IR) :在DRAM到GB级别,滑动窗口(SW)按{O,I}的顺序移动。首先在权重矩阵的O维度上移动(图4(a)),从DRAM获取 Ti × To个权重数据到W-GB。同时,Tn × Ti1个输入数据在I-GB中保持静止以实现复用。下标表示获取数据的范围,Tix =[Ti ×(x − 1)+ 1: Ti × x],此规则同样适用于后续内容。当获取完具有Ti1行的权重矩阵的所有O列后,生成Tn × O个部分和(PSums)。第二步是输入和权重均在I维度上移动,输入移动为Tn ×(Ti1 → Ti2),权重移动为Ti1 × Tox → Ti2 × To1(其中x = O/To),以更新部分和。为了避免频繁访问 DRAM,P-GB的容量设置为Tn × O(如图4(b)所示),用于存储所有中间部分和,而I/W-GB的容量分别设置为Ti × Tn和Ti × To。在GB到 LB级别,滑动窗口按{To,Ti}的顺序移动。GB到LB级别的数据移动策略(DMS)与DRAM到GB级别的DMS模式相同,只需替换相应的微架构参数模型(μAPMs)。如图4(b)(e)所示,为了满足ALU阵列的处理速度,I/W/P-LB的配置由计算微架构性能模型(comp μAPMs)(tti, tto)决定。W-LB首先在To维度上进行替换,Tn × tti1个输入数据在 I-LB中保持静止。经过To/tto个周期后,I/W-LB再在Ti维度上进行替换以更新部分和。

PSum复用(PR) :PR中数据流的推导可以以类似于图4(c)-(e)所示的方式进行,与红外(IR)相比采用反向SW移位顺序,DRAM到 GB级别为{I,O},GB到LB级别为{Ti,To}。此处,在DRAM到GB级别,部分和(PSums)在P-GB中保持静态,输入和权重均在I维进行替换,Tn ×(Ti1 → Ti2)(输入),To1×(Ti1 → Ti2)(权重)。在处理完I行输入数据和具有To1列的权重矩阵后,P-GB中的Tn × To1个部分和完成并发送到外部DRAM。随后在O维度上替换权重,Tix × To1 → Ti1 × To2(权重,x = I/Ti),以计算下一个Tn × To2个输出,并且所有输入数据都从Tn ×(Ti1 → Tix)重新获取。在GB到LB级别采用了类似的DMS模式。

DMS 还根据 GB-to-LB(mem μAPMs)和 LB-to-ALU(comp μAPMs)的广播需求确定 BBus 配置。例如,W-LB 中的 tto×(tti) 个权重和 I-LB 中的 Tn×(tti) 个输入广播到 Tn×tto 的 ALU 阵列。BBus 从 W-LB 到 ALU 为 1-to-Tn,从 I-LB 到 ALU 为 1对tto。

3.2.2 卷积层中的数据流

与全连接层数据流管理系统类似,滑动窗口的移动顺序会影响卷积全局缓冲区的设计。通过比较各种移动顺序,以下两种数据移动策略IWR和PR能够实现高效的能量利用和高数据重用,其概念上类似于全连接层中的IR和PR,并额外提供了滑动窗口重用的可能性。两者在GB到LB级别的数据移动策略简要描述如下。类似的模式也存在于其他存储层次中。

示意图4

输入/权重复用(IWR) :在GB到LB级别,滑动窗口(SW)按{W, Th, Tm, C}的顺序移动,IWR旨在最大化输入和权重的复用。在一阶(W)(图5(a))中,SW首先沿W维度移动,以复用SW重叠的数据。然后在第二阶(Th),SW移动到下一个th输入行,并沿W维度继续移动。在处理完I-GB中的所有Th输入行后,生成tm×Te × F个部分和(PSums),同时tm个 3D滤波器在W-LB中保持静止。第三阶(Tm)步骤将W-LB替换为下一组tm权重,并再次在整个Th行输入数据上移动SW。在处理完W-GB中的所有Tm个 3D滤波器后,生成Tm个 ×Te × F部分和。最后在第四阶(C),输入和滤波器均被替换为下一批tc个通道,中间部分和将被更新为其最终值。为了提高输入/权重复用率,定义滑动窗口数量的参数(Th, Tm)应尽可能大。由于全局缓冲区大小有限,只有tc个输入/权重通道被保存在GB中,且tc通常较小,以便容纳较大的Th和Tm。因此P-GB中存储了大量的部分和数据(Tm × Te × F),占用了全局缓冲区的主要空间。此处描述的IWR与Eyeriss中提出的行重用类似,其中80% ∼ 90%的GB用于存储部分和。输入滑动窗口的大小由te和tc定义,并决定I-LB的大小为te × tc × R × S。对应的滤波器定义为tm × tc × R × S。ALU阵列大小(图5(c))由卷积的计算微架构性能模型(ttm × tte),以及每个算术逻辑单元中的并行MAC操作为 ttc × ttr × tts。

PSum复用(PR) :在GB到LB级别,滑动窗口(SW)按{W, C, Th, Tm}的顺序移动,而PR旨在最大化部分和复用。与IWR类似,在一阶(W)中,SW(图5(b))首先沿W维度移动,并生成tm×te×F个部分和。随后在二阶(C)中,SW移至下一个tc个输入/权重通道,并沿 W维度移动以更新在前F次移动步骤中计算的中间部分和,直到这些部分和完成,然后将其写回动态随机存取存储器,此时P-GB大小设为 te×tm×F。为了保持与IWR相同的动态随机存取存储器访问方式,输入(Th×C×W)和权重(Tm×C×R×S)在C维度上的所有数据均保留在全局缓冲区中。三阶(Th)步骤将滑动窗口移至输入数据的下一行。最终阶(Tm)处理W-GB中的所有Tm×D个滤波器。因此,在PR中,P-GB大小可以较小,仅需存储有限数量的部分和,但I/W-GB应具有足够的空间来存储C通道的输入和权重。PR的局部缓冲区和算术逻辑单元定义与IWR相同。

3.3 多层拟合

Methods detailed in Section 3.2 可用于设计针对特定神经网络层的定制化加速器。然而,大多数深度神经网络模型由多个具有不同形状的层组成,因此需要高效的方案将它们适配到单一硬件上。为了确定能够适配多层的最优架构配置,我们需寻找层类型与形状之间的一致性。回顾卷积层和全连接层的类型关系,我们可以将卷积层视为局部连接且权重共享的全连接层。假设卷积滤波器(R × S)的尺寸扩展至覆盖整个输入特征图(即 H = R,W = S),则该卷积层实际上被转换为一个全连接层。因此,全连接层与卷积层的神经网络结构参数之间存在如下关系:I = C × R × S = C × H × W,O = M。

示意图5

针对单个加速器上的不同卷积层,拟合方法侧重于由神经网络结构参数部分定义的全局缓冲区和局部缓冲区。而算术逻辑单元完全由微架构参数模型定义,并适用于不同的神经网络结构参数值。

在全局缓冲区(GB)级别,GBs的存储容量和带宽是固定的,例如PR的输入全局缓冲区(I-GB)是固定的,则为Tm 1 × C1 × W1 = Tm 2 × C2 × W2。不同的神经网络结构参数(nnsPMs)导致内存微架构参数模型(mem μAPMs)的不同取值。如第3.2节所述,较高的mem μAPMs值可在全局缓冲区(GBs)中实现更高的数据重用率。在局部缓冲区(LB)级别,输入局部缓冲区(I-LBs)由te × Racc 移位器组成,每个移位器存储tc × Sacc 数据。Racc 和Sacc 是固定的,用于定义加速器,但Rnn 和Snn 可以在网络的每一层取不同值。因此,会出现两种情况:Rnn > Racc 和Rnn < Racc。在第一种情况下(图6(a)),基于卷积(Conv)的计算模式,一个大尺寸的滤波器可以被分割为n个较小尺寸的滤波器,其中n = ⌈Racc / Rnn⌉ × ⌈Sacc / Snn⌉。这n个滤波器与输入数据进行卷积,生成n个通道的部分和(PSums)。这些 n个通道的部分和(PSums)在通道间累加以得到最终结果。与原始卷积相同的部分和值。通过应用这种拟合技巧,在情况1中,较大的 Rnn, Snn卷积可以在固定加速器上执行。在第二种情况(图6(b))中,Rnn × Snn大小的滑动窗口在输入数据上移动。I-LB 中可保留额外的输入行以获得多个部分和。然而,由于 I-GB 的访问带宽限制,每个周期只能获取 U × Sacc大小的数据。I-LB 中的每个移位器将无法被充分利用。在 W-LB 中,使用了 Rnn × Snn大小的存储器来存储权重数据。

3.4 面积/性能/能耗建模

为了准确建模神经网络加速器的设计权衡,我们需要以参数化方式对每个片上组件(GB、LB、BBus 和 ALU)进行模块级表征,获得实际的面积/性能/能耗数据。如图7所示,这些表征数据通过 NNest 与其他仿真工具的接口获得,例如使用 Cacti [11] 对 SRAM 进行建模、使用存储器编译器对寄存器文件进行建模、使用 Synopsys Design Compiler(DC)对算术逻辑进行建模。为了获取 ALU 阵列的面积/延迟/功耗,我们采用 40 纳米标准单元库,利用 DC 综合数据路径电路中的基本乘法器和加法器树,方法类似于 Aladdin [22] 中所采用的方法。尽管实验中使用了 40 纳米工艺由于工艺技术获取受限,但相同的模块级表征可轻松移植到新的工艺技术中。NNest 还考虑了来自 TensorFlow 等工具的神经网络结构参数以及用户指定的面积/时序/能耗约束。通过数据移动策略和多层适配方案,NNest 能够高效地探索由微架构参数模型定义的设计空间(表1)。该架构级探索在扫描微架构参数模型取值时,已充分考虑了 MAC 循环展开(并行化)和层次化内存优化。

示意图6

示意图7

在电路层面,基于空间架构的神经网络加速器的执行最初可以分解为三个阶段(图8(a))——加载输入/权重/偏置数据、一个周期的计算以及存储更新的部分和。每个阶段的关键路径通过堆叠来自存储器模拟器和器件库中各个单个模块的延迟进行模拟。由于不同的微架构参数模型值,初始的三阶段流水线可能并不平衡。根据仿真结果,我们发现算术逻辑单元的计算在这三个阶段中消耗的延迟最长。解决方案是缩短算术逻辑单元阶段的延迟(图8(b)),或将一个周期的计算拆分为多个阶段(图8(c))。NNest 首先在算术器件库中搜索延迟更短的乘法器或加法器,以减少计算延迟,但更短的延迟会导致更高的面积和能耗,从而导致面积/能耗约束不满足。如果失败,NNest 会将 ALU 阶段拆分为多个阶段,并反复进行平衡步骤,直到获得一个合理的流水线解决方案。最后的手段是降低 ALU 的并行度,以在多个周期内顺序处理计算。

4 实验结果

所有实验均使用 40 纳米 CMOS 技术进行。

4.1 层级别探索

首先,在 NNest 中探索特定单层加速器的设计空间。在配备 8GB 内存的 Intel-i7 2.70GHz CPU 平台上,探索一个设计点需要 3.61959 秒(Cacti 上为 3.61911 秒)。

以 AlexNet 的 Conv-3 和 FC-1 层为例。结果如图9所示,其中所有设计点均以散点图形式展示,并标出了由最优设计点组成的帕累托前沿。在 AlexNet Conv-3 的设计空间中,我们观察到一个普遍趋势:当采用多级存储器层次结构实现局部数据重用时,NLR 数据流的功耗低于 PR 和 IWR。IWR 与 PR 的帕累托前沿非常接近。我们分别从 IWR 和 PR 的前沿上选择一个性能相近的设计点,对其能量和面积分解进行分析。由于减少了全局缓冲区访问带来的能耗,PR 的总能量约为 IWR 的 93.4%,但带来了额外的面积开销。原因如下:1)在 IWR 中,输入和权重占用的存储空间较小,但每个周期都需要从大容量的 P-GB 中读取部分和,这种频繁的部分和加载/存储操作增加了全局缓冲区访问的能量消耗;2)在 PR 中,I/W-GB 需要较大面积来存储完整的 C 通道输入和权重行数据,但 I/W 数据可在局部缓冲区中保留并重用,从而减少对全局缓冲区的访问。我们还标注了基于先前工作(Eyeriss[21] 和 ASP-DAC [10])所提出的数据流策略的设计点。这两个设计均远离 NNest 识别出的前沿,而 NNest 能够找到更节能的设计点(相较于 ASP-DAC [10] 节能提升 28.5%,相较于 Eyeriss [21] 提升 39.3%)。

在 AlexNet FC-1 设计空间中,IR 代表的设计比 PR 更优,且面积开销更小。PR 表现较差的原因是由于其全局缓冲区(GB)的特性,PR 将所有输入数据 N × I 保留在 I-GB 中,而 IR 将所有部分和 N × O 保留在 P-GB 中。在 AlexNet FC-1 中,I = 43264、O = 4096、I ≫ O,导致 PR 的 GB 面积和能耗增加。因此,在全连接层中,如果 I 远大于 O,则 IR 优于 PR。比较 NLR 和 MH 前沿可知,在局部缓冲区(LB)中进行数据重用可节省约 9% 的能耗,仅需增加 0.3% 的额外面积。全连接层在动态随机存取存储器+全局缓冲区内存访问上的能耗远高于卷积层(全连接层中 PR 和 IR 前沿的 DRAM 访问能耗占总能耗的 98% 以上,而卷积层仅为 70% ∼ 80%)。这源于卷积层的局部连接和权重重用特性。

示意图8

4.2 网络级探索

接下来,我们应用第3.3节中描述的多层拟合方案,用于探索完整神经网络的设计空间。

我们使用 AlexNet[1] 和 VGG [7] 作为示例。设计空间的结果如图10所示。不出所料,VGG 的功耗高于 AlexNet,因为它采用了更深更宽的网络结构。我们确定了两个网络的最小总能量设计点,这表明在整个设计空间中,VGG 至少比 AlexNet 多消耗 4× 的能量。有趣的是,如果我们绘制出在 AlexNet 和 VGG 中每 MAC 操作能量最小的设计点,可以观察到,针对 VGG 定制的加速器每个 MAC 操作仅消耗 AlexNet 优化加速器每 MAC 操作 17% 的能量。原因是 AlexNet 各层的尺寸差异很大,例如 R、S = 11、5、3,这在跨多个层部署时导致较大的硬件开销。而 VGG 具有更加均匀的层模式,例如 R、S = 3,使其能够更好地利用硬件资源。

NNest 可以根据其他特定需求方便地生成设计点。例如,为了实现 33 帧/秒的实时图像处理,我们在图10中选择功耗最低的两个设计点(AlexNet 为 87 毫瓦,VGG 为 306 毫瓦)。每个设计的芯片面积也可获得,分别为 AlexNet 4.2mm² 和 VGG 8.02mm²。

示意图9

4.3 量化技术探索

最后,NNest 评估了不同级别的量化。

某些量化技术需要更大的网络来保持可接受的精度。例如,二值神经网络必须采用更高的为了补偿因极端量化导致的精度损失,需要增加滤波器的数量。因此,简单地将原始网络二值化的朴素方法无法准确捕捉 BNN 的实际设计权衡,并且会显著低估功率和面积成本。相反,NNest 允许用户指定神经网络结构参数以及位宽等电路级参数,从而能够快速生成正确的设计空间和帕累托前沿,用于不同量化技术的早期评估。

示意图10

5 结论与未来工作

NNest 在无需底层 RTL 实现的情况下,探索了基于 ASIC 的深度神经网络加速器的高维广阔设计空间。实验结果表明,NNest 可应用于多种设计场景。未来,我们将在现有全连接和卷积层的基础上,进一步探索其他类型的网络层,如激活、归一化和池化层,以及其他的深度神经网络模型。我们还计划引入硬件模型,以支持对非 ASIC 平台(如 FPGA 和 GPU)进行性能估计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值