机器学习在嵌入式系统中的失败原因是什么?

发表时间: 2020-02-04 19:34

作者 | Andrew Zhuravchak

译者 | 弯月

封图 | CSDN 下载自 VCG

如今,机器学习已到达巅峰,并在各个领域得到了应用。机场有人脸识别系统,Facebook 有个性化的广告。

然而,机器学习与嵌入式设备的相结合仍然存在非常大的鸿沟。

我们不了解什么是嵌入式世界

我们已经习惯了使用强大的计算能力来处理机器学习。

AlexNet 需要 727MFlops 的运算能力(Flops=浮点运算)以及 235Mb 的内存才能处理小小的一张 227 x 227 像素的图像。例如,Google Nexus S 上的 ARM Cortex-A8 的处理能力为每秒 66MFlops。因此,你必须等待大约 11 秒才能进行推断。这也太慢了!

大学里我上了几门与机器学习相关的课程。我们做了很多有趣的作业。但是当时即便是 4GB GTX1050 也不足以训练所有模型。

一般的机器学习工程师很少考虑计算资源。而且他们也很少关心内存的使用情况。为什么?因为这些硬件都很便宜,甚至是你的手机都拥有相当不错的 CPU 和大量内存。

你已经很久没有过聚会拍照时发现自己手机上的存储不够的情况了吧?想象一下,你使用的是只有 256KB 闪存的 TrueTouch 感应控制器。没错,只有 256KB。而且由于固件占用了一部分, 因此你不能完全使用这点存储。算下来,你能使用的也就是大约 100KB。回头再看看你的上一个模型的大小。可能比这个大多了。

有意思吧?我们来继续看。

当听到“嵌入式设备”时你会想起什么?记住脑海中出现的第一印象。

1. 嵌入式设备可以是任何电动机械,甚至是微波炉和洗衣机

没错,你答对了!

如今,几乎所有的电气设备都是嵌入式的。这些设备内部可能拥有一个或多个控制器来负责每个功能:触摸感应、发动机状态监控等。

2. Arduino 和树莓派

恭喜你,再次答对了!

二者是 DIY 项目中最受欢迎和使用最广泛的工具包之一。它们也是嵌入式设备。

3. Jetson Nano 及类似的产品

再次回答正确。

这是一种特殊的开发套件,简称迷你计算机,专门为运行机器学习模型而开发。它非常强大,而且非常酷。

但似乎有些不对。

我有很多朋友都在做一些很棒的硬件业余项目。通常他们会使用 Arduino 或 STM32。

我认识几个 AI 工程师对 Jetson Nano 和类似设备超有兴趣。他们认为这些设备是嵌入式 AI 的未来。

那么,接下来请考虑这样一个问题:“这些设备有多少用在了生产级别的产品中?”

答案:微乎其微

想一想你家中有多少电气设备,然后再想想汽车中包含的大量控制器,以及工作上用到的安保系统,等等。

每个设备都有一个控制器。通常,这些控制器都是微型,且超级便宜。它们根本无法企及 Jetson 或树莓派的资源和功能。

假设你有一个微控制器。它的主要任务是处理手指触摸屏幕。它拥有 ARM Cortex-M0 处理器,256KB 内存(其中只有 80–120KG 可用)。这是一个实时系统,因此你只需很少的时间来推断模型,例如 100 微秒。你的目标是改善算法或替换算法。

祝你好运,欢迎来到“嵌入式 AI”的世界。

重点:真正的嵌入式世界,由资源极其有限的 1-2 美元芯片组成。而生产级别的产品使用的就是这种芯片。

纯基础设施

我一直在从事上述项目,进展良好,我开发了一个适合该微控制器的小型神经网络

接下来,我需要将模型从我的电脑转移到设备上!

1. 量化

该处理器无法执行浮点数运算。即使可以,我们也不会使用,因为它的操作非常复杂且需要大量时间。

因此,我对模型的权重进行量化,即将连续范围内的值转换为有限范围内的离散值。

你猜怎么着?PyTorch 和 TensorflowLite 都无法完全支持。它们不能支持所有激活函数(尽管我使用了非常简单的 HardTanh)。PyTorch 甚至无法将量化模型保存到文件中。

所以,我不得不亲自动手。

2. 推理代码生成

你想在这个控制器上运行模型,对吧?那么你就需要使用 C 代码进行模型推断。

告诉你一个不幸的消息,这一步你也必须手动完成。为什么?因为 PyTorch 没有推断代码生成的功能。相比之下,TFLite 虽然有这个功能,但功能相当有限,并且不支持常见的激活函数。

所以,我不得不再次亲自动手。

在工作中,我遇到过很多这样的情况。我并不是想抨击 PyTorch 和 TensorflowLite,而是在“求救”。

重点:机器学习社区还有一个重大的问题:没有“嵌入式 AI”的专业工具。

黑暗中的光明?

我看到大型半导体公司对 AI 产生了极大的兴趣,他们在积极地做非常有价值和重要的事情。

  • CMSIS-NN:用于 Arm Cortex-M CPU 的高效神经网络内核。

  • 有些编译器能够产生高效的推理代码,而且这些推理代码能够根据你的硬件进行优化。

  • 还有很多其他很棒的东西。

英文:Machine Learning Fails When It Comes to Embedded System. Here’s Why

链接:
https://towardsdatascience
.com
/machine-learning-fails-when-it-comes-to-embe
dded-system-9ce6def9ba75

作者:Andrew Zhuravchak,研发系统工程师。

译者:弯月

☞黑莓手机将停售;三大运营商:疫情防控期间用户欠费不停机;Chrome 测试移除搜索结果页网址 | 极客头条