问题定位
定位流程
传统模型推理场景的性能问题定位流程如图1。
- 优先确定异常范围。
- 收集性能数据,可借助msprof工具进行性能数据采集和解析。
- 将解析完成的性能数据导入MindStudio Insight工具进行分析,通常传统模型推理场景问题主要会集中在计算和调度两个方向。
- 如果是下发慢的问题,可分析模型运行期间的CPU占用率,判断关键同期事件(抢占CPU、IOWait)是否为问题根因;
- 如果不是下发慢的问题,则考虑是算子执行慢的问题,需要深入分析计算方向的问题,例如,占比最高的算子是否可以优化,算子能否合并等。
- 根据问题定位的方向与根因可进一步细化分析数据并进行相应的调整。
定位步骤
- 安装所需软件包,便于后续数据采集与分析。
- CANN:使用profiling工具来采集性能数据。
- MindStudio Insight:用于分析profiling采集到的性能数据。
- 采集数据。
- 使用MindStudio Insight工具分析数据。
将解析完成的性能数据导入MindStudio Insight工具进行数据分析,使用详情可参见《MindStudio Insight工具用户指南》。
可通过以下几点观察并分析性能问题。
- 数据概览观察全局占比
单机单卡推理场景,可以选择“时间线 > 系统视图 > 覆盖分析”来了解计算和Free的占比,如图2。
其中Free表示当前时间昇腾设备没有进行任何计算或者通信的时间,Computing表示昇腾设备上执行计算动作的时间。
- 当Free的占比高于计算时,通常意味着存在调度类问题。
- 计算时间很长,在时间线上存在大量算子进行长时间的计算,此时意味着存在计算类问题。
- 调度问题
在时间线界面,打开HostToDevice连线,该连线展示CANN层算子到Ascend Hardware层算子的下发执行关系。HostToDevice的连线通常有两种形态,倾斜和竖直,如图3所示,连线倾斜,说明调度任务安排合理,昇腾设备负荷较满;如果连线竖直,说明任务下发不合理,昇腾设备负荷较低,等待任务下发。可以通过增大BatchSize、绑核、融合算子替换等方法进行调优。
- 计算问题
可以在算子界面查看算子的占比情况,如图4。
按照算子总耗时占比排序,定位到计算最慢的算子,优先确认代码中是否存在不合理的设计导致的大量无效操作,根据业务来调整代码,避免无效操作,如果算子耗时很长,需要找到算子开发人员进一步确认问题原因。
- 数据概览观察全局占比
父主题: 性能问题