3、TinyML推理功耗模型:推理功耗的组成(计算、内存访问、外设、通信)、峰值功耗与平均功耗的区别、能量与功率的关系

在电池供电的TinyML设备设计中,功耗建模是系统级预算的基石。许多工程师在初期只关注MCU内核的算力(如TOPS或DMIPS),却忽略了推理过程中真正消耗能量的环节——内存访问、外设唤醒和无线通信。本章将拆解一次完整推理的功耗构成,厘清“功率”与“能量”的本质差异,并建立峰值功耗与平均功耗对电池寿命的不同影响路径。只有先建立正确的功耗模型,后续的mA budget规划才有据可依。

TinyML推理功耗构成与能量关系图 推理功耗四象限组成 计算 (Compute) MAC运算 / 激活函数 内存访问 (Memory) 权重/特征图/中间结果 外设 (Peripheral) 传感器 / DMA / 电源管理 通信 (Communication) BLE / 射频 / 协议栈 功率 vs 能量 峰值功率 (Peak Power) 瞬时最大电流 × 电压 平均功率 (Avg Power) 能量 / 总时间 能量 E = P × t = V × I × t 电池容量(mAh) → 可用能量(mWh) 一次推理的生命周期功耗曲线 t 空闲 唤醒 数据采集 推理计算 通信 休眠 峰值 平均 能量 = 曲线下面积 | 电池寿命由平均功耗决定,电源设计需满足峰值需求

3.1 推理功耗的四大组成:计算、内存访问、外设与通信

一次完整的TinyML推理并非只有MCU内核在“计算”。从传感器采集数据开始,到推理结果通过无线发出,整个链路中的每个环节都在消耗能量。我们将推理功耗拆解为四个主要象限:计算功耗、内存访问功耗、外设功耗和通信功耗。理解每个象限的占比,是优化mA budget的第一步。

3.1.1 计算功耗:MAC运算与激活函数

计算功耗指MCU内核(或NPU/加速器)执行乘加运算(MAC)、激活函数(ReLU、Sigmoid)、池化等操作时消耗的能量。对于Cortex-M系列内核,计算功耗通常与时钟频率呈近似线性关系:P_compute ≈ C_eff × V² × f,其中C_eff为有效开关电容,V为工作电压,f为时钟频率。在TinyML场景中,计算功耗往往不是最大头——因为推理的MAC数量虽多,但单次运算的能耗极低(pJ级)。

关键认知:在8位整数(int8)量化模型中,一次MAC运算在Cortex-M4上约消耗0.5~2 pJ能量。一个10万次MAC的小型CNN模型,其纯计算能耗仅为0.05~0.2 mJ。相比之下,一次Flash读取(32位)约消耗0.5~1 nJ,一次SRAM读取约0.2~0.5 nJ。计算本身往往不是瓶颈,数据搬运才是。

3.1.2 内存访问功耗:隐藏的能耗大户

内存访问功耗包括从Flash读取权重和输入数据、从SRAM读写中间特征图、以及DMA搬运数据时的能耗。根据经典的能量模型,访问Flash的能耗是SRAM的5~10倍,是寄存器堆的100倍以上。在TinyML推理中,权重通常存储在Flash中,每次卷积操作都需要反复读取权重,这导致内存访问功耗往往占据总推理功耗的40%~60%。

存储层级 访问能耗(相对值) 典型容量 TinyML中的角色
寄存器堆 1× 16~64 B 临时变量、循环计数
SRAM(片上) 10~20× 64 KB~1 MB 中间特征图、激活值、DMA缓冲
Flash(片上) 50~100× 256 KB~4 MB 模型权重、常量表、代码
外部存储(QSPI Flash) 200~500× 8~64 MB 大模型权重、日志存储

优化内存访问功耗的核心策略包括:权重重排(将常用权重放入SRAM缓存)、算子融合(减少中间结果的写回)、以及就地计算(in-place操作)。例如,在MobileNet的深度可分离卷积中,将逐通道卷积与逐点卷积融合,可以减少一次完整的特征图读写。

3.1.3 外设功耗:传感器与DMA的隐性消耗

外设功耗包括传感器(加速度计、麦克风、摄像头)、ADC采样、DMA传输、定时器以及电源管理单元(PMU)的静态功耗。在唤醒-推理-休眠的典型工作流中,外设功耗往往被低估。例如,一个I2C接口的加速度计在50 Hz采样率下功耗约10~50 µA,而MCU在休眠模式下可能仅消耗2 µA——传感器的功耗可能比MCU休眠功耗高一个数量级。

外设功耗的优化要点:

  • 采样策略:降低采样率或使用FIFO批量读取,减少MCU唤醒次数。
  • DMA替代CPU搬运:DMA在搬运数据时CPU可进入休眠,但DMA本身也有功耗(约0.5~2 mA @ 10 MHz)。
  • 外设电源域管理:在推理间隙关闭不用的外设电源(如通过GPIO控制传感器VCC)。

3.1.4 通信功耗:无线传输的“能量黑洞”

通信功耗是TinyML设备中单位比特能耗最高的环节。以BLE 5.0为例,发射电流约5~15 mA(0 dBm),接收电流约3~8 mA,而MCU在深度休眠时仅需2~5 µA。一次20字节的BLE广播包传输(含协议栈开销)约消耗0.5~2 µAh的能量,这相当于MCU执行数千次推理的能耗。

风险提示:许多工程师在设计mA budget时只关注推理计算,却忽略了通信的“固定开销”。BLE协议栈的定时唤醒、连接事件、广播间隔等机制,即使没有实际数据传输,也会周期性消耗电流。在低功耗设计中,通信策略(如批量传输、事件驱动上报)往往比推理优化更能延长电池寿命。

3.2 峰值功耗与平均功耗:两个维度的设计约束

峰值功耗(Peak Power)和平均功耗(Average Power)是两种截然不同的设计约束。峰值功耗决定了电源电路、电池内阻和电压调节器的规格;平均功耗决定了电池的总寿命。忽略任何一个维度,都可能导致设备无法稳定工作或电池提前耗尽。

3.2.1 峰值功耗:电源设计的硬约束

峰值功耗发生在推理最密集的时刻——例如CPU全速运行、Flash连续读取、DMA同时搬运数据、无线模块发射的瞬间。此时电流可能达到平均电流的10~50倍。例如,一个平均电流为5 mA的TinyML设备,在推理+BLE发射的瞬间可能达到80~120 mA的峰值电流。

峰值功耗的影响:

  • 电池电压跌落:锂电池在1C放电时内阻约100~200 mΩ,100 mA峰值电流会导致100~200 mV的压降,可能触发MCU的欠压复位(BOR)。
  • 电源纹波:峰值电流在PCB走线电感上产生压降,导致供电电压波动,影响ADC采样精度或射频性能。
  • 电容选型:需要在电源输出端放置足够的去耦电容(通常10~100 µF)来吸收峰值电流,否则系统可能崩溃。

3.2.2 平均功耗:电池寿命的决定因素

平均功耗是设备在一段时间内消耗的总能量除以时间。对于电池供电设备,平均功耗直接决定了电池寿命:电池寿命(h) = 电池容量(mAh) / 平均电流(mA)。但需要注意的是,电池容量并非恒定值——它随放电率(C-rate)、温度和工作电压而变化。在计算平均功耗时,必须考虑完整的任务周期,包括休眠、唤醒、采集、推理、通信和再次休眠。

实战经验:在规划mA budget时,建议先绘制任务周期电流曲线(类似本章SVG中的曲线),将每个阶段的电流和时间相乘得到能量,再除以总周期时间得到平均电流。例如:休眠2 s(5 µA)+ 唤醒10 ms(3 mA)+ 推理50 ms(8 mA)+ 通信20 ms(12 mA),则平均电流 = (2×5 + 0.01×3000 + 0.05×8000 + 0.02×12000) µAh / 2.08 s ≈ 5.2 µA + 14.4 µA + 192.3 µA + 115.4 µA ≈ 327 µA。这个数值远高于直觉上的“休眠电流”。

3.3 能量与功率的关系:从“功率”到“能量”的思维转换

功率(Power)是瞬时速率,单位是瓦特(W)或毫瓦(mW);能量(Energy)是累积总量,单位是焦耳(J)或毫瓦时(mWh)。在电池供电设计中,电池容量标称的是能量(mAh × V = mWh),而功耗分析通常关注功率(mA × V = mW)。两者之间的桥梁是时间:E = P × t。

在TinyML推理中,我们真正关心的是单次推理的能量消耗(mJ/推理),因为它决定了在给定电池容量下能执行多少次推理。例如,一个100 mAh的纽扣电池(3 V,即300 mWh),如果单次推理消耗0.5 mJ能量,则理论上可执行约216万次推理(300 mWh × 3600 J/Wh / 0.5 mJ)。但实际中还要考虑休眠电流、通信开销和电池自放电,可用次数会大幅减少。

3.3.1 能量效率指标:mJ/推理与µJ/MAC

为了评估TinyML模型的能效,业界常用两个指标:

  • 单次推理能量(mJ/推理):包含计算、内存访问、外设和通信的完整链路能量。这是系统级指标。
  • 每MAC能量(pJ/MAC):仅衡量计算内核的能效。例如,STM32L4在8 MHz下运行int8推理,约消耗0.8~1.5 pJ/MAC;而专用NPU(如MAX78000)可达到0.1~0.3 pJ/MAC。

在优化时,应优先降低总能量而非仅降低峰值功率。例如,将推理频率从80 MHz降至40 MHz,虽然推理时间延长一倍,但功耗可能降至原来的1/3(因为功耗与频率线性相关,与电压平方相关),总能量反而可能降低。

3.4 案例拆解:一个跌倒检测设备的功耗建模与优化

我们以一个基于加速度计的跌倒检测设备为例,完整演示功耗模型的建立与优化过程。该设备使用STM32L4系列MCU(Cortex-M4 @ 80 MHz),配备LIS2DH12加速度计(I2C接口),通过BLE 5.0上报结果,使用CR2032纽扣电池(标称容量220 mAh,3 V)。

3.4.1 初始功耗测量与问题发现

初始设计采用“连续采样-推理-上报”模式:加速度计以100 Hz采样,MCU每100 ms唤醒一次执行一次推理(输入为最近32个采样点),检测到跌倒时立即通过BLE上报。使用电流探头(如Nordic Power Profiler Kit)测量,得到以下数据:

阶段 电流 持续时间 能量消耗
休眠(LPM) 3 µA 90 ms 0.27 µAh
唤醒+采样 1.2 mA 2 ms 0.67 µAh
推理(80 MHz) 8.5 mA 6 ms 14.17 µAh
BLE广播(0 dBm) 12 mA 2 ms 6.67 µAh

每个周期(100 ms)总能量约21.78 µAh,平均电流约217.8 µA。理论上电池寿命为220 mAh / 0.2178 mA ≈ 1010小时(约42天)。但实际测试中,由于电池内阻和电压跌落,寿命仅约35天。问题出在推理阶段:8.5 mA的峰值电流导致CR2032电压从3.0 V跌至2.7 V,接近MCU的BOR阈值(2.6 V),系统频繁复位。

3.4.2 优化过程与结果

我们进行了三轮优化:

第一轮:降低推理频率与电压。将MCU主频从80 MHz降至40 MHz,工作电压从3.3 V降至2.8 V(使用内部LDO)。推理时间从6 ms延长至12 ms,但推理电流从8.5 mA降至3.2 mA(功耗与频率线性、与电压平方相关)。推理阶段能量从14.17 µAh降至10.67 µAh(3.2 mA × 12 ms / 3600),同时峰值电流降至4.5 mA(含其他外设),解决了电压跌落问题。

第二轮:优化采样策略。将加速度计采样率从100 Hz降至50 Hz,并使用FIFO批量读取(每20 ms读取一次16个样本)。MCU唤醒时间从2 ms降至0.5 ms,采样电流从1.2 mA降至0.8 mA。此阶段能量从0.67 µAh降至0.11 µAh。

第三轮:通信策略调整。将BLE广播间隔从100 ms延长至500 ms,仅在检测到跌倒时立即上报。正常周期内不再广播,而是每5秒发送一次心跳包(20字节)。通信能量从6.67 µAh/周期降至0.13 µAh/周期(平均)。

优化后的任务周期(100 ms)能量分布:休眠0.27 µAh + 采样0.11 µAh + 推理10.67 µAh + 通信0.13 µAh ≈ 11.18 µAh,平均电流约111.8 µA。电池寿命提升至220 mAh / 0.1118 mA ≈ 1968小时(约82天),且峰值电流降至4.5 mA,系统稳定运行。

复盘经验:(1)推理频率并非越高越好,降低频率和电压可同时降低峰值和能量;(2)外设的FIFO和批量读取能显著减少MCU唤醒时间;(3)通信策略的调整对平均功耗影响巨大,但需权衡实时性需求;(4)峰值功耗问题往往比平均功耗更隐蔽,需用示波器或电流探头实测确认。

3.5 常见误区与总结

在TinyML功耗建模中,以下误区需要特别警惕:

  • 误区一:只关注计算功耗,忽略内存访问。实际上,内存访问(尤其是Flash读取)往往占总推理能耗的40%~60%。优化时应优先减少权重读取次数,而非单纯提高计算效率。
  • 误区二:用平均电流代替峰值电流做电源设计。电源电路必须满足峰值电流需求,否则系统会在推理瞬间复位。建议在电源输出端预留至少10×平均电流的裕量,并放置足够的去耦电容。
  • 误区三:混淆功率与能量。降低功耗(mW)不一定降低能量(mJ)。例如,降低频率虽然降低了功耗,但延长了推理时间,总能量可能不变甚至增加。应始终以“单次推理能量”为优化目标。
  • 误区四:忽略外设的静态功耗。传感器、DMA和PMU在“空闲”时仍有电流消耗。在计算平均功耗时,必须包含所有外设的静态电流。