192、NPU的编译器开发:现场可升级性(FOTA) 192、NPU的编译器开发:现场可升级性(FOTA)去年夏天,凌晨两点,我在调试一块部署在无人配送车上的NPU板卡。客户反馈说车辆在特定路口会突然“发呆”——视觉识别延迟从15ms飙升到120ms。我远程连上去,翻看NPU的寄存器状态,发现卷积加速器的权重加载单元卡死在一个非法地址上。更诡异的是,同样的固件在实验室跑了一周都没问题。后来查出来,是NPU编译器生成的指令序列里,有一条DMA传输的源地址对齐方式,和芯片新版本的硬件勘误表冲突。而这块板卡出厂时烧录的固件,是三个月前编译的。问题在于——我们没法让客户把车开回工厂刷机。这就是NPU现场可升级性(FOTA)要解决的核心矛盾:芯片在迭代,算法在进化,但部署在边缘的设备不能拆。编译器视角的FOTA,不是简单的“远程烧写”很多人以为NPU的FOTA就是OTA升级固件,把新的二进制文件通过网络灌进去。如果只是这样,那和MCU的IAP升级没区别。NPU编译器要处理的FOTA,有三个层次:第一层:指令集兼容性。芯片的微架构可能通过ECO(工程变更)修复了某个bug,比如修改了卷积指令的累加器行为。编译器生成的旧二进制,在新芯片上可能触发硬件异常。反过来,新编译器生成的指令,如果用了新引入的硬件特性(比如稀疏化加速),旧芯片根本不认识这个opcode。第二层:内存布局迁移。NPU的本地SRAM、权重缓冲区、激活值缓冲区,在不同固件版本里可能重新划分。比如v1.0版本给卷积层分配了256KB权重空间,v2.0因为引入了深度可分离卷积,权重空间压缩到128KB