离线推理场景下,推荐使用msprof命令行方式采集和解析性能数据,并通过生成的结果文件分析性能瓶颈。
首次使用可以选取一个简单的图片分类推理应用进行尝试,参考README成功编译并运行该应用。
msprof --application=/home/HwHiAiUser/HIAI_PROJECTS/MyAppname/out/main --output=/home/HwHiAiUser/profiling_output
参数 |
描述 |
可选/必选 |
---|---|---|
--application |
配置为运行环境上AI任务文件。 不建议配置其他用户目录或其他用户可写目录下的AI任务,避免提权风险。 不建议配置删除文件或目录、修改密码、提权命令等有安全风险的高危操作。 |
必选 |
--output |
收集到的Profiling数据的存放路径,默认为AI任务文件所在目录。 |
可选 |
命令执行完成后,在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}时间戳。 |
从上文我们可以看到,性能数据文件较多,分析方法也较灵活,以下介绍几个重要文件及分析方法。
从上图可以大致分析出耗时较长的API、算子、任务流等,并且根据对应的箭头指向找出对应的下发关系,分析执行推理过程中下层具体耗时较长的任务,查看区域3的耗时较长的接口和算子,再结合csv文件进行量化分析,定位出具体的性能瓶颈。
可以按照Total Time排序,找出哪类算子耗时较长。
Task Duration字段为算子耗时信息,可以按照Task Duration排序,找出高耗时算子;也可以按照Task Type排序,查看不同核(AI Core和AI CPU)上运行的高耗时算子。