为什么机器学习在嵌入式系统中会失败?

2020 年 2 月 4 日 CSDN

作者 | Andrew Zhuravchak
译者 | 弯月
封图 | CSDN 下载自 VCG
出品 | CSDN(ID:CSDNnews)

如今,机器学习已到达巅峰,并在各个领域得到了应用。机场有人脸识别系统,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-embedded-system-9ce6def9ba75

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

译者:弯月

【END】

推荐阅读 
黑莓手机将停售;三大运营商:疫情防控期间用户欠费不停机;Chrome 测试移除搜索结果页网址 | 极客头条
☞Web 爬虫现已合法?
科技驰援背后:技术没有假期!
☞假期延长,抢票软件到底还行不?
火神山医院完工,2月3日收治病人!“云监工”请放心!
☞阿里腾讯华为在行动!程序员远程办公究竟用哪个视频会议好?
疫情肆虐下,程序员们都在哪里?
延迟上班别发愁,远程办公抗疫情!
你点的每一个在看,我认真当成了喜欢
登录查看更多
1

相关内容

嵌入式即嵌入式系统,IEEE(美国电气和电子工程师协会)对其定义是用于控制、监视或者辅助操作机器和设备的装置,是一种专用的计算机系统;国内普遍认同的嵌入式系统定义是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统;从应用对象上加以定义来说,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
谷歌之困:谷歌为什么做不好硬件?
ZEALER订阅号
3+阅读 · 2019年11月21日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
研究SLAM,对编程的要求有多高?
计算机视觉life
24+阅读 · 2019年2月18日
说说我的老同事,前端大神程劭非
余晟以为
17+阅读 · 2019年1月14日
机器学习不能做什么?
引力空间站
5+阅读 · 2018年3月28日
你知道量子计算吗?它超酷的!
微软研究院AI头条
4+阅读 · 2018年3月16日
【机器学习】推荐13个机器学习框架
产业智能官
8+阅读 · 2017年9月10日
Spark的误解-不仅Spark是内存计算,Hadoop也是内存计算
Self-Attention Graph Pooling
Arxiv
13+阅读 · 2019年6月13日
Arxiv
6+阅读 · 2018年10月3日
Arxiv
7+阅读 · 2018年3月22日
Arxiv
4+阅读 · 2018年3月14日
Arxiv
10+阅读 · 2018年2月4日
VIP会员
相关VIP内容
相关资讯
谷歌之困:谷歌为什么做不好硬件?
ZEALER订阅号
3+阅读 · 2019年11月21日
在K8S上运行Kafka合适吗?会遇到哪些陷阱?
DBAplus社群
9+阅读 · 2019年9月4日
研究SLAM,对编程的要求有多高?
计算机视觉life
24+阅读 · 2019年2月18日
说说我的老同事,前端大神程劭非
余晟以为
17+阅读 · 2019年1月14日
机器学习不能做什么?
引力空间站
5+阅读 · 2018年3月28日
你知道量子计算吗?它超酷的!
微软研究院AI头条
4+阅读 · 2018年3月16日
【机器学习】推荐13个机器学习框架
产业智能官
8+阅读 · 2017年9月10日
Spark的误解-不仅Spark是内存计算,Hadoop也是内存计算
相关论文
Self-Attention Graph Pooling
Arxiv
13+阅读 · 2019年6月13日
Arxiv
6+阅读 · 2018年10月3日
Arxiv
7+阅读 · 2018年3月22日
Arxiv
4+阅读 · 2018年3月14日
Arxiv
10+阅读 · 2018年2月4日
Top
微信扫码咨询专知VIP会员