跳转至

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 使用示例

# 使用示例
./prog_dla_show_img_info -m ./model.img

终端输出验证

程序成功执行后,终端会打印如下格式的信息:

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 运行指令

# 基本用法
./prog_dla_server -p <port>

# 命令行参数
  -h, --help     显示帮助信息
  -p, --port     服务监听端口号(必选)

4.2.2 使用示例

  1. 板端运行ipu_server开启RPC服务(PORT为设定的port号)
# 使用示例
./prog_dla_server -p 9000
  1. 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用户手册的模型推理

终端输出验证

IPU Service established on port 9000

服务启动后,终端会显示上述信息,表示服务已就绪,等待客户端 RPC 调用。


4.3 IPU 使用率监控 - ipu_utilization

4.3.1 运行指令

# 基本用法
./prog_ipu_utilization -t <time_interval>

# 命令行参数
  -t      统计并打印的时间间隔,单位:秒

4.3.2 使用示例

# 使用示例
# 每秒统计一次 IPU 使用率
./prog_ipu_utilization -t 1

终端输出验证

core0: 0.05%
core0: 0.03%
core0: 85.20%
core0: 87.15%
  • 空闲时:使用率接近 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 驱动未正确加载
  • 解决方案
    # 检查驱动是否加载
    ls /proc/mi_modules/mi_ipu/
    # 如未加载,需重新加载 MI 系统驱动
    

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_bindingipu_binding_input/output

5.5 IPU Log 导出相关问题

IPU Log 未生成

  • 现象:设置了 --ipu_log 参数但未生成 bin 文件
  • 原因:IPU Log 功能未开启
  • 解决方案:先通过 debug 命令开启 IPU Log 抓取功能,再执行 dla_show_img_info