直接在边缘设备上实现日益复杂的人工智能 (AI) 功能需要前所未有的边缘硬件能效。基于电阻式随机存取存储器 (RRAM) 的存内计算 (CIM) 有望通过将 AI 模型权重存储在密集、模拟和非易失性 RRAM 设备中,并通过直接在 RRAM 中执行 AI 计算来满足这种需求,从而消除在单独的计算和内存之间进行高能耗的数据移动。尽管最近的研究已经展示了完全集成的 RRAM-CIM 硬件上的内存矩阵向量乘法,但 RRAM-CIM 芯片的目标仍然是同时提供高能效、支持各种模型的多功能性和软件可比的精度。尽管效率、多功能性和准确性对于广泛采用该技术都是必不可少的,但它们之间相互关联的权衡不能通过单独改进任意抽象层的设计来解决。在这里,通过对从算法和架构到电路和设备的所有设计层次进行共同优化,我们展示了 NeuRRAM——一种基于 RRAM 的 CIM 芯片,它同时提供了为不同模型架构重新配置 CIM 内核的多功能性,能效达到在各种计算位精度上比以前*进的 RRAM-CIM 芯片好 1 倍,在各种 AI 任务中推理精度可与量化为4比特权重的软件模型相媲美,在MNIST数据集分类上准确度 在 99.0% 以及在 CIFAR-10 图像分类准确度为 85.7% ;在谷歌语音命令识别的准确率为 84.7%;在贝叶斯图像恢复任务中图像重建错误减少了 70%。
电阻随机存取存储器 (RRAM) 存内计算 (CIM) 领域的早期研究侧重于在制造的 RRAM 设备上展示人工智能 (AI) 功能,同时使用片外软件和硬件来实现基本功能,例如一个完整系统中的模数转换和神经元激活。尽管这些研究提出了各种技术来减轻与模拟相关的硬件非理想性对推理准确性的影响,但所报告的 AI 基准测试结果通常是通过对特征设备的数据进行软件仿真获得的。由于硬件非理想模型的不完整建模,与完全硬件测量的结果相比,这种方法通常会高估准确度。
最近的研究表明,完全集成的 RRAM 互补金属氧化物半导体( CMOS) 芯片可以执行内存中矩阵向量乘法 (MVM)。然而,要在实际 AI 应用中广泛采用 RRAM-CIM 芯片,它需要同时提供高能效、支持各种 AI 模型架构的灵活性和软件可比的推理精度。到目前为止,还没有一项旨在同时改进所有这三个方面设计的研究。此外,先前研究中的人工智能应用级基准测试的多样性和复杂性是有限的。没有一项研究通过实验测量了多个边缘 AI 应用程序,其复杂性与 MLPerf Tiny 中的应用程序相匹配(MLPerf Tiny 是边缘 AI 硬件的常用基准测试套件)。挑战来自效率、灵活性和准确性之间相互关联的权衡。RRAM-CIM 架构中的高度并行模拟计算带来了*的效率,但难以实现与数字电路相同水平的功能灵活性和计算精度。同时,由于在边缘使用较少的过度参数化模型,对于更复杂的 AI 任务,实现对硬件非理想的算法弹性变得更加困难。
为了应对这些挑战,我们展示了NeuRRAM ,这是一种 48 核 RRAM-CIM 硬件,涵盖了整个设计栈中的创新。(1)在器件层面,单片集成了300万个具有高模拟可编程性的RRAM器件与CMOS电路。(2) 在电路层面,电压模式神经元电路支持可变计算位精度和激活函数,同时以低功耗和紧凑的面积进行模数转换。(3) 在架构层面,双向可调神经突触阵列 ( TNSA ) 架构能够以最小的面积和能量开销实现数据流方向的可重构性。(4)在系统层面,48个CIM核心可以并行进行推理,支持多种权重映射策略。(5) 最后,在算法层面,各种硬件算法协同优化技术减轻了硬件非理想对推理精度的影响。我们展示了一系列 AI 任务的完全硬件测量推理结果,使用包括卷积神经网络 (CNN) 、长短时记忆网络(LSTM)和概率图形模型(图1e) 在内的各种 AI 模型测试 CIFAR-10 和 MNIST 数据集的图像分类、Google 语音命令识别和 MNIST 图像恢复。该芯片经过测量可实现比以前*进的 RRAM-CIM 芯片更低的能量延迟积 (EDP),同时它可以在一系列配置上运行以适应各种 AI 基准应用程序(图 1d)。
图 1 | NeuRRAM芯片的设计方法和主要贡献。
a ,整个设计栈的跨层协同优化使NeuRRAM能够同时提供高通用性、计算效率和软件可比的推理精度。b , NeuRRAM芯片的显微图。c ,设计各个方面的可重构性使NeuRRAM能够为各种应用实现不同的 AI 模型。d ,EDP 的比较,这是最近基于 RRAM 的 CIM 硬件中常用的能效和性能指标。e ,在NeuRRAM上完全硬件测量的推理精度可与各种 AI 基准测试中量化为 4 位权重的软件模型相媲美。
可重构 RRAM-CIM 架构
一个 NeuRRAM 芯片由 48 个可以并行执行计算的 CIM 内核组成。内核可以在不使用时通过电源门控有选择地关闭,而模型权重由非易失性 RRAM 设备保留。每个内核的核心是一个 TNSA,由 256 × 256 RRAM 单元和 256 个 CMOS 神经元电路组成,用于实现模数转换器 (ADC) 和激活功能。沿边缘的附加外围电路提供推理控制并管理 RRAM 编程。
TNSA 架构旨在提供对数据流方向的灵活控制,这对于启用具有不同数据流模式的不同模型架构至关重要。例如,在通常应用于视觉相关任务的 CNN 网络中,数据以单一方向流过不同层,以生成不同抽象级别的数据表示;在用于处理时间数据(如音频信号)的 LSTM网络 中,数据在多个时间步长内反复通过同一层;在诸如受限玻尔兹曼机 (RBM) 等概率图模型中,概率采样在层之间来回执行,直到网络收敛到高概率状态。除了推理之外,多个 AI 模型的梯度下降训练期间的误差反向传播需要反转通过网络的数据流方向。
然而,传统的 RRAM-CIM 架构仅限于通过将 RRAM 交叉阵列的行和列硬连线到外围的专用电路来驱动输入和测量输出,从而在单一方向上执行 MVM。一些研究通过添加额外的硬件来实现可重新配置的数据流方向,这会导致大量的能量、延迟和面积损失(扩展数据图 2)如:执行双向(前向和后向)数据流需要在两端布置许多重复的耗电且占用面积的 ADC RRAM 阵列 或将大面积区域用于将阵列的行和列路由到共享数据转换器;循环连接需要将输出写入 RRAM 阵列外部的缓冲存储器,并将它们读回以进行下一个时间步计算。
TNSA 架构以很少的开销实现了动态数据流可重构性。而在传统设计中,诸如 ADC 的 CMOS 外围电路仅连接在 RRAM 阵列的一端,而 TNSA 架构在物理上将 RRAM 权重和 CMOS 神经元电路交错,并沿行和列的长度将它们连接起来。如图 2e 所示,TNSA 由 16 × 16 个这样的交错小核(corelet)组成,这些小核由共享位线 (BL) 和沿水平方向的字线 (WL) 和沿垂直方向的源极线 (SL) 连接方向。每个 corelet 包含 16 × 16 RRAM 设备和一个神经元电路。神经元连接到 16 个 BL 和通过 corelet 的 16 个 SL 中的 1 个 BL 和 1 个 SL,并负责整合来自连接到同一 BL 或 SL 的所有 256 个 RRAM 的输入。这些 RRAM 中有 16 个与神经元在同一个 corelet 中;其他 240 个在沿同一行或列的其他 15 个小核内。具体来说,图 2f 显示了 corelet ( i , j ) 中的神经元连接到第 (16 i + j ) 个 BL 和第 (16 j + i ) 个 SL。这种配置确保每个 BL 或 SL *地连接到一个神经元,同时这样做不会使阵列两端的神经元重复,从而节省面积和能量。
图 2 | NeuRRAM 芯片的可重构架构。
a ,NeuRRAM 芯片的多核架构,以及标记为 (1) 到 (6) 的各种方式,用于将神经网络层映射到 CIM 内核。b ,单个 CIM 内核上的放大芯片显微照片。c ,横截面透射电子显微镜图像,显示了单片集成 RRAM 和 CMOS 的层堆叠。d ,CIM核心的框图。内核由 TNSA、BL、WL 和 SL 的驱动程序、存储 MVM 输入和输出的寄存器、LFSR 伪随机数发生器 (PRNG) 和控制器组成。在 MVM 输入阶段,驱动器将寄存器输入 (REG) 和 PRNG 输入 (PRN) 转换为模拟电压并将它们发送到 TNSA;在 MVM 输出阶段,驱动器将来自神经元的数字输出通过 REG 传递回寄存器。e ,TNSA 的架构由 16 × 16 的 corelet 组成,具有交错的 RRAM 权重和 CMOS 神经元。每个神经元集成来自连接到相同水平 BL 或垂直 SL 的 256 个 RRAM 的输入。f ,每个 corelet 包含 16 × 16 RRAM 和 1 个神经元。神经元连接到通过 corelet 的 16 个 BL 中的 1 个和 16 个 SL 中的 1 个,并且可以将 BL 和 SL 用于其输入和输出。g ,TNSA可以在前向、后向或循环方向上为MVM动态配置。h ,差分输入和差分输出方案,用于在前向和后向 MVM 期间实现实值权重。权重被编码为相邻行(G+ 和 G-)上两个 RRAM 单元之间的差分电导。
此外,神经元将其 BL 和 SL 开关用于其输入和输出:它不仅通过开关接收来自 BL 或 SL 的模拟 MVM 输出,还通过相同的开关将转换后的数字结果发送到外围寄存器。通过配置在神经元的输入和输出阶段使用哪个开关,我们可以实现各种 MVM 数据流方向。图 2g 显示了 TNSA 启用的前向、后向和循环 MVM。为了实现前向 MVM(BL 到 SL),在输入阶段,输入脉冲通过 BL 驱动器施加到 BL,由 RRAM 加权并通过其 SL 开关进入神经元;在输出阶段,神经元通过其 SL 开关将转换后的数字输出发送到 SL 寄存器;为了实现循环 MVM(BL 到 BL),神经元通过其 SL 开关接收输入,并通过其 BL 开关将数字输出发送回 BL 寄存器。
大多数 AI 模型的权重都取正值和负值。我们将每个权重编码为沿同一列的相邻行上的两个 RRAM 单元之间的电导差(图 2h)。正向 MVM 使用差分输入方案执行,其中 BL 驱动器将具有相反极性的输入电压脉冲发送到相邻的 BL。反向 MVM 使用差分输出方案执行,在神经元完成模数转换后,我们以数字方式减去连接到相邻 BL 的神经元的输出。
为了*限度地提高 48 个 CIM 内核上 AI 推理的吞吐量,我们实施了广泛的权重映射策略选择,使我们能够通过多核并行 MVM 同时利用模型并行性和数据并行性(图 2a)。以 CNN 网络为例,为了*化数据并行性,我们将计算最密集的层(早期卷积层)的权重复制到多个核心,以对多个数据进行并行推理;为了*化模型并行性,我们将不同的卷积层映射到不同的核心,并以流水线方式执行并行推理。同时,我们将权重维度超过 RRAM 数组大小的层划分为多个段,并将它们分配给多个内核以并行执行。方法中提供了对权重映射策略的更详细描述。中间数据缓冲器和部分和累加器由与 NeuRRAM 芯片集成在同一块板上的现场可编程门阵列 (FPGA) 实现。尽管这些数字外设模块不是本研究的重点,但它们最终需要集成在同一芯片中的生产就绪 RRAM-CIM 硬件中。
高效电压模式神经元电路
图 1d 和扩展数据表 1 显示,尽管是在较旧的技术节点上制造的,但相比于以前*进的基于 RRAM 的 CIM 芯片,NeuRRAM 芯片在各种 MVM 输入和输出位精度测量上的 EDP 降低了 1.6 到 2.3 倍,计算密度提高了 7 到 13 倍(以每百万 RRAM 的吞吐量衡量)。测量报告的能量和延迟通过执行具有 256 × 256 权重矩阵的 MVM得到的。值得注意的是,这些数字和之前 RRAM-CIM 工作中报告的数字代表了当阵列利用率为 100% 时达到的峰值能效,并且不考虑中间数据传输所花费的能量。需要精心设计片上网络和程序调度,以实现良好的端到端应用级能效。
NeuRRAM的EDP 改进的关键是一种新颖的内存 MVM 输出传感方案。常规方法是使用电压作为输入,并根据欧姆定律测量电流作为结果(图 3a)。这种电流模式检测方案不能充分利用 CIM 的高并行性。首先,同时开启多行会导致较大的阵列电流。吸收大电流需要外围电路使用大晶体管,其面积需要通过多列之间的时分复用来分摊,这限制了“列并行” 。其次,不同神经网络层产生的 MVM 结果具有截然不同的动态范围(图 3c)。在如此宽的动态范围内优化 ADC 是很困难的。为了均衡动态范围,设计通常在每个周期激活一部分输入线以计算部分和,因此需要多个周期来完成 MVM,这限制了“行并行性” 。
NeuRRAM 通过实现电压模式传感方案的神经元电路提高了计算并行性和能源效率。神经元通过直接感测 BL 或 SL 线电容 (图 3b)上的稳定开路电压来执行 MVM 输出的模数转换:电压输入在 BL 上驱动,而 SL 保持浮动,反之亦然,具体取决于 MVM 方向。激活 WL 才会启动 MVM 操作。输出线上的电压稳定为输入线上驱动的电压的加权平均值,其中权重是 RRAM 电导。在停用 WL 后,通过将输出线上的电荷转移到神经元采样电容器(图 3d 中的Csample)来对输出进行采样。然后,神经元将此电荷累积到积分电容器 ( C integ ) 上,用于随后的模数转换。
这种电压模式感测无需耗电和占用面积的外围电路用于在钳位电压的同时吸收大电流,从而提高能量和面积效率并消除输出时分复用。同时,由于电压输出中的电导加权导致的权重归一化(图 3c)可以使不同权重矩阵的自动输出动态范围归一化。因此,不同权重维度的 MVM 都可以在一个周期内完成,显着提高了计算吞吐量。为了从最终结果中消除归一化因子,我们预先计算其值并将其乘回ADC 的数字输出。
我们的电压模式神经元支持具有 1 位到 8 位输入和 1 位到 10 位输出的 MVM。多位输入以位串行方式实现,其中电荷被采样并集成到C integ上,持续 2 n - 1个周期,用于第n个*有效位(LSB)(图 3e)。对于大于 4 位的 MVM 输入,我们将位序列分成两段,分别计算每个段的 MVM,并以数字方式执行移位加法以获得最终结果(图 3f)。这种两相输入方案提高了能源效率并克服了高输入精度下的电压削顶。
多位输出是通过二进制搜索过程生成的(图 3g)。每个周期,神经元从C integ中添加或减去Csample * Vdecr的电荷量,其中V decr是所有神经元共享的偏置电压。然后神经元将C integ上的总电荷与固定阈值电压V ref进行比较,以生成 1 位输出。从最高有效位 (MSB) 到*有效位 (LSB), V decr每个周期减半。与其他实现二进制搜索的 ADC 架构相比,我们的 ADC 方案消除了算法 ADC 的残差放大器,并且不需要像逐次逼近寄存器 (SAR) ADC 那样为每个 ADC 生成参考电压的单独 DAC 。相反,我们的 ADC 方案允许在所有神经元之间共享单个数模转换器 (DAC),以摊销 DAC 面积,从而实现更紧凑的设计。通过比较理想结果和测量结果来验证多位 MVM,如图 3h 和扩展数据图 5 所示。有关多位输入和输出实现的更多细节可以在方法中找到。
神经元也可以重新配置以在需要时直接实现整流线性单元 (ReLU)/sigmoid/tanh 作为激活。此外,它通过将线性反馈移位寄存器 (LFSR) 模块生成的伪随机噪声注入神经元积分器,支持随机激活函数的概率采样。所有神经元电路操作都是通过在不同的操作阶段动态地将神经元中的单个放大器配置为积分器或比较器来执行的,如方法中所述。这导致比在同一模块中合并 ADC 和神经元激活功能的其他工作更紧凑的设计。尽管大多数现有的 CIM 设计使用多行多列的时间复用 ADC 来摊销 ADC 面积,但我们的神经元电路的紧凑性允许我们为每对 BL 和 SL 专用一个神经元,并将神经元与内部的 RRAM 设备紧密交错TNSA 架构,如扩展数据图 11d 所示。
图 3 |具有多位输入和输出的电压模式 MVM。
a ,传统的电流模式感测方案需要在每个周期激活总N行的一小部分,以限制总电流I SL和跨多列的时分复用 ADC 以摊销 ADC 面积,从而限制其计算并行性。b , NeuRRAM 采用的电压模式感应可以在单个周期内激活所有行和所有列,从而实现更高的并行度。c ,来自 CNN 层和 LSTM 层的 MVM 输出分布(权重归一化到相同范围)。电压模式感应本质上标准化了输出动态范围的广泛变化。d ,电压模式神经元电路示意图,其中 BL sel 、SL sel 、Sample、Integ、Reset、Latch、Decr 和 WR 是控制开关状态的数字信号。e ,采样波形以执行 MVM 和 4 位有符号输入数模转换。WL 每幅度位脉冲一次;对第n个 LSB执行 2 n - 1次采样和积分。f 、两相MVM:对于大于4位的输入精度,输入分为MSB段和LSB段。MVM 和 ADC 对每个段分别执行,然后进行移位和加法以获得最终输出。g ,采样波形以执行 5 位带符号输出模数转换。符号位首先由比较操作生成。幅度位是通过在C integ上加/减电荷实现的二进制搜索过程生成的。从 MSB 到 LSB,加/减电荷每一位减半。h ,芯片测量的 64 × 64 MVM 输出与 4 位输入和 6 位输出下的理想输出。
硬件算法协同优化
芯片架构和电路设计的创新为 NeuRRAM 带来了*的效率和可重构性。为了完成这个故事,我们必须确保在各种电路和设备的非理想情况下都能保持 AI 推理的准确性。我们开发了一套硬件算法协同优化技术,使 NeuRRAM 能够在不同的 AI 应用程序中提供软件可比的精度。重要的是,本文中介绍的所有 AI 基准测试结果完全来自对完整数据集的硬件测量。尽管大多数先前的努力(除了少数例外)已经报告了使用硬件表征和软件模拟混合的基准测试结果,例如,使用测量的设备特性在软件中模拟阵列级 MVM 过程,这种方法通常无法对现实硬件中存在的非理想模型集进行完整地建模。如图 4a 所示,这些非理想可能包括(1)输入线( Rwrite)上的电压降,(2)RRAM 阵列驱动器( Rdriver)上的电压降和(3)交叉线(例如 BL 电阻R BL ),(4) 受限的 RRAM 编程分辨率,(5) RRAM 电导驰豫 ,(6) 来自同时切换阵列线的电容耦合,以及 (7) 受限的 ADC 分辨率和动态范围。我们的实验表明,在仿真中省略某些非理想会导致对推理准确性的过度乐观预测。例如,图 5a 中的第三和第四条显示 CIFAR-10 分类的仿真和测量之间的准确度差异为 2.32% ,而仿真仅考虑了非理想情况 (5) 和 (7),而这则是以前的研究最常进行的建模。
图 4 |提高 NeuRRAM 推理精度的硬件算法协同优化技术。
a ,内存中MVM的各种设备和电路非理想性(标记为(1)到(7))。b ,模型驱动芯片校准技术,用于搜索*芯片工作条件并记录偏移以供后续消除。c ,噪声弹性神经网络训练技术,通过噪声注入训练模型。噪声分布是从硬件表征中获得的。训练的权重被编程为没有量化的 RRAM 的连续模拟电导,如底部的连续对角带所示。d , Chipin-the-loop渐进微调技术:权重一次一层地逐渐映射到芯片上。来自第n层的硬件测量输出用作输入以微调剩余的层n + 1 到N 。
我们的硬件算法协同优化方法包括三种主要技术:(1)模型驱动芯片校准,(2)抗噪声神经网络训练和模拟权重编程,以及(3)芯片在环渐进模型微调。模型驱动芯片校准使用真实模型权重和输入数据来优化芯片工作条件,例如输入电压脉冲幅度,并记录任何 ADC 偏移,以便在推理期间进行后续抵消。理想情况下,MVM 输出电压动态范围应充分利用 ADC 输入摆幅,以*限度地减少离散化误差。然而,如果没有校准,即使电压模式传感的权重归一化效应,MVM 输出动态范围也会随着网络层的变化而变化。为了将 MVM 校准到*动态范围,对于每个网络层,我们使用训练集数据的子集作为校准输入来搜索*操作条件(图 4b)。扩展数据图 6 显示了不同的校准输入分布导致不同的输出分布。为了确保校准数据能够密切模拟测试时看到的分布,因此在校准期间使用训练集数据而不是随机生成的数据至关重要。值得注意的是,当在多个内核上并行执行 MVM 时,这些共享的偏置电压不能单独针对每个内核进行优化,这可能会导致次优的工作条件和额外的精度损失(详见方法)。
图 5 |测量结果显示了硬件算法协同优化技术的有效性。
a ,仿真(蓝色)和测量(红色)CIFAR-10 测试集分类精度。b ,CIFAR-10 在芯片在环微调的各个时间步的分类精度。从左到右,每个数据点代表一个新层(Conv0 到 Dense)编程到芯片上。通过使用该层的硬件测量输出作为软件模拟的其余层的输入来评估该层的精度。两条曲线比较了在训练期间应用和不应用微调的测试集推理精度。c ,基于 RBM 的噪声图像恢复(顶部)和在 NeuRRAM 上测量的部分遮挡图像(底部)的图像恢复。
表 1 |在 NeuRRAM 上展示的 AI 应用和模型总结
RRAM 电导驰豫和读取噪声等随机非理想因素会降低计算的信噪比 (SNR),从而导致推理精度下降。以前的一些工作通过限制每个 RRAM 单元存储单个位并使用多个单元编码更高精度的权重来获得更高的 SNR 。这种方法降低了权重存储密度。伴随着上述方法,神经网络使用量化到相应精度的权重进行训练。相比之下,我们利用 RRAM 的内在模拟可编程性直接存储高精度权重并训练神经网络以容忍较低的 SNR。我们没有使用量化权重进行训练,这相当于将均匀噪声注入权重,而是使用高精度权重训练模型,同时使用从 RRAM 设备测量的分布注入噪声。NeuRRAM 上的 RRAM 的特点是具有高斯分布的电导扩展,主要由电导弛豫引起。因此,我们在训练期间将高斯噪声注入权重,类似于之前的研究。图 5a 显示该技术显着提高了模型对噪声的免疫能力,从没有噪声注入的 CIFAR-10 分类准确度 25.34% 到有噪声注入的 85.99%。训练后,我们使用迭代写入-验证技术将非量化权重编程为 RRAM 模拟电导,如方法中所述。该技术使 NeuRRAM 能够实现与在各种应用程序中使用 4 位权重训练的模型相当的推理精度,同时仅使用两个 RRAM 单元对每个权重进行编码,这比以前需要每个位一个 RRAM 单元的研究密度高两倍。
通过应用上述两种技术,我们已经可以在谷歌语音命令识别、MNIST 图像恢复和 MNIST 分类上测量与具有 4 位权重的软件模型相当或更好的推理精度(图 1e)。对于更深层次的神经网络,我们发现那些对 MVM 输出具有非线性影响的非理想因素(例如电压降)所导致的误差可以通过层累积,并且变得更加难以缓解。此外,多核并联MVM会导致较大的瞬时电流,进一步加剧输入线电压降等非理想情况(图4a中的(1))。结果,在深度 CNN ResNet-20上执行多核并行推理时, CIFAR-10 分类的测量精度(83.67%)仍比 4 位权重软件模型低 3.36%( 87.03%)。
为了弥合这种精度差距,我们引入了一种芯片在环渐进式微调技术。芯片在环训练通过直接在芯片上测量训练误差来减轻非理想的影响。以前的工作表明,使用从硬件测量输出计算的反向传播梯度对最终层进行微调有助于提高准确性。我们发现这种技术在对抗那些非线性非理想性方面效果有限。这种技术还需要重新编程 RRAM 设备,这会消耗额外的能量。我们的芯片在环渐进式微调通过利用深度神经网络的固有非线性通用逼近能力克服了非线性模型误差,并且进一步消除了对权重重新编程的需要。图 4d 说明了微调过程。我们逐步将权重一次一层地编程到芯片上。在对层进行编程后,我们使用芯片上的该层上边的训练集数据执行推理,,并使用测量的输出来微调在软件中训练的剩余层。在下一个时间步,我们对芯片上的下一层进行编程和测量。我们重复这个过程,直到所有层都被编程。在此过程中,编程层的非理想性可以通过训练由剩余层逐步补偿。图 5b 显示了这种渐进式微调技术的功效。从左到右,每个数据点代表一个新层编程到芯片上。通过使用该层的芯片测量输出作为软件中其余层的输入来评估每一层的精度。使用这种技术,累积的 CIFAR-10 测试集推理精度提高了 1.99%。扩展数据图 8a 进一步说明了微调在每一层恢复训练集精度损失的程度,证明了该方法在弥合软件和硬件测量之间的精度差距方面的有效性。
使用上述技术,我们在所有测量的 AI 基准任务中实现了与使用 4 位权重训练的软件模型相当的推理精度。图 1e 显示我们使用 7 层 CNN 在 MNIST 手写数字识别上实现了 0.98% 的错误率,在使用 ResNet-20 的 CIFAR-10 对象分类上实现了 14.34% 的错误率,在使用 Google 语音命令识别时用一个4 单元 LSTM实现了 15.34% 的错误率,与使用 RBM 进行 MNIST 图像恢复的原始噪声图像相比,L2 图像重建误差减少了 70%。其中一些数字尚未达到全精度数字实现所达到的精度。精度差距主要来自输入和激活的低精度( ≤ 4 位)量化,尤其是在最敏感的输入和输出层。例如,扩展数据图 8b 展示了一项消融研究,该研究表明仅将输入图像量化为 4 位会导致 CIFAR-10 分类的准确度下降 2.7%。相比之下,输入层仅占 ResNet-20 模型的 1.08% 的计算和 0.16% 的权重。因此,它们可以以很少的开销应用到更高精度的数字计算单元。此外,应用更先进的量化技术和优化训练程序(如数据增强和正则化)可能会进一步提高量化软件模型和硬件测量结果的准确性。
表 1 总结了每个展示模型的主要特征。大多数基本的神经网络层和操作都在芯片上实现,包括所有卷积层、全连接层和循环层、神经元激活函数、批量归一化和随机采样过程。其他操作,例如平均池化和元素级乘法,在与 NeuRRAM 集成在同一块板上的 FPGA 上实现(扩展数据图 11a)。每个模型都是通过将权重分配给单个 NeuRRAM 芯片上的多个内核来实现的。我们开发了一个软件工具链,以便在芯片上轻松部署 AI 模型。实现细节在方法中描述。从根本上说,每个选定的基准代表了一类通用的边缘 AI 任务:视觉识别、语音处理和图像去噪。这些结果证明了 TNSA架构的多功能性和硬件算法协同优化技术的广泛适用性。
NeuRRAM 芯片通过在整个设计层次上进行创新,同时提高了现有 RRAM-CIM 硬件的效率、灵活性和准确性,从支持可重新配置数据流方向的 TNSA 架构到节能和面积高效的电压模式神经元电路,以及一系列算法-硬件协同优化技术。这些技术可以更普遍地应用于其他非易失性电阻存储器技术,例如相变存储器、磁阻RAM 和铁电场效应晶体管 。展望未来,我们预计 Neu-RRAM的峰值能效 (EDP) 将再提高两到三个数量级,同时在从 130-nm 扩展到 7-nm CMOS 和 RRAM 技术时支持更大的 AI 模型(详见方法) .具有片上网络的多核架构设计可实现高效和多功能的数据传输和阵列间流水线,这可能是 RRAM-CIM的下一个主要挑战,需要通过进一步的跨层合作来优化。随着电阻式存储器继续向提供 TB 级片上存储器扩展,这种协同优化方法将为边缘的 CIM 硬件配备足够的性能、效率和多功能性,以执行复杂的 AI 任务,而这些任务现如今只能在云服务器上进行。
方法
内核框图和操作模式
图2d和扩展数据图1显示了单个CIM内核的框图。为了支持通用的MVM方向,大部分设计在行(BL和WL)和列(SL)方向上是对称的。行和列寄存器文件存储MVM的输入和输出,可以通过串行外设接口(SPI)或使用8位地址解码器的随机访问接口选择一个寄存器条目从外部写入,也可以在内部写入由神经元。SL外围电路包含一个LFSR块,来生成用于概率采样的伪随机序列。它由两个反向传播的LFSR链实现。对两条链的寄存器进行异或运算以生成空间不相关的随机数。控制器块接收命令并向BL/WL/SL外围逻辑和神经元生成控制波形。它包含一个基于延迟线的脉冲发生器,脉冲宽度范围在1ns到10ns。它还实现了用于在空闲模式下关闭内核的时钟门控和电源门控逻辑。TNSA的每个WL、BL和SL都由一个驱动器驱动,该驱动器由多个提供不同电压的传输门组成。根据存储在寄存器文件中的值和控制器发出的控制信号,WL/BL/SL逻辑决定每个传输门的状态。
该内核具有三种主要操作模式:权重编程模式、神经元测试模式和MVM模式(见扩展数据图1)。在权重编程模式下,选择单独的RRAM单元进行读写。为选择单个单元,在行和列解码器的帮助下,通过随机访问将相应行和列的寄存器编程为“1”,而其他寄存器重置为“0”。WL/BL/SL逻辑打开相应的驱动器传输门以在选定内核上进行设置/复位/读取电压。在神经元测试模式下,WL保持在接地(GND)。神经元通过它们的BL或SL开关直接从BL或SL驱动器接收输入,绕过RRAM设备,这使我们能够独立于RRAM阵列来表征神经元。在MVM模式下,每个输入BL和SL被驱动到Vref-Vread、Vref+Vread或Vref,具体取决于该行或列的寄存器值。如果MVM在BL-to-SL方向,我们激活输入向量长度内的WL,而其余的保持在GND;如果MVM在SL-to-BL方向,我们激活所有WL。在神经元完成模数转换后,从BL和SL到寄存器的通道门将被打开,并允许读取神经元状态。
设备制造
NeuRRAM中的RRAM阵列采用单晶体管单电阻(1T1R)配置,其中每个RRAM器件堆叠在选择器NMOS晶体管的顶部并与选择器NMOS晶体管串联连接,该晶体管切断潜行路径并在RRAM编程和读取期间限制电流大小。选择器NMOS、CMOS外围电路和底部的四个后端互连金属层采用标准的130纳米工艺制造。由于RRAM形成和编程需要更高电压,选择器NMOS和直接与RRAM阵列接口的外围电路使用额定电压为5V的厚氧化层输入/输出(I/O)晶体管。神经元、数字逻辑、寄存器等当中的所有其他CMOS电路都使用额定电压为1.8V的核心晶体管。
如图2c所示,RRAM器件夹在金属4层和金属5层之间。在代工厂完成CMOS和底部四层金属层的制造后,我们使用实验室工艺完成RRAM器件和金属5互连以及顶部金属焊盘和钝化层的制造。RRAM器件堆叠由氮化钛(TiN)底部电极层、氧化铪(HfOx)开关层、氧化钽(TaOx)热增强层和TiN顶部电极层组成。
RRAM写入-验证编程和电导弛豫
每个神经网络权重由沿同一列的相邻行上的两个RRAM单元之间的差分电导编码。*个RRAM单元编码正权重,如果权重为负,则被设置为低电导状态(gmin);第二个单元编码负权重,如果权重为正,则将其编程为gmin。在数学上,两个单元的电导分别为
和
其中gmax和gmin是RRAM的*和最小电导,wmax是权重的**值,W是未量化的高精度权重。
我们使用增量脉冲写入验证技术将RRAM单元编程为其目标电导。扩展数据图3a、b解释了该过程。我们首先测量电池的初始电导,如果该值低于目标电导,我们应用弱设置脉冲来略微增加单元电导。然后我们再次读取单元,如果该值仍低于目标值,我们将应用另一个设置脉冲来少量增加其幅度。我们重复上述操作,直到单元电导在目标值的可接受范围内或超过目标。在后一种情况下,我们将脉冲极性反转为复位,并重复与设置相同的过程。在设置/重置脉冲序列期间,电池电导可能会上下反弹多次,直到最终进入可接受范围或达到超时限制。
在选择编程条件时有一些权衡。(1)较小的接受范围和较高的超时限制提高了编程精度,但需要较长的时间。(2)较高的gmax可提高推理过程中的SNR,但会导致更高的能耗和更多无法达到高电导的单元的编程失败。在我们的实验中,我们将初始设置脉冲电压设置为1.2V,将复位脉冲电压设置为1.5V,两者的增量均为0.1V,脉冲宽度为1μs。读取RRAM需要1-10μs,具体取决于其电导率。接受范围为目标电导的±1μS。超时限制为30次设置-复位极性反转。我们对所有模型使用gmin=1μS,对CNNs使用gmax=40μS,对LSTM和RBMs使用gmax=30μS。通过这样的设置,可以将99%的RRAM单元编程到超时限制内的可接受范围。平均每个单元需要8.52个设置/重置脉冲。在当前的实现中,这种写验证过程的速度受到DAC和ADC的外部控制的限制。如果将所有内容集成到单个芯片中,这样的写入验证将平均每个单元需要56微秒。使用多个DAC和ADC以在多个单元上并行执行写入验证将进一步提高RRAM编程吞吐量,但代价是更大的芯片面积。
除了较长的编程时间之外,不使用过小的写入验证接受范围的另一个原因是RRAM电导弛豫。RRAM电导在编程后随时间变化,大部分变化发生在编程后的短时间内(小于1秒)内,如扩展数据图3d所示。在文献中,突然的初始变化被称为“电导弛豫”。它的统计量在所有电导状态下都遵循高斯分布,除非电导接近gmin。扩展数据图3c、d显示了在整个gmin到gmax电导范围内测量的电导弛豫。我们发现,由于电导弛豫导致的编程精度损失远高于由写入验证接受范围引起的损失。所有初始电导水平的平均标准偏差约为2.8μS。*标准偏差约为4μS,接近gmax的10%。
为了减轻电导弛豫,我们使用迭代编程技术。我们多次迭代RRAM阵列,在每次迭代中,我们测量所有的细胞并重新编程那些电导偏离可接受范围的单元。扩展数据图3e显示随着更多的编程迭代,标准偏差变得更小。经过3次迭代,标准差变为2μS左右,与初始值相比下降了29%。我们在所有神经网络演示中使用3次迭代,并在编程后至少30分钟执行推理,这样测得的推理精度就可以解释这种电导弛豫效应。通过将迭代编程与我们的硬件感知模型训练方法相结合,可以大大减轻弛豫的影响。
具有多位输入和输出的MVM的实现
神经元和外围电路以可配置的输入和输出位精度支持MVM。MVM操作由初始化阶段、输入阶段和输出阶段组成。扩展数据图4说明了神经元电路的操作。在初始化阶段(扩展数据图4a),所有BL和SL都被预充电到Vref。神经元的采样电容器Csample也被预充电到Vref,而积分电容器Cinteg被放电。
如图3b所示在输入阶段,每条输入线(BL或SL,取决于MVM方向)通过三个传输门被驱动到三个电平之一,Vref-Vread、Vref和Vref+Vread。在前向MVM期间,在差分行权重映射下,每个输入都应用于一对相邻的BL。两个BL被驱动到相对于Vref的相反电压。即当输入为0时,两根线都被驱动到Vref;当输入为+1时,两条线被驱动到Vref+Vread和Vref-Vread;当输入为-1时,为Vref-Vread和Vref+Vread。在反向MVM期间,每个输入都应用于单个SL。在神经元完成模数转换后,以数字方式执行差分运算。
在对输入线进行偏置之后,我们对具有输入的WL进行10ns的脉冲处理,同时保持输出线悬空。随着输出线的电压稳定到
,其中Gij表示RRAM在第i行和第j列的电导,我们关闭WL。然后,我们将输出线寄生电容上剩余的电荷采样到位于神经元内的Csample,然后将电荷积分到Cinteg上,如扩展数据图4b所示。采样脉冲为10ns(受FPGA的100MHz外部时钟限制);积分脉冲为240ns,受大积分电容器(104fF)的限制,为了确保功能正确性和测试不同的神经元工作条件而保守地选择了该电容器。
多位输入数模转换以位串行方式执行。对于第n个LSB,我们向输入线施加单个脉冲,然后对来自输出线的电荷进行采样并将其积分到Cinteg上2n-1个周期。在多位输入阶段结束时,完整的模拟MVM输出作为电荷存储在Cinteg上。例如,如图3e所示,当输入向量是具有1个符号位和3个幅度位的4位有符号整数时,我们首先将对应于*个(*有效)幅度位的脉冲发送到输入线,然后采样和积分一个周期。对于第二和第三幅度位,我们再次对每个位的输入线施加一个脉冲,然后分别对两个周期和四个周期进行采样和积分。一般来说,对于n位有符号整数输入,我们总共需要n-1个输入脉冲和2n-1-1个采样和积分周期。
由于采样和积分周期呈指数增长,这种多位输入方案对于高输入位精度变得低效。此外,由于在Cinteg集成的电荷随着更多的集成周期而饱和,净空限幅成为一个问题。可以通过使用较低的Vread来克服余量削波,但会以较低的SNR为代价,因此在使用更高精度的输入时,整体MVM精度可能不会提高。例如,扩展数据图5a、c显示了MVM结果的测量均方根误差(r.m.s.e.)。由于SNR较低,与4位(r.m.s.e.=0.582)相比,将输入量化为6位(r.m.s.e.=0.581)不会提高MVM精度。
为了解决这两个问题,我们对大于4位的输入使用双相输入方案,图3f展示了该过程。为了执行具有6位输入和8位输出的MVM,我们将输入分为两个部分,*个包含三个MSB,第二个包含三个LSB。然后我们执行MVM,包括分别为每个段的输出模数转换。对于MSB,神经元(ADC)配置为输出8位;对于LSB,神经元输出5位。最终结果是通过在数字域中对两个输出进行移位和相加得到的。扩展数据图5d显示该方案降低了MVM的r.m.s.e。从0.581到0.519。扩展数据图12c-e进一步表明,这种两相方案既扩展了输入位精度范围,又提高了能量效率。
最后,在输出阶段,模数转换再次通过二进制搜索过程以位串行方式执行。首先,为了生成输出的符号位,我们断开放大器的反馈回路,将积分器变成比较器(扩展数据图4c)。我们将Cinteg的右侧驱动到Vref。如果积分电荷为正,则比较器输出为GND,否则为电源电压VDD。然后比较器输出被反转、锁存并通过神经元BL或SL开关读出到BL或SL,然后再写入外围BL或SL寄存器。
为了生成k个幅度位,我们从Cinteg中添加或减去电荷(扩展数据图4d),然后进行k周期的比较和读出。从MSB到LSB,每个周期增加或减少的电荷量减半。加法还是减法由上一个周期的锁存器中存储的比较结果自动确定,图3g展示了这样一个过程。在*个周期中首先生成并锁存符号位“1”,表示正输出。为了产生最高有效幅度位,锁存器打开从Vdecr-=Vref-Vdecr到Csample的路径。然后通过打开放大器的负反馈回路将Csample采样的电荷积分到Cinteg上,从而从Cinteg中减去CsampleVdecr的电荷量。在本例中,CsampleVdecr大于Cinteg上的原始电荷量,因此总电荷变为负数,比较器生成“0”输出。为了产生第二个幅度位,Vdecr减半。这一次,锁存器打开从Vdecr+=Vref+1/2Vdecr到Csample的路径。由于积分后Cinteg上的总电荷仍然为负,因此比较器在此周期内再次输出“0”。我们重复这个过程,直到产生*有效幅度位。请注意,如果初始符号位为“0”,则所有后续幅度位都会在读出之前反转。
这种输出转换方案类似于算法ADC或SARADC,对于n位输出执行n个周期的二进制搜索。不同之处在于算法ADC使用残差放大器,而SARADC需要为每个ADC配备一个多位DAC,而我们的方案不需要残差放大器,并且使用输出2×(n−1)的单个DAC不同的Vdecr+和Vdecr-电平,由所有神经元(ADC)共享。因此,我们的方案通过对用于集成和比较的放大器进行时间多路复用、消除残差放大器以及在CIM内核中的所有神经元之间摊销DAC区域来实现更紧凑的设计。对于使用密集存储器阵列的CIM设计,这种紧凑的设计允许每个ADC通过较少数量的行和列进行时分复用,从而提高吞吐量。
总而言之,可配置的MVM输入和输出位精度以及各种神经元激活函数都是使用四种基本操作的不同组合实现的:采样、积分、比较和电荷递减。重要的是,所有四种操作均由配置为不同反馈模式的单个放大器实现。因此,该设计同时实现了多功能性和紧凑性。
多内核并行MVM
NeuRRAM支持在多个CIM内核上并行执行MVM。多核MVM给计算准确性带来了额外的挑战,因为在单核MVM中没有体现的某些硬件非理想性随着内核的增多而变得更加严重。它们包括输入线上的电压降、内核间变化和电源电压不稳定性。输入线上的压降(图4a中的非理想性(1))是由多个内核同时从共享电压源汲取的大电流引起的。它使存储在每个核心中的等效权重随应用的输入而变化,因此对MVM输出具有非线性的输入相关影响。此外,由于不同的核心与共享电压源的距离不同,它们会经历不同的电压降。因此,我们不能为每个内核单独优化读取电压幅度,以使其MVM输出准确地占据整个神经元输入动态范围。
这些非理想因素共同降低了多核MVM的准确性。扩展数据图5e、f显示,当在3个核上并行执行卷积时,相比于通过在3个内核上顺序执行卷积获得的r.m.s.e.=0.318,卷积层15的输出被测量为具有更高的r.m.s.e(0.383)。在我们的ResNet-20实验中,我们对块1内的卷积执行双核并行MVM(扩展数据图9a),对块2和3内的卷积执行3核并行MVM。
通过使承载大瞬时电流的导线尽可能低电阻,以及采用具有更优化拓扑的电力传输网络,可以部分缓解电压降问题。但随着使用更多内核,问题将持续存在并变得更糟。因此,我们的实验旨在研究算法-硬件协同优化技术在缓解该问题方面的功效。此外,值得注意的是,对于全芯片实现,需要集成额外的模块,例如中间结果缓冲区、部分和累加器和片上网络,以管理内核间数据传输。还应仔细优化程序调度,以最小化缓冲区大小和中间数据移动所消耗的能量。尽管有关于这种全芯片架构和调度的研究,但它们超出了本研究的范围。
抗噪神经网络训练
在抗噪神经网络训练期间,我们在神经网络训练的前向传递过程中将噪声注入所有全连接层和卷积层的权重中,以模拟RRAM电导弛豫和读取时噪声的影响。注入噪声的分布是通过RRAM表征获得的。我们使用迭代写入验证技术将RRAM单元编程为不同的初始电导状态,并在30分钟后测量它们的电导弛豫。扩展数据图3d显示测量的电导弛豫在所有电导状态下的*值均值<1μS(gmin)。最高标准差为3.87μS,约为gmax40μS的10%,在约12μS初始电导状态下发现。因此,为了在推理过程中模拟这种电导弛豫行为,我们注入了一个均值为零且标准偏差等于层*权重10%的高斯噪声。
我们训练具有从0%到40%的不同噪声注入水平的模型,并选择在10%噪声水平下实现最高推理精度的模型进行片上部署。我们发现在训练期间注入比测试更高的噪声可以提高模型的抗噪性。扩展数据图7a-c显示,在存在10%权重噪声的情况下,在CIFAR-10图像分类的20%训练时间噪声注入、15%用于Google语音命令分类和35%用于基于RBM的图像重建的情况下,获得了*测试时间准确度。
对于CIFAR-10,使用5%噪声训练的模型获得更好的初始准确率,这很可能是由于噪声注入的正则化效应。在神经网络量化文献中提到了类似的现象,其中经过量化训练的模型偶尔会优于全精度模型。在我们的实验中,我们没有在噪声注入之上对无噪声训练的模型应用额外的正则化,这可能导致次优精度。
对于RBM,扩展数据图7d进一步显示了重建误差如何随着使用不同噪声训练的模型的Gibbs采样步骤数而减少。一般来说,用较高噪声训练的模型在推理过程中收敛得更快。使用20%噪声训练的模型在100个Gibbs采样步骤结束时达到*误差。
扩展数据图7e显示了噪声注入对权重分布的影响。在没有噪声注入的情况下,权重具有高斯分布。神经网络输出严重依赖于小部分大权重,因此容易受到噪声注入的影响。通过噪声注入,权重分布更均匀,使模型更具抗噪性。
为了在NeuRRAM上有效地实现模型,所有卷积层和全连接层的输入都被量化为4位或更低。表1总结了所有模型的输入位精度。我们使用参数化裁剪激活技术进行量化训练。我们的一些量化模型的准确性低于*进的量化模型,因为我们将<4位量化应用于神经网络最敏感的输入和输出层,研究表明这会导致精度下降很大,因此通常被排除在低精度量化之外。为了获得更好的量化模型精度,可以对敏感的输入和输出层应用更先进的量化技术来达到更高的精度,并在训练期间使用更优化的数据预处理、数据增强和正则化技术。然而,这项工作的重点是在硬件和软件上实现相当的推理精度,同时保持所有这些变量相同,而不是在所有任务上获得*进的推理精度。上述量化和训练技术对我们的软件基线和硬件测量同样有益。
芯片在环渐进式微调
在渐进式芯片在环微调期间,我们使用来自一层的芯片测量的中间输出来微调其余层的权重。重要的是,为了公平地评估该技术的有效性,我们在整个微调过程中不使用测试集数据。为了避免过拟合一小部分数据,应该对整个训练集数据进行测量。我们将学习率降低到用于训练基线模型的初始学习率的1/100,并微调了30个epoch,尽管我们观察到准确度通常在前10个epoch内保持稳定。在微调期间应用相同的权重噪声注入和输入量化。
CNN、LSTM和RBM的实现
我们将CNN模型用于CIFAR-10和MNIST图像分类任务。CIFAR-10数据集由50,000张训练图像和10,000张测试图像组成,属于10个对象类别。我们使用ResNet-20执行图像分类,它包含21个卷积层和1个全连接层(扩展数据图9a),层间有归一化和ReLU激活,该模型使用Keras框架进行训练。我们将所有卷积层和全连接层的输入量化为3位无符号定点格式,除了*个卷积层,我们将输入图像量化为4位,因为推理精度对输入量化更敏感。对于MNIST手写数字分类,我们使用由六个卷积层和一个全连接层组成的七层CNN,并在层间使用*池化来对特征图大小进行下采样。所有层的输入,包括输入图像,都被量化为3位无符号定点格式。
CNN的所有参数都在单个NeuRRAM芯片上实现,包括卷积层、全连接层和批量归一化的参数。平均池化等其他操作在与NeuRRAM集成在同一块板上的FPGA上实现。这些操作只占总计算量的一小部分,将它们的实现集成到数字CMOS中只会产生可忽略的开销;选择FPGA实现是为了在测试和开发过程中提供更大的灵活性。
扩展数据图9a-c说明了在芯片上映射卷积层的过程。为了在二维RRAM阵列上实现维度为H(高度)、W(宽度)、I(输入通道数)、O(输出通道数)的四维卷积层的权重,我们将前三个扁平化维度转换为一维向量,并将每个输出通道的偏置项附加到每个向量。如果偏差值的范围是权重范围的B倍,我们将偏差值均分并使用B行实现。此外,我们在训练后将归一化参数合并为卷积权重和偏差(扩展数据图9b),并将合并的Wʹ和bʹ编程到RRAM阵列上,这样在推理期间不需要执行显式的批归一化。
在差分行权重映射方案下,卷积层的参数被转换为大小为(2(HWI+B),O)的电导矩阵。如果电导矩阵适合单个内核,则将输入向量应用于2(HWI+B)行并在单个周期内扩展到O列。HWIO乘法累加(MAC)操作是并行执行的。大多数ResNet-20卷积层的电导矩阵高度为2(HWI+B),大于256的RRAM阵列长度。因此,我们将它们垂直拆分为多个段,并将这些段并行映射到访问的不同内核上,或按顺序访问的内核的不同列上。权重映射策略的细节将在下一节中描述。
Google语音命令数据集包含65,000个1秒长的语音命令录音,例如“是”、“向上”、“开”、“停止”等,由数千名不同的人说出。这些命令分为12类。扩展数据图9d说明了模型架构。我们使用Mel频率倒谱系数编码方法将每40毫秒的音频片段编码为长度为40的向量。跳跃长度为20毫秒,对于每个1秒的记录,我们有一个50步的时间序列。
我们构建了一个包含四个并行LSTM单元的模型。每个单元格都有一个长度为112的隐藏状态。最终分类基于四个单元格的输出总和。与单个单元模型相比,4单元模型通过利用NeuRRAM芯片上的额外内核,将(未量化模型的)分类误差从10.13%降低到9.28%。在一个单元内,在每个时间步长中,我们根据当前步的输入和上一步的隐藏状态计算四个LSTM门(输入、激活、遗忘和输出)的值。然后我们在四个门之间执行元素操作来计算新的隐藏状态值。最终的logit输出是根据最后一个时间步的隐藏状态计算的。
每个LSTM单元都有3个在芯片上实现的权重矩阵:一个大小为40×448的输入到隐藏状态矩阵,一个大小为112×448的隐藏状态到隐藏状态矩阵和一个隐藏状态到逻辑矩阵大小为112×12,在FPGA上逐元素操作实现。该模型使用PyTorch框架进行训练。所有MVM的输入都被量化为4位有符号定点格式。所有剩余的操作都被量化为8位。
RBM是一种生成概率图形模型。它不是被训练来执行诸如分类之类的判别任务,而是学习数据本身的统计结构。扩展数据图9e显示了我们的图像恢复RBM的架构。该模型由794个完全连接的可见神经元组成,对应于784个图像像素加上10个one-hot编码类标签和120个隐藏神经元。我们使用软件中的对比发散学习程序来训练RBM。
在推理过程中,我们将像素部分损坏或阻塞的3位图像发送到在NeuRRAM芯片上运行的模型。然后,该模型在可见和隐藏神经元之间执行十个周期。在每个循环中,神经元根据概率分布从MVM输出中采样二进制状态h和v:p(hj=1_v)=σ(bj+Σiviwij)和p(hj=1_v)=σ(bj+Σiviwij),其中σ是sigmoid函数,ai是隐藏神经元(h)的偏差,bj是可见神经元(v)的偏差。采样后,我们将未损坏的像素(可见神经元)重置为原始像素值。通过计算原始图像和恢复图像之间的平均L2重建误差来评估最终的推理性能。扩展数据图10显示了测量的图像恢复的一些示例。
在将794×120的权重矩阵映射到芯片的多个内核时,我们尽量使每个内核的MVM输出动态范围相对一致,这样恢复性能不会过度依赖任何单个内核的计算精度。为了实现这一点,我们将相邻像素(可见神经元)分配给不同的内核,这样每个核心都可以看到整个图像的下采样版本,如扩展数据图9f所示。利用TNSA的双向MVM功能,在每个核心中从SL到BL方向执行可见到隐藏神经元MVM;从BL-to-SL方向执行hidden-to-visible神经元MVM。
多CIM内核的权重映射策略
为了在NeuRRAM芯片上实现AI模型,我们将每个模型层的权重、偏差和其他相关参数(例如,批量归一化)转换为单个二维电导矩阵,如上一节所述。如果矩阵的高度或宽度超过单个CIM内核的RRAM阵列大小(256×256),我们将矩阵拆分为多个较小的电导矩阵,每个矩阵的*高度和宽度为256。
在将这些电导矩阵映射到48个内核时,我们考虑了三个因素:资源利用率、计算负载平衡和电压降。首要任务是确保模型的所有电导矩阵都映射到单个芯片上,这样在推理过程中就不需要重新编程。如果电导矩阵的总数不超过48个,我们可以将每个矩阵映射到单个内核(图2a中的情况(1))或多个内核上。当我们将单个矩阵映射到多个内核时,有两种情况。(1)当模型具有不同的计算强度时,定义为每个权重的计算量,对于不同的层,(例如,由于特征图尺寸较大,CNN通常对较早的层具有更高的计算强度),我们复制计算密集度更高的矩阵到多个内核并并行操作它们以增加吞吐量并平衡各层的计算负载(图2a中的情况(2))。(2)一些模型具有“宽”电导矩阵(输出维度>128),例如我们的图像恢复RBM。如果将整个矩阵映射到单个内核上,则每个输入驱动器都需要为其连接的RRAM提供大电流,从而导致驱动器上出现明显的压降,从而降低推理精度。因此,当有备用内核时,我们可以将矩阵垂直拆分为多个段,并将它们映射到不同的内核上以减轻电压降(图2a中的情况(6))。
相比之下,如果一个模型有超过48个电导矩阵,我们需要合并一些矩阵,以便它们可以适合单个芯片。较小的矩阵对角线合并,以便可以并行访问它们(图2a中的情况(3))。较大的矩阵水平合并,并通过时间复用输入行访问(图2a中的情况(4))。在选择要合并的矩阵时,我们希望避免属于上一段中描述的相同两个类别的矩阵:(1)计算强度高的矩阵(例如,ResNet-20的早期层),以尽量减少对吞吐量;(2)具有“宽”输出维度的那些(例如,ResNet-20的后期层具有大量输出通道)以避免较大的电压降。例如,在我们的ResNet-20实现中,总共有61个电导矩阵(扩展数据图9a:1个来自输入层,12个来自块1,17个来自块2,28个来自块3,2个来自shortcut层和1个从最后的密集层),我们将块1和3中的每个电导矩阵映射到单个内核上,并合并剩余的矩阵以占据剩余的8个内核。
表1总结了所有模型的内核使用情况。值得注意的是,对于部分占用的内核,未使用的RRAM单元要么未成型,要么被编程为高电阻状态;推理期间不激活未使用行的WL。因此,它们在推理过程中不会消耗额外的能量。
测试系统实施
扩展数据图11a显示了NeuRRAM芯片的硬件测试系统。NeuRRAM芯片由位于OpalKelly集成FPGA板上的XilinxSpartan-6FPGA配置、接收输入并将输出发送至XilinxSpartan-6FPGA。FPGA通过USB3.0模块与PC通信。测试板还包含电压DAC,可提供RRAM编程和MVM所需的各种偏置电压,以及ADC,用于在写入验证编程期间测量RRAM电导。整个电路板的电源由标准的“大炮式”直流电源提供。OpalKelly板上的电源连接器和集成开关稳压器,因此芯片操作不需要外部实验室设备。
为了能够在NeuRRAM芯片上快速实现各种机器学习应用程序,我们开发了一个软件工具链,可在各个层级提供基于Python的应用程序编程接口(API)。低级API提供对每个芯片模块的基本操作的访问,例如RRAM读写和神经元模数转换;中级API包括实现神经网络层所需的基本操作,例如具有可配置位精度和RRAM写入验证编程的多核并行MVM;高级API集成了各种中级模块,以提供神经网络层的完整实现,例如卷积层和全连接层的权重映射和批量推理。该软件工具链旨在让不熟悉NeuRRAM芯片设计的软件开发人员能够在NeuRRAM芯片上部署他们的机器学习模型。
功率和吞吐量测量
为了表征不同输入和输出位精度下的MVM能效,我们分别测量了MVM输入和输出级的功耗和延迟。总能耗和总时间是输入和输出阶段的总和,因为这两个阶段是独立执行的,所以我们可以很容易地获得输入和输出位精度的任何组合的能效。
为了测量输入级的能量效率,我们生成一个256×256的高斯分布随机权重矩阵,将其分成2个段,每个段的维度为128×256,并使用差分行权重映射将这两个段编程到两个内核,我们测量了执行1000万个MVM或相当于6550亿个MAC操作的功耗和延迟。与图1d所示的先前工作的比较使用与基准测试相同的工作负载。
扩展数据图12a显示了在不同位精度下MVM的输入和输出阶段每个操作消耗的能量。输入采用有符号整数格式,其中*位表示符号,其他位表示幅度。一位(二进制)和两位(三进制)显示相似的能量,因为每条输入线都被驱动到三个电压电平之一。因此,二进制输入只是三进制输入的一种特殊情况。注意,扩展数据图12a中所示的曲线是在没有两相操作的情况下获得的。结果,随着输入位精度的增加,我们能看到能量的超线性增加。与输入类似,输出也以有符号整数格式表示。输出级能耗随输出位精度线性增长,因为每增加一位就需要一个额外的二进制搜索周期。输出级比输入级消耗更少的能量,因为它不涉及切换以更高电压驱动的高容性WL,如下所述。
对于扩展数据图12b-e中所示的MVM测量,假设MVM输出级使用比输入高2位的精度来说明部分和累加所需的额外位精度。NeuRRAM实现的电压模式感应所需的部分和位精度远低于传统电流模式感应所需的位精度。如前所述,传统的电流感应设计每个周期只能激活一小部分行,因此需要许多部分和累加步骤来完成MVM。相比之下,所提出的电压检测方案可以在一个周期内激活所有256条输入线,因此需要较少的部分和累加步骤和较低的部分和精度。
扩展数据图12b显示了能耗细分。大部分能量用于打开和关闭连接到RRAM器件选择晶体管栅极的WL。这些晶体管使用厚氧化物I/O晶体管来承受RRAM形成和编程期间的高压。它们的尺寸足够大(宽度为1μm,长度为500nm),可为RRAM编程提供足够的电流。因此,它们需要高工作电压并为WL增加大电容,这都会导致高功耗(P=fCV2,其中f是电容充电和放电的频率)。仿真表明,256个存取晶体管中的每一个对WL贡献大约1.5fF;WL驱动器合计为每个WL贡献约48fF;额外的WL电容主要来自相邻BL和WL的线间电容。如果RRAM可以通过较低的电压写入并具有较低的电导状态,并且如果可以使用具有更好驱动能力的更小晶体管,则WL能量预计会显着降低。
对于需要概率采样的应用,两个反向传播的LFSR链会生成随机伯努利噪声并将噪声作为电压脉冲注入神经元。我们测量每个噪声注入步骤平均消耗每个神经元121fJ,与扩展数据图12b中显示的其他能源消耗相比,这是很小的。
扩展数据图12c-e显示了执行256×256MVM时测得的延迟、峰值吞吐量和吞吐量功率效率。值得注意的是,我们使用EDP作为比较设计的品质因数,而不是吞吐量功率效率作为每秒每瓦的兆兆次操作(TOPSW-1,每次操作能量的倒数)。与该领域以前的工作类似,研究中的吞吐量和能源效率代表了CIM阵列利用率为100%时的峰值,不包括缓冲和移动中间数据所花费的时间和能量。在单个完整的CIM芯片中集成中间数据缓冲区、部分和累加器等的未来工作应该显示在端到端AI应用程序上测量的能效。
NeuRRAM能源效率与技术扩展的预测
当前的NeuRRAM芯片是使用130-nmCMOS技术制造的。我们预计能源效率会随着技术规模的扩大而提高。重要的是,CMOS晶体管和互连的隔离缩放不足以提高整体能效。RRAM器件特性必须与CMOS共同优化。1T1R配置下的RRAM阵列密度不受制造工艺的限制,而是受RRAM写入电流和电压的限制。当前的NeuRRAM芯片使用大型厚氧化物I/O晶体管作为“T”,以承受>4-VRRAM形成电压并提供足够的写入电流。只有降低形成电压和写入电流,才能获得更高的密度,从而降低寄生电容,提高能效。
假设在较新的工艺节点上的RRAM器件可以在逻辑兼容的电压电平下进行编程,并且可以减少所需的写入电流以使连接晶体管的尺寸不断缩小,EDP的改进将来自(1)更低的操作电压(2)更小的导线和晶体管电容,即能量∝CV2和延迟∝CV/I。例如,在7nm处,我们预计WL开关能量(扩展数据图12b)将减少约22.4倍,包括WL电压缩放的2.6倍(1.3V→0.8V)和电容缩放的8.5倍(电容从选择的晶体管、WL驱动器和导线都假定以最小金属间距340nm→40nm进行缩放)。外围电路能量(由神经元读出过程控制)预计将减少42倍,其中5倍来自VDD缩放(1.8V→0.8V)和8.5倍来自更小的寄生电容。MVM脉冲和电荷转移过程消耗的能量与RRAM电导的范围无关,因为RRAM阵列的功耗和建立时间与在它们的乘积中抵消的相同电导因子成比例。具体来说,每个RRAMMAC的能量是EMAC=C4var(Vin),仅受每单位RRAM单元Cpar的寄生电容和驱动输入电压var(Vin)的变化限制。因此,MVM能耗将减少约34倍,其中包括读取电压缩放(0.5V→0.25V)的4倍,以及更小的寄生电容的8.5倍。总体而言,我们预计将设计从130nm缩小到7nm时,能耗会降低约34倍。
在延迟方面,目前的设计受到神经元积分时间长的限制,主要是由于积分电容器尺寸(104fF)相对较大,为了确保功能正确性和测试不同的神经元工作条件而保守选择。在更先进的技术节点上,可以使用更小的电容器尺寸来实现更高的速度。缩小电容器尺寸的主要问题是制造引起的电容器尺寸失配将占总电容的较高比例,从而导致较低的SNR。然而,以前的ADC设计使用的单位电容器尺寸小至50aF。对于更保守的设计,一项研究表明,在32-nm工艺中,0.45-fF单位电容器的平均标准偏差仅为1.2%。此外,积分时间还取决于晶体管的驱动电流。假设晶体管电流密度(μAμm-1)在VDD缩放后保持相对不变,并且神经元中的晶体管宽度与接触栅间距(310nm→57nm)成比例,总晶体管驱动电流将减少5.4次。因此,当将Csample从17fF缩放到0.2fF并将Cinteg从104fF缩放到1.22fF时,延迟将提高15.7倍。因此,保守地说,我们预计在将设计从130纳米技术扩展到7纳米技术时,整体EDP至少会提高535倍。扩展数据表2显示,与当今*进的边缘推理加速器相比,这种扩展将使NeuRRAM能够提供更高的能量和单位面积效率。
扩展数据 图 1 |用于 TNSA 和芯片工作模式的外围驱动电路。a 、权重编程模式下驱动电路的配置。b ,在神经元测试模式下。c 、MVM模式下。d ,两个反向传播的 LFSR异或门链生成用于概率采样的伪随机序列的电路图。
扩展数据 图 2 |各种 MVM 数据流方向及其 CIM 实现。左图,不同 AI 模型中常见的各种 MVM 数据流方向。中间,各种数据流方向的常规 CIM 实现。传统设计通常将所有外围电路(例如 ADC)放置在 RRAM 阵列之外。双向和循环 MVM的最终实现会产生面积、延迟和能量方面的开销。右图,可变神经突触 阵列 (TNSA) 在阵列上交错 RRAM 权重和 CMOS 神经元,并以最小的开销支持不同的 MVM 方向。
扩展数据 图 3 |迭代写入验证 RRAM 编程。a ,增量脉冲写入的流程图-验证技术将 RRAM 编程到目标模拟电导范围。b , 写入-校验编程的示例序列。c ,在写入-校验编程期间和之后测量的 RRAM 电导分布。每个蓝点代表在写入-验证期间测量的一个 RRAM 单元。灰色阴影显示 RRAM 电导驰豫导致分布从目标值扩展。较深的阴影表明迭代编程有助于缩小分布。d ,在初始编程后不同初始电导状态和不同持续时间测量的电导变化的标准偏差。最初的电导驰豫发生的速度比长期保留下降的速度更快。e ,电导弛豫的标准偏差随着迭代编程周期的增加而减小。f ,达到电导接受范围所需的 SET/RESET 脉冲数的分布。
扩展数据 图 4 |4 个基本的神经元操作,使 MVM 具有多位输入和输出。a 、初始化、预充电采样电容C sample 和输出线 (SLs),以及放电积分电容器C integ 。b ,采样和积分,将SL电压采样到C sample上,然后将电荷积分到C integ上。c 、比较和读出。放大器进入比较器模式以确定集成电压的极性。比较器输出通过外部反馈回路从神经元中写入。d ,电荷减少,电荷在C integ上的加减通过外部反馈回路,取决于存储在锁存器中的值。
扩展数据 图 5 |测量的 MVM 与理想 MVM 的散点图。图a-d 中的结果是使用相同的 64 × 64 正态分布随机矩阵和 1000 个均匀分布的浮点向量ϵ [-1, 1] 生成的。a ,使用差分输入方案的正向 MVM,输入量化为 4 位,输出为 6 位。b ,使用差分输出方案的反向 MVM。较高的 RMSE 是由于每个 SL 驱动器上需要驱动 128 个 RRAM 单元的电压降更大,而在正向 MVM 期间每个 BL 驱动器驱动 64 个单元。c ,当输入从 4 位 (a) 增加到 6 位时,MVM 均方根误差 (RMSE) 不会减少。这是由于使用较低的输入电压导致更差的信噪比造成的。d ,两相操作通过将输入分成 2 段并分别执行 MVM 来降低 6 位输入的 MVM RMSE,这样就不需要降低输入电压。e - f ,来自 ResNet-20 的 conv15 层的输出。conv15 的权重分为 3 个 CIM 核心。在 3 个内核 上并行执行 MVM 时(f),层输出显示出比在 3 个内核上顺序执行(e)更高的 RMSE。
扩展数据 图 6 |有和没有模型驱动芯片校准的数据分布。左图,当输入是从(从上到下)CIFAR-10 测试集数据、训练集数据和随机统一数据生成时,ResNet-20 最终全连接层的输入分布。右图,来自 ResNet-20 的最终全连接层的输出分布。测试集和训练集具有相似的分布,而随机均匀数据产生明显不同的输出分布。为确保在测试期间校准 MVM 输出电压动态范围以占据整个 ADC 输入摆幅,校准数据应来自与测试集数据非常相似的训练集数据。
扩展数据 图 7 | CNN、LSTM 和 RBM 的抗噪训练。a ,推理过程中不同权重噪声水平下CIFAR -10 测试集分类精度的变化。噪声表示为权重**值的分数。不同的曲线代表在不同噪声注入水平下训练的模型。b ,语音命令识别准确度随重量噪声水平的变化。c ,MNIST 图像重建误差随权重噪声水平的变化。d ,在 RBM 推理过程中,通过 Gibbs 采样步骤减少图像重建误差。e ,在没有和有噪声注入的情况下训练时权重分布的差异。
扩展数据 图 8|测量的芯片推理性能。a ,由于硬件不理想导致的 CIFAR-10 训练集精度损失,以及芯片在环渐进微调的每一步的精度恢复。从左到右,每个数据点代表一个新层编程到芯片上。蓝色实线表示在片上执行该层推断时测量的精度损失。红色虚线表示通过微调后续层测量的精度恢复。b ,消融研究显示了输入、激活和权重量化以及权重噪声注入对推理错误的影响。
扩展数据 图 9 |各种AI模型的实现。a ,用于 CIFAR-10 分类的 ResNet-20 架构。b ,批量归一化参数在片上映射之前合并为卷积权重和偏差。c ,将卷积层的 4 维权重映射到NeuRRAM CIM 核心的过程示意图。d ,用于谷歌语音命令识别的 LSTM 模型的架构。该模型包含 4 个并行 LSTM 单元,并根据 4 个单元的输出总和进行预测。e ,用于 MNIST 图像恢复的 RBM 模型的架构。在推理过程中,MVM 和 Gibbs 采样在可见和隐藏神经元之间来回执行。f ,在NeuRRAM CIM 内核上映射 RBM 的过程。相邻的像素分配给不同的内核,以均衡不同内核的 MVM 输出动态范围。
扩展数据 图 10|使用 RBM 进行芯片测量的图像恢复。上半部分:随机选择 20% 的像素翻转为互补强度的 MNIST 测试集图像的恢复。下半部分:MNIST 测试集图像的恢复,底部 1/3 的像素被遮挡。
扩展数据 图 11 |各种规模的NeuRRAM测试系统和芯片显微照片。a , NeuRRAM芯片引线连到封装。b ,将封装的NeuRRAM芯片(左)连接到现场可编程门阵列(FPGA,右)的测量板。该板包含为芯片供电、操作和测量所需的所有组件。芯片操作不需要外部实验室设备。c ,48 核NeuRRAM芯片的显微照片。d ,单个 CIM 核心的放大显微照片。e , TNSA内2 × 2小核的放大显微照片。一个神经元电路占用 1270 μm2 ,比 一项ADC 调查中总结的大多数 130-nm ADC 设计小 100多倍。f ,芯片面积细分。
扩展数据 图 12 |能耗、延迟和吞吐量测量结果。a ,在 MVM 输入阶段(无两相操作)和输出阶段测量的每次操作的能耗,其中一次乘法累加( MAC) 计为两次操作。b ,不同 MVM 输入和输出位精度下的能耗分解。在 MVM 期间,输出比输入高 2 位,以解决部分和累加的额外精度要求。c ,执行一个具有 256 × 256 权重矩阵的 MVM 的延迟。d ,峰值计算吞吐量(以每秒千兆操作为单位)。e ,吞吐量-功率效率(以每瓦兆次运算为单位)。
扩展数据表 1 |完全集成的基于 RRAM 的 CIM 硬件比较
注解:
1. 该表不包括未报告详细性能指标的研究。
2. 所有报告的指标都是为执行 256 × 256 矩阵向量乘法而测量的。
3. 所有报告的数字代表阵列利用率为 100% 时的峰值吞吐量/效率。
扩展数据表 2 |与数字 CMOS AI 推理加速器的比较
注解:
1. 将NeuRRAM效率投射到 7 nm 的方法在方法中进行了说明。
2. 数字加速器的能效预测基于 CV 2缩放,其中 C 以最小金属间距缩放,V 调整为 7 nm 的标称 VDD。
3. 数字加速器的面积效率投影基于沿水平和垂直方向的最小金属间距缩放。