oil-gas-ops-prospect性能调优实战:msprof上板采集与流水图仿真完整指南
oil-gas-ops-prospect性能调优实战msprof上板采集与流水图仿真完整指南【免费下载链接】oil-gas-ops-prospect面向油气勘探oil gas exploration领域的昇腾自定义算子库。仓名即 oil-gas-ops油气算子 prospect勘探目标面向地震成像、全波形反演等勘探计算场景项目地址: https://gitcode.com/cann/oil-gas-ops-prospect在昇腾Ascend 910B上给油气勘探算子库 oil-gas-ops-prospect做性能调优最难的一步不是改代码而是把瓶颈看清楚。本文将带你完整走一遍两条核心采集链路用msprof op做上板性能采集拿 Kernel 耗时、核数、流水占比以及用msprof 流水图仿真看每个 AIV 核的指令级时间线最后再补上业务 shape 的 Python 性能对拍方法帮你建立采集 → 分析 → 调优 → 回归的完整闭环 一、先搞懂上板采集 vs 流水图仿真的区别oil-gas-ops-prospect 面向地震成像、全波形反演等勘探计算场景仓库内置了ComplexMul复数乘法、FusedBiasSoftmax融合注意力等 AscendC 算子。性能分析时官方推荐两种方式各有分工维度上板采集msprof op流水图仿真msprof op simulator运行环境真实 910B NPU仿真库无需上板热点指令级数据看什么Kernel 耗时、Block 核数、各流水占比单核指令流水时间线、指令级 cycles粒度算子级摘要指令级比上板更细结果形式OPPROF_*目录下的 CSV 摘要trace.jsonChrome Tracing 格式一句话记住先上板定位慢不慢、慢在哪个流水再上仿真定位卡在具体哪条指令。二、一键准备编译样例并验证功能以仓库自带的ComplexMul样例为例其它算子把路径换成examples/aclnn/op即可。第 1 步加载 CANN 环境source /usr/local/Ascend/cann-9.0.0/set_env.sh export ASCEND_HOME_PATH/usr/local/Ascend/cann-9.0.0 export LD_LIBRARY_PATH${ASCEND_HOME_PATH}/opp/vendors/customize/op_api/lib:${ASCEND_HOME_PATH}/lib64:${LD_LIBRARY_PATH}第 2 步编译并跑通样例bash examples/aclnn/complex_mul/run.sh这条命令会清掉旧的build/、output/目录重新 cmake/make并立刻跑一遍功能检查脚本逻辑见 examples/_common/run_example.sh。样例可执行文件会生成在examples/aclnn/complex_mul/output/下。 提示样例用的是{2,2}小 tensorKernel 耗时只有数微秒——它用来验证采集链路不能当业务性能数字。业务 shape 的性能数字请看第五节的 Python--perf对拍。三、msprof 上板性能采集一条命令拿到流水占比确认功能正常后在输出目录执行第二次 launch默认预热 5 次cd examples/aclnn/complex_mul/output msprof op ./test_aclnn_complex_mul结果会落到同级OPPROF_时间戳_随机串/目录。本仓在真实 910B、CANN 9.0.0 上实测的输出摘要Op Name: ComplexMul_923973e39f803f5bc6ddb804acabf320_0 Op Type: vector Task Duration(us): 4.640093 Block Dim: 48 Device Id: 0其中Task Duration是 Kernel 耗时Block Dim是实际执行的核数。结果目录各 CSV 文件速查表文件含义调优时看什么OpBasicInfo.csv核名、Op Type、总耗时、Block Dim核数是否符合预期Block Dim 是否用满 AIV 核ArithmeticUtilization.csvcube/vector 算力占比vector 算子看aiv_time / aiv_vec_ratio是否打满PipeUtilization.csv各流水VEC / MTE2 / MTE3 / SCALAR耗时占比瓶颈流水定位占比最高的流水就是优化目标Memory.csvGM ↔ UB 带宽、搬运量是否受限于搬运MemoryUB.csvUB 读写带宽UB 压力是否过大L2Cache.csvL2 命中 / miss数据复用性ResourceConflictRatio.csvbank / MTE 冲突与 wait 占比冲突导致的等待dump/op_basic_info.txt文本摘要快速人读分析要点先看PipeUtilization.csv——如果 VEC 流水占比低而 MTE2/MTE3 占比高说明是搬数瓶颈应考虑切分tiling与双缓冲如果 SCALAR 占比异常高检查 kernel 里的标量循环。四、msprof 流水图仿真看到指令级时间线当上板数据显示VEC 没打满却说不清卡在哪时就上仿真。本仓默认SOC_VERSIONAscend910B1把仿真库加入LD_LIBRARY_PATH后export LD_LIBRARY_PATH${ASCEND_HOME_PATH}/tools/simulator/Ascend910B1/lib:${LD_LIBRARY_PATH} cd examples/aclnn/complex_mul/output msprof op simulator --output$PWD/pipeline_auto --kernel-nameComplexMul ./test_aclnn_complex_mul⚠️ 关键细节--kernel-name填算子 OpTypeComplexMul而不是入口符号complex_mul。本仓实测用 OpType 即可命中上板同一核名。结果在pipeline_auto/OPPROF_时间戳_随机串/核心产物结构└── simulator/ ├── trace.json # 全核 Chrome Tracing 事件优先看这个 └── coreN.veccore0/ # 每个 vector 核一份N 与 Block Dim 对应本样例 0..47 ├── trace.json # 单核流水时间线 ├── coreN.veccore0_instr_exe.csv # 指令级流水、cycles、耗时 └── coreN.veccore0_code_exe.csv # 源码行耗时未编 -g 时只有表头怎么看用 Chrome 打开chrome://tracing或 MindStudio Insight导入simulator/trace.json即可看到 48 个核的泳道时间线挑一个看起来空闲时间长的核打开它目录下的*_instr_exe.csv定位阻塞的具体指令结合 kernel 源码如 ascendc/operators/complex_mul/op_kernel/complex_mul_impl.h找到对应的切分或循环逻辑。五、业务 shape 性能对拍Python--perf才是真数字上板样例是小 tensor真正代表业务体量的对比走 Python 精度/性能对拍输出相对误差与ms/call# 方式一仓库根 bash build.sh -u --precision --perf --opscomplex_mul # 方式二算子测试目录会自动安装 OPP .run、编 pybind 再对拍 cd tests/ascendc/complex_mul bash run_test.sh对拍脚本 tests/ascendc/complex_mul/test_complex_mul_npu.py 会按业务 shape 输出形如[perf] fwd torchxx ms ascendcxx ms speedupx.xx x的加速比报告脚本中--mode perf可只跑性能。Triton 侧的 FFT 算子则用 tests/triton/real_fft/bench_opensource_perf.py 对比同设备torch.fft。六、调优开关清单改完代码怎么验证调优动作修改位置验证顺序改切分算法核间均分、UB 分拍各算子ascendc/operators/op/op_host/op_tiling_core.h先跑 ophost UT → 再上板看PipeUtilization调 FFT 行分块环境变量OIL_GAS_OPS_FFT_BLOCK_M默认 512用 verify_triton_fft_real_128_3d.py 的--block-m覆盖核对 Tiling 边界条件tests/ut/op_host/complex_mul/test_complex_mul_tiling.cppbash build.sh -u --ophost关于OIL_GAS_OPS_FFT_BLOCK_M它控制 DFT-matmul 的行分块受 910BL0C 中 fp32 累加器 ≤128KB约束实现会按容量自动收缩、溢出时减半重试。手动扫一遍常见档位for m in 128 256 512; do OIL_GAS_OPS_FFT_BLOCK_M$m python3 tests/triton/real_fft/verify_triton_fft_real_128_3d.py done 注意FusedSoftmaxGrad的 bf16 路径是 MIXVECCUBE 混合Op Type可能不是纯 vector读 CSV 时要同时看 cube 与 vector 两列占比。七、常见问题速查采集时算子没生效数字像 PyTorch 参考实现AscendC 调用失败会静默回退。设置export OIL_GAS_OPS_REQUIRE_ASCENDC_COMPLEX_MUL1禁止回退失败会直接报错Block Dim远小于物理核数多半是切分里aivNum计算有问题先看 ophost UT 是否覆盖该 shape仿真--kernel-name不命中确认填的是 OpTypeComplexMul而非入口符号complex_mul仿真目录里没有visualize_data.binCANN 9.0.0 本身不落这个文件属正常现象直接看trace.json。总结调优闭环四步走上板采集msprof op拿PipeUtilization.csv定位瓶颈流水流水图仿真msprof op simulator导入trace.json定位具体指令改切分 / 分块参数改_tiling_core.h或OIL_GAS_OPS_FFT_BLOCK_M回归验证ophost UT Python--perf业务 shape 对拍确认加速比不回退。完整的调试与性能采集文档含 Kernel 级printf/DumpTensor调试见 docs/zh/debug/op_debug_prof.md算子开发目录规范见 docs/zh/develop/operator_development_guide.md。掌握这套上板 仿真的组合拳你的油气勘探算子调优就有了可靠的导航图 【免费下载链接】oil-gas-ops-prospect面向油气勘探oil gas exploration领域的昇腾自定义算子库。仓名即 oil-gas-ops油气算子 prospect勘探目标面向地震成像、全波形反演等勘探计算场景项目地址: https://gitcode.com/cann/oil-gas-ops-prospect创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →