深度学习广泛用于各种人工智能任务中,传统的深度学习加速器侧重于面向数据流的计算架构优化。然而传统冯·诺依曼体系结构所带来的「存储墙」问题日益突显,计算单元与存储单元间的频繁数据搬移造成了大量的能耗。

存内计算(computing-in-memory,简称 CIM)技术是解决「存储墙」问题的有效途径,但存内计算只能支持向量内积等有限运算。为支持完整的 AI 应用,该团队基于可重构计算架构,融合存内计算技术,设计了数模混合计算芯片(代号 Thinker-IM),在语音识别应用中实现了极低能耗。

为了获得极低的能耗,在算法层面上使用二值化的循环神经网络(RNN)建立语音声学模型,从而降低了计算复杂度并节省了存储开销。图 1 展示了基于二值化 RNN 的语音识别系统,包括前端信号处理、二值 RNN 声学模型处理以及译码输出。




ISP架构visio图_二值化


图 1:基于二值 RNN 的语音识别系统

在硬件设计层面为了打破传统的冯·诺依曼体系结构的存储墙瓶颈,设计了数模混合计算架构。其中数字部分实现了必要的语音信号处理,而通过模拟计算方式在 SRAM 中实现了同或(XNOR)计算操作,并构建了基于 SRAM 存内计算(SRAM-CIM)的 RNN 计算模块。

该芯片使用 16 个 SRAM-CIM 宏单元完成 RNN 计算任务,从而避免了存储单元与计算单元的大量数据搬移所产生的能耗。当使用 SRAM-CIM 计算单元构建一颗全功能的语音芯片时,存在以下三方面挑战,如图 2 所示。


ISP架构visio图_二值化_02

图 2:基于存内计算的语音芯片的实现挑战


挑战一:需要设计融合多个 SRAM-CIM 单元的计算架构和数据流调度方案。一般情况下,单个 SRAM-CIM 无法存下 DNN 中的全部权重。因此需要多个 SRAM-CIM 单元协同计算,需要考虑如何组织它们的计算方式。

挑战二:需要针对复杂 AI 任务设计多比特输出 SRAM-CIM 单元。对于简单 AI 任务(如手写体识别),SRAM-CIM 单元 1 比特输出精度可以满足识别需求。但对于复杂的识别任务(如语音识别),SRAM-CIM 单元 1 比特输出就会导致 Partial Sum(部分和)的精度损失,影响最终识别精度。

挑战三:RNN 推理过程是一种时域上的迭代计算,其计算过程相当耗时。我们发现在二值 RNN 中的累加过程中存在一些冗余计算。见图 2(c),在累加过程中,如果中间数据足够大而超过剩余累加的最大值,将保证最终结果大于 0。此时剩余累加周期的计算就是冗余的,如能去除这些计算,将能够有效加速 RNN 计算。

Thinker-IM 架构如图 3 所示,主要包括语音信号处理部分和基于 CIM 的 RNN 计算引擎。芯片设计中三项关键技术分别针对性解决了上述三个问题。


ISP架构visio图_ISP架构visio图_03

图 3:Thinker-IM 芯片架构与计算数据流调度

关键技术 1:设计了数模混合架构并组织多 SRAM-CIM 单元计算方式,如图 3 所示。提出了「输出-权重」双稳定数据流架构,在计算时同时固定输出与权重,减少了数据的重复访问,其中权重被固定在 SRAM-CIM 单元中,部分和被固定在加法树中。

通过分割权重矩阵将 64 个输出神经元作为一组,进一步通过多周期累加得到最终输出。在每个周期,64 个输入被分为 16 组并转化为 SRAM 的字线激励,生成该组输出的部分和并对应在加法树中相加。

关键技术 2:设计了支持 XNOR 操作、3 比特输出的 SRAM-CIM 单元,提出了算法和硬件协同的 SRAM-CIM 能耗优化方法。如图 4 所示,存储单元采用了分割双字线设计(WLL/WLR)。输入数据转化为字线激励,而二值权重被存于存储单元中。此时,位线(Bitline, 简称 BL)的读电流依赖于输入与权重的组合。

存储单元引起的位线的充电、放电电流将分别代表输入-权重-乘积(IWP)为 1、-1。当同时激活 4 条 WL 时,存储单元的读电流在 BL 上累加而代表 4 个 IWP 的累加。最终利用 TSC 和 VSA 单元实现了串行的 3 比特 BL 输出。


ISP架构visio图_数字vlsi芯片设计_04

图 4:3-b SRAM-CIM 单元结构、波形示例与先前工作对比

在 SRAM-CIM 的存储单元中,充电电流代表 IWP=+1,而放电电流代表 IWP=-1。为了更好地区分 BL 电压值,设计放电电流远大于充电电流。因此存储单元产生 IWP=-1 时的能耗要远远小于 IWP=+1,非对称电流将产生 1.5 倍左右的功耗差。

因此,我们考虑在训练过程中调整 RNN 权重从而产生更多的 IWP=+1 的情况,故在训练的损失函数中引入了正则项修正,并设计了具有感知 CIM 能耗的权重训练流程,如图 5 所示。随着反向传播误差并最小化损失函数,IWP=+1 的比例提高,从而降低能耗。最终在保证精度需求的情况下,在三个测试数据集中平均降低了 10.0% 的能耗。


ISP架构visio图_权重_05

图 5:具有 CIM 能耗感知的权重调整训练流程

关键技术 3:批标准化(Batch normalization,简称 BN)与二值化的预测机制与处理单元设计。由于 BN 是线性变化,标准二值化是与 0 的阶跃比较,因此 BN 与二值化的融合可以转化为直接与另一个参数 VTH0 的比较,其中 VTH0 由 BN 参数决定。

预测过程分为两个阶段,其一是利用剩余累加的上下界提前预测二值化结果。当中间结果超过或低于剩余累加值的上或下界时,将保证最终结果的正确性,因此我们称这阶段为精确预测,剩余累加值的上下界则组成了精确阈值。

深度学习的统计特性给 RNN 带来了出色的容错性,因此我们可以进一步放宽精确阈值,以一个更激进的阈值完成预测,此过程称为激进预测。

整体预测机制为:首先进行精确预测,如果在每轮精确预测的数量超过我们预先设定的一个参数 Nex 时,激活激进预测对剩余中间累加结果进行二值化。

图 6 展示了预测的流程和预测单元的设计。预测单元中包含 64 个预测通道,每个预测通道中使用累加器完成部分和的累加得到中间结果;使用比较器完成 BN 与二值化的融合操作;使用查找表的方式向比较器提供精确、激进阈值和 Nex 参数。最终在保证精度超过 90% 的情况下,在三个测试数据集中平均减少了 24.5% 的操作。


ISP架构visio图_数字vlsi芯片设计_06

图 6:Batch normalization 与二值化的预测机制与预测单元设计

Thinker-IM 在 65nm CMOS 工艺下完成了流片,芯片面积为 6.2 mm2。在不同的电源电压和工作频率下,在每个神经元和每次推断的最低能耗分别为 5.1 pJ 和 3.36 uJ,每次推断的最低时延为 127.3 us,在能效和性能上都超过了之前工作。

分别在 Google Speech Commands, Hey snips, Smart home 三个语音数据集上对 Thinker-IM 进行测试,结果如图 7 所示。当不采取权重调整和预测机制时,在三个数据集上可以实现平均 92.3% 的精度。当分别采取上述两个优化方法后,可以在超过 90% 的识别精度下平均节省 10% 的能耗和 24.5% 的冗余操作。


ISP架构visio图_ISP架构visio图_07

图 9:芯片测试结果与工作对比表

Thinker 团队近年来基于可重构架构设计了 Thinker 系列人工智能计算芯片,相关成果相继发表在 VLSI Symposia、ISCA、IEEE JSSC 等顶尖学术会议和期刊上,受到了学术界和工业界的广泛关注。此次该团队设计了数模混合、存算一体新架构,并针对语音识别场景,设计了采用存内计算的数模混合语音芯片 Thinker-IM,为人工智能计算芯片的架构演进开拓了新方向。