本文介绍训练场景开发工具快速入门,主要针对训练开发流程中的模型开发&迁移、模型精度调试和模型性能调优环节分别使用的开发工具进行介绍。
主要工具介绍:
msProbe工具:
基于昇腾开发的大模型或者是从GPU迁移到昇腾NPU环境的大模型,在训练过程中可能出现精度溢出、loss曲线跑飞或不收敛等异常问题。由于训练loss等指标无法精确定位问题模块,本文提供了msProbe(MindStudio Probe,精度调试工具)进行快速定界。精度调试工具在下文均简称为msProbe。
msProbe为msTT工具链的精度工具,通过分别对标杆环境(如已调试好的CPU、GPU或昇腾NPU等环境)和昇腾NPU环境下的训练精度数据进行采集和比对,从而找出差异点。
MindSpore Profiler接口工具:MindSpore训练场景下的性能数据采集。
msprof-analyze工具:统计、分析以及输出相关的调优建议。
MindStudio Insight工具:对性能数据进行可视化展示。
使用流程
以下介绍训练开发的主要流程中使用到msTT以及相关工具的操作流程。
模型开发&迁移
MindSpore训练场景暂未提供迁移工具,本文以直接在昇腾NPU环境开发的训练脚本为例。
模型精度调试
使用msProbe工具在模型精度调试中主要执行如下操作:
训练前配置检查
识别两个环境影响精度的配置差异。
训练状态监测
监测训练过程中计算、通信、优化器等部分出现的异常情况。
精度数据采集
采集训练过程中的API或Module层级前反向输入输出数据。
精度预检
扫描API数据,找出存在精度问题的API。
精度比对
对比NPU侧和标杆环境的API数据,快速定位精度问题。
模型性能调优
MindSpore训练场景在模型性能调优中主要执行如下操作:
- 性能数据采集:MindSpore Profiler接口工具。
- 性能数据分析:msprof-analyze工具。
- 性能数据可视化展示:MindStudio Insight工具。
环境准备[object Object][object Object]
准备一台基于昇腾NPU的训练服务器(如Atlas A2 训练系列产品)。
安装框架。
MindSpore训练场景暂未提供迁移工具,本文以直接在Ascend环境开发的训练脚本为例。
前提条件
- 完成。
- 以“mindspore_main.py”命名为例,创建训练脚本文件,脚本内容直接拷贝。
- 将“mindspore_main.py”文件上传至训练服务器的任意目录下(需保证该目录下文件的读写权限)。
执行训练
直接执行训练。
如果训练正常进行,完成后打印如下日志。
根据本手册的样例,需要将工具接口添加到训练脚本中进行配置检查。
[object Object]
前提条件
工具安装
在昇腾NPU环境下安装msProbe工具,执行如下命令:
执行检查
操作步骤如下:
获取两个环境的zip包(包含影响训练精度的环境配置:环境变量、第三方库版本、权重、数据集、随机函数等)。
分别以MindSpore 2.6.0和MindSpore 2.7.0环境执行以下操作。需要注意给予两个zip包不同的命名。
[object Object]
在训练流程执行到的第一个Python脚本开始处插入如下代码。
[object Object]fmk:训练框架,string类型,可选"pytorch"和"mindspore",这里配置为"mindspore"。
在模型初始化好之后插入如下代码。
[object Object]- model:初始化好的模型,默认不会采集权重和数据集。
- output_zip_path:输出zip包的路径,string类型,需要指定zip包的名称,默认为"./config_check_pack.zip"。
- fmk:训练框架。可选"pytorch"和"mindspore",这里配置为"mindspore"。
执行训练脚本命令。
[object Object]采集完成后会得到一个zip包,里面包括各项影响精度的配置。分rank和step存储,其中step为micro_step。
将两个zip包传到同一个环境下,使用如下命令进行比对。
[object Object]其中bench_zip_path为标杆侧采集到的zip包名称,cmp_zip_path为待对比侧采集到的zip包名称。
output_path默认为"./config_check_result"。
执行以上命令后,在output_path里会生成如下数据:
- bench:bench_zip_path里打包的数据。
- cmp:cmp_zip_path里打包的数据。
- result.xlsx:比对结果。会有多个sheet页,其中summary总览通过情况,其余页是具体检查项的详情,其中step为micro_step。
检查通过情况。
须保证以下检查均一致则通过,若不一致则需要自行调整环境:
- 环境变量
- 第三方库版本
- 数据集
- 权重
- 随机操作
如下所示:
[object Object]此处MindSpore场景本身就是分别以MindSpore 2.6.0和MindSpore 2.7.0版本为例,所以这里的pip检查第三方库版本显示error。
前提条件
操作步骤
以执行权重梯度监测功能为例,创建配置文件。
以在训练脚本所在目录创建monitor_v2_config.json配置文件为例,文件内容拷贝如下示例配置。
[object Object]在训练脚本中添加工具,如下所示。
[object Object]
[object Object]执行训练脚本命令。
[object Object]查看结果。
训练执行完成后在当前路径生成rank_{rank_id}目录,目录下根据时间戳生成多份结果,查看最新目录下的文件,如下所示。
图1 结果文件内容
前提条件
执行采集
创建配置文件。
以在训练脚本所在目录创建config.json配置文件为例,文件内容拷贝如下示例配置。
[object Object]分别以MindSpore 2.6.0和MindSpore 2.7.0环境下的训练脚本(mindspore_main.py文件)中添加工具,如下所示。
[object Object]
[object Object][object Object]
执行训练脚本命令,工具会采集模型训练过程中的精度数据。
[object Object]日志打印出现如下示例信息表示数据采集成功,完成采集后即可查看数据。
[object Object]
结果查看
dump_path参数指定的路径下会出现如下目录结构,可以根据需求选择合适的数据进行分析。
前提条件
执行预检
直接在昇腾NPU环境下执行预检。
此时**-o**参数指定的路径下会生成两个csv文件,分别为accuracy_checking_details_{timestamp}.csv和accuracy_checking_result_{timestamp}.csv。
accuracy_checking_result_{timestamp}.csv标明每个API是否通过测试。对于其中没有通过测试的或者特定感兴趣的API,根据其API Name字段在accuracy_checking_details_{timestamp}.csv中查询其各个输出的达标情况以及比较指标。
图1 accuracy_checking_result
图2 accuracy_checking_details
前提条件
- 完成。
- 以MindSpore框架内,不同版本下的cell模块比对场景为例,参见,完成不同框架版本的cell模块dump,其中不同框架版本以MindSpore 2.6.0和MindSpore 2.7.0为例。
执行比对
数据准备。
根据前提条件获得两份精度数据目录,两份数据保存目录名称分别以dump_data_2.6.0和dump_data_2.7.0为例。
dump_data_2.6.0目录下dump.json路径为
[object Object]。dump_data_2.7.0目录下dump.json路径为
[object Object]。执行比对。
命令如下:
[object Object]出现如下打印说明比对成功:
[object Object]比对结果文件分析。
compare会在./compare_result/accuracy_compare生成如下文件。
compare_result_{timestamp}.xlsx:文件列出了所有执行精度比对的API详细信息和比对结果,可通过比对结果(Result)、错误信息提示(Err_Message)定位可疑算子,但鉴于每种指标都有对应的判定标准,还需要结合实际情况进行判断。
示例如下:
图1 compare_result_1
图2 compare_result_2
图2 compare_result_3
前提条件
执行比对
数据准备。
根据前提条件获得两份精度数据目录,两份数据保存目录名称分别以dump_data_2.6.0和dump_data_2.7.0为例。
dump_data_2.6.0目录路径为
[object Object]。dump_data_2.7.0目录路径为
[object Object]。执行图构建比对。
[object Object]比对完成后在/home/dump/output下生成vis后缀文件。
启动TensorBoard。
[object Object]--logdir指定的路径即为步骤2中的/home/dump/output路径。
执行以上命令后打印如下日志。
[object Object]需要在Windows环境下打开浏览器,访问地址
[object Object],其中ubuntu修改为服务器的IP地址,例如[object Object]。访问地址成功后页面显示TensorBoard界面,如下所示。
图1 分级可视化构图比对
由于本样例在dump数据时"level"配置为"L1",故采集到模型结构数据为空,分级可视化构图时无数据,如上图为其他数据示例。
前提条件
[object Object]
执行采集
采集动作主要以MindSpore 2.7.0版本为例,若需要进行性能比对操作,也可以再采集MindSpore 2.6.0版本的性能数据。
在昇腾NPU环境下的训练脚本(mindspore_main.py文件)中添加MindSpore Profiler接口工具,如下所示。
[object Object]
[object Object][object Object]
执行训练脚本命令,工具会采集模型训练过程中的性能数据。
[object Object]查看采集到的MindSpore训练性能数据结果文件。
训练结束后,在mindspore.profiler.tensorboard_trace_handler接口指定的目录下生成MindSpore Profiler接口的性能数据结果目录,如下示例。
[object Object]MindSpore Profiler接口采集的性能数据可以使用msTT的msprof-analyze工具进行辅助分析,也可以直接使用MindStudio Insight工具进行可视化分析,详细操作请参见和[使用MindStudio Insight工具可视化性能数据](#使用MindStudio Insight工具可视化性能数据)。
前提条件
安装msprof-analyze,命令如下:
[object Object]提示出现如下信息则表示安装成功。
[object Object]
执行msprof-analyze分析[object Object][object Object]
[object Object]
msprof-analyze主要对基于通信域的迭代内耗时分析、通信时间分析以及通信矩阵分析为主,从而定位慢卡、慢节点以及慢链路问题。
操作如下:
数据准备。
将所有Device下的性能数据拷贝到同一目录下。
执行性能分析操作。
[object Object]分析结果在-d参数指定目录下生成cluster_analysis_output文件夹并输出cluster_step_trace_time.csv、cluster_communication_matrix.json、cluster_communication.json文件。
集群分析工具的交付件通过MindStudio Insight工具展示,详细操作请参见[使用MindStudio Insight工具可视化性能数据](#使用MindStudio Insight工具可视化性能数据)。
执行advisor分析
msprof-analyze的advisor功能是将MindSpore Profiler采集并解析出的性能数据进行分析,并输出性能调优建议。
命令如下:
分析结果输出相关简略建议到执行终端中,并在命令执行目录下生成“mstt_advisor_{timestamp}.html”和“/log/mstt_advisor_{timestamp}.xlsx”文件供用户查看。
advisor工具的分析结果主要提供可能存在性能问题的专家建议。
执行compare_tools性能比对
compare_tools功能用于对比不同框架或其他软件版本下,采集同一训练工程昇腾NPU环境性能数据之间的差异。
命令如下:
分析结果输出到执行终端中,并在**--output_path**参数指定路径下生成“performance_comparison_result_{timestamp}.xlsx”文件供用户查看。
性能比对工具将总体性能拆解为训练耗时和内存占用,其中训练耗时可拆分为算子(包括nn.Module)、通信、调度三个维度,并打印输出总体指标,帮助用户定位劣化的方向。与此同时,工具还会在“performance_comparison_result_{timestamp}.xlsx”文件中展示每个算子在执行耗时、通信耗时、内存占用的优劣,可通过DIFF列大于0筛选出劣化算子。此处不提供示例,详细结果介绍请参见《》中的“”。
前提条件
操作步骤
安装MindStudio Insight。
MindStudio Insight可视化工具推荐在Windows环境使用。
双击桌面的MindStudio Insight快捷方式图标,启动MindStudio Insight。
导入性能数据。
分析性能数据。