msOpProf 算子性能调优工具快速入门


1. 概述

msOpProf 工具用于采集和分析运行在昇腾 AI 处理器上的算子的关键性能指标,用户可根据输出的性能数据,快速定位算子的软、硬件性能瓶颈,提升算子性能的分析效率。 本文档基于入门教程中开发的简易加法算子,演示 msOpProf 工具的核心功能,帮助初学者直观体会其在算子开发过程中带来的高效性与便捷性。

1.1 建议

本章节以您已完成《算子开发工具快速入门》的全流程操作为前提;若尚未体验,建议先完成该指南以获得更佳的学习效果。

1.2 环境准备

请严格按照《昇腾 AI 算子开发工具链学习环境安装指南》完成环境安装与工作区配置。 即使您已具备类似环境,也需按该指南重新执行一遍,以确保所有依赖组件、环境变量等完整且一致。

2. 操作步骤

2.1 【环境】运行环境预检

2.1.1 确认 Python 依赖包已安装

执行以下命令,若输出"All is OK",则表明所需 Python 包及其版本均满足规范:

python3 -c "import numpy, sympy, scipy, attrs, psutil, decorator; from packaging import version; assert version.parse(numpy.__version__) <= version.parse('1.26.4'); print('All is OK')"

若报错,请参照1.2 环境准备进行正确安装。

2.2 【前提】算子工程准备完成

按照《昇腾算子开发工具链快速入门》中的指导,完成 2.1 节和 2.3 节。

2.3 【调优】分析算子性能(msOpProf)

若算子性能未达预期,可借助 msOpProf 工具采集运行时性能数据,进行深入分析与优化,确保算子在不同昇腾硬件平台上高效执行。先跟着操作体验效果,原理部分可稍后阅读。

2.3.1 修改编译选项并重新编译部署

1. 修改编译选项

在 Kernel 侧 CMakeLists.txt 首行插入一行配置,开启调试信息:

# 进入对应目录进行文件备份
cd ~/ot_demo/workspace/src/AddCustom
cp -f op_kernel/CMakeLists.txt op_kernel/CMakeLists.txt.bak

# 将以下配置内容插入CMakeLists.txt 首行
printf '%s\n' "if(COMMAND add_ops_compile_options)" "  add_ops_compile_options(ALL OPTIONS -g)" "elseif(COMMAND npu_op_kernel_options)" "  npu_op_kernel_options(ascendc_kernels ALL OPTIONS -g)" "endif()" | cat - op_kernel/CMakeLists.txt > tmp && mv -f tmp op_kernel/CMakeLists.txt;

2. 重新编译部署算子

bash ./build.sh
MY_OP_PKG=$(find ./build_out -maxdepth 1 -name "custom_opp_*.run" | head -1) && bash $MY_OP_PKG

2.3.2 启动真机与仿真采集

Note

知识点:上板和仿真采集信息的区别
上板:可精确捕获算子运行耗时、各 Pipe 使用情况、内存带宽、Cache 行为等真实硬件特性,而这些往往是仿真器难以高保真复现的关键指标。
仿真:在指令流追踪、代码热点定位等方面提供更完整、稳定的分析能力,但对内存访问延迟、带宽瓶颈等硬件相关行为的模拟精度有限。
因此,建议结合两种方式,互补优势,实现全面性能诊断。若某些场景下您没有真实硬件(NPU 卡),可以使用仿真模式进行初步的性能估算和热点分析。

2.3.2.1 上板性能采集

执行如下命令:

cd ~/ot_demo/workspace/src/caller/build
msopprof --output=./msopprof_output_npu ./execute_add_op
2.3.2.2 仿真器性能采集

说明

参数 --soc-version 的值可通过执行以下命令获取:python3 -c "import acl; print(acl.get_soc_name())"

msopprof simulator --soc-version=Ascendxxxyy --output=./msopprof_output_sim ./execute_add_op

2.3.3 查看性能数据结果

工具在指定 --output 目录下生成 .csv 和 .bin 格式的结果文件,若输出没有报错,则认为执行成功:

csv 文件
例如,MemoryUB.csv 文件打开后可以看到如下信息: 数据显示任务被均分为 8 个 block,全部调度至 Vector Core 执行。例如,Block 0 的带宽(1.02GB/s)明显高于 Block 1(0.77GB/s),如果差异过大,可能提示有优化空间。

block_id sub_block_id aiv_time(us) aiv_total_cycles aiv_ub_read_bw_vector(GB/s) aiv_ub_write_bw_vector(GB/s)
0 vector0 7.456666 13422 1.023164 0.511582
1 vector0 9.914444 17846 0.769523 0.384762
2 vector0 10.001111 18002 0.762855 0.381427
3 vector0 9.684444 17432 0.787799 0.393899
4 vector0 9.747222 17545 0.782725 0.391363
5 vector0 9.062222 16312 0.84189 0.420945
6 vector0 9.293889 16729 0.820904 0.410452
7 vector0 8.658889 15586 0.881105 0.440553

bin 文件
请学习下节内容。

2.3.4 通过 MindStudio Insight 图形化查看性能数据结果

上面的 bin 文件可使用 MindStudio Insight 工具打开,以图形化方式直观展示各类性能视图,例如:计算内存热力图、Cache 热力图以及算子代码热点图等。

2.3.4.1 安装 MindStudio Insight

请参考《MindStudio Insight工具文档》安装 Insight 工具。

2.3.4.2 用 MindStudio Insight 查看

安装后是单机程序,简单操作如下:点击左上角 Import Data,将 visualize_data.bin 导入,然后打开 Details 页面,即可看到很多详细图表。 详细操作及图表具体含义请参考《MindStudio Insight工具文档》学习。

2.3.5 恢复被修改的文件

执行如下命令:

cd ~/ot_demo/workspace/src/AddCustom
cp -f op_kernel/CMakeLists.txt.bak op_kernel/CMakeLists.txt