作者:Arm公司嵌入式解决方案总监Chris Shore
万维网从诞生到最近已满30年,这个里程碑似乎没有太多惊人的宣传而一晃而过。或许是因为我们所熟知的互联网有点像莱特兄弟(Wright Brothers)的第一次飞行,这项技术与我们现在所掌握的如此明显不同,相比之下更是相形见绌。而能够可比的是它们的颠覆性影响,在这方面,人工智能(AI)正在比动力飞行或数据大众化具有更大影响力。目前在人工智能方面取得的进展正在重新定义未来几年内能够考虑的所有问题。
一种新的互联网形式是物联网(IoT),其中所有一切都与数据有关,在物联网中数据生成和处理的规模难以想象。现在,通过将AI应用于这些数据,我们可以获得物联网显著的改进。通过人工智能技术,现在可以识别伦敦水网的泄漏情况,因此工程师可以应用精确的管道定位来进行更换。也可以通过AI衡量在高峰时段东京涩谷(Tokyo’s Shibuya)十字路口的行人如何影响交通流量,还可以评估纽约人对时代广场新广告的反应等等。上述三个例子包括三个行业:公用事业、物流和市场营销,都是都通过应用AI而有所加强。
图1:AI已经在各行各业用于识别复杂场景中的模式,例如繁忙十字路口的行人。
物联网目前正在处理的数据量已经非常庞大,但未来将变得更加惊人,也更加有趣。在2019年2月,市场分析公司Gartner表示,机构中采用的人工智能数量同比增长了两倍。对于工程师和工程公司来说,网络设备中不断增加的智能意味着我们可以开始认识到物联网的真正潜力。
AI在工业物联网(IIoT)中的重要应用
AI正在迅速成为可由主流计算资源处理的任务。我们已经有机器学习(ML)推理形式的AI,可以在哮喘吸入器等单传感器设备上运行。我们可以直接在智能手机上访问AI照片增强功能,在先进的汽车中也可以运行计算机视觉应用程序。所有这些都已经改善了生活,但我认为在工业领域将能够看到AI最直接的商业价值。
在工业环境中,任何可以提高生产率的技术都具有很高价值,并且通常使用运行数据来提供对机器及其当前状况的判断。工业传感器生成的数据包含多种样式,通过越来越复杂的分析可以帮助预测资产何时可能失效,并在失效之前进行修复,从而避免对生产力造成更大的整体影响。这种预测和预防分析以前是在大型服务器和“云”端进行,但AI和ML的发展意味着它现在能够在网络的边缘进行。事实上,它已经被直接整合到组成IIoT的机器设备。
网络边缘的机器学习
机器学习的处理正在走向网络边缘,这其中有许多原因。第一个能够最简单地接受:网络边缘是数据产生之地。还有其他更重要的原因,最值得注意的是,因为数据在传输带宽和处理指令周期方面都消耗资源。如果整个物联网生成的所有数据都要由服务器处理,则会涉及大量的网络流量,并造成服务器功率消耗的指数级增长。正因如此,谷歌等公司正在精减他们的一些算法,以便这些算法可以不依靠云端,而在边缘的AI设备上运行。
就像在边缘设备中嵌入HTML服务器一样普遍,在传感器等端点中执行ML同样可行。但ML在边缘设备实现的方式至关重要,它一般遵循分布式处理的概念。训练AI算法所需的处理资源相当可观,但实际上它却是一次性工程费用(non-recurring expense)。执行推理模型所需的资源则较为适度,但是如果数量很大,则可以消耗与训练阶段一样多的处理资源,或许更多。它们的不同之处在于,与训练不同,每个推理实例都能够与所有其他实例隔离打包执行,这意味着它可以轻松地移植到较小的处理资源并可根据需要多次复制。
图2:网络边缘处的设备数量将会达到数十亿。
这种分布式智能是新型互联网的雏形,可以在必要时再次隔离运行,同时保持为整体的一部分。边缘处理不再需要在越来越拥挤的网络中传输数据,并避免消耗越来越有价值的处理资源。
机器学习的架构
训练完成之后,AI框架将提供部署途径。对于在边缘部署的资源受限设备,这其中包括TensorFlow Lite和Caffe2等,这些和其他此类平台通常为开源,带有“入门”级介绍,已经过训练的模型可以提供某种形式的推理。这些模型也可以使用自定义数据集进行重新训练,该过程称为转移学习,可以节省许多小时的处理时间。
为了便于在不同处理架构下进行移植,这些模型一般通过编译器运行,并由主机软件使用API访问。由于模型已经过优化,因此可以使整个设计适应低至数百千字节的内存。
关于ML如何在网络边缘或附近运行的例子有很多,其中许多运行基于Linux的操作系统。这些基于CPU的ML解决方案使用的基本上是通用微处理器,而不是台式计算机中常见的非常耗电且很大的GPU类设备。GPU具有高度并行的执行模块,可使用多个MAC单元,旨在尽可能快地执行重复性、数学类的操作,而几乎不考虑功耗问题。它们通常难以编程,需要高功率,因而通常不适合资源受限的边缘设备。
TensorFlow Lite设计用于在较小处理器上运行一些TensorFlow模型,具备预训练好的模型,可提供图像分类、对象检测和分割(segmentation)等各种类型的ML。这三种模型以稍微不同的方式工作:图像分类需要在整个图像上工作,对象检测则将图像分解为矩形,而分割则进一步查看每个单独的像素。要在TensorFlow Lite部署中使用经过训练的TensorFlow模型,需要进行模型转换,这会通过可选的优化来减小文件大小。转换器可以用作Python的API,下面的代码示例演示了它如何使用。
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)
在标准处理器上运行ML意味着开发人员还可以利用基于行业标准语言(如Python)的简单软件解决方案。在某些情况下,这些处理器可能具有DSP扩展功能,能够加速部分数据流,但从根本上,通用处理器仅仅可以处理在较小设备中运行ML所需的处理级别,同时仍需要处理一般应用程序代码。
例如,CPU引导的AI已经常用于智能手机等设备,帮助确定照片中的特定功能。在工业应用中也是如此,其中基于多核处理器的片上系统(SoC)解决方案(如恩智浦的i.MX系列)通常用于将ML纳入工业流程,其中包括可以确定某些产品在制造过程中进展情况的机器视觉系统。这些SoC和其他类似产品是说明当今如何部署ML的完美示例。
图3:AI和机器视觉如何用于识别快速移动传送带上面食类型的演示图片。
超越同类
虽然CPU或MCU引导的AI现在很常见,但我们已经在期待的是能够应对尺寸、功率和成本要求都受到限制的最边缘网络设备,这就是最新版本的TensorFlow的用武之地:TensorFlow Lite Micro(或称为TF Lite Micro)是该框架的一个版本,设计用于在可能没有操作系统的微控制器上运行,而不是运行Linux的微处理器,其代码和模型一起只需要45kB的闪存和30kB的RAM即可运行。这是在网络最远边缘处的推理要求,能够在完全自主运行的设备中实现,无需任何其他软件的协助,同样重要的是,也不需要任何附加硬件。
TF Lite Micro的使用过程类似于TensorFlow Lite,此外还需要编写深层嵌入式代码来执行推理的步骤。除了在代码中包括相关的.h文件外,主要步骤还包括:添加代码以允许模型写入日志、实例化模型、为输入分配内存、输出和中间数组、实例化编译器、验证输入形状、实际运行模型并获得输出。下面的代码片段是关于如何获取输出的示例。
TfLiteTensor* output = interpreter.output(0); uint8_t top_category_score = 0; int top_category_index; for (int category_index = 0; category_index < kCategoryCount; ++category_index) { const uint8_t category_score = output->data.uint8[category_index]; if (category_score > top_category_score) { top_category_score = category_score; top_category_index = category_index; } }
为了支持微控制器上运行的ML,Arm开发了CMSIS-NN软件库,它是处理神经网络的Cortex微控制器软件接口标准(CMSIS)的一部分。通过量化,将浮点数减少到整数(该过程已被证明可以导致很少或没有精度损失),CMSIS-NN帮助开发人员将模型映射到微控制器的有限资源。
TF Lite Micro超高效的ML框架配合CMSIS-NN软件库,可以在超低功耗微控制器上运行ML。这显然有许多潜在的应用,其中一种是非常适用于永远在线的系统应用场景,其中大多数系统会保持深度睡眠模式,除非某种警告(如唤醒字wake word)等特定条件使其唤醒。我们可以将其视为一种新的中断服务程序,可使用智能来决定芯片/系统的其余部分何时需要参与。这清楚地表明超低功耗ML功能具有很大的潜力,可在网络边缘产生巨大影响。
展望未来,为了满足边缘推理需求而进行的技术开发,将进一步促使高响应性,并使极其强大的ML模型能够以更低功率运行。例如,Arm已经为ArmV8-M架构开发了名为Helium的新矢量扩展,这是Arm Cortex-M处理器的最新进展。在2015年推出ArmV8-M架构时获得了Arm TrustZone的安全性。未来Helium矢量扩展的开发将会把NEON的处理能力与TrustZone的安全性相结合,同时还将为Cortex-M微控制器带来显著的性能提升,这将有助于实现许多新兴应用,有助于在网络边缘提供具有更高响应性和准确性的ML。 Helium矢量扩展将能够通过Cortex-M器件提供高达15倍的ML性能改进,并在信号处理能力方面提高5倍。
图4:Helium矢量扩展将加速信号处理和机器学习算法。
对开发人员来说同样重要的是,这意味着他们可以通过与其他基于微控制器开发相同的工具来进行ML开发。在控制代码中包含了诸如识别异常振动、意外噪声或警报图像等功能,从而能够简化在网络边缘实现ML的整个过程。工具链和模型已经可用于早期评估,预计首款芯片将于2021年面市。
在网络边缘采用机器学习正在快速增长,远非是一种“单纯为技术而开发的技术”,这其中的原因是需要更高响应性、更强大的控制系统,而不必依赖云端服务,并且会始终保持与物联网的连接。
考虑到物联网将扩展到数万亿设备,为了满足不断增长的预期要求,在网络边缘实现推理,从而减少在日益拥挤的网络上传输的数据量将至关重要。