工具使用
msProf工具包含msprof op和msprof op simulator两种使用方式,msprof op通过MindStudio Insight展示计算内存热力图和Roofline分析图,msprof op simulator通过MindStudio Insight展示指令流水图和算子代码热点图,协助用户定位算子内存、算子代码以及算子指令的异常,实现全方位的算子调优。
- 不支持在同一个Device侧同时拉起多个性能采集任务。
- msProf工具的使用依赖CANN包中的msopprof可执行文件,该文件中的接口使用和msprof op一致,该文件为CANN包自带,无需单独安装。
- 使用msprof op和msprof op simulator之前,用户需保证app功能正常。
msprof op
- 登录运行环境,需要先使用msprof op参数开启算子上板调优,再使用msprof op 可选参数 app [arguments]格式调用,可选参数的具体情况请参考表2。具体命令示例如下:
msprof op --output=/home/projects/output /home/projects/MyApp/out/main // --output为可选参数 /home/projects/MyApp/out/main为使用的app
- 通过以下两种方式执行算子调优:
- 基于可执行文件,以add_custom_npu为例。
示例一:
msprof op ./add_custom_npu
示例二:msprof op --aic-metrics=<select_metrics> --output=./output_data ./add_custom_npu
- 基于输入算子二进制文件*.o的配置文件.json。
msprof op --config=./add_test.json --aic-metrics=<select_metrics> --output=./output_data
- 基于可执行文件,以add_custom_npu为例。
- 命令完成后,会在默认路径或指定的“--output”目录下生成以“OPPROF_{timestamp}_XXX”命名的文件夹,在“--aic-metrics”全部开启时,结构示例如下:
- 采集多卡多算子的场景。
└──OPPROF_xxx ├── device0 // 运行时使用昇腾AI处理器的ID └── device1 ├── OpName0 // OpName0为采集算子名称 │ ├── 0 // 表示算子调度顺序 │ │ ├──dump // 与单算子含义一致,存放过程件的文件夹 │ │ └──xxx_yyy.csv //xxx代表该算子生成的指标种类名,例如L2Cache,具体指标种类可参考表1中的csv文件介绍,yyy为csv文件的时序后缀,例如L2Cache_20240603022812284.csv │ │ └──visualize_data.bin ├── OpName1 │ ├── 0 │ │ ├──dump │ │ └──xxx_yyy.csv │ │ └──visualize_data.bin ├── OpName2 │ ├── 0 │ │ ├── dump │ │ └── xxx_yyy.csv │ │ └──visualize_data.bin
- 采集单卡多算子场景。
└──OPPROF_xxx ├── OpName0 // OpName0为采集算子名称 │ ├── 0 // 表示算子调度顺序 │ │ ├──dump // 与单算子含义一致,存放过程件的文件夹 │ │ └──xxx_yyy.csv //xxx代表该算子生成的指标种类名,例如L2Cache,具体指标种类可参考表1中的csv文件介绍,yyy为csv文件的时序后缀,例如L2Cache_20240603022812284.csv │ │ └──visualize_data.bin │ ├── 1 │ │ ├──dump │ │ └──xxx_yyy.csv │ │ └──visualize_data.bin ├── OpName1 │ ├── 0 │ │ ├── dump │ │ └── xxx_yyy.csv │ │ └──visualize_data.bin
- 采集单卡单算子场景。
OPPROF_xxx ├── dump ├── ArithmeticUtilization.csv ├── L2Cache.csv ├── Memory.csv ├── MemoryL0.csv ├── MemoryUB.csv ├── OpBasicInfo.csv ├── PipeUtilization.csv └── ResourceConflictRatio.csv ├── visualize_data.bin
表1 msprof op文件介绍 名称
说明
dump文件夹
原始的性能数据,用户无需关注。
ArithmeticUtilization.csv
cube和vector类型的指令耗时和占比,可参考ArithmeticUtilization(cube及vector类型指令耗时和占比)。
L2Cache.csv
L2 Cache命中率,可参考L2Cache(L2 Cache命中率)。
Memory.csv
UB/L1/L2/主存储器采集内存读写带宽速率,可参考Memory(内存读写带宽速率)。
MemoryL0.csv
L0A/L0B/L0C采集内存读写带宽速率,可参考MemoryL0(L0读写带宽速率)。
MemoryUB.csv
mte/vector/scalar采集ub读写带宽速率,可参考MemoryUB(UB读写带宽速率)。
PipeUtilization.csv
采集计算单元和搬运单元耗时和占比,可参考PipeUtilization(计算单元和搬运单元耗时占比)。
ResourceConflictRatio.csv
UB上的 bank group、bank conflict和资源冲突在所有指令中的占比,可参考ResourceConflictRatio(资源冲突占比)。
OpBasicInfo.csv
算子基础信息,包含算子名称、block dim和耗时等信息,可参考OpBasicInfo(算子基础信息)。
visualize_data.bin
算子基础信息、计算单元负载和Roofline分析图等信息的可视化呈现文件,可参考计算内存热力图和Roofline分析图。
- 采集多卡多算子的场景。
- 将visualize_data.bin文件导入MindStudio Insight后,将会展示计算内存热力图和Roofline分析图。
msprof op simulator
- msProf工具的仿真功能需要运行在0卡上。若修改可见卡号,则会导致仿真失败。
- 若用户仅需关注部分算子性能时,可在Atlas 推理系列产品和Atlas A2训练系列产品的单核内调用TRACE_START和TRACE_STOP接口。并在编译配置文件中添加-DASCENDC_TRACE_ON,具体操作请参见添加-DASCENDC_TRACE_ON的方法。然后,才能生成该范围内的流水图信息,具体流水图显示内容可参考指令流水图。
- 用户需在编译配置文件中添加-DASCENDC_TRACE_ON,具体修改方法可参考以下样例工程。
- MatMulCustomSample算子工程,需编辑/MatMulCustomSample/KernelLaunch/MatMulInvocationNeo/cmake/npu_lib.cmake。
ascendc_compile_definitions ( ... -DASCENDC_TRACE_ON )
- AddCustomSample算子工程,需编辑/AddCustomSample/FrameworkLaunch/AddCustom/op_kernel/CMakeLists.txt。
add_ops_compile_options ( ... -DASCENDC_TRACE_ON )
- MatMulCustomSample算子工程,需编辑/MatMulCustomSample/KernelLaunch/MatMulInvocationNeo/cmake/npu_lib.cmake。
- 登录运行环境,需要使用msprof op simulator开启算子仿真调优,并配合使用仿真可选参数和用户待调优程序(app [arguments])进行调优,仿真可选参数请参考表3。具体命令示例如下:
msprof op simulator --output=/home/projects/output /home/projects/MyApp/out/main // --output为可选参数 /home/projects/MyApp/out/main为使用的app
- 算子仿真调优可以通过以下两种方式执行:
- 基于可执行文件,以add_custom_npu为例。
msprof op simulator --output=./output_data ./add_custom_npu
- 基于输入算子二进制文件*.o的配置文件.json。
msprof op simulator --config=./add_test.json --output=./output_data
- 基于可执行文件,以add_custom_npu为例。
- 命令完成后,会在指定的“--output”目录下生成以“OPPROF_{timestamp}_XXX”命名的文件夹,结构示例如下:
- 采集单个算子场景。
OPPROF_xxx ├── dump └── simulator ├── core0.veccore0 // 按照core*.veccore*或core*.cubecore*目录存放各核的数据文件 │ ├── core0.veccore0_code_exe.csv │ ├── core0.veccore0_instr_exe.csv │ └── trace.json // 该核的仿真指令流水图文件 ├── core0.veccore1 │ ├── core0.veccore1_code_exe.csv │ ├── core0.veccore1_instr_exe.csv │ └── trace.json ├── core1.veccore0 │ ├── core1.veccore0_code_exe.csv │ ├── core1.veccore0_instr_exe.csv │ └── trace.json ├── ... ├── visualize_data.bin └── trace.json // 全部核的仿真指令流水图文件
- 采集多个算子场景。
└──OPPROF_xxx ├── OpName1 // OpName1为采集算子名称 │ ├── 0 // 表示算子调度到的顺序 │ │ ├── dump // 与单算子含义一致,存放过程件的文件夹 │ │ └──simulator // 与单算子simulator文件夹内容一致,但simulator文件夹中的csv文件均会增加时序后缀,例如core*_code_exe_20240429111143146.csv │ ├── 1 │ │ ├── dump │ │ └──simulator │ ├── dump // 存放过程件的文件夹 ├── OpName2 │ ├── 0 │ │ ├── dump │ │ └── simulator │ ├── dump
表2 msprof op simulator文件介绍 名称
说明
dump文件夹
原始仿真生成的dump数据存放文件夹。
simulator文件夹
说明:dump数据文件分析结果存放文件夹。
core*_code_exe.csv
代码行耗时,*代表0~n核,以便用户快速确定编写的代码中最耗时的部分,可参考代码行耗时数据文件。
core*_instr_exe.csv
代码指令详细信息,*代表0~n核,以便用户快速确定最耗时的指令,可参考代码指令信息文件。
trace.json
仿真指令流水图文件,包括每个核的子文件以及全部核的汇总文件,可参考指令流水图。
visualize_data.bin
仿真流水图和仿真热点函数等信息可视化呈现文件,具体请参见指令流水图 MindStudio Insight展示和算子代码热点图。
- 采集单个算子场景。
- 将trace.json文件导入Chrome浏览器或MindStudio Insight后,将会展示指令流水图。
- 可选:将visualize_data.bin文件导入MindStudio Insight后,将会展示算子代码热点图和指令流水图。