离线推理场景下,推荐使用msprof命令行方式采集和解析性能数据,并通过生成的结果文件分析性能瓶颈。
msprof --output=/home/HwHiAiUser/profiling_output /home/HwHiAiUser/HIAI_PROJECTS/MyAppname/out/main
参数 |
描述 |
可选/必选 |
---|---|---|
--output |
收集到的Profiling数据的存放路径,默认为AI任务文件所在目录。路径中不能包含特殊字符:"\n", "\f", "\r", "\b", "\t", "\v", "\u007F"。 |
可选 |
命令执行完成后,在output指定的目录下生成PROF_XXX目录,存放自动解析后的性能数据(以下仅展示性能数据)。
├── device_{id} //保存原始数据,用户无需关注 │ └── data └── mindstudio_profiler_output ├── msprof_{timestamp}.json ├── step_trace_{timestamp}.json ├── xx_*.csv ... └── README.txt
默认情况下采集到的文件如表2所示。
文件名 |
说明 |
---|---|
msprof_*.json |
timeline数据总表。 |
step_trace_*.json |
迭代轨迹数据,每轮迭代的耗时。单算子场景下无此性能数据文件。 |
op_summary_*.csv |
AI Core和AI CPU算子数据。 |
op_statistic _*.csv |
AI Core和AI CPU算子调用次数及耗时统计。 |
step_trace_*.csv |
迭代轨迹数据。单算子场景下无此性能数据文件。 |
task_time_*.csv |
Task Scheduler任务调度信息。 |
fusion_op_*.csv |
模型中算子融合前后信息。单算子场景下无此性能数据文件。 |
api_statistic_*.csv |
用于统计CANN层的API执行耗时信息。 |
prof_rule_0_*.json |
调优建议。 |
注:“*”表示{timestamp}时间戳。 |
./msprof --output=/home/HwHiAiUser/profiling_output /home/HwHiAiUser/HIAI_PROJECTS/MyAppname/out/main
参数 |
描述 |
可选/必选 |
---|---|---|
--output |
收集到的Profiling数据的存放路径,默认为AI任务文件所在目录。路径中不能包含特殊字符:"\n", "\f", "\r", "\b", "\t", "\v", "\u007F"。 |
可选 |
命令执行完成后,在output指定的目录下生成PROF_XXX目录,目录结构如下。
├── device_{id} │ ├── data │ └── ... └── host │ ├── data │ └── ...
msprof --export=on --output=<dir>
参数 |
描述 |
可选/必选 |
---|---|---|
--export |
解析并导出timeline和summary性能数据。可选on或off,默认值为off。 默认导出迭代数最多的模型ID(Model ID)的timeline和summary性能数据。 若需导出其他迭代/模型的数据,可在msprof命令执行完成后重新执行命令配置本参数和--model-id、--iteration-id参数。 对于未解析的PROF_XXX文件,自动解析后再导出。 示例:./msprof --export=on --output=/home/HwHiAiUser --model-id=2 --iteration-id=2 |
必选 |
--output |
原始性能数据文件目录。须指定为PROF_XXX目录,例如: /home/HwHiAiUser/profiler_data/PROF_XXX。路径中不能包含特殊字符:"\n", "\f", "\r", "\b", "\t", "\v", "\u007F"。 |
必选 |
├── device_{id} │ ├── data └── mindstudio_profiler_output ├── xx_*.csv ├── xx_*.json └── mindstudio_profiler_log
默认情况下采集到的文件如表4所示。
文件名 |
说明 |
---|---|
msprof_*.json |
timeline数据总表。 |
step_trace_*.json |
迭代轨迹数据,每轮迭代的耗时。单算子场景下无此性能数据文件。 |
op_summary_*.csv |
AI Core和AI CPU算子数据。 |
op_statistic _*.csv |
AI Core和AI CPU算子调用次数及耗时统计。 |
step_trace_*.csv |
迭代轨迹数据。单算子场景下无此性能数据文件。 |
task_time_*.csv |
Task Scheduler任务调度信息。 |
fusion_op_*.csv |
模型中算子融合前后信息。单算子场景下无此性能数据文件。 |
api_statistic_*.csv |
用于统计CANN层的API执行耗时信息。 |
prof_rule_0_*.json |
调优建议。 |
注:“*”表示{timestamp}时间戳。 |
从上文我们可以看到,性能数据文件较多,分析方法也较灵活,以下介绍几个重要文件及分析方法。
从上图可以大致分析出耗时较长的API、算子、任务流等,并且根据对应的箭头指向找出对应的下发关系,分析执行推理过程中下层具体耗时较长的任务,查看区域3的耗时较长的接口和算子,再结合csv文件进行量化分析,定位出具体的性能瓶颈。
可以按照Total Time排序,找出哪类算子耗时较长。
Task Duration字段为算子耗时信息,可以按照Task Duration排序,找出高耗时算子;也可以按照Task Type排序,查看不同核(AI Core和AI CPU)上运行的高耗时算子。