IPU ToolKit 程序说明¶
1. 功能场景介绍¶
IPU ToolKit 包含三个独立的工具程序,面向 IPU模型的调试、远程推理以及性能监控场景。
| 工具 | 功能描述 | 源文件目录 |
|---|---|---|
| dla_show_img_info | 模型信息查看 - 离线查看 IPU 模型的详细结构与性能参数 | sdk/verify/release_feature/source/dla/dla_show_img_info |
| ipu_server | 远程推理服务 - 启动 RPC 服务端,供客户端远程调用 IPU 硬件进行模型推理 | sdk/verify/release_feature/source/dla/ipu_server |
| ipu_utilization | IPU 使用率监控 - 实时统计 IPU 核的工作时长与使用率百分比 | sdk/verify/release_feature/source/dla/ipu_utilization |
2. 编译环境说明¶
2.1 编译环境设置¶
在项目根目录下设置 arm64 编译环境:
export PATH=/tools/toolchain/aarch64-unknown-linux-gcc-12.4.0-glibc-2.37-gnu/bin:$PATH
export CROSS_COMPILE=aarch64-unknown-linux-gnu-12.4.0-
export ARCH=arm64
cd project
make linux-comake_mhera.emmc.glibc-12.4.0-arm64-ext4.d3.4096.fccsp16_lpddr4x_defconfig
如果选用2GB的ddr,defconfig可以使用 linux-comake_mhera.emmc.glibc-12.4.0-arm64-ext4.d3.2048.fccsp16_lpddr4x_defconfig
2.2 编译命令¶
# 编译整个project
cd project
make clean;make image -j16
# 编译 IPU ToolKit
cd sdk/verify/release_feature/source
make dla
# 编译完成后,三个工具生成在 out/arm64/app 目录下:
# - prog_dla_show_img_info (dla_show_img_info)
# - prog_dla_server (ipu_server)
# - prog_ipu_utilization (ipu_utilization)
2.3 编译产物¶
prog_dla_show_img_info可执行文件位于out/arm64/app目录下prog_dla_server可执行文件位于out/arm64/app目录下prog_ipu_utilization可执行文件位于out/arm64/app目录下
3. 运行环境说明¶
所有 IPU ToolKit 工具均运行在 SGS 系列芯片平台上,依赖 MI (Module Interface) 系统驱动,需要 IPU 硬件模块已正确加载。
3.1 硬件要求¶
- 开发板: Comake PI D3
4. 运行说明¶
4.1 模型信息查看 - dla_show_img_info¶
4.1.1 运行指令¶
# 基本用法
./prog_dla_show_img_info -m <model_path> [选项]
# 命令行参数
-h, --help 显示帮助信息
-m, --model 模型文件路径(必选)
多个模型使用逗号分隔
--details_info 显示详细模型信息,包括 /proc/mi_modules/mi_ipu/mi_ipu0 内容(可选,默认关闭)
--batch 批处理大小(可选,默认 1)
--subnet 子网络索引(可选,默认 0),多子网模型可指定查看特定子网
--ipu_log IPU Log 保存路径(可选),设置后将导出 IPU Log 文件
--ipu_log_size IPU Log Buffer 大小(可选,默认 0x800000)
4.1.2 使用示例¶
终端输出验证:
程序成功执行后,终端会打印如下格式的信息:
model.img(0):
Invoke Time: 12.345 ms
IPU Time: 10.123 ms
BandWidth: 15.678 MB / frame
Variable size: 2.345 MB
Work mode: single_core
Batch mode: n_buf
Setting batch: 1
Suggest batch: [1, 2, 4, 8, 16, 32]
Model type: AICOMMON
Input(0):
name: input_1
dtype: UINT8
shape: [1, 3, 640, 352]
size: 675840
layout: NCHW
Output(0):
name: output_1
dtype: INT16
shape: [1, 255, 20, 11]
size: 112200
layout: NCHW
quantization: (0.0039, -128)
- Invoke Time: 板端Invoke API耗时。板端Invoke API耗时包含:CPU驱动IPU工作耗时,IPU Time,模型输出数据同步DRAM耗时等。
- IPU Time: IPU硬件耗时。
- BandWidth: 模型运行一次访问DRAM的数据量。
- Variable size: 模型运行时需要申请的运行内存。多个模型可以共享该内存,因此需要选用多个模型中最大的Variable size。
- work_mode: 模型单核/双核模式信息。
- Batch mode: 模型Batch模式信息。
- Setting batch: 转换离线模型时设置的batch值。
- Suggest batch: 离线模型内部包含的batch值。
IPU Log 导出验证:
如果设置了 --ipu_log 参数,在指定目录下将生成以下文件:
- {模型名}_log_core0.bin - IPU 核心日志
- {模型名}_log_corectrl0.bin - IPU 核心控制器日志
这两个文件可配合 IPU SDK 中的分析工具使用,转换为 JSON 后在 Chrome 浏览器中查看各层性能耗时占比。
4.2 远程推理服务 - ipu_server¶
4.2.1 运行指令¶
4.2.2 使用示例¶
- 板端运行ipu_server开启RPC服务(PORT为设定的port号)
- PC端运行simulator.py
python3 SGS_IPU_Toolchain/Scripts/calibrator/simulator.py \
-i /path/to/input_data \
-m /path/to/offline.img \
-n /path/to/preprocess.py \
--host 板端ip地址 \
--port PORT \
--soc_version CHIP
3.详细步骤可参考IPU Thoolchain用户手册的模型推理
终端输出验证:
服务启动后,终端会显示上述信息,表示服务已就绪,等待客户端 RPC 调用。
4.3 IPU 使用率监控 - ipu_utilization¶
4.3.1 运行指令¶
4.3.2 使用示例¶
终端输出验证:
- 空闲时:使用率接近 0%
- 推理中:使用率显著上升,数值取决于推理频率和模型复杂度
补充信息:
- 查看当前 IPU 时钟频率:cat /proc/mi_modules/mi_ipu/debug_hal/freq
- 当前芯片只有一个 IPU 核,只需关注 core0 的数值
5. 常见问题¶
5.1 IPU 驱动相关问题¶
无法打开 /proc/mi_modules/mi_ipu/ 目录:
- 现象:执行工具时报错,无法访问 IPU 相关 proc 文件
- 原因:IPU 驱动未正确加载
- 解决方案:
5.2 模型加载相关问题¶
模型加载失败:
- 现象:
MI_IPU_CreateCHN返回错误码 - 原因:模型文件路径不正确、文件格式不匹配、Variable Buffer 不足
- 解决方案:
- 确认模型文件路径正确
- 检查模型文件完整性
- 验证模型与芯片平台匹配
- 确认 Variable Buffer 大小足够
批处理大小不支持:
- 现象:指定的 batch size 在模型支持列表中找不到
- 原因:模型编译时未包含该 batch size
- 解决方案:使用模型支持的 batch size,或重新编译模型以包含所需 batch size
5.3 使用率相关问题¶
使用率接近 100%:
- 原因:IPU 与 CPU 不同,没有系统级分时复用,推理任务密集时使用率会接近最大值
- 说明:由于每次推理之间存在微秒级软件开销,使用率无法达到 100%,通常在 95%~99% 属于正常
- 查看 IPU 频率:
cat /proc/mi_modules/mi_ipu/debug_hal/freq
使用率始终为 0%:
- 原因:当前没有推理任务在运行
- 验证:启动
dla_show_img_info或其他推理任务时,使用率应显著上升
5.4 网络相关问题¶
客户端无法连接 ipu_server:
- 现象:客户端连接失败或超时
- 原因:服务端端口未开放、网络不通、防火墙拦截
- 解决方案:
- 确认服务端已启动并打印
IPU Service established on port xxx - 检查板端网络接口状态
- 测试端口连通性
RPC 调用返回错误:
- 原因:不在绑定模式下调用
ipu_binding_input/output、无效的 Channel ID、Tensor 未就绪 - 解决方案:检查 RPC 调用顺序,确保先
ipu_set_io_binding再ipu_binding_input/output
5.5 IPU Log 导出相关问题¶
IPU Log 未生成:
- 现象:设置了
--ipu_log参数但未生成 bin 文件 - 原因:IPU Log 功能未开启
- 解决方案:先通过 debug 命令开启 IPU Log 抓取功能,再执行
dla_show_img_info