地平线X5会展示内存相关信息嘛

地平线X5会展示内存相关信息嘛

会。X5 上可以直接在板端终端看,常用三组:

free -h                 # 系统可用/已用内存
top                     # 或 htop,看进程内存占用
cat /proc/iomem         # 系统内存分配,含设备树保留区

要注意 free 显示的可用内存已扣除保留内存:X5 设备树默认保留约 1150MB,其中 CMA 382MB、ION 768MB,用于多媒体/BPU 等模块,划分见 Linux 系统内存使用情况。另外 hrut_somstatus 在 X5 上主要输出温度和 CPU/BPU 频率、BPU 负载,不是完整的内存明细。

你是想看系统剩余内存,还是想确认 BPU/ION 这类保留内存的实际占用?后者可以再按 cat /proc/iomem 里的区间对照。

我想知道的是模型编译出来占用的workspace codesize这种有没有

有相关指标,但官方没有直接叫 workspace / code size 的单独字段。X5 上能拿到的是这些:

  1. 模型文件大小:ls -lh ${working_dir}/*.bin。bin 就是上板加载的模型,文件大小可作为加载占用的量级参考。
  2. 静态分析(最接近你要的口径):hb_perf xxx.bin,结果在 hb_perf_result/<模型名>/<模型名>.html。主页面有 Total DDR (loaded+stored) bytes per frame,子图有 DDR Occupation,Layer Details 里有 aligned output shape,可作中间特征图/workspace 规模的参考(需要 yaml 里 debug: True,默认就是 True)。注意这是单帧 DDR 读写量,不等于 workspace 峰值。
  3. 板端看模型信息:hrt_model_exec model_info --model_file=xxx.bin 只输出输入输出张量属性,不含内存占用字段。

也就是说,workspace 峰值没有现成的查询命令,只能按 hb_perf 的 shape 和 DDR 量估算,或在推理运行时看进程内存增量。你是要做上板内存预算,还是想看编译时的内存峰值?

有没有模型内存消耗信息 ?

编译产物里没有这类字段:.bin 只是模型本身,hb_mapper 日志和 hrt_model_exec model_info 都不输出 workspace/codesize 或内存峰值。能给的静态口径是 hb_perf 的单帧 DDR 读写量和各层 shape,那是访存量,不等于 workspace 峰值。

如果问的是上板运行时模型实际吃掉多少内存,可以从 ION 侧直接看。X5 的三个 ION 区域里 carveout 主要就是给 BPU 用的:

sudo cat /sys/kernel/debug/ion/heaps/carveout

先在模型加载前读一次做基线,进程起来、推理跑起来后再读一次,对比末尾的 total 和各 client 分配行的增量,就是该模型在 BPU 侧实际申请的 ION 内存(含输入输出及中间 buffer,属运行时口径)。前提是 root 权限且 debugfs 已挂载;该路径不存在说明当前镜像没开 ion debugfs。字段含义和 client 维度查看见 ION 系统调试指南,区域划分见 Linux 系统内存使用情况。

你这个数是要填内存预算表,还是排查某次推理内存涨得异常?两种情况看的指标不一样。

  1. 模型运行时内存分析,包含总的运存大小、系统内存大小、feature map 大小统计等等;有没有这个 ?

没有。官方没有一个命令能一次性输出“总运存 / 系统内存 / feature map 逐层大小”的完整报告,这三项要分三个口径拼:

  1. 系统总量:free -h、/proc/meminfo 的 MemTotal。注意 free 已扣掉设备树保留区,X5 默认保留约 1150MB(CMA 382MB、ION 768MB),所以它不等于物理 DDR 总量,见 Linux 系统内存使用情况。
  2. 模型运行时占用(BPU 侧总量):就是上一条说的 carveout 加载前后增量,这是唯一能直接读到模型实际吃掉多少 ION 的口径。hrt_model_exec perf --profile_path 只产出 FPS、各节点/处理器耗时(见 hrt_model_exec 工具介绍),不含任何内存字段。
  3. feature map 逐层统计:没有运行时统计工具,只能静态侧算——hb_perf 的分层 aligned output shape,或用 hrt_model_exec infer --dump_intermediate=1 把每层节点输入输出按 bin 导出(BPU 节点为 aligned 数据),再按文件大小看每层对齐后 buffer 规模。

第 3 条要特别注意:逐层文件大小之和不是 workspace 峰值,各层 buffer 是复用/分时驻留的,峰值只能靠 ION 增量实测顶住。你是要做内存预算表(那按第 2 条实测值 + 余量),还是要定位某一层特别占内存?后者可以结合 dump 出来的单层大小和 hb_perf 的 Layer Details 对照看。

hrt_bpu_monitor (或 hrut_somstatus, bpu_predict_xN_sample 这个工具在哪 ??

这三个名字出自 X5 FAQ 工具链 Q14 的一段并列举例,不是三个都能在 X5 上跑的可执行文件:

  • hrt_model_exec:镜像自带,板端 which hrt_model_exec(通常在 /usr/bin)。子命令 model_info / infer / perf,用法见 hrt_model_exec 工具介绍。
  • hrut_somstatus:X5 可执行,sudo hrut_somstatus,输出温度、CPU/BPU 频率、BPU 负载,见 hrut_somstatus 命令说明。
  • hrt_bpu_monitor、bpu_predict_xN_sample:X5 上没有这两个名字,前者是那段 FAQ 里的笼统称呼,后者是早期 X3 OE sample 的命名,对应功能在 X5 上由 hrt_model_exec perf 和 hrut_somstatus 承担。

板端一次性确认是否装了:

which hrt_model_exec hrut_somstatus
ls /usr/bin /opt/hobot/bin 2>/dev/null | grep -E '^(hrt|hrut)_'

找不到就说明该镜像没预装,按 Q14 的说明从算法工具链包的 board 目录拷过来。提醒一句:这几个都不输出内存字段,上一条说的 ION carveout 增量仍是模型运行时内存的唯一直接口径。