如何在微控制器上嵌入/部署任意机器学习模型?

人工智能 机器学习 张量流 楷模
2021-10-28 02:18:19

假设我有一个在笔记本电脑上训练的机器学习模型,然后我想在微控制器上嵌入/部署模型。我怎样才能做到这一点?

我知道 TensorflowLite Micro 会生成一个 C 标头以添加到项目中然后嵌入,但我阅读的每个示例都显示了它是如何使用神经网络完成的,这似乎是合法的,因为 TensorFlow 主要用于深度学习。

但是我怎样才能对任何类型的模型做同样的事情,比如 scikit-learn 中的模型?因此,我不一定对使用 TensorflowLite Micro 进行此操作感兴趣,但我对解决此问题的一般方法感兴趣。

4个回答

将 ML 模型部署到微控制器有几种可能的方法。

在微控制器上部署的主要限制因素是 ML 模型通常是一组参数的表示,这些参数旨在与新数据点一起用作预测算法的输入。大多数这样的模型都假设存在一个实现所讨论算法的随附库。然而,一个 microcrontoller 可能使用一种奇特的芯片架构,或者有非常多或不寻常的资源限制,这些限制阻碍了这些标准库的轻松部署。

大概您已经有一些方法可以将输入输入您的微控制器并对其进行编程,以便调用您可以编写的某些函数。如果没有,您首先需要弄清楚如何做到这一点,正确的方法取决于您的微控制器。一种常见的方法是用 C 或其他语言的非常有限的子集编写汇编代码或代码。另一种方法是找到另一种语言(例如Java、Python)的解释器分发版,该解释器已编译为在您的芯片上工作。无论哪种方式,您都需要某种方法来对芯片进行编程。

假设您可以对芯片进行编程,那么在部署模型时您将面临两个基本挑战:

  1. 大多数模型的参数都使用非常宽的浮点数进行训练。例如,可以使用 128 位数字。在标准计算环境中,CPU 或 GPU 将能够有效地对宽数据类型执行操作。在微控制器上,您可能仅限于 8 位或 16 位整数。要在这样的环境中使用您的模型参数,您需要使参数更小(通常通过将它们四舍五入以适应更小的数字格式,这个过程称为“量化”),或者通过查找或编写软件可以在表示为较小数据类型集合的大型数据类型上模拟您想要的操作(可能是加法和乘法)。第一种方法可能会使模型表现不佳。第二个可能使模型预测非常慢。

  2. 您需要算法的实现。一些算法,如线性回归、线性判别分析,甚至决策树都非常容易实现预测,并且可能只需要加法、乘法和/或比较。您可以自己用 C 的一个简单子集甚至在汇编中编写这些(例如,使用线性回归进行预测应该只是一个简单的循环)。其他算法,如深度神经网络,可能包含更复杂的操作,并且可能包含许多以复杂序列执行的此类操作。对于这些,您通常需要找到实现算法的库的分发版,或者自己编译一个。自己编译一个需要为您的特定微控制器设置一个构建工具链,并且可能会非常参与。

我发现:

这些似乎部分符合我的需要。但令我惊讶的是,我找不到更通用的东西可以将 Python 转换为 C 或具有 ML 支持的目标文件(用于 C 项目)。事实上,一旦经过训练,ML 算法“只是”一堆加法/乘法/比较。

例如,能够转换 scikit-learn 管道将有所帮助,因为 ML 项目很少仅由一个获取原始数据的 ML 模型组成。但在“裸机”微控制器上部署 ML 模型时,EdgeAI/TinyML 似乎主要专注于编译深度学习模型。

谢谢你的回答顺便说一句,它有帮助。

如果可以为您的微控制器编译运行模型的库,那么您可以在该微控制器上运行您的模型。

如果您使用一个库进行训练并使用另一个库进行部署,则可以将您的模型转换为该库:ONNX

一些关于ML中边缘计算库链接

为了加快速度,使用了特定的硬件:当然是 GPU,还有张量处理单元

可以手动将 NN 训练的模型转换为 C 代码(论文),但也有编译器:

XLA 和 Glow 支持 x86-64 和 ARM64。NNCG 方法生成 C 代码,因此应该更容易移植到通用 MCU(论文)。

更多链接:adge-aistackoverlow 问题

可以通过deepC 编译器使用更简单的方法,并将导出的 onnx 模型转换为 c++。

查看deepC 编译器示例测试中的简单示例 为您的目标机器编译 onnx 模型

结帐mnist.ir

步骤1:

生成中间代码

% onnx2cpp mnist.onnx

第2步:

优化和编译

% g++ -O3 mnist.cpp -I ../../../include/ -isystem ../../../packages/eigen-eigen-323c052e1731/ -o mnist.exe

第 3 步:

测试运行

% ./mnist.exe

这是YouTube 视频的链接,以获取详细说明。

毛皮详情,请访问 https://link.medium.com/IhbcJzi4jgb了解更多信息