实现智能 IoT 应用的低功耗机器学习

Pieter van der Wolf
Synopsys Inc. 首席研发工程师

Dmitry Zakharov
Synopsys Inc. 高级软件工程师

机器学习 (ML) 技术用于构建具有高级功能的设备,已在许多领域有所应用。这些设备应用经过训练的机器学习技术,可以从一个或多个传感器捕获的数据(如麦克风捕获的语音命令)中识别某些复杂向量,继而执行适当的操作。例如,识别出语音命令“播放音乐”之后,智能扬声器就可以启动歌曲的播放。机器学习是指算法无需经过显式编程就能学习的能力。本文将重点讨论机器学习推理,这个流程采用经过训练的模型对传感器捕获的输入数据进行有用的预测,以推理它经过训练后要去识别的复杂向量。我们将考虑高效实现机器学习推理的要求,以构建智能 IoT 边缘设备。

IoT 低功耗机器学习推理的要求

采用低功耗机器学习推理应用的 IoT 边缘设备通常执行不同类型的处理,如图 1 所示。 

图 1. 机器学习推理应用中不同类型的处理

这些设备通常对传感器输入数据执行一些预处理和特征提取,然后再对训练后的模型进行实际的神经网络处理。例如,具有语音控制功能的智能扬声器,可以首先通过执行回声消除和多麦克风波束形成对语音信号进行预处理。然后利用 FFT 提取光谱特征,在神经网络处理中经过训练用于识别语音指令词汇。

神经网络中每一层的输入数据都必须转换成输出数据。常见的一种转换就是卷积,它将输入数据与一组训练好的权重进行卷积,或者更精确地说,是将其关联起来。这种转换用于卷积神经网络 (CNN),通常应用于图像或视频识别。循环神经网络 (RNN) 是另一种神经网络,可在处理输入序列时维持状态。因此,RNN 也有能力识别不同时间的向量。在文本和语音识别中,经常应用 RNN。 这些网络的关键运算是对输入样本和权重的点积运算。因此,处理器需要高效地实现这样的点积运算操作。这就要涉及高效计算,例如使用乘积累加 (MAC) 指令,以及对输入数据、权重核和输出数据的高效访问。

实现要求

由于输入数据率和使用的神经网络复杂程度均有限,中低端机器学习推理的内存需求通常并不高。输入和输出映射的大小通常是有限的,只有几十或更少的 kByte,而且权重核的数量和大小也相对较小。为输入映射、输出映射和权重核使用尽可能小的数据类型,有助于减少内存需求。

中低端机器学习推理应用需要以下类型的处理:

  • 各种类型的预处理和特征提取,通常采用 DSP 密集型计算
  • 神经网络处理
  • 经过神经网络处理后进行的决策更加可能执行控制

不同类型的处理可以使用异构的多处理器架构实现,不同类型的处理器可以满足不同的处理要求。然而,中低端机器学习推理的总体计算要求通常是有限的,并且只需一个以合理频率运行的处理器即可,但该处理器需要具有适当的处理能力。只用一个处理器消除了多处理器架构引起的面积开销和通信开销。还简化了软件开发,因为整个应用只需一条工具链。然而,它要求处理器能够执行不同类型的处理,即 DSP、神经网络处理和控制处理,并且必须具备良好的循环效率。

 

低功耗机器学习推理的处理器能力

选择合适的处理器是实现高效中低端机器学习推理的关键。具体而言,拥有合适的处理器能力来进行神经网络处理,可能是决定能否满足低频率要求进而实现低功耗的关键。Synopsys 的 DesignWare® DSP 增强型 ARC® EM9D 处理器 IP 具备一些关键功能,可以用来有效地实现神经网络处理。  

对输入样本和权重进行点积运算是一种主要的计算方法,它使用乘积累加 (MAC) 运算来实现,该运算可用于增量累加输入样本和权重的乘积。MAC 运算的矢量化是提高神经网络处理效率的重要途径。图 2 展示了 DesignWare ARC EM9D 处理器的两种矢量 MAC 指令。

图 2. DesignWare ARC EM9D 处理器的两种矢量 MAC 指令

这两个矢量 MAC 指令都按照 2x16 位的向量操作数进行运算。左边的 DMAC 指令是一个双 MAC,可以用来实现一个点积,A1 和 A2 是输入映射产生的两个相邻样本,B1 和 B2 是权重核产生的两个相邻权重。ARC EM9D 处理器支持 32 位累加器,可以为其额外启用 8 个保护位以避免溢出。 DMAC 运算可在具有偶数宽度的权重核中高效使用,与标量实现相比,可以将 MAC 指令的数量减少两倍。但是,对于具有奇数宽度的权重核,此指令的效率较低。在这种情况下,图 2 所示的 VMAC(矢量 MAC)指令可用于并行执行两个点积运算,将中间结果累积到两个累加器中。如果权重核以 1 的步长在输入映射上“运动”,则 A1 和 A2 是输入映射的两个相邻样本,B1 和 B2 的值则是同时应用于 A1 和 A2 的相同权重。

高效执行点积运算还需要足够的存储带宽来将操作数馈送给 MAC 指令,还需要设法避免执行地址更新、数据大小转换等操作的开销。为了实现这些目标,ARC EM9D 处理器提供了具有高级地址生成功能的 XY 内存。XY 内存提供多达三个逻辑内存,可供处理器并发访问,如图 3 所示。处理器可以通过常规加载或存储指令访问内存,也可以通过地址生成单元 (AGU) 支持功能单元执行内存访问。可以使用指向其中一个内存数据的地址指针来设置 AGU,也可以在 AGU 执行数据访问时使用一个指示符(或称修饰符),按照特定的方式更新这一地址指针。AGU 设置完成后,可以用于直接访问操作数和存储进出内存结果的指令。不需要对这些操作数和结果执行显式加载或存储指令,从而减少了点积运算循环次数。 

图 3. 带有 XY 内存和地址生成单元 (AGU) 的 ARC EM9D 处理器

DesignWare ARC EM9D 处理器 IP 具备广泛的 DSP 功能,支持高效实现其他功能,如预处理和特征提取 (FFT) 功能。这些功能包括:

  • 零开销循环
  • 具有饱和及四舍五入的定点算法
  • 具有保护位的宽累加器
  • 2x16 和 4x8 矢量支持
  • 16+16 复杂算法和蝶形验证
  • 循环和位序取反寻址

将神经网络处理、DSP 和高效的控制处理能力相结合,使得 ARC EM9D 非常适合在单个处理器上实现完整的中低端机器学习推理应用。

用于机器学习推理的软件库

在选择正确的处理器之后,下一个问题是如何达到目标机器学习推理应用的高效软件实现。

embARC 机器学习推理 (MLI) 库是一组用于构建神经网络的 C 函数和相关数据结构。库函数又称内核函数,采用张量结构中表示的多维输入/输出映射,来实现与神经网络中一整层相关的处理。因此,神经网络图可以绘制成一系列 MLI 函数调用。表 1 列出了当前支持的 MLI 核,它们被分为 6 个组。每个核在库中都可以有多个函数,包括专门经过优化以支持特定数据类型、权重核大小和步长的函数。此外,还提供了辅助函数,包括数据类型转换、数据指向等运算和其他与核功能不直接相关的运算。 

表格 1 embARC MLI 库中支持的核

结语

与用户智能交互的智能 IoT 设备越来越多地应用机器学习技术来处理捕获的传感器数据,以便根据识别的向量采取智能操作。ARC EM9D 处理器具备诸多功能,例如向量 MAC 指令和带有高级地址生成单元的 XY 内存,这些功能是高效实现机器学习推理引擎的关键。ARC EM9D 结合其他 DSP 和控制处理功能,形成低功耗 IoT 应用的通用芯核。经过高度优化的综合性 embARC MLI 库有效利用 ARC EM9D 处理器,高效支持各类中低端机器学习应用。

 

如需了解详情,请阅读白皮书《迎接机器技术的到来 — 智能 IoT 应用的低功耗机器学习》(Say Welcome to the Machine - Low-Power Machine Learning for Smart IoT Applications