TinyML
TinyML 在只有几 KB 内存和几毫瓦功耗的微控制器上运行机器学习。了解如何让模型适应这些设备、应用场景和工具。
TinyML(微型机器学习)是指在微控制器和其他超低功耗芯片上运行机器学习模型的实践。这些芯片通常只有几百 KB 的内存,没有操作系统,功耗预算以毫瓦计。在紧邻传感器的芯片上运行推理,可让电池供电设备连续数月或数年聆听、观察或感知周围环境,只发送“听到唤醒词”或“机器振动异常”等结果,而不是原始数据。这样可以降低延迟、保护数据隐私,还可节省流式传输所需的无线电功耗。这个领域的社区组织 EDGE AI FOUNDATION 曾名为 tinyML Foundation。
模型如何适配微控制器#
微控制器会将模型权重与程序一起存储在闪存中,并将计算过程中的激活值存放在 SRAM 中;通常 SRAM 的限制更严格。模型量化到 8 位整数后,权重大小可缩减至 FP32 的四分之一,还能将浮点运算转换为小型核心可高效运行的整数运算。由深度可分离卷积、模型剪枝和较低输入分辨率构成的紧凑架构,可以进一步缩小模型;神经架构搜索则能针对特定芯片的内存设计网络。MCUNet将这种搜索与内存感知运行时结合起来,使一款现成微控制器上的 ImageNet top-1 准确率超过 70%。最终模型会被编译进固件,并由小型解释器或编译后的代码执行:
无需使用任何硬件,就可以预先估算资源预算。这个关键词识别网络是深度可分离 CNN,属于可根据音频特征识别语音命令的网络类型;它按每个 INT8 权重占用一个字节来计算闪存用量,并按输入与输出激活值中较大的一组计算 SRAM 用量:
import torch
from torch import nn
# A depthwise-separable CNN for keyword spotting on 49x10 MFCC audio features
model = nn.Sequential(
nn.Conv2d(1, 64, (10, 4), stride=2, padding=(5, 1)),
nn.ReLU(),
nn.Conv2d(64, 64, 3, padding=1, groups=64),
nn.Conv2d(64, 64, 1),
nn.ReLU(),
nn.Conv2d(64, 64, 3, padding=1, groups=64),
nn.Conv2d(64, 64, 1),
nn.ReLU(),
nn.AdaptiveAvgPool2d(1),
nn.Flatten(),
nn.Linear(64, 12),
)
# At INT8, flash stores one byte per weight and SRAM holds activations in flight
weights = sum(p.numel() for p in model.parameters())
x, peak = torch.randn(1, 1, 49, 10), 0
for layer in model:
y = layer(x)
peak = max(peak, x.numel() + y.numel()) # a layer's input and output coexist
x = y
print(f"Flash: {weights / 1024:.1f} KB, peak SRAM: {peak / 1024:.1f} KB")运行后会显示闪存占用 12.7 KB、峰值 SRAM 占用 15.6 KB。这只占 Arduino Nano 33 BLE Sense 所用 nRF52840 微控制器的 1 MB 闪存和 256 KB RAM 的很小一部分,因此还能为音频流水线和运行时本身留出空间。
运行时与硬件#
- LiteRT for Microcontrollers:Google 的解释器原名为 TensorFlow Lite for Microcontrollers,无需操作系统、标准库或动态内存分配;其核心运行时在 Arm Cortex-M3 上只占 16 KB。
- ExecuTorch:PyTorch 的端侧运行时,其 Arm Ethos-U 后端可在 Arm Ethos-U NPU 上运行量化模型;许多低功耗芯片会在 Cortex-M 核心旁集成这种 NPU。
- Arm Cortex-M:大多数运行 TinyML 的微控制器都采用这一处理器系列,涵盖只有几 KB RAM 的 Cortex-M0+,以及配备机器学习向量指令的 Cortex-M55 和 Cortex-M85。
- Coral NPU:Google 于 2025 年 10 月宣布推出的一种开源 RISC-V 加速器设计,面向始终在线的可穿戴设备,目标性能约为每秒 5120 亿次运算,功耗仅为数毫瓦。
TinyML 与边缘 AI#
边缘 AI涵盖在数据产生设备上进行的所有推理,包括手机、Raspberry Pi等单板计算机,以及 NVIDIA Jetson等嵌入式 GPU 模块;这类设备拥有数 GB 内存,功耗则以瓦计。TinyML 是其中最小的一类,模型大小以 KB 计。随着微控制器开始配备加速器,这条界限也在不断变化:ST 的 STM32N6将 Cortex-M55 与一款 600 GOPS 的神经处理单元及 4.2 MB RAM 结合起来。最小的 Ultralytics YOLO26检测器有 240 万个参数,INT8 模型大小约为 2.4 MB,因此其 INT8 LiteRT 导出(format="litert", quantize=8)面向的是经典 TinyML 之上的设备层级:手机、单板计算机和配备加速器的开发板。
TinyML 的应用#
- 关键词识别: 手机、耳机和智能音箱中的常开唤醒词检测器会在低功耗核心上监听特定短语,只有听到该短语时才唤醒主处理器。
- 预测性维护:安装在电机和泵上的振动与音频传感器会学习设备的正常运行状态,并标记故障前出现的异常,而且可以使用电池运行多年。
- 野生动物与环境监测:太阳能或电池供电的声学传感器可在偏远森林中识别动物叫声或电锯声,并通过远距离无线电发送简短警报。
- 视觉唤醒词: 微控制器上的低分辨率摄像头会判断视野中是否有人,只有有人出现时才唤醒更大型的系统。
MLPerf Tiny 是 MLCommons 为这类硬件制定的基准,衡量其在这些应用任务中的准确率、延迟和能耗,例如关键词识别、视觉唤醒词、CIFAR-10图像分类,以及对机器声音进行异常检测。










