TinyML模型部署最佳实践:故障恢复与容错
去年冬天调试一个智能电表项目,设备在东北某变电站运行三天后集体“失忆”——模型推理结果突然全部归零,看门狗复位日志堆了满屏。现场工程师反馈说设备没断电,但模型参数就像被风吹走了一样。拆开外壳,用示波器抓Flash写入时序,发现是低温环境下电源纹波导致模型参数写入时CRC校验失败,而我们的容错代码居然直接跳过了异常处理,把全零参数加载进了推理引擎。
那次之后,我彻底重构了TinyML部署的容错机制。今天把这些踩过的坑摊开来讲。
模型加载阶段的“三明治”校验
很多教程教你在Flash里存模型参数,上电直接memcpy到RAM。这种写法在实验室恒温恒湿环境能跑,到了工业现场就是定时炸弹。我现在的做法是在模型存储区前后各加一个16字节的魔法数(Magic Number),类似三明治的上下层面包片。
// 模型存储结构体,别用默认对齐,这里踩过坑#pragmapack(push