在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)
步骤:
- 从性能报告中获取模型总运算量(OPS)
- 用
hrt_model_exec测量实际推理时间 - 代入公式计算
示例:
模型运算量:50 GOPS (50 × 10^9 OPS)
实测推理时间:10ms (0.01s)
实际使用算力 = 50×10^9 / 0.01 = 5 TOPS
关键说明
| 问题 | 解答 |
|---|---|
| 能直接看到"用了多少 TOPS"吗? | |
| 能看到算子在 CPU 还是 BPU 执行吗? | |
| S100P 理论算力是多少? | 约 128 TOPS (INT8) |
| 如何看算力利用率? | 实际使用算力 / 128 TOPS × 100% |
推荐操作
- 先查看性能报告:找到模型编译输出目录中的
performance_report.html - 用工具实测:运行
hrt_model_exec获取真实推理时间 - 计算利用率:用上述公式推算实际算力使用和 BPU 利用率
相关资源
- 性能分析工具讨论:hrt_model_exec 性能分析工具
- 模型性能报告解读:开发机上的静态性能评估
追问:你具体是想了解:
- A. 模型占用了多少 BPU 算力百分比?
- B. 模型推理的总运算量(OPS)?
- C. 还是想优化模型提升算力利用率?
不同目标有不同优化策略,可以进一步说明需求。
模型推理的总运算量(OPS)
获取模型总运算量(OPS)的方法
模型总运算量(OPS)在模型编译阶段生成,存储在性能报告中。以下是具体查找步骤:
步骤一:找到性能报告文件
模型使用 hb_compile 或 hb_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 利用率更高) |
相关资源
- 性能报告解读:开发机上的静态性能评估
- HTML 数据解读:模型仿真的 html 性能数据如何解读
- 性能差异分析:量化后模型的实际推理延时与.html 中的 latency 不符
需要进一步帮助吗?
- 如果你已经编译过模型,可以告诉我输出目录路径,我帮你确认报告位置
- 如果需要重新编译,可以告诉我模型类型(YOLO/LLM/其他),我给具体编译命令