总结
常见性能问题场景
大模型从外部设备迁移到昇腾设备训练时,常见两大性能问题场景为开箱性能优化和性能长跑劣化。开箱性能优化指用户在昇腾平台使用模型时发现性能差,直接进行优化;性能长跑劣化指训练过程中因不可预知因素导致模型性能劣化,需定位原因并解决。
问题定位方法
大模型训练性能调优的基本流程为:采集性能数据、使用MindStudio Insight定界问题、使用mstt Advisor辅助定位、针对性优化。具体方法如下:
性能问题定位流程
- 使用Ascend PyTorch Profiler采集框架侧、CANN侧和device侧的原始性能数据。
- 使用MindStudio Insight可视化工具分析数据,定界问题方向(计算、调度、通信)。
- 使用mstt Advisor工具辅助定位,输出调优建议。
- 针对问题进行优化,重复采集数据和分析,直至解决性能问题。
Ascend PyTorch Profiler采集性能数据
通过在训练脚本中插入torch_npu.profiler相关配置和参数,启动训练即可采集性能数据。采集的数据包括框架侧、CANN侧和device侧的原始性能数据,并完成解析。示例代码展示了如何配置和采集数据,生成的文件结构包括profiler_info.json、profiler_metadata.json等文件,以及详细的性能数据文件。
Mindstudio Insight定位
MindStudio Insight提供可视化工具分析性能数据,支持百卡、千卡及以上规模的可视化集群性能分析。分析流程如下:
- 概览界面:了解每个模块的具体内容,包括并行策略分析(TP、PP、DP等)、计算/通信概览。
- 计算问题:通过卡间性能比对功能,查看异常卡的算子数据,并与正常卡比较,定位算子问题。
- 调度问题:通过时间线界面比较异常卡和正常卡,定位出现问题的算子,使用HostToDevice连线分析调度任务安排。
- 通信问题:通过通信界面分析集群中全网链路性能和节点通信性能,重点关注通信矩阵和通信时长,定位慢主机或慢节点。
性能调优案例
某多模态模型训练时性能大幅度劣化,通过以下步骤解决:
- 使用Ascend PyTorch Profiler采集性能数据,集群共有16张卡。
- MindStudio Insight分析定位:
- 概览界面分析:定界为通信问题。
- 通信界面:发现大量卡间不同步现象,选择慢卡(第12卡)分析。
- 流水图界面:发现12卡存在大段空闲时间,AscendCL侧有大量事件占用资源,判断为内存占用过高导致,使用exportPYTORCH_NPU_ALLOC_CONF="expandable_segments:True"解决。
- mstt Advisor辅助定位:执行msprof-analyze advisor all -d ./profiling命令,分析结果与MindStudio Insight一致,验证了定位结论。
通过以上方法,成功定位并解决了性能劣化问题。