嵌入式 NPU 架构与算子优化实战:从内存带宽到 INT8 部署

前言:为什么同一个模型在不同 NPU 上差距很大? 做嵌入式 AI 部署时,很多人第一次拿到 NPU 板卡都会有一个误解:只要芯片宣传页写着 1TOPS、6TOPS 或 10TOPS,模型就应该按照这个数字线性变快。实际项目里经常不是这样。同样一个 YOLO、MobileNet 或语音关键词模型,在 A 芯片上跑得很顺,在 B 芯片上却卡在某几个算子;同样是 INT8 量化,有的模型精度几乎不掉,有的模型会出现明显误检;同样是官方转换工具,有的网络一键通过,有的网络需要反复改 ONNX 图、替换算子、拆分子图。 这些问题并不神秘,本质上是 NPU 的计算阵列、片上 SRAM、DMA、数据布局、编译器和运行时之间存在非常强的耦合。CPU 代码慢了,我们通常先看热点函数;GPU 程序慢了,会看 kernel occupancy、显存访问和线程块;NPU 部署慢了,也要有类似的分析框架:先判断瓶颈是算力、带宽、算子支持、量化误差,还是 CPU/NPU 之间的调度开销。 本文从工程视角拆解嵌入式 NPU 的典型架构,并围绕一个真实部署流程展开:模型导出、图优化、量化校准、算子映射、内存规划、运行时流水线和性能排查。文章不绑定某一家芯片,但会覆盖 RK、Amlogic、Kendryte、寒武纪边缘模块以及很多 MCU 级 NPU 都会遇到的共性问题。读完后,你应该能判断一个模型为什么没有跑满 NPU,也能知道该从哪里下手优化。 一、先把 TOPS 的含义说清楚 TOPS 是每秒万亿次操作数,通常用于描述 INT8 乘加能力。例如一个 2TOPS 的 NPU,理论上每秒可以完成 2 万亿次 8 bit 整数运算。问题在于,这个数字往往是理想条件下的峰值:输入输出都在合适的数据布局中,算子可以完全映射到矩阵乘阵列,片上缓存命中率足够高,DMA 搬运没有拖后腿,调度器没有频繁切换任务。 在实际模型里,真正能高效利用 NPU 的通常是卷积、深度卷积、全连接、矩阵乘、部分池化和激活函数。很多看起来不起眼的操作,例如 Reshape、Transpose、Slice、Gather、Resize、NonMaxSuppression,如果不能被 NPU 原生支持,就可能回退到 CPU。一次 CPU 回退不仅带来计算时间,还可能带来缓存同步、数据格式转换和内存拷贝。模型中只要有几个这样的“断点”,端到端延迟就会明显变差。 评估 NPU 时,比 TOPS 更有价值的是下面几个指标:...

June 5, 2026 · 5 min · 👁️ 0 · Tech Snippets