ais_bench 实测 OM 推理性能安装、参数与结果解读ResNet18 / 910B3一句话让Agent变成昇腾专家昇腾任务轻松搞定。评测入口请按这个开源仓接入昇腾图谱 https://gitcode.com/agent0/kg-tools上一篇实验的结尾ATC 转换一次通过产出了 23.7 MB 的resnet18_bs1.om。但转换成功只说明能跑——一帧多快、吞吐多少、数值和参考实现对不对齐都得实测才有数。做这件事的官方工具是ais_bench。本篇实验 02一条主线装好工具 → 纯推理拿性能分布 → 换真实数据顺手验精度最后把输出的每个数字逐项读懂。全程一条命令一个日志可直接照抄。一、先认清工具再装动手前先排掉两个真实的坑。坑一名字撞车。搜 “AISBench” 首先撞上的是大模型评测框架ais-bench-benchmark刷模型榜单那套和本文毫无关系。本文的 ais_bench 是OM 离线模型推理评测工具住在 Giteeascend/tools仓的ais-bench_workload目录下——认准路径再搜。坑二入口迁移。老教程里常见msit benchmark --om-model xxx.om的写法实测本机 msit 8.2.0 的 CLI 已经没有benchmark子命令只剩 debug/install 等该组件拆成了独立的 whl 包。别在旧入口上耗直接装包。安装官方 README 口径两个包aclruntime是 ACL 推理接口的 Python 绑定真正碰硬件的底层ais_bench是评测程序本体。按本机 Python 与架构选包此处 Python 3.10 / aarch64pip3installhttps://aisbench.obs.myhuaweicloud.com/packet/ais_bench_infer/0.0.2/ait/aclruntime-0.0.2-cp310-cp310-linux_aarch64.whl pip3installhttps://aisbench.obs.myhuaweicloud.com/packet/ais_bench_infer/0.0.2/ait/ais_bench-0.0.2-py3-none-any.whl一个诚实的提示来自 README 原文出包流水恢复中whl 包非最新版本、官方不推荐用于正式环境0.0.2 跑评测完全够用需要新特性可走源码编译。运行前置只有一条机器已装 CANN并先source环境本机为/usr/local/Ascend/cann-9.0.0-beta.2/bin/set_env.sh。实验环境与实验 01 同机本次用 device 0组件版本 / 规格NPUAscend 910B3 × 2npu-smi info实测本实验占 device 0CPU / 架构鲲鹏-920 / aarch64系统 / PythonUbuntu 22.04 LTS / 3.10condaCANN9.0.0-beta.2aclruntime / ais_bench0.0.2 / 0.0.2二、一条命令跑纯推理主命令长这样python3-mais_bench--modelresnet18_bs1.om--output./ais_bench_result--loop20不带--input就是官方说的纯推理场景工具自动构造输入数据默认全 0--pure_data_type random换随机不走文件 IO专测计算性能——测吞吐就用这个形态。常用参数一张表依据本机--help实测与官方 README完整版以python3 -m ais_bench --help为准全量 help 已存scripts/ais_bench_help.txt参数作用默认--model/-mOM 模型路径必填—--input/-i真实输入的文件/目录支持 NPY/BIN多个用逗号分隔不填 纯推理无纯推理--output/-o输出根目录每次运行生成时间戳子目录并在旁边落一个时间戳_summary.json无不落盘--outfmt输出文件格式 NPY / BIN / TXTBIN--loop/-l纯推理的推理次数1--device/-dNPU 卡号0~255多卡逗号分隔如1,20--pure_data_type纯推理构造的数据zero / randomzero--warmup_count计时前预热次数1--display_all_summary控制台连 H2D/D2H 拷贝耗时一起打印关--profiler/--dumpProfiling / 精度数据落盘开关配 profiler 时 loop 建议 1关--batchsize输入 tensor 的 batch—--dymBatch/--dymHW/--dymDims/--dymShape动态分档 OM 指定实际档位与 ATC 的--dynamic_*系列一一对应—三、结果解读每个数字什么意思主命令的完整输出截取关键行全量见scripts/ais_bench_run.log[INFO] load model resnet18_bs1.om success [INFO] try get model batchsize:1 [INFO] warm up 1 done [INFO] -----------------Performance Summary------------------ [INFO] NPU_compute_time (ms): min 0.24500274658203125, max 0.38700103759765625, mean 0.25715065002441406, median 0.2504997253417969, percentile(99%) 0.3621102142333983 [INFO] throughput 1000*batchsize.mean(1)/NPU_compute_time.mean(0.25715065002441406): 3888.7710371529656 [INFO] ------------------------------------------------------逐项拆batchsize 从 OM 里读不用你填。try get model batchsize:1——转换时--input_shape定的 1工具加载模型后自己查出来吞吐公式里用的就是它。warm up 在计时之外。warm up 1 done之后才开始统计所以下面的分布不含首次加载的冷启动。NPU_compute_time 是纯设备侧计算耗时看分布别只看均值。20 次推理min 0.245 ms 是稳态、max 0.387 ms 是偶发毛刺、median 0.250、P99 0.362、mean 0.257。单发毛刺到 0.39 属正常调度抖动——这正是要--loop 20的原因默认--loop 1只采一发本机实测单发 0.431 ms / 2320 fps——比 20 次均值 0.257 慢了近七成。报性能报分布稳态 P99单发数字没有代表性。throughput 是折算值公式就写在日志里1000 × batchsize / NPU_compute_time.mean即 1000 × 1 / 0.2572 ≈3889 帧/秒bs1。注意它只除以 NPU 计算时间——不含 H2D/D2H 拷贝和 host 侧调度。这两项在 summary.json 里另有统计本机 H2D 0.204 ms / D2H 0.032 ms端到端逐张实拍实测帧率会低于 3889。数字绑环境CANN 版本、驱动、卡的状态拿去横向对比时要连环境一起报。产物两份。时间戳子目录纯推理也会落一份输出pure_infer_data_0.bin全 0 输入的推理结果看一眼可删时间戳_summary.json——后者是脚本化取数的抓手args回显完整命令、filesinfo记输入输出文件、NPU_compute_time/H2D_latency/D2H_latency三组统计、npu_compute_time_list存逐次原始值、throughput一个浮点。做回归对比读它比 grep 控制台稳。四、换真实数据顺手验精度性能测完把同一份 OM 换成真实输入跑一发验证 NPU 输出没漂。三行生成输入与实验 01 同一套种子体系参考结果应为 top1 238importnumpyasnp np.random.seed(0)np.random.randn(1,3,224,224).astype(float32).tofile(ais_bench_input/input_0.bin)python3-mais_bench--modelresnet18_bs1.om--inputais_bench_input\--output./ais_bench_result--outfmtNPY实测单发 NPU 计算耗时 0.394 ms输出input_0_0.npyshape(1, 1000)float32。与 onnxruntimeCPU同输入对比top1 两边都是 238最大绝对误差 2.543e-03。这个数比实验 01 里 onnxruntime vs PyTorch 的 4.05e-06 大三个量级——不是问题那次是同机同 CPU这次换了硬件卷积/矩阵乘的切分与归约顺序都不同fp32 下 1e-3 量级是跨硬件的正常水平top1 一致即可放心那个 0.394 ms 也是单发口径单发偏慢的规律和纯推理一致。反过来说测吞吐时别带--input真实数据模式按文件逐个推理没有--loop那样的循环统计文件读写还占端到端时间——测性能用纯推理验数值用真实数据各干各的。五、收尾基线立起来了三步串成完整链路导出实验 01数值对齐 4.05e-06→ATC 转换23.7 MB OM→本篇评测。这台 910B3 上 ResNet18 bs1 的参照系从此有数稳态单帧 ~0.25 ms、吞吐 ~3890 fps、精度偏差 1e-3 量级、top1 一致。以后任何针对这个模型的优化换精度模式、加 AIPP、调 batch跑同一条 ais_bench 命令、对着 summary.json 比分布就行。下一篇按上一篇的预告走结构侧看这份 OM 的算子清单经过图融合后还剩几种——和 ONNX 侧的 49 节点 7 种算子对账。本文涉及的安装来源、参数语义与默认值、纯推理/真实数据两种场景口径、summary.json 产物结构、msit benchmark 子命令迁移均经昇腾知识图谱ascend.wiki的 msit benchmark README 与 CLI 示例节点核实并与 Giteeascend/tools仓 ais-bench_workload 官方 README 交叉印证性能与精度数字全部为本机实测。运行日志ais_bench_run.log/ais_bench_input_run.log、全量 helpais_bench_help.txt、输入数据ais_bench_input/与三次运行结果ais_bench_result/含 summary.json 与 NPY 输出见仓库blogs/scripts/目录。接入昇腾知识图谱 https://gitcode.com/agent0/kg-tools