当前位置: 首页 > news >正文

MicroFlow:一种高效的基于Rust的TinyML推理引擎

英文论文标题:MICROFLOW: AN EFFICIENT RUST-BASED INFERENCE ENGINE FOR TINYML

中文论文标题:MicroFlow:一种高效的基于Rust的TinyML推理引擎

作者信息:

  • Matteo Carnelos,意大利帕多瓦大学,Grepit AB, Sweden,matteo.carnelos@studenti.unipd.it
  • Francesco Pasti,意大利帕多瓦大学,pastifranc@dei.unipd.it
  • Nicola Bellotto,意大利帕多瓦大学,nbellotto@dei.unipd.it

论文出处:arXiv:2409.19432v1 [cs.LG] 28 Sep 2024

主要内容概述:

摘要
MicroFlow 是一个开源的 TinyML 框架,旨在将神经网络 (NNs) 部署在嵌入式系统上,使用 Rust 编程语言,特别注重效率和鲁棒性,适合在关键环境中应用。MicroFlow 采用基于编译器的推理引擎方法,并结合 Rust 的内存安全和特性。该解决方案能够在资源极其有限的设备上成功部署 NN,包括仅有 2kB RAM 的裸机 8 位微控制器。此外,与部署 NN 参考模型的其他最新解决方案相比,MicroFlow 能够使用更少的 Flash 和 RAM 内存,并且在中等大小的 NN 上实现更快的推理,对更大的 NN 实现类似的性能。实验结果证明了 MicroFlow 在资源特别有限的关键环境中部署 TinyML 模型的效率和适用性。

第1节 引言
TinyML 是机器学习 (ML) 的一个领域,专注于小型和低功耗嵌入式设备。TinyML 的目标是使这些设备能够在不依赖基于云的服务器或高性能计算系统的情况下执行智能任务。随着对能够执行智能实时任务的智能设备的需求不断增加,这一领域近年来越来越受欢迎。TinyML 的一个显著优势是其能够在低功耗设备上运行,使其非常适合资源受限的环境。

第2节 相关工作
TinyML 指的是在小型、低功耗嵌入式设备上部署 ML 模型。TinyML 应用的一个典型例子是唤醒词检测,也称为关键词检测或热词。这涉及到训练一个 NN 来识别特定的声音或短语,如“Hey Siri”或“OK Google”,触发设备开始监听用户命令。训练后的模型随后被压缩并部署到边缘设备上,执行始终在线的推理。

第3节 系统设计和组件
MicroFlow 的高级结构包括两个主要组件:位于主机机器上的 MicroFlow 编译器和位于目标微控制器上的 MicroFlow 运行时。目标是尽可能多地将工作委托给编译器,创建一个轻量级运行时进程,该进程在程序执行期间仅执行必要的计算。

a7945d0a00744bb485f2e7fb368ab483.png

b231c7b2a290438b99a448ae1345956d.png

b0238976e3a04df485fefd98a919a8dd.png

6d3ea6670134445eb111fe6448034783.png

第4节 内存管理
内存管理是在资源受限的微控制器上执行推理的关键方面。高效的内存利用对于确保最佳性能、最小化内存占用以及避免内存泄漏和崩溃等问题至关重要。

第5节 MicroFlow 操作符
NN 进程通常由计算图中一系列操作表示。MicroFlow 提供了实现 FNN 和 CNN 的最常见操作,包括 FullyConnected、Conv2D、DepthwiseConv2D、AveragePool2D、Reshape、ReLU、ReLU6 和 Softmax 操作符。

81bcd3c25f67468480c6329d9088aeeb.png

第6节 实验评估
MicroFlow 在三个不同大小和复杂度的模型上进行了评估,所有模型都量化为 8 位有符号整数。实验包括评估准确性、内存使用情况、运行时性能和能源消耗。

第7节 结论
本文介绍了 MicroFlow,这是一个针对资源受限微控制器的 TinyML 推理引擎,使用 Rust 实现以实现内存安全和效率。实验结果证明了其在多项 ML 任务中的有效性和出色的性能,在准确性、内存使用、执行时间和能源消耗之间取得了良好的平衡。MicroFlow 已作为开源项目发布,以便研究和工业界能够根据最终用户的需求扩展其功能。

 


http://www.mrgr.cn/news/47606.html

相关文章:

  • Linux 发行版介绍与对比:Red Hat、Ubuntu、Kylin、Debian
  • T-SQL语言的网络编程
  • 工厂人员定位管理系统方案(二)人员精确定位系统架构设计,适用于工厂智能管理
  • 自动化脚本本地可执行但是Jenkins上各种报错怎么解决
  • 【UE5 C++课程系列笔记】22——多线程基础——FRunnable和FRunnableThread
  • 【C++】B2101 计算矩阵边缘元素之和
  • 机器学习与神经网络的发展前景
  • Java重修笔记 第六十五天 IO 流 - 打印流、PrintStream 和 PrintWriter、properties 类
  • 代码随想录day30:动态规划part3
  • C语言 | Leetcode C语言题解之第470题用Rand7()实现Rand10()
  • Golang | Leetcode Golang题解之第472题连接词
  • 什么是事务
  • Redis 其他类型 渐进式遍历
  • oracle set命令
  • 探索高效的 PDF 拆分工具及其独特功能
  • CSS @规则(At-rules)系列详解___@charset规则使用方法
  • linux上给磁盘分区和格式化分区
  • C++ | Leetcode C++题解之第472题连接词
  • set有哪些实现类?
  • 【C语言】计算需要的缓冲区大小
  • ARM知识点三和串口代码的编写流程
  • 毕业设计选题:基于php+vue+uniapp的新闻资讯小程序
  • 5.C语言基础入门:数据类型、变量声明与创建详解
  • Java | Leetcode Java题解之第470题用Rand7()实现Rand10()
  • 使用 Raspberry Pi Pico W 的基于 MQTT 的分布式网络自适应估计
  • Java | Leetcode Java题解之第472题连接词