2、TinyML基础:TinyML定义、典型应用场景、推理工作负载特点、常见硬件平台(MCU、NPU、DSP)简介
TinyML(微型机器学习)是机器学习与嵌入式物联网系统的交叉领域,核心目标是在功耗受限、计算资源有限的微控制器(MCU)、数字信号处理器(DSP)或微型神经网络处理器(NPU)上部署和运行机器学习推理模型。与云端AI依赖大规模GPU集群不同,TinyML强调在设备本地完成数据采集、特征提取和推理决策,从而避免网络传输延迟、保护数据隐私并显著降低系统功耗。理解TinyML的定义边界、工作负载特征和硬件平台差异,是后续进行DVFS(动态电压频率调节)调优的前提——因为DVFS正是针对这些硬件平台的计算与功耗特性,通过动态调整电压和时钟频率来匹配推理任务的实际需求。
上图展示了TinyML系统从传感器数据采集到推理结果输出的完整链路,以及DVFS调优在其中的作用位置。可以看到,推理引擎运行在MCU、DSP或NPU之上,而DVFS控制模块则直接作用于硬件平台,通过调节电压和频率来影响推理任务的功耗与延迟。这张图也揭示了TinyML调优的核心矛盾:在电池供电的物联网设备中,我们既希望推理足够快以满足实时性要求,又希望功耗足够低以延长设备续航。
2.1 TinyML的典型应用场景与工作负载特征
核心原理:TinyML的应用场景通常具备三个共同特征:始终在线(Always-On)、事件驱动(Event-Driven)和资源受限(Resource-Constrained)。以智能语音唤醒词检测为例,设备需要7×24小时监听麦克风信号,但只有在检测到特定唤醒词时才启动完整应用。这种工作模式决定了推理负载具有明显的突发性——大部分时间处于低负载监听状态,偶尔出现高负载推理峰值。
从工作负载特征来看,TinyML推理与云端AI推理存在本质差异:
| 维度 | 云端AI推理 | TinyML推理 |
|---|---|---|
| 模型大小 | 数百MB至数GB | 数十KB至数MB |
| 批量大小 | 大批量(32/64/128) | 单样本或极小批量(1-4) |
| 数据类型 | FP32/FP16 | INT8/INT16/FP16 |
| 内存带宽 | 高(HBM/GDDR) | 极低(Flash/SRAM) |
| 延迟要求 | 100ms-2s | 1ms-100ms |
| 功耗预算 | 数百瓦 | 1mW-100mW |
判断方法:在实际项目中,我们可以通过三个关键指标来判断一个推理任务是否适合TinyML部署:模型参数量(通常应小于1MB)、峰值内存占用(应小于硬件可用RAM的80%)、单次推理延迟(应在应用可接受范围内)。如果模型过大或计算量过高,则需要考虑模型压缩或硬件升级。
2.2 常见硬件平台:MCU、DSP与NPU
核心原理:TinyML的硬件平台选择直接决定了DVFS调优的策略空间。目前主流平台分为三类:
- MCU(微控制器):如ARM Cortex-M4/M7/M33、RISC-V内核。特点:集成度高、外设丰富、成本低,但算力有限(通常主频在几十MHz到几百MHz)。典型代表:STM32L4系列、ESP32-S3、nRF5340。
- DSP(数字信号处理器):如Cadence Tensilica HiFi4、CEVA-XM6。特点:针对信号处理优化,支持SIMD指令,擅长FFT、滤波等操作,但通用计算能力较弱。通常作为协处理器与MCU搭配使用。
- NPU(神经网络处理器):如ARM Ethos-U55/U65、Synopsys DesignWare ARC NPX。特点:专为神经网络推理设计,支持硬件加速卷积、池化等操作,能效比极高(可达10 TOPS/W以上),但灵活性较差,对模型结构有要求。
操作流程:在实际项目中选择硬件平台时,建议按以下步骤评估:
- 统计模型的计算量(MACs)和参数量(Bytes);
- 估算所需算力:所需GOPS = MACs × 2 / 目标延迟(秒);
- 对比各平台的峰值算力和能效比;
- 评估内存带宽是否满足要求(特别是NPU需要DMA搬运数据);
- 考虑外设接口、开发工具链成熟度、量产成本。
案例拆解:以智能门锁中的人脸识别模块为例。某产品原方案采用Cortex-M7 MCU(主频400MHz)运行MobileNetV2模型(输入96×96,INT8量化),单次推理耗时约850ms,功耗约120mW。由于门锁由4节AA电池供电,用户对解锁速度(<500ms)和续航(>1年)都有明确要求。
分析过程:通过profiling发现,推理耗时主要集中在卷积层(占78%),而MCU的SIMD指令利用率仅35%。进一步测试发现,当主频从400MHz降至300MHz时,推理耗时增加到1.2s,但功耗降至65mW——功耗下降46%,延迟却只增加了41%。这说明该工作负载对频率不敏感,存在DVFS调优空间。
最终方案:在MCU旁增加一颗Ethos-U55 NPU(主频200MHz),将卷积层卸载到NPU执行。优化后单次推理耗时降至280ms,系统总功耗降至45mW(MCU@200MHz + NPU@200MHz)。同时,利用DVFS在待机时将MCU降至32MHz(低功耗模式),NPU完全断电,待机功耗降至0.3mW。电池续航从原来的8个月延长至14个月。
2.3 推理工作负载的功耗特征与DVFS切入点
核心原理:TinyML推理的功耗由三部分组成:计算功耗(与频率成正比,与电压平方成正比)、内存访问功耗(与访问次数和位宽相关)、静态功耗(与工艺和温度相关)。DVFS主要影响计算功耗,而内存访问功耗则需要通过数据复用、缓存优化等手段降低。
对于典型的TinyML推理任务,其功耗-频率关系并非线性。当频率较低时,内存访问时间占比增大,计算单元利用率下降,此时提升频率对延迟改善明显;当频率较高时,内存带宽成为瓶颈,继续提升频率只会增加功耗而延迟改善有限。这个拐点就是DVFS调优的最佳工作点。
判断方法:我们可以通过一个简单的实验找到拐点:
// 伪代码:扫描频率-延迟-功耗关系
for (freq = 50MHz; freq <= 400MHz; freq += 25MHz) {
set_cpu_freq(freq);
set_cpu_voltage(voltage_table[freq]);
delay_ms(10); // 等待电压稳定
start_time = get_timer();
run_inference();
end_time = get_timer();
latency = end_time - start_time;
power = read_power_meter();
printf("freq=%dMHz latency=%dus power=%dmW\n", freq, latency, power);
}
运行上述扫描后,绘制延迟-功耗曲线,找到边际收益递减点——即频率每提升10%带来的延迟改善小于5%的频率点。该点即为DVFS的上限频率。
案例拆解:某可穿戴设备上的活动识别模型(输入为6轴IMU数据,1D-CNN结构,模型大小48KB)在Cortex-M33(最高主频160MHz)上运行。初始配置固定160MHz,单次推理功耗为8.2mW,延迟为35ms。通过频率扫描发现:
| 频率(MHz) | 延迟(ms) | 功耗(mW) | 能效比(mJ/次) |
|---|---|---|---|
| 160 | 35 | 8.2 | 0.287 |
| 120 | 42 | 5.1 | 0.214 |
| 96 | 51 | 3.4 | 0.173 |
| 80 | 63 | 2.5 | 0.158 |
| 64 | 82 | 1.8 | 0.148 |
| 48 | 115 | 1.3 | 0.150 |
从表中可以看出,当频率从160MHz降至80MHz时,能效比持续改善(从0.287降至0.158 mJ/次),但继续降至48MHz时能效比反而恶化(0.150 mJ/次)。这是因为频率过低时,外设和内存的固定开销占比增大。因此,该应用的最佳DVFS工作点为80MHz,相比固定160MHz,能效提升45%。
2.4 常见误区与总结复盘
误区一:认为最高频率一定带来最佳性能。在内存带宽受限的系统中,过高的频率会导致CPU等待内存,反而增加功耗。应通过实测找到计算与内存的平衡点。
误区二:忽略电压调节的延迟。DVFS切换电压时,需要等待电源管理单元(PMU)稳定,通常需要数十微秒。如果推理任务本身只有几百微秒,频繁切换电压可能得不偿失。此时应考虑预测性DVFS——根据历史推理间隔提前调整频率。
误区三:将所有计算都放在NPU上。NPU虽然能效高,但数据搬运(DMA传输)的功耗不可忽视。对于小模型(<100KB),MCU直接计算可能比NPU更省电,因为省去了数据搬运开销。
误区四:忽视编译优化对DVFS的影响。同样的模型,使用不同编译器(如CMSIS-NN vs 普通C编译)产生的指令序列差异巨大,直接影响计算密度和内存访问模式,进而影响最优DVFS点。建议在调优前先确保编译器已开启最高优化等级。