「神经网络加速器架构」概述进展

原文转载:专知「神经网络加速器架构」最新2022概述进展 - 知乎   转侵删

如今, 随着数据需求的增长以及硬件算力性能的提升, 人工智能得到越来越广泛的应用. 其中, 神经网络算法已经被成功地用于解决一些实际问题, 例如人脸识别、自动驾驶等. 尽管这些算法有着 卓越的表现, 但其在传统硬件平台上的计算性能仍然不够高效. 因而, 一些为神经网络算法定制的计 算平台应运而生. 本文将总结一些典型的神经网络加速器架构设计, 包括计算单元、数据流控制、所加速的不同神经网络的特点, 以及在新兴计算平台上设计加速器的考量等. 最后我们也将提出对神经 网络加速器未来的展望.

虽然大数据应用的井喷推动了ML算法的发展, 但也为其在传统计算系统上的数据处理速度及可扩展性带来了极大的挑战. 这是因为在传统的冯 ⋅ 诺依曼(John von Neumann)架构上, 数据处理与数据存储是分开的两个部分. 因此, 处理器与片下存储器之间频繁的数据交换限制了系统的性能与能效. 这一问题无疑又会因为AI应用中海量的数据处理而进一步加剧. 因而, 专门为AI应用所定制的计算平台也就应运而生. 这些定制的计算平台有些是基于传统冯 ⋅ 诺依曼架构平台的改进, 而有些则是完全一个单独的加速平台. 而大多数的定制设计都基于一个共识: 与计算相比, 访存所占的延迟与能耗要大得多. 所以, 解决了“内存墙" (memory wall) [3]的问题就可以大幅度提升性能和能效. 最近的AI加速器设计通常利用大量的高并行计算和存储单元. 这些单元以二维阵列的形式排布来支持NN中的矩阵向量乘法(matrix-vector multiplication). 除此之外, 片上网络(network on chip, NoC) [4]、高带宽内存(high bandwidth memory, HBM) [5]以及数据重用(data reuse) [6]等技术进一步优化了加速器中的数据传输. 除了传统的基于互补金属氧化物半导体(complementary-symmetry metal-oxide-semiconductor, CMOS)的设计之外, 例如忆阻器(metal-oxide resistive random access memory, ReRAM)等新型存储器件也被应用于AI加速器的设计中 [7-9]. 这些新型存储器件都有存储密度高、访寸延迟低并且可以进行存内计算(processing-in-memory, PIM)等特点. 以ReRAM为例, ReRAM阵列不仅可以存储NN的权重, 也可以在模拟域进行原位的MVM (matrix-vector multiplication)计算. 与基于CMOS等设计相比, 基于ReRAM的AI加速器利用模拟域低能耗计算可以在能效上有3 ∼ 4个数量级的提升 [10]. 而运算过程中因模拟噪声信号所产生的计算偏差则可以通过ML算法上的优化被消除. 但是, 基于ReRAM的AI加速器也同样存在着一些问题. 例如其中数模(digital-to-analog converter, DAC)与模数(analog-to-digital converter, ADC)转换电路的能耗与面积可以分别占到总能耗的66.4%和总面积的73.2% [11].

神经网络推理与训练

总体来说, 一个DNN模型可以看成是一个根据高维输入给出有效预测的复杂的参数化函数. 这个预测的过程则被称为推理(inference). 而获得参数的过程则被称为训练(training). DNN的训练在训练数据集上完成. 训练的目标则是不断减小一个预先定义的损失函数(loss function). DNN的参数也被称为权重(weight), 权重在训练过程中通过随机梯度下降(stochastic gradient descent, SGD)等方法被不断优化. 在每一次训练中, 首先进行前向传播(forward pass)来计算损失函数; 然后再进行反向传播(back propagate)来反传误差; 最后, 每一个参数的梯度都被计算并且累计. 如果要完全训练一个大规模的DNN, 训练过程可能要持续一百万次甚至更多. 一个DNN通常由许多神经网络层(NN layer)组成. 我们把第 l 层记作函数 f l , 那么一个包含 L 层网络的简单的DNN的推理可以写作

其中 x 为DNN的输入. 由此例可知, 每一层的输出其实只作为下一层的输入, 因而整个DNN的推理过程可以看作是一个链式计算的过程. 在DNN的训练中, 数据的前向传播过程和推理一致, 但其反向传播过程与之相反. 并且前向传播过程中每一层的中间结果都会在反向传播过程中被重新利用来计算误差(这是由于反向传播的链式法则). 这无疑大大加剧了数据之间的依赖性. 图 1 表明了训练与推理过程中的区别. 一个DNN也可能会包含卷积层(convolutional layer), 全连接层(fully connected layer)以及一些其他非线性层(如激活函数ReLU, sigmoid, 池化层(max pooling)以及批标准化层(batch normalization)). 在反向传播过程中, 矩阵乘法以及卷积仍然基本保持其计算模式不变. 细节上的区别是在反向传播过程中, 原来的权重矩阵以转置的形式参与反向传播计算, 而卷积核也以旋转的形式参与梯度下降的计算.

 计算模式

尽管一个DNN模型会包含很多层, 但矩阵乘法和卷积占了超过90%的计算量. 而这两者也是DNN加速器设计优化的主要对象. 对于一个矩阵乘法而言, 如果我们用 I c , O c 和 B 分别表示输入通道数(input channel)、输出通道数(output channel)以及批量输入大小(batch size), 那么推理的计算过程可以写成

其中 i c 是输入通道的标号, o c 是输出通道的标号( 0 ≤ o c < O c ), b 是批量输入样本中的标号( 0 ≤ b < B ). 在这个矩阵向量乘法中每一个输入可以被所有的输出通道重用, 而每一个权重则可以被所有批量输入重用.

DNN中的卷积实际上可以被看成是矩阵乘法的扩展. 卷积的作用从直观上来讲可以说是增加数据的局部联系性. 与一般的矩阵乘法相比, 在卷积计算中, 每一个输入元素被一张2维特征图所替代, 每一个权重元素被一个2维卷积核(convolution kernel/filter)替代. 其计算模式是一种“滑窗"式计算. 如图 2所示, 卷积核从输入特征图的左上角开始滑向右下角. 这个过程可以表示为

其中 F h 和 F w 分别是卷积核的高度和宽度, i 和 j 分别是2维卷积核的行索引和列索引, x 和 y 分别是2维输入特征图的行索引和列索引, 并且满足条件 0 ≤ b < B , 0 ≤ o c < O c , 0 ≤ x < O h , 0 ≤ y < O w , 其中 O h 和 O w 分别为输出特征图的高度和宽度.

不难发现, 一个卷积核要被重复应用到输入特征图的所有部分. 这使得卷积运算中的数据重用比矩阵乘法中更为复杂. 可以把这个2维的“滑窗"看成是两个层级: 第1个层级是把“滑窗"看成是几行权重在特征图上自上而下滑动, 由此进行行间数据重用; 第2个层级是“滑窗"的某一行都自左至右滑动, 由此进行行内数据重用. 尽管矩阵乘法和卷积的计算模式不同, 但是卷积也可以通过Toeplitz变换转换为矩阵乘法, 但这将付出一定量数据冗余的代价 [12].

片上加速器

其实神经网络加速硬件单元最早作为通用处理器的辅助单元 [13], 加速被NN替代的某些通用程序中的“近似程序段"(approximate program), 从而实现加速通用程序处理的目的. 注意, 这里的近似程序段是指可以通过训练一个NN模型模仿其行为并且被NN替代后其精度损失可以在接受范围内的程序. 随着NN应用的范围越来越广泛, 其作用也不再仅仅局限于近似计算领域, 专门为NN的计算定制加速硬件也变得更有必要.

神经处理单元

神经处理单元(neural processing unit, NPU) [13]是加速通用程序段中可以用NN做近似计算(approximate computation)来替代的部分, 例如为索贝尔边缘检测(sobel edge detection)和快速傅立叶变换(fast Fourier transform)而设计的专用硬件. 为了在NPU上执行一个程序, 程序员需要手动注释近似程序段. 当编译器开始编译时将被注释的程序段编译为NPU指令, 然后相关的计算任务便从CPU转交到NPU执行. NPU的硬件设计非常简单. 如图 4所示, 每个NPU有8个处理单元(processing engine, PE). 每个PE都负责一个“神经元"计算, 即乘加之后再进行sigmoid非线性处理. 所以这个NPU只能处理简单的多层感知机(multiple layer perception, MLP) NN模型.

随着NN算法的不断发展, NN的应用不再局限于近似计算. 因此专门为NN的计算设计硬件平台就显得愈发重要. RENO [4]就是一个专为NN定制的硬件加速平台. 如图 5所示, RENO对于PE的功能设计采用了与NPU类似的想法. RENO的PE都是基于ReRAM的交叉阵列(crossbar). RENO利用ReRAM crossbar作为基本的计算单元去处理MVM. 每个PE都有4个ReRAM crossbar去处理正负输入与正负权重所对应的4个MVM. 在RENO中, 数据通路(router)主要用来负责PE之间的数据传输, 即把上一个PE模拟域获得的中间结果传递到下一个PE上去. 在RENO中, 输入和最终的输出是数字信号, 而所有的中间结果都是模拟信号. 因而, 只有当RENO和CPU之间传输数据时才需要DAC和ADC转换电路. 不难看出, 定制的片上加速器作为CPU的辅助单元, 可以帮助CPU高效地处理一些特定的任务. 但由于片上资源的限制(例如面积、功耗等因素), 片上加速器的设计预算有限. 因而其只能用来加速一些例如近似计算、简单的MLP的推理等计算量较小的应用.

为了支持更为复杂的DNN和CNN, 独立的专用NN加速器已经被提出并且在云端(cloud)和边缘端(edge)都获得了巨大的成功. 与传统的CPU和GPU相比, 这些定制的架构可以有更强的性能以及更高的能效. 在设计定制的架构时, 要特别考虑数据流的设计, 从而减小片上与片外的数据交互. 本节主要以DianNao系列 [14]以及张量处理单元 [15] (tensor processing unit, TPU)为例介绍独立的神经网络加速器并对其数据流设计进行分析.

基于新型存储器件的加速器

ReRAM和HMC是两个具有代表性的能实现“存算一体" (PIM)的新型存储器件. PIM可以大大降低数据在计算平台上的移动, 从而降低数据传输所带来的延迟与能耗.

基于忆阻器的神经网络加速器

利用ReRAM进行DNN加速的主要思路是利用ReRAM阵列进行“原位"的MVM计算. PRIME [7], ISAAC [11]以及PipeLayer [8]是3个具有代表性的基于ReRAM的DNN加速器. PRIME的架构如图 9 所示. PRIME利用ReRAM同时对数据进行存储和计算. 在PRIME中, WDD可以根据输入的大小配置相应的电压. Col mux可以配置为模拟域减法和非线性激活函数电路(sigmoid). 两个不同ReRAM阵列的中间结果可以合并在一起然后发送到sigmoid 电路上进行下一步计算. PRIME中SA的精度也可以按照需求进行配置, 并且像ADC一样进行模拟信号到数字信号的转换. ISAAC [11]提出了一个数据块内流水线式的NN处理架构. 如图 10 所示, 这条流水线中结合了数据的编码与计算. IMA是基于ReRAM的原位乘加单元. 第一个周期, 数据先从eDRAM中被取出然后发送到计算单元. ISAAC中的数据格式是16比特定点数. 在计算过程中, 每一个周期都有1比特数据被发送到IMA中. IMA的结果被转换成数字信号形式存储. 针对一个数据的16个计算周期, 之前的结果不断移位与当前结果相加, 从而得到最终结果. 然后, 线性的最终结果被非线性函数计算电路处理, 最后写入eDRAM.

PipeLayer [8]也采用了流水线的工作方式. 与ISAAC不同, PipeLayer每次处理的数据“粒度"更大, 以此来充分利用ReRAM计算单元的高并行性. PipeLayer也提出了两种并行计算的方式: 层内并行与层间并行. 对于层内并行, PipeLayer采用了一种数据并行的处理方式, 即用多个含有相同权重的处理单元去处理更多的输入数据; 而层间并行则采用模型并行的处理方式, 即含有模型不同层权重的处理单元同时运行. 中间结果被一直复用. 注意, 这时不同的处理单元同时得到的是来自不同输入的中间结果.

基于混合记忆立方体(HMC)的神经网络加速器

HMC将几个DRAM的存储芯片和逻辑层芯片竖直集成在一起. 这个集成体被划分为多个相对独立的“计算集合" (vault). HMC大存储量、高带宽、 低延迟的特点使得近存计算成为可能. 在一个基于HMC的加速器架构设计中, 计算和逻辑单元被放在逻辑层芯片上, DRAM的存储芯片则用来储存数据. Neurocube [20]和Tetris [21]是两个典型的基于HMC的DNN加速器. 如图11所示, Neurocube包含16个vault. 每个vault可以被看成一个子系统. 这个子系统包含一个可以做乘加的PE和一个负责数据包 在逻辑层芯片与DRAM存储芯片之间传输的数据通路. 每个vault也可以通过数据通路与其 他vault进行乱序数据发送与接收. 基于新型存储器件的加速器有效减少了数据的搬运, 并且尤其适合处理数据量/参数量较大的计算任务, 不再受“冯 ⋅ 诺依曼"架构的限制, 是未来加速器架构发展的重要方向.

 基于Nor Flash的神经网络加速器

NOR Flash神经网络加速器是一种利用NOR Flash存储器特性来加速神经网络计算的硬件解决方案。NOR Flash是一种非易失性存储技术,具有较高的读取速度、低功耗和成熟的制造工艺。在神经网络加速器中,NOR Flash可以同时用于存储和计算,从而实现存算一体(Compute-in-Memory, CIM)的目标,降低数据传输带来的功耗和延迟。

基本原理是利用存储单元的多值特性,通过器件本征的物理电气行为(例如基尔霍夫定律与欧姆定律)来实现多值MAC 运算。每个存储单元可以看作一个可变电导/电阻,用来存储网络权重,当在每一行施加电流/电压(激励)时,每一列即可得到MAC 运算的电压/电流值。

基于Flash的MAC运算基本原理

以基于Flash单元的电压式模拟乘法器为例。模拟乘法器由两个Flash单元构成,这两个Flash管栅极(G)相连并接固定电压,漏极(D)相连接电压VDS,源极(S)的电流相减为输出电流ID。外部输入数据X经过DAC(Digital to Analog Converter,数模转换器)转换为模拟电压VDS,得到的输出电流经过ADC (Analog to Digital Converter,模数转换器)转换为数字信号输出。可以使用两个工作在线性区的Flash管实现模拟乘法。

基于NOR Flash的神经网络加速器可以应用于各种场景,如边缘计算、物联网设备、智能家居、可穿戴设备等。这些设备通常对功耗和计算效率有较高要求,而基于NOR Flash的加速器能够满足这些需求。

本节主要对DNN的训练加速器、基于ReRAM的加速器以及nor flash的DNN加速器进行展望, 对其未来的发展趋势予以讨论.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值