哪个命令或者什么标准的加载代码是跑hbm文件的

你好!针对你关于 HBM 文件推理评测 的问题,这里给出完整的评测流程和关键命令。

核心结论

HBM 模型(Horizon BPU Model)只包含 BPU 算子,板端推理需要使用 BPU SDK API 编写推理程序,或使用官方提供的工具进行快速验证。


一、快速验证流程(推荐新手)

1. 查看模型信息

在板端使用 hrt_model_exec 工具查看 HBM 模型的基本信息和性能:

# 查看模型结构、输入输出 shape
hrt_model_exec model_info --model_file your_model.hbm

# 测试推理性能(latency)
hrt_model_exec perf --model_file your_model.hbm --core_id 1 --frame_count 1000 --thread_num 1

2. 使用官方示例代码

OE 开发包中提供了完整的推理示例,路径:

ddk/samples/ai_toolchain/horizon_runtime_sample/code/00_quick_start/

关键步骤:

  1. 编译示例:在板端运行 build_j5.sh(J5 芯片)或对应芯片的编译脚本
  2. 修改模型路径:将示例中的模型文件替换为你的 HBM 文件
  3. 准备测试数据:准备与模型输入 shape 匹配的图像/数据
  4. 运行推理:执行生成的脚本,查看输出结果

二、自定义推理程序开发

如果需要更灵活的评测(如自定义后处理、批量测试等),需要编写 C++ 推理程序。核心流程如下:

关键代码步骤

// Step 1: 加载模型
hbPackedDNNHandle_t packed_dnn_handle;
hbDNNHandle_t dnn_handle;
const char* model_file = "your_model.hbm";
hbDNNInitializeFromFiles(&packed_dnn_handle, &model_file, 1);
hbDNNGetModelHandle(&dnn_handle, packed_dnn_handle, model_name_list[0]);

// Step 2: 准备输入输出张量
std::vector<hbDNNTensor> input_tensors;
std::vector<hbDNNTensor> output_tensors;
// 获取输入输出数量并分配内存
hbDNNGetInputCount(&input_count, dnn_handle);
hbDNNGetOutputCount(&output_count, dnn_handle);
// 使用 hbSysAllocCachedMem 分配带缓存的内存

// Step 3: 填充输入数据
// 将图像/数据拷贝到 input_tensors 的内存空间
// 注意数据格式对齐(NV12/NCHW 等)

// Step 4: 执行推理
hbDNNInferCtrlParam infer_ctrl_param;
HB_DNN_INITIALIZE_INFER_CTRL_PARAM(&infer_ctrl_param);
hbDNNInfer(&task_handle, &output, input_tensors.data(), dnn_handle, &infer_ctrl_param);
hbDNNWaitTaskDone(task_handle, 0);

// Step 5: 读取输出结果
// 使用 hbSysFlushMem 同步数据到缓存
// 解析 output_tensors 中的推理结果

// Step 6: 释放资源
hbDNNReleaseTask(task_handle);
hbSysFreeMem(&input_tensors[i].sysMem[0]);
hbDNNRelease(packed_dnn_handle);

三、评测指标获取

1. 推理速度

  • 使用 hrt_model_exec perf 命令获取平均延迟
  • 或在代码中使用 chrono 记录 hbDNNInferhbDNNWaitTaskDone 的时间

2. 推理结果正确性

  • 对比方法:将板端输出与 PC 端浮点模型/量化模型的输出进行对比
  • 工具:使用 hrt_bin_dump 工具导出中间层数据进行调试
  • 一致性验证:参考社区帖子 QAT 一致性对齐流程

3. 内存占用

  • 通过 hbSysAllocCachedMem 分配的内存大小累加
  • 或使用系统命令 cat /proc/meminfo 监控

四、常见问题排查

问题 排查方法
模型加载失败 检查 OE 版本与编译版本是否匹配,参考 FAQ 手册
输出 shape 不对 使用 hrt_model_exec model_info 确认模型输入输出定义
推理结果异常 检查输入数据对齐规则(NV12/NCHW),参考 对齐规则解析
速度慢 确认 core_id 设置,检查是否使用了 BPU 而非 CPU

五、推荐学习资源

  1. 官方教程模型推理快速上手 - 详细代码解读
  2. API 手册:工具链手册中的 BPU SDK API 章节
  3. 示例代码:OE 包中的 horizon_runtime_sampleai_forward_view_sample
  4. 一致性验证QAT 一致性对齐流程

下一步建议

  1. 先用 hrt_model_exec 快速验证模型能否正常加载和推理
  2. 基于官方 00_quick_start 示例修改,适配你的 HBM 模型
  3. 如需进一步帮助,请提供:
    • 芯片型号(J5/X3/S100 等)
    • OE 开发包版本
    • 模型类型(分类/检测/分割等)
    • 具体报错信息(如有)

欢迎将评测过程中遇到的问题发帖到社区,方便其他开发者参考!