ST意法半导体
直播中

张桂英

8年用户 1601经验值
私信 关注
[问答]

请问STM32N6 cubeAI部署时用的内存是在内部还是外部?

STM32N6用cube AI部署模型的时候,用n6-allmems-O3之后analyse得到了RAM和FLASH的内存占用,这里展示的内存占用都是指的是芯片内部的存储器吗

回帖(1)

龙献益

2025-6-9 18:10:26

你的理解基本正确,但需要区分默认报告的含义和实际情况:



  1. Cube.AI analyse 命令报告的内存占用指的是芯片内部存储器(Internal Memory)的需求。

  2. 具体解释:

    • Cube.AI 分析的默认目标:当你在 CubeMX 或通过命令行运行 Cube.AI 的 analyse(或 benchmark)时,它计算的是目标芯片本身(这里是 STM32N6)运行该 AI 模型所需的最小内部 SRAM 和 Flash 空间

    • n6-allmems-O3 的作用:这是一个 Cube.AI 特有的优化配置标志 (Optimization Profile)。n6 指定目标器件系列 (STM32N6)。allmems 指示分析器考虑使用芯片内部所有可用的存储块以获得最优性能(尤其是为了充分利用 NNA 加速器)。O3 代表最高的代码优化级别。这个配置的目标就是在只使用内部存储资源的情况下,找到运行该模型的最优内存布局和占用大小。

    • 报告中 RAM 的含义:报告中的 RAM (通常是 Runtime Memory 的缩写) 指的是模型运行时所需的易失性内存。对于 STM32N6,这主要指的是:

      • 内部 SRAM:这是报告 RAM 值的主要考虑对象。模型权重加载后的活动区(通常映射到 RAM 中)、激活值(层间计算结果,存储在 RAM 中)、以及AI框架本身(NanoEdgeAI 库/CMSIS-NN库等)的运行栈和堆都需要内部 SRAM。NNA 的执行也需要数据在内部 SRAM 中以保证高效访问。

      • 可能包含的少量CCMRAM/DTCM等 (如果芯片有):STM32N6 内部可能有不同分区或专用 SRAM 块(如 DTCM - 紧耦合内存,CCMRAM - 内核耦合内存)。allmems 策略会尽可能利用这些内部资源,报告的总 RAM 是这些内部易失性存储总和的需求。


    • 报告中 Flash 的含义:指的是存储以下内容的非易失性存储器

      • AI 模型本身:经过 Cube.AI 转换和优化后的神经网络结构信息(拓扑结构)和量化后的权重

      • Cube.AI 运行时库代码:在 STM32N6 上执行推理的软件库(如用于预处理/后处理或者非 NNA 支持层执行的 NanoEdgeAI / CMSIS-NN 代码)。

      • 你的应用程序代码:调用 AI 库进行推理的主程序逻辑。

      • 这部分在报告中默认指向内部 Flash 存储器的需求。



  3. 关于外部存储器的关键说明:

    • 默认分析不包括外部 RAM/Flash: 标准的 Cube.AI analyse / benchmark 报告不会自动计算或显示模型对外部存储器(如 SDRAM, QSPI Flash, SD Card)的需求或占用。它假设所有需要的资源都在芯片内部(就像 allmems 配置所追求的)。

    • 外部存储器是 选项 当你的模型太大,无法完全放入内部 SRAM(例如权重或激活值特别大的模型)或内部 Flash(放不下模型权重或你的整个应用固件)时,你才需要额外考虑使用外部存储器。

    • 使用外部存储器需要手动配置和成本:

      • 权重存储在外部 Flash: 可以将权重存放在外部 Flash(如 QSPI NOR Flash),在启动时或推理前加载到内部 RAM 中(或者利用 MPU/MMU 进行动态加载)。这会增加启动/推理延迟,需要额外的加载代码配置。

      • 激活值存储在外部 RAM: 如果激活值太大,可以使用外部 SDRAM。但这会显著降低推理速度,因为外部 RAM 的访问速度远低于内部 SRAM(尤其是对于 NNA,其通常依赖低延迟的内部存储器),并增加功耗。也需要配置外部 RAM 控制器。对于追求性能的场景(尤其是在使用 NNA 时),通常极力避免将激活值放在外部 RAM。

      • Cube.AI 不会为外部存储器自动优化: analyse 报告不会告诉你在使用外部存储器后的占用情况。你需要自己在 CubeMX 中配置外部存储器外设,修改链接脚本 (.ld),并且可能需要修改 Cube.AI 生成的代码(例如,实现权重加载逻辑)。这会增加开发复杂度和运行开销。




总结:



  1. 对 STM32N6 运行 Cube.AI analyse 命令(特别是使用 n6-allmems-O3 优化配置)后得到的 RAM 占用报告值,主要针对的是芯片内部 SRAM (可能包括不同块如 DTCM, CCMRAM)

  2. 得到的 Flash 占用报告值,针对的是芯片内部 Flash 存储器

  3. 报告中的占用数值,是在仅使用芯片内部存储资源的前提下,运行该模型所需的最低需求估算(由 AI 库和优化器计算得出)。

  4. 外部存储器(SDRAM, QSPI Flash等)不属于默认分析范围。 使用外部存储器是为了扩展内部存储容量的不足(权重太大或激活太大),但这需要你自行配置硬件、软件(驱动、链接脚本)和逻辑(权重加载),并且通常会牺牲性能(尤其是使用外部RAM存放激活值)或增加启动延迟(从外部Flash加载权重到RAM)。Cube.AI 的 analyse 报告本身不会显示这部分外部存储器的占用需求。


因此,在你看 analyse 报告时,基本可以放心地认为它展示的是目标 STM32N6 芯片内部存储资源(SRAM和Flash)的占用情况。 如果你发现占用接近或超过了芯片内部资源的限制(例如 RAM 接近或超过 256KB - 需要查你具体型号的数据手册),那么你就需要考虑模型优化(如更小的网络结构、量化、裁剪)、升级芯片型号(选择 SRAM/Flash 更大的 STM32N6),或者在性能和延迟上做妥协去使用外部存储器了。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分