2. STM32N6硬件与AI加速基础
要在STM32N6上做多模型推理调度,第一步不是写调度器,而是把“硬件账本”算清楚:算力从哪来、数据放在哪、带宽够不够、外设能不能同时喂饱多个模型。STM32N6的AI能力并非单一模块堆叠,而是由Neural-ART NPU、Cortex-M55、多级内存与一组高速外设共同构成的流水线。任何一环成为瓶颈,多模型并发都会退化成串行等待。
一、Neural-ART NPU:算力主体与调用边界
Neural-ART是STM32N6中专门面向神经网络推理的加速器,官方给出的峰值算力约为600 GOPS(INT8,@1 GHz量级,具体随型号与时钟配置变化)。它并不是“通用DSP”,而是围绕卷积、矩阵乘、激活等算子做数据流优化的固定功能阵列。理解它的关键有三点:
- 算子覆盖有限:NPU擅长Conv、Depthwise Conv、MatMul、常见激活(ReLU/ReLU6/Sigmoid近似)与池化;遇到自定义算子、动态Shape、复杂控制流,往往要回退到Cortex-M55或CPU端预处理。
- 数据必须“喂得进”:NPU的利用率高度依赖输入张量是否已在可访问的SRAM区域、是否满足对齐与布局要求(如NHWC、通道对齐)。布局转换本身会消耗CPU周期与带宽。
- 一次一个上下文:NPU通常以“模型/子图”为粒度执行,多模型并发时需要在时间上分时复用,或在图级别切分后交替提交。调度器要管理的是NPU的“占用窗口”,而不是假设它能同时跑两个网络。
因此,多模型推理的第一条硬件约束是:NPU是稀缺的串行资源。调度策略必须围绕“谁先占NPU、占多久、何时让出”来设计。
二、Cortex-M55:控制、预处理与回退执行
Cortex-M55是主控核心,带Helium(MVE)向量扩展,能高效处理定点/浮点向量运算。它在AI流水线中承担四类工作:
- 前后处理:图像缩放、归一化、颜色空间转换、NMS、解码等,这些通常不适合NPU,却占大量周期。
- 算子回退:NPU不支持的层由M55执行,形成“NPU+M55混合图”。
- 调度与同步:中断响应、DMA搬运、模型切换、状态机管理。
- 小模型/轻量任务:参数量很小的模型直接跑在M55上可能比“搬运到NPU再搬回”更划算。
关键判断是:不要把所有模型都塞给NPU。一个典型的多模型系统里,可能一个检测模型跑NPU,一个关键词识别小模型跑M55,二者通过时间片与优先级协调。
三、内存层次:带宽与容量的双重约束
STM32N6的内存层次直接决定多模型能否“同时驻留”。典型层次包括:
- 紧耦合内存TCM:靠近内核,低延迟,适合放关键代码、栈、频繁访问的小张量。
- 片上SRAM:容量较大,是NPU与M55共享的主工作区,权重、激活、输入输出缓冲区都在这里竞争。
- 外部存储(如HyperRAM/Octal Flash):容量大但带宽与延迟明显劣于片上,适合放不常换的权重或大帧缓冲,但频繁访问会拖垮实时性。
多模型并发的核心矛盾是:多个模型的权重+激活+输入输出缓冲区之和,是否超过可用片上SRAM。假设两个INT8模型:模型A权重1.2 MB、激活0.4 MB;模型B权重0.8 MB、激活0.3 MB;输入输出各0.2 MB。若全部常驻,需要约3.1 MB。若片上可用SRAM只有2 MB,就必须做权重的按需加载或模型切换,而切换本身会引入外部存储读取延迟。
四、外设接口:数据入口与并发瓶颈
多模型推理的输入往往来自摄像头、麦克风、传感器。STM32N6常见相关外设有DCMI/CSI、I2S/SAI、SPI、UART、SDMMC以及DMA控制器。它们决定“数据能不能按时到”。
以视觉+音频双模型为例:摄像头以30 fps输出RGB565 640×480,单帧约600 KB,折算约18 MB/s;音频以16 kHz、16 bit、单声道持续输入,约32 KB/s。两者带宽差距巨大,但都依赖DMA搬运到SRAM。若DMA通道、SRAM端口或总线仲裁被摄像头占满,音频就可能丢帧。调度器需要为不同外设分配DMA优先级与缓冲区,避免“大流量饿死小流量”。
五、多模型推理的硬件约束总览
把上述要素放在一起,可以得到一张“资源—约束—调度动作”的关系图。下图不是流程步骤,而是帮助你在设计调度器前,先看清各硬件模块之间的数据流与竞争关系。
六、从约束到调度设计
基于以上硬件事实,多模型推理调度器至少要做四件事:
- 资源建模:为每个模型记录权重大小、激活峰值、NPU占用时长估计、CPU前后处理周期、输入输出缓冲区大小。
- 驻留决策:决定哪些模型常驻SRAM、哪些放外部存储、哪些按需加载;常驻集合必须满足SRAM预算。
- 时间片与优先级:NPU按时间片轮转或按优先级抢占;高实时性模型(如安全检测)优先,低优先级模型可降帧。
- 数据通路隔离:为不同外设分配DMA通道与双缓冲,避免摄像头与音频互相阻塞。
一个可参考的示例参数表如下(数值为教学假设,非实测):
| 模型 | 权重 | 激活峰值 | NPU占用估计 | M55前后处理 | 驻留策略 |
|---|---|---|---|---|---|
| 目标检测 A | 1.2 MB | 0.4 MB | 8 ms/帧 | 3 ms | 常驻SRAM |
| 关键词识别 B | 0.3 MB | 0.1 MB | 1 ms/帧 | 0.5 ms | 常驻SRAM |
| 场景分类 C | 2.5 MB | 0.6 MB | 12 ms/帧 | 4 ms | 外部存储+按需加载 |
若SRAM预算为2 MB,A+B常驻约2.0 MB(含缓冲),C只能按需加载。调度器在C执行前需从外部存储预取权重,预取时间若为6 ms,则C的实际周期约18 ms。此时若A要求30 fps(33 ms周期),B要求持续低延迟,就需要把C安排在A的帧间空隙,并允许C降帧到10 fps。这就是“硬件约束驱动调度策略”的具体含义。
掌握这些硬件边界后,后续的模型量化、内存布局、DMA配置与调度策略才有明确的优化目标:不是追求单个模型最快,而是让多个模型在NPU、M55、SRAM与DMA之间稳定共存。