性能分析流程
当PyTorch网络在昇腾NPU上以图模式运行时,如果遇到执行速度缓慢、计算精度下降、内存占用异常或资源利用率低等问题,可通过性能分析工具(Profiling)来分析各运行阶段的指标数据(如吞吐率、内存占用、耗时等),以确定问题的根源,并针对问题模块进行优化。
目前,在图模式下进行模型性能分析的大致流程如下,请根据实际情况按需分析。
- 在模型脚本中增加关键模块的耗时信息打印,先确认问题的大致阶段(如编译、执行等)和范围(如Device侧、Host侧等)。
- 在Eager和图模式下分别执行模型,并采集对应Profiling数据,用于后续性能分析。
- 基于Profiling数据分析Host侧耗时。
- 基于Profiling数据分析Device侧执行性能。
目前常见的问题集中在如下几类:
- 第一类:图模式和Eager模式实际参与计算的算子不同导致性能问题。
- 映射算子不一致:例如PyTorch的select算子,NPU场景下Eager模式实际映射的是CANN StridedSlice算子,图模式实际映射的是CANN GatherV2算子。因此需要比对和分析GatherV2与StridedSlice算子性能。
- 映射算子数不一致:例如动态图场景,图模式可能比单算子的算子多,需要将图模式下n个算子执行效果与单算子单个op执行效果比对。
- 第二类:图模式和Eager模式算子Kernel实现不同带来的性能差异。
- 第一类:图模式和Eager模式实际参与计算的算子不同导致性能问题。
父主题: 图模式性能分析