# 性能调优 [](https://gitee.com/mindspore/docs/blob/r2.7.0/docs/mindstudio/docs/source_zh_cn/feature/performance.md) MindSpore框架和MindStudio Training Tools工具链提供了多个性能分析与优化工具。 MindSpore Profiler可以为用户提供算子执行时间分析、内存使用分析、AI Core指标分析、Timeline展示等功能,帮助用户分析性能瓶颈、优化训练效率。 MindStudio Training Tools工具链中的MindStudio Insight工具、msprof-analyze工具、msLeaks工具分别负责模型训练可视化、性能数据分析、内存分配释放情况追踪。
工具 | 功能 | 简介 | 适用场景/优势 |
---|---|---|---|
MindSpore框架提供的Profiler | 性能数据采集 | 通用性能数据采集、分析功能。 | 模型性能未达到预期,需要对模型性能数据进行采集、分析和调优。 |
轻量化打点数据采集 | mstx轻量化打点模块,支持用户自定义打点以及框架内置打点。 | 大集群场景轻量化获取模型关键指标性能数据,实现问题快速定界。 | |
动态Profiler | 在不中断训练流程的前提下,修改配置文件并完成新配置下的性能数据采集任务。 | 常稳训练中发现性能劣化、抖动等,期望在不中断训练情况下进行性能分析。 | |
离线解析数据 | 对已采集的数据进行离线解析。 | 期望在模型运行过程中仅进行性能数据采集,以节省整体运行时间,或对历史已采集数据进行再次解析。 | |
MindStudio Insight | 时间线界面 | 将模型在host、device上的运行详细情况平铺在时间轴上,直观呈现host侧的API耗时情况以及device侧的task耗时,并将host与device进行关联呈现。 | 帮助用户快速识别host瓶颈或device瓶颈,同时提供各种筛选分类、专家建议等功能,支撑用户进行深度调优。 |
算子界面 | 呈现计算算子和通信算子耗时数据。 | 帮助开发者快速分析由算子耗时导致的性能瓶颈。 | |
概览界面 | 提供通信域识别、划分和耗时拆解、分析功能。支持自动识别通信域和用户自行配置通信域;支持按照通信域对比stage耗时、计算耗时和通信耗时。 | 分析同一通信域内的切分是否均匀,是否存在通信慢卡和慢链路问题,帮助开发者快速识别问题。 | |
通信界面 | 展示集群中全网链路性能以及所有节点的通信性能。 | 通过集群通信与计算重叠时间的分析可以找出集群训练中的慢主机或慢节点。 | |
内存界面 | 提供执行过程中内存信息的可视化呈现。 | 查看整体内存趋势,以及通过框选峰值区域快速定位到内存消耗过大的算子。 | |
msprof-anaylze | 集群分析工具 | 训练场景的集群性能数据分析工具,主要对基于通信域的迭代内耗时、通信时间、通信矩阵进行分析。 | 适用于定位集群内慢卡、慢节点、慢链路等问题。 |
性能比对工具 | 对采集的性能数据进行比对分析。 | 比较不同硬件/框架下的性能数据,快速识别性能差异点。 | |
专家建议工具 | 分析训练场景的性能数据并给出专家建议。 | 将采集的性能数据进行分析,并输出性能调优建议。支持对计算、通信、空闲等维度对性能数据进行拆解,分析出计算瓶颈、调度瓶颈。 | |
msleaks | 内存分析 | 提供Step内和Step间的内存异常检测能力,包括Step内内存泄漏分析和Step间内存对比分析。 | 适用于分析内存泄漏异常的场景。 |