想象你经营一个街边的甜品小吃摊。大餐厅的后厨有巨大的烤箱、双开门冰箱和满墙的炊具,可你的摊位只拥有一张便携折叠桌、一个小型燃气炉和一个小到不能再小的蓄电池。客人想吃的却是同一个口味的蛋糕。TinyML,做的就是“把大厨的本事浓缩进迷你厨房”这件事:让AI算法能跑在仅有几十KB内存、几毫瓦功耗的微控制器上。 过去,AI像一个需要大场地的专业厨师团队,只能在云端服务器这种“中央大厨房”里工作。但真正走进生活场景的AI——你口袋里的语音唤醒、生产线上的异常振动检测、农田里的虫害识别——不需要几TB的算力,只需要“够用就好”。TinyML把深度学习模型压缩、裁剪、量化,再塞进指甲盖大小的芯片里,并让最终用户获得秒级响应。 这篇文章就像一本“迷你厨房改造手册”:我们先认识迷你厨房的局限,再学习如何精简菜谱(压缩模型)、优化烹饪流程(加速推理)、把菜谱固定成小卡片(部署固件),最后看看各个街角摊位是怎么用这套方法赚钱省电的。

岗位关联

对AI从业者而言,掌握TinyML意味着你不再只会做“云端大模型”这一道菜,而是能根据算力、内存和功耗的约束设计端侧智能方案——这是AIoT时代最具落地价值的稀缺技能。

目录
  1. 可视化演示
  2. 1.1 概念基础:在迷你厨房里做蛋糕
  3. 1.2 硬件算力:小桌子、小冰箱、小火炉
  4. 1.3 关键算法:给菜谱做减法
  5. 1.4 性能优化:巧手快炒的秘诀
  6. 1.5 工程部署:把菜谱印成小卡片
  7. 1.6 典型应用:街角的小吃摊生态
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

动态展示模型压缩(量化/剪枝/蒸馏)流水线、TFLM工具链部署流程、MCU内存布局与传感器互联、以及唤醒词检测等四大典型边缘AI应用场景。

本节配有交互动效(进入视口后自动加载,约 3KB)。

1.1 概念基础:在迷你厨房里做蛋糕

还记得街边甜品摊的比喻吗?大餐厅后厨里有十八般武艺,可你的摊位只有一张折叠桌和一个燃气炉。TinyML就是一套“迷你厨房烹饪法”——它让深度学习模型不再依赖云端服务器,而是直接在指甲盖大小的微控制器上完成推理。所谓“推理”,就是模型拿到输入数据后,在本地计算出结果,例如识别出你喊的是“你好”还是“关机”。

从技术角度看,TinyML是机器学习与嵌入式系统的交叉领域,专为内存几十KB、主频几十MHz、电池供电的设备设计。它属于典型的边缘AI计算场景:数据在产生地就地处理,而不是上传到云端。你手上的智能手表能随时回答“我刚才跑了多远”而不需要联网,就是设备端推理在起作用。

能量消耗是TinyML最关心的指标之一。一次推理需要消耗多少电,取决于设备平均功耗和推理耗时,它们的乘积就是本次推理的能量开销。

回到小吃摊:你不敢用猛火,因为蓄电池撑不了多久;也不敢慢吞吞地烤,客人等不起。TinyML的哲学就是“小火快炒”——用尽可能低的功耗、在可接受的时延内完成推理,让AI像街边小吃一样随时可得。

E=P×t\displaystyle E = P \times t
一句话理解:推理消耗的电能(E)等于设备平均功耗(P)乘以推理耗时(t)。把模型压缩到更小、让计算更快,都能直接延长电池续航。
  1. 能量符号E 表示完成一次推理所需消耗的电能,单位是焦耳(J)。它就像燃气炉烧一壶水用掉的燃气量。
    E\displaystyle E
  2. 功率符号P 表示设备在推理期间的平均功率,单位是瓦特(W)。它类似燃气炉的火力大小,火越猛单位时间耗气越多。
    P\displaystyle P
  3. 时间符号t 表示推理过程持续的秒数(s)。它类似烧水的时间,火小一点就要烧更久。
    t\displaystyle t
  4. 乘法结合把功率和时间乘在一起,就得到总耗能。TinyML的目标是同时压低 P 和 t,让设备用一颗纽扣电池也能支撑数月。
    E=P×t\displaystyle E = P \times t

1.2 硬件算力:小桌子、小冰箱、小火炉

迷你厨房的硬件条件决定了能做什么菜。你的折叠桌只有A4纸那么大,盛不下太大的案板;小储物箱里放不下几袋面粉;燃气炉一次只能支撑一个小锅。TinyML面对的微控制器(MCU)正是如此:SRAM内存通常只有几十KB,相当于那张小桌子;Flash存储通常几百KB到几MB,相当于小储物箱;主频只有几十到几百MHz,算力远低于手机和电脑。

模型能否放进设备,第一步要看它占多少内存。模型权重在存储器和内存中占据的字节数,由参数量和每个参数的位宽决定:

小桌子实在摆不开大案板,所以我们必须在后续章节里对模型做“减肥”:量化、剪枝、蒸馏,这些都是为了让食材更精炼、菜谱更薄,最终让MCU这座迷你厨房接得住这道菜。

Mbytes=Nparams×Bbits8\displaystyle M_{\mathrm{bytes}} = \frac{N_{\mathrm{params}} \times B_{\mathrm{bits}}}{8}
一句话理解:参数总量(N)乘以每个参数的表示位宽(B),再除以 8,就得到模型权重占用的字节数。位宽越大,模型越“胖”;位宽越小,模型越“瘦”。
  1. 参数量N 是模型中的权重和偏置总数。好比菜谱里的食材条目数,条目越多,菜谱越厚。
    Nparams\displaystyle N_{\mathrm{params}}
  2. 位宽B 是每个参数用多少比特表示。标准浮点模型用32位,即每个参数占4字节,就像每样食材都单独精装密封。
    Bbits\displaystyle B_{\mathrm{bits}}
  3. 除以 8因为1字节等于8比特,把总位数除以8就换算成字节数。好比把12个鸡蛋装进每盒6个的盒子里,问需要几盒。
    Nparams×Bbits8\displaystyle \frac{N_{\mathrm{params}} \times B_{\mathrm{bits}}}{8}
  4. 整式求值例如100万参数的模型,32位浮点占用 \(1000000 \times 32 / 8 = 4\) MB,远超典型MCU;若改成8位量化则只要1MB,勉强塞进小储物箱。
    Mbytes=1000000×328=4 MB\displaystyle M_{\mathrm{bytes}} = \frac{1000000 \times 32}{8} = 4\,\mathrm{MB}

1.3 关键算法:给菜谱做减法

为了让大厨的招牌菜能在迷你厨房复刻,我们有三把手术刀。第一把叫量化:很多食材其实不需要原产地特供,用普通面粉代替进口高筋粉,味道几乎不变,成本却低一大截。第二把叫剪枝:菜谱里有些香料从头到尾没派上用场,干脆删掉。第三把叫知识蒸馏:老板大厨不必亲自来摊位,他把毕生绝学浓缩成几句口诀传给学徒就够了。此外,还有专门为迷你厨房设计的轻量网络,比如MobileNet采用深度可分离卷积,天生就比传统网络更省料。

量化是TinyML最常用的压缩手段。它把连续的浮点权重映射到离散的整数上,比如32位浮点映射为8位整数。映射过程用一个简单的仿射变换表达:

三把手术刀各有绝活:量化把32位降到8位甚至1位,直接让模型小4倍甚至32倍;剪枝把接近0的连接直接移除,形成稀疏矩阵;蒸馏则让大模型当“师傅”,把软标签里的知识教给一个小模型。把这些招数组合使用,迷你厨房就能真正端出招牌蛋糕。

q=round(rs+z)\displaystyle q = \mathrm{round}\left(\frac{r}{s} + z\right)
一句话理解:原始浮点值 r 除以缩放因子 s,再加上零点偏移 z,最后四舍五入,就得到整数 q。这个过程把一个大范围内的值压缩到一个小范围内的台阶上。
  1. 原始值 rr 是模型中的原始浮点权重,范围通常在 [-1, 1] 或更宽。好比一块未经分割的整块黄油。
    r\displaystyle r
  2. 缩放因子 ss 是量化步长,等于浮点范围除以量化级数(比如256级)。每级台阶有多高,就由它决定。
    s=rmax⁡−rmin⁡28−1\displaystyle s = \frac{r_{\max} - r_{\min}}{2^{8} - 1}
  3. 零点偏移 zz 是浮点最小值对应的量化整数,保证0被正确表达。相当于把整块黄油的起点对准砧板上的刻度线。
    z=round(−rmin⁡s)\displaystyle z = \mathrm{round}\left(-\frac{r_{\min}}{s}\right)
  4. 四舍五入\(\mathrm{round}\) 把计算结果取到最近的整数,形成最终量化值 q。每次取整都会引入微小误差,但换来的位宽缩减非常可观。
    q=round(rs+z)\displaystyle q = \mathrm{round}\left(\frac{r}{s} + z\right)

1.4 性能优化:巧手快炒的秘诀

食材准备好了,接下来考虑烹饪效率。迷你厨房锅小灶小,但我们可以合理编排流程:提前把所有食材切好备好(内存预分配)、多个小工序合并成一步(算子融合)、按需调节火力大小(功耗管理),甚至用专用小工具提高切菜速度(推理加速)。推理延迟取决于总计算量和有效计算效率,表达式为:

算子融合把 Conv + BN + ReLU 三张“菜谱步骤”合并为一次遍历,中间结果不再写回内存;内存复用则让不同层的中间张量共享同一块SRAM缓冲区,把“备菜区”从几十KB压缩到几KB。正如优秀的摊主能同时煎蛋、翻面、装盘还不手忙脚乱——优化过的TinyML引擎在毫瓦级功耗下也能保持顺畅推理。

Tinfer=FLOPsCeff\displaystyle T_{\mathrm{infer}} = \frac{\mathrm{FLOPs}}{C_{\mathrm{eff}}}
一句话理解:推理耗时等于模型总计算量除以设备的有效计算速度。计算量越小、芯片算得越快,推理就越快。
  1. 总计算量FLOPs 是模型执行一次前向传播所需的浮点运算次数。好比一道菜需要切的土豆丝总数,切得越少越快。
    FLOPs\displaystyle \mathrm{FLOPs}
  2. 有效算力\(C_{\mathrm{eff}}\) 是设备实际能利用的计算能力,单位是每秒浮点运算次数(FLOPS)。它不等于理论峰值,因为访存带宽、算子调度都会打折扣。
    Ceff\displaystyle C_{\mathrm{eff}}
  3. 除法运算总计算量除以有效算力,就得到理论最短耗时。这好比用总土豆丝数除以每分钟能切的丝数,得出切完需要几分钟。
    FLOPsCeff\displaystyle \frac{\mathrm{FLOPs}}{C_{\mathrm{eff}}}
  4. 优化方向要让 T 变小,要么通过剪枝减少 FLOPs,要么通过算子融合和专用指令提升 \(C_{\mathrm{eff}}\)。TinyML工程师两条路都要走。
    Tinfer↓⇔FLOPs↓  或  Ceff↑\displaystyle T_{\mathrm{infer}} \downarrow \Leftrightarrow \mathrm{FLOPs} \downarrow \;\text{或}\; C_{\mathrm{eff}} \uparrow

1.5 工程部署:把菜谱印成小卡片

菜谱再精妙,也要写成小卡片放在摊位上,学徒才能照着操作。TinyML工程部署包含完整的工具链支持:TensorFlow Lite for Microcontrollers 负责把模型转换为微控制器可执行的格式,CMSIS-NN 为ARM Cortex-M提供优化的神经网络内核,Edge Impulse 则提供了从数据采集到固件导出的全流程平台。模型转换是其中的关键环节:把训练好的浮点模型量化并打包成C++数组,最后通过烧录器固化到MCU的Flash中。

部署完成后,我们关心优化到底带来多大收益。推理加速比可以直观衡量优化前后的性能差异:

部署还涉及端侧更新:产品发出去之后,模型还能通过OTA(空中下载)升级,相当于摊位打烊后偷偷换一张新菜谱,第二天客人吃到的就是改良版。工具链把训练、量化、编译、烧录串成一条流水线,让“从菜谱到上桌”的周期从几周缩短到几小时。

S=TbeforeTafter\displaystyle S = \frac{T_{\mathrm{before}}}{T_{\mathrm{after}}}
一句话理解:加速比等于优化前的推理耗时除以优化后的推理耗时。如果原来需要200ms,优化后只需50ms,加速比就是4倍。
  1. 优化前耗时\(T_{\mathrm{before}}\) 是原始模型在同一设备上的推理耗时。好比原来用笨办法切土豆丝要切10分钟。
    Tbefore\displaystyle T_{\mathrm{before}}
  2. 优化后耗时\(T_{\mathrm{after}}\) 是经过量化、剪枝或融合后的推理耗时。好比现在用切丝器1分钟搞定。
    Tafter\displaystyle T_{\mathrm{after}}
  3. 比值计算两者相除得到加速比 S。S 大于1表示变快,等于2就是快一倍。这直接反映优化手段是否奏效。
    S=TbeforeTafter\displaystyle S = \frac{T_{\mathrm{before}}}{T_{\mathrm{after}}}

1.6 典型应用:街角的小吃摊生态

当迷你厨房方法成熟后,它可以在无数个“街角”安家。工业监测场景中,传感器贴在马达上,实时分析振动频谱,一旦发现异常模式立刻报警——这就是预测性维护;智能家居中,语音芯片永远在听那句“你好,小助手”,本地完成关键词检测后才上传云端做复杂语义理解;健康医疗里,穿戴设备上的TinyML模型能监测心率异常,在手机不在身边时也能发出警报;农业环境中,太阳能供电的农田传感器识别害虫种类,只把告警信息通过窄带物联网发回管理平台。

端侧推理相比云端推理能为系统节省大量能耗。节省比例可以这样描述:

从工厂车间到田间地头,TinyML就像一套可复制的小吃摊模板:哪个街角需要智能,就摆一个迷你厨房过去,既不用大兴土木(建数据中心),也不用高薪请大厨(高功耗服务器),只需要一块小芯片,就能把AI的味道送到每个人身边。

Rsave=Ecloud−EtinyEcloud×100%\displaystyle R_{\mathrm{save}} = \frac{E_{\mathrm{cloud}} - E_{\mathrm{tiny}}}{E_{\mathrm{cloud}}} \times 100\%
一句话理解:能耗节省率等于云端推理耗能减去端侧推理耗能,再除以云端耗能。TinyML方案动辄节省80%以上能耗。
  1. 云端耗能\(E_{\mathrm{cloud}}\) 是把数据上传到云端并在服务器完成推理的总耗能,其中还包含无线传输的巨大开销。好比从摊位打电话叫大厨亲自跑来操作。
    Ecloud\displaystyle E_{\mathrm{cloud}}
  2. 端侧耗能\(E_{\mathrm{tiny}}\) 是在设备本地完成推理的耗能,通常只有前者的几十分之一。好比摊主自己按口诀现做,不惊动大厨。
    Etiny\displaystyle E_{\mathrm{tiny}}
  3. 差值计算两者相减就是省下的能量。这个值越大,说明端侧方案越有吸引力。
    Ecloud−Etiny\displaystyle E_{\mathrm{cloud}} - E_{\mathrm{tiny}}
  4. 百分比转化除以 \(E_{\mathrm{cloud}}\) 再乘100%,得到可横向比较的节省率。工业界常用这个指标评估TinyML改造ROI。
    Ecloud−EtinyEcloud×100%\displaystyle \frac{E_{\mathrm{cloud}} - E_{\mathrm{tiny}}}{E_{\mathrm{cloud}}} \times 100\%

AI 应用场景

工业设备预测性维护

阶段:推理部署 + 实时监测

解决的问题:传统工业设备维护依赖人工巡检或定期检修,往往在故障发生后才后知后觉。工厂的电机、风机一旦非计划停机,每分钟损失可达数千元。TinyML方案把振动分析模型部署在贴附于设备的智能传感器上,在设备端完成频谱特征提取与异常分类,只在检测到异常时才上报云端。

具体案例:某水泥厂在传送带电机上加装TinyML振动传感器,模型通过量化后仅占用32KB内存、功耗3毫瓦,由工业电池供电可运行三年。系统上线后成功提前48小时预测了三次轴承故障,将非计划停机时间减少70%。

智能家居语音唤醒

阶段:音频预处理 + 关键词识别

解决的问题:传统的智能音箱需要一直监听麦克风并等待云端返回指令,既耗电又泄露隐私。TinyML在设备本地运行一个关键词识别模型,只识别“你好”、“关机”等少量唤醒词,唤醒后再将整句语音上传云端。这大幅减少了无线传输次数,也降低了延迟与功耗。

具体案例:某智能灯具内置Cortex-M4芯片,运行一个18KB的唤醒词模型,整机待机功耗仅0.5毫瓦,唤醒率达到95%,误唤醒率低于每小时一次。用户语音不再被持续录音上传,隐私安全性显著提升。

可穿戴健康监测

阶段:生理信号处理 + 异常检测

解决的问题:心脏异常监测如果依赖云端分析,需要持续上传心电信号,不仅耗电巨大,还有网络中断导致监护真空的风险。TinyML让手环直接在心电信号上做心律失常分类,只需在检测到异常时发送通知,兼顾了续航与实时性。

具体案例:一款医疗级手环在STM32L4上部署了房颤检测模型,模型参数量12万,经过量化后占用120KB Flash、16KB SRAM。临床测试中,模型对房颤检测的灵敏度达到92%,手环单次充电可使用14天。

Python 演示

python38 行
import numpy as np def quantize_linear(weights, bits=8):    min_v, max_v = weights.min(), weights.max()    levels = 2**bits - 1    scale = (max_v - min_v) / levels    zero_point = np.round(-min_v / scale)    q = np.clip(np.round(weights / scale) + zero_point, 0, levels)    return scale, zero_point, q.astype(np.int32) def dequantize(scale, zero_point, q):    return scale * (q - zero_point) def compress_report(weights, bits):    scale, zero_point, q = quantize_linear(weights, bits)    requantized = dequantize(scale, zero_point, q)    mse = np.mean((weights - requantized) ** 2)    orig_bits = weights.shape[0] * weights.shape[1] * 32    tiny_bits = weights.shape[0] * weights.shape[1] * bits    print("权重范围: [{:.3f}, {:.3f}]".format(weights.min(), weights.max()))    print("量化步长 s = {:.6f}, 零点 z = {}".format(scale, zero_point))    print("压缩率: {:.2f}% ({} bit --> {} bit)".format(        100 * tiny_bits / orig_bits, 32, bits))    print("量化误差 MSE: {:.6f}".format(mse))    return q, requantized def memory_bytes(param_count, bitwidth):    return param_count * bitwidth // 8 if __name__ == "__main__":    np.random.seed(42)    demo_weights = np.random.randn(256, 64).astype(np.float32)    q, rt = compress_report(demo_weights, 8)    fp32_mem = memory_bytes(demo_weights.shape[0] * demo_weights.shape[1], 32)    int8_mem = memory_bytes(demo_weights.shape[0] * demo_weights.shape[1], 8)    print("FP32 模型内存: {:>6} B".format(fp32_mem))    print("INT8 模型内存: {:>6} B".format(int8_mem))    print("内存节省: {:.1f}%".format(100 - int8_mem / fp32_mem * 100))
目的:演示TinyML中量化压缩的核心数学过程——把float32权重映射到int8,并量化评估压缩率和精度损失。这对应正文“关键算法”章节的量化公式。
  1. quantize_linear(weights, bits=8)实现量化主体,对应公式 \( q = \mathrm{round}(r/s + z) \),把连续权重映射到有限整数台阶。
  2. scale = (max_v - min_v) / levels计算量化步长,相当于把浮点范围均匀切成255段。
  3. zero_point = np.round(-min_v / scale)计算零点偏移,保证0在量化空间中也有精确落点。
  4. np.clip(np.round(weights / scale) + zero_point, 0, levels)完成映射并截断到有效区间,防止越界。
  5. dequantize(scale, zero_point, q)反量化,把整数还原成浮点参考值,用于评估误差。
  6. compress_report打印压缩率和量化误差MSE,TinyML工程中这两个指标直接决定量化方案是否可接受。
  7. memory_bytes(param_count, bitwidth)对应正文公式 \( M = N \times B / 8 \),快速换算参数占用的存储空间。

常见误区

误区“TinyML在微控制器上完成AI训练,所以设备自己会不断学习进步。”很多初学者认为端侧AI设备和手机一样,能边用边学。

正解TinyML的绝大多数流程是“云端训练、端侧推理”。就像小吃摊的学徒不会自己研发新菜,而是按大厨写好的小卡片执行——模型在服务器上学好,经过量化压缩后烧录到设备上。设备只负责前向推理(应用知识),不负责反向传播(学习知识)。虽然学术界有设备端增量学习的探索,但受限于内存和算力,目前主流产品几乎都是纯推理。

为何常见:人们把“AI设备”和“人工智能学习”的自然联想放大了,误以为设备既然装了个神经网络,就应当能在本地学习新东西。

误区“从32位浮点压到8位整数,精度损失肯定不可接受。”初学者常把量化想象成无损压缩失败,担心模型“缩水”后变成傻瓜。

正解现代量化技术配合校准数据集,通常能把精度损失控制在1%以内。8位整数相对浮点的表示范围虽然粗糙,但神经网络的权重分布通常集中在一个狭窄区间,量化步长可以很精细。更激进的研究甚至用1位(二元)网络也能在部分任务上达到接近8位的精度。量化在TinyML中的地位就像用普通面粉替代进口面粉——专业配方下,客人几乎吃不出区别。

为何常见:直觉上觉得“数字越小越不精确”,忽略了神经网络本身有很强的冗余性和抗噪能力。

误区“TinyML就是个迷你图像分类器,顶多识别个猫猫狗狗。”这种认知把TinyML和玩具划等号。

正解TinyML覆盖时间序列分析、音频关键词识别、异常检测、回归预测等多种任务。工业振动监测做的是回归或一类分类,语音唤醒做的是关键词分类,心电监测做的是序列标注——图像分类只是其中很小一块。就像迷你厨房不只做蛋糕,也能烤饼干、蒸包子、煎鸡蛋。

为何常见:TinyML教程常拿MNIST图像分类做demo,给人留下“只能分类图像”的刻板印象。

误区“压缩了4倍,推理速度肯定也慢了4倍。”初学者常把模型大小和推理速度直接挂钩。

正解模型更小通常意味着内存访问更少、缓存命中率更高,配合算子融合和指令优化,推理速度反而可能比未压缩时更快。TinyML的优化目标是“小而不慢”:剪枝减少了计算量,量化让乘加运算可以用更高效的定点指令完成,最终推理时间往往是下降的。

为何常见:人们误以为压缩模型是“削掉能力”,忽略了性能优化手段可以同时减小体积和提升速度。

面试题

Q1. TinyML模型通常在哪个阶段完成“训练”?

单选题 · easy

  • A.设备端实时训练
  • B.云端服务器训练← 正确答案
  • C.手机端离线训练
  • D.本地边缘训练

答案:B。TinyML遵循“云端训练、端侧推理”的主流范式。设备端内存和算力有限,难以支撑反向传播所需的存储开销(激活值、梯度)。训练阶段在云端完成,设备只负责加载压缩后的模型做前向推理。

Q2. TinyML中量化压缩的主要做法是?

单选题 · easy

  • A.增大输入图像尺寸
  • B.降低参数位宽精度← 正确答案
  • C.增加网络层数量
  • D.使用更复杂激活

答案:B。量化把32位浮点权重映射为8位甚至1位整数,从而大幅缩减模型体积和内存访问量。增大输入尺寸、增加层数、使用复杂激活函数都会让模型更“胖”,与量化目标背道而驰。

Q3. TinyML 设备常见约束包括?

多选题 · mid

  • A.内存容量小← 正确答案
  • B.功耗预算低← 正确答案
  • C.算力峰值高
  • D.存储空间小← 正确答案

答案:ABD。微控制器的典型约束是SRAM内存小(几十KB)、Flash存储小(几百KB)、功耗预算低(毫瓦级)。“算力峰值高”恰恰是TinyML不具备的条件,也正因算力有限才需要做模型压缩和推理加速。

Q4. 知识蒸馏的核心过程是?

单选题 · mid

  • A.用大模型教小模型← 正确答案
  • B.用小模型教大模型
  • C.用更多数据扩增
  • D.用退火训练网络

答案:A。知识蒸馏让一个参数量大的教师模型(大模型)输出软标签,把类别间的相似性信息传递给参数量小的学生模型(小模型),使小模型模仿大模型的行为。这是“大厨带学徒”思路的算法版本。

Q5. 模型剪枝能带来哪些好处?

多选题 · mid

  • A.减少模型参数量← 正确答案
  • B.降低设备端功耗← 正确答案
  • C.提升推理延迟
  • D.减少内存占用量← 正确答案

答案:ABD。剪枝移除冗余连接使参数更稀疏,模型更小、内存占用更少,推理时计算量下降,功耗随之降低。“提升推理延迟”是把延迟变大,属于负面效果,与剪枝目标相反。

Q6. int8 模型相比 float32 模型在嵌入式设备上的好处是?

单选题 · mid

  • A.模型精度显著提升
  • B.占用内存大幅降低← 正确答案
  • C.训练速度明显加快
  • D.数据收集更加容易

答案:B。int8每个参数只占1字节,而float32占4字节,内存占用降为原来的四分之一。精度通常几乎不变(而非提升),训练速度和数据收集与推理模型无关。

Q7. 关于算子融合的说法正确的是?

多选题 · hard

  • A.减少中间张量存储← 正确答案
  • B.降低内核启动开销← 正确答案
  • C.增加整体推理时延
  • D.提升内存访问效率← 正确答案

答案:ABD。算子融合(如Conv+BN+ReLU合成一个算子)避免中间结果写回内存,减少了中间张量存储和内核启动次数,内存访问局部性更好,因此推理延迟下降而非增加。

Q8. TinyML 部署流程的正确顺序是?

单选题 · easy

  • A.训练→量化→转模型→烧录← 正确答案
  • B.量化→训练→烧录→转模型
  • C.转模型→训练→量化→烧录
  • D.烧录→量化→转模型→训练

答案:A。标准部署顺序是先在云端训练模型,再量化压缩为8位整数格式,然后转换为目标平台支持的模型文件(如TFLite Micro),最后编译烧录到MCU。其他顺序颠倒了逻辑关系。

Q9. 内存复用优化的核心目标是让推理过程?

单选题 · hard

  • A.申请更少临时缓冲区← 正确答案
  • B.申请更多常驻内存
  • C.缓存所有中间结果
  • D.避免任何数据复用

答案:A。内存复用让不同层共享同一块缓冲区,而非每层各申请一块独立内存,从而把峰值内存压缩到最小值。“缓存所有中间结果”和“避免数据复用”都与内存复用本意相悖。

Q10. 某模型含 80 万参数,int8 量化后权重占多少内存?

单选题 · extreme

  • A.8 兆字节
  • B.0.8 兆字节← 正确答案
  • C.80 兆字节
  • D.0.08 兆字节

答案:B。int8即每参数1字节,80万参数占用80万字节 ≈ 0.8兆字节(MB)。若用float32,则占用3.2MB,这就是量化压缩带来的四倍差距。公式是 \( M = N \times B / 8 \)。