获取模型总运算量(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/其他),我给具体编译命令