Skip to main content
QUICK REVIEW

[论文解读] Neural networks on microcontrollers: saving memory at inference via operator reordering

Edgar Liberis, Nicholas D. Lane|arXiv (Cornell University)|Oct 2, 2019
Advanced Memory and Neural ComputingEngineering被引用 20
一句话总结

本文提出一种软件级优化方法,通过重新排序算子执行顺序,减少微控制器上神经网络推理的峰值内存使用量,从而实现原本超出SRAM限制的模型部署。通过动态管理张量缓冲区分配并在每个算子执行后进行内存去碎片化,该方法将峰值内存减少50KB(从351KB降至301KB),使250KB的模型能够在512KB SRAM设备上运行,且无需修改模型架构或权重。

ABSTRACT

Designing deep learning models for highly-constrained hardware would allow imbuing many edge devices with intelligence. Microcontrollers (MCUs) are an attractive platform for building smart devices due to their low cost, wide availability, and modest power usage. However, they lack the computational resources to run neural networks as straightforwardly as mobile or server platforms, which necessitates changes to the network architecture and the inference software. In this work, we discuss the deployment and memory concerns of neural networks on MCUs and present a way of saving memory by changing the execution order of the network's operators, which is orthogonal to other compression methods. We publish a tool for reordering operators of TensorFlow Lite models and demonstrate its utility by sufficiently reducing the memory footprint of a CNN to deploy it on an MCU with 512KB SRAM.

研究动机与目标

  • 解决在片上SRAM有限且无中间内存层次结构的微控制器(MCUs)上部署深度学习模型的挑战。
  • 克服MCU推理软件必须支持动态内存分配的限制,因为静态内存不足以容纳所有张量缓冲区。
  • 在不修改模型架构或权重的前提下最小化推理过程中的峰值内存使用量,从而实现此前不可行的模型部署。
  • 开发一种实用工具,用于重排序TensorFlow Lite模型中的算子,以减少资源受限硬件上的内存占用。

提出的方法

  • 重新排序神经网络计算图中算子的执行顺序,以最小化峰值工作集大小(即同时存在于内存中的张量最大数量)。
  • 为TensorFlow Lite micro-interpreter实现一个动态内存分配器,允许在每个算子执行后将张量缓冲区移至内存起始位置以实现去碎片化。
  • 采用拓扑排序策略,优先选择内存占用最小的算子,并避免长时间保留中间张量。
  • 将重排序算法应用于具有分支的计算图(如残差连接),以减轻复杂架构中的内存压力。
  • 确保C/C++指针在缓冲区重定位时不被保留,从而在去碎片化过程中实现安全的内存移动。
  • 将重排序逻辑集成至TensorFlow Lite模型的工具中,使模型开发者无需感知,且与其它压缩技术正交。

实验结果

研究问题

  • RQ1在不改变模型架构的前提下,通过重排序神经网络中算子的执行顺序,能否减少微控制器上的峰值内存使用量?
  • RQ2在具有复杂分支计算图的模型中,算子重排序能实现多大的内存减少?
  • RQ3在微控制器环境中,动态内存分配与去碎片化的性能开销有多大?
  • RQ4算子重排序能否使原本因峰值内存过高而无法在SRAM有限(如512KB)的MCU上运行的模型实现部署?
  • RQ5与静态内存分配相比,该方法在MCU平台上的内存效率和运行时成本如何?

主要发现

  • 算子重排序将SwiftNet Cell的峰值内存使用量从351KB降低至301KB,减少50KB(14.2%),使其可在512KB SRAM MCU上运行。
  • 对于MobileNet-v1,引入的动态内存分配器仅导致执行时间增加0.68%(10243ms → 1316ms)和能耗增加0.97%(8775mJ → 728mJ),同时内存占用减少186KB。
  • 该方法与量化、剪枝和知识蒸馏等其他压缩技术完全正交,可与之结合使用。
  • 在每个算子执行后进行去碎片化非常有效,且运行时开销极低,使动态内存管理在MCU上成为可行方案。
  • 该工具成功使一个250KB的模型在仅配备512KB SRAM的微控制器上完成部署,而使用默认算子顺序则无法实现。
  • 该方法具有通用性,可进一步扩展以支持如就地计算(例如复用输入缓冲区作为输出)等优化,从而进一步降低内存使用量。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。