在S100P上运行模型后,如何计算出模型整个过程中用了多少算力?

在S100P上运行一个hbm模型文件后,如何计算出模型整个过程中用了多少算力?

结论

在 S100P 上统计模型算力使用,无法直接获取"用了多少算力"的绝对值,但可以通过以下方式间接计算:

方法一:使用 hrt_model_exec 工具统计推理时间

# 运行模型并统计性能
hrt_model_exec --model your_model.hbm --input input_data --loop 100

输出会包含:

  • 单次推理耗时(ms)
  • FPS
  • 各阶段耗时(预处理、推理、后处理)

方法二:查看模型转换时生成的性能报告

模型量化/编译时会生成 .html.json 性能报告,包含:

  • 每个算子的耗时
  • 算子执行位置(CPU / BPU)
  • 预估算力消耗(OPS)

报告位置:hb_compile 输出目录中的 performance_report.html

方法三:手动计算算力使用

公式:

实际使用算力 (TOPS) = 模型总运算量 (OPS) / 推理时间 (s)

步骤:

  1. 从性能报告中获取模型总运算量(OPS)
  2. hrt_model_exec 测量实际推理时间
  3. 代入公式计算

示例:

模型运算量:50 GOPS (50 × 10^9 OPS)
实测推理时间:10ms (0.01s)
实际使用算力 = 50×10^9 / 0.01 = 5 TOPS

关键说明

问题 解答
能直接看到"用了多少 TOPS"吗? :cross_mark: 不能直接获取,需手动计算
能看到算子在 CPU 还是 BPU 执行吗? :white_check_mark: 性能报告 HTML 中有详细标注
S100P 理论算力是多少? 约 128 TOPS (INT8)
如何看算力利用率? 实际使用算力 / 128 TOPS × 100%

推荐操作

  1. 先查看性能报告:找到模型编译输出目录中的 performance_report.html
  2. 用工具实测:运行 hrt_model_exec 获取真实推理时间
  3. 计算利用率:用上述公式推算实际算力使用和 BPU 利用率

相关资源


追问:你具体是想了解:

  • A. 模型占用了多少 BPU 算力百分比?
  • B. 模型推理的总运算量(OPS)?
  • C. 还是想优化模型提升算力利用率?

不同目标有不同优化策略,可以进一步说明需求。

模型推理的总运算量(OPS)

获取模型总运算量(OPS)的方法

模型总运算量(OPS)在模型编译阶段生成,存储在性能报告中。以下是具体查找步骤:


步骤一:找到性能报告文件

模型使用 hb_compilehb_mapper 编译后,输出目录中会包含:

output_dir/
├── model.hbm
├── performance_report.html    ← 主要查看这个
├── performance_report.json    ← 也可解析这个
└── ...

如果你已经部署了模型但找不到报告:

  • 检查模型编译时的输出目录
  • 如果报告已丢失,需要重新编译模型生成

步骤二:查看 HTML 报告中的 OPS 数据

用浏览器打开 performance_report.html,关键信息位置:

章节 内容
Model Performance Summary 模型总运算量(Total OPS / Total GOPS)
Details 每个算子的 OPS、耗时、执行设备(CPU/BPU)
BIN Model Structure 模型结构详情

总运算量通常在 Summary 表格中:

Total OPS: 50,000,000,000 (50 GOPS)
Total Latency: 10.5 ms

步骤三:从 JSON 报告提取(可选)

如果需要用脚本解析,可以读取 JSON 文件:

# 查看 JSON 结构
cat performance_report.json | python3 -m json.tool

# 提取总 OPS(示例,具体字段名可能因版本而异)
python3 -c "
import json
with open('performance_report.json') as f:
    data = json.load(f)
    # 通常在 summary 或 model_info 字段
    print(data['summary']['total_ops'])
"

步骤四:计算实际算力使用

拿到总 OPS 后,结合实测推理时间计算:

# 实测推理时间
hrt_model_exec --model your_model.hbm --input input_data --loop 100

计算公式:

实际使用算力 (TOPS) = 总 OPS / 平均推理时间 (秒)

示例:
总 OPS = 50 GOPS = 50 × 10^9 OPS
实测时间 = 10ms = 0.01s
实际算力 = 50×10^9 / 0.01 = 5 TOPS

BPU 利用率 = 5 / 128 × 100% ≈ 3.9%

常见问题

问题 解答
编译时没生成报告怎么办? 检查 hb_compile 命令是否加了 --output-dir 参数,报告在输出目录中
报告中的 OPS 和实测不符? 报告中是理论运算量,实测受内存带宽、调度等影响
只想看 BPU 上的 OPS? 在 HTML 报告的 Details 中筛选 device: BPU 的算子,累加 OPS
不同精度(INT8/FP16)OPS 一样吗? 运算量(OPS)相同,但有效算力不同(INT8 利用率更高)

相关资源


需要进一步帮助吗?

  • 如果你已经编译过模型,可以告诉我输出目录路径,我帮你确认报告位置
  • 如果需要重新编译,可以告诉我模型类型(YOLO/LLM/其他),我给具体编译命令