开发者
资源
[object Object][object Object][object Object]

本文介绍训练场景开发工具快速入门,主要针对训练开发流程中的模型开发&迁移、模型精度调试和模型性能调优环节分别使用的开发工具进行介绍。

主要工具介绍:

  • msProbe工具:

    基于昇腾开发的大模型或者是从GPU迁移到昇腾NPU环境的大模型,在训练过程中可能出现精度溢出、loss曲线跑飞或不收敛等异常问题。由于训练loss等指标无法精确定位问题模块,本文提供了msProbe(MindStudio Probe,精度调试工具)进行快速定界。精度调试工具在下文均简称为msProbe。

    msProbe为msTT工具链的精度工具,通过分别对标杆环境(如已调试好的CPU、GPU或昇腾NPU等环境)和昇腾NPU环境下的训练精度数据进行采集和比对,从而找出差异点。

  • Ascend PyTorch Profiler接口工具:PyTorch训练场景下的性能数据采集。

  • msprof-analyze工具:统计、分析以及输出相关的调优建议。

  • MindStudio Insight工具:对性能数据进行可视化展示。

使用流程

以下介绍训练开发的主要流程中使用到msTT以及相关工具的操作流程。

  1. 模型开发&迁移

    PyTorch训练场景使用分析迁移工具进行GPU向昇腾NPU环境迁移。

  2. 模型精度调试

    使用msProbe工具在模型精度调试中主要执行如下操作:

    1. 训练前配置检查

      识别两个环境影响精度的配置差异。

    2. 训练状态监测

      监测训练过程中计算、通信、优化器等部分出现的异常情况。

    3. 精度数据采集

      采集训练过程中的API或Module层级前反向输入输出数据。

    4. 精度预检

      扫描API数据,找出存在精度问题的API。

    5. 精度比对

      对比NPU侧和标杆环境的API数据,快速定位精度问题。

  3. 模型性能调优

    PyTorch训练场景在模型性能调优中主要执行如下操作:

    1. 性能数据采集:Ascend PyTorch Profiler接口工具。
    2. 性能数据分析:msprof-analyze工具。
    3. 性能数据可视化展示:MindStudio Insight工具。

环境准备[object Object][object Object]

  1. 准备一台基于昇腾NPU的训练服务器(如Atlas A2 训练系列产品)。

  2. 安装昇腾NPU驱动和配套版本的CANN软件(包含Toolkit和ops包)并配置环境变量,具体请参见《

  3. 安装框架。

    PyTorch训练场景以安装PyTorch 2.9.0、Python 3.12、系统架构AArch64、torchvision==0.24.0为例,具体操作请参见《》的“安装PyTorch > ”章节。

[object Object]

PyTorch训练场景使用分析迁移工具的自动迁移,将基于GPU的训练脚本迁移为支持昇腾NPU环境的脚本,大幅度提高脚本迁移速度,降低开发者的工作量。本样例可以让开发者快速体验分析迁移工具的迁移效率。原基于GPU的训练脚本迁移成功后可在昇腾NPU环境上运行。

分析迁移工具更多介绍请参见《》。

前提条件

  1. 完成
  2. 本样例选用ResNet50模型,以“pytorch_main.py”命名为例,创建训练脚本文件,脚本内容直接拷贝,确保该脚本在GPU环境下正常运行。

执行迁移

需要先将基于GPU的训练脚本迁移为支持昇腾NPU环境的脚本,再执行训练。

  1. 将“pytorch_main.py”文件上传至昇腾NPU训练服务器的任意目录下(需保证该目录下文件的读写权限)。

  2. 在训练脚本中导入自动迁移的库代码。

    中的24 25行添加自动迁移的库代码,即可在昇腾NPU环境下直接执行训练,如下所示。

    [object Object]

    也可直接拷贝添加完成后的完整代码

  3. 迁移完成后的训练脚本可在昇腾NPU环境上运行,执行以下训练命令。

    [object Object]

    其中--gpu参数为指定执行的GPU,在昇腾NPU环境中执行时该参数不生效,上述操作添加的接口会自动适配该命令。

    如果训练正常进行,开始打印迭代日志,说明训练功能迁移成功,如下所示。

    [object Object]
  4. 成功保存权重,说明保存权重功能迁移成功。

[object Object][object Object]

根据本手册的样例,需要将工具接口添加到训练脚本中进行配置检查。

[object Object]

前提条件

  • 完成
  • 完成,确保在所有示例的环境可正常完成训练任务。

工具安装

在昇腾NPU环境下安装msProbe工具,执行如下命令:

[object Object]

具体请参见《》。

执行检查

操作步骤如下:

  1. 获取两个环境的zip包(包含影响训练精度的环境配置:环境变量、第三方库版本、权重、数据集、随机函数等)。

    分别在GPU和昇腾NPU环境下执行以下操作。需要注意给予两个zip包不同的命名。

    [object Object]
    1. 在训练流程执行到的第一个Python脚本开始处插入如下代码(本样例即为pytorch_main.py文件)。

      [object Object]

      fmk:训练框架,string类型,可选"pytorch"和"mindspore",这里配置为"pytorch"。

    2. 在模型初始化好之后插入如下代码。

      [object Object]
      • model:初始化好的模型,默认不会采集权重和数据集。
      • output_zip_path:输出zip包的路径,string类型,需要指定zip包的名称,默认为"./config_check_pack.zip"。
      • fmk:训练框架。可选"pytorch"和"mindspore",这里配置为"pytorch"。
    3. 执行训练脚本命令。

      [object Object]

      采集完成后会得到一个zip包,里面包括各项影响精度的配置。分rank和step存储,其中step为micro_step。

  2. 将两个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。
  3. 检查通过情况。

    须保证以下检查均一致则通过,若不一致则需要自行调整环境:

    • 环境变量
    • 第三方库版本
    • 数据集
    • 权重
    • 随机操作

    如下所示:

    [object Object]
[object Object]

前提条件

  • 完成
  • 完成

操作步骤

  1. 以执行权重梯度监测功能为例,创建配置文件。

    以在训练脚本所在目录创建monitor_v2_config.json配置文件为例,文件内容拷贝如下示例配置。

    [object Object]
  2. 在训练脚本中添加工具,如下所示。

    [object Object]
    [object Object]
  3. 执行训练脚本命令。

    [object Object]
  4. 查看结果。

    训练执行完成后在当前路径生成rank_{rank_id}目录,目录下根据时间戳生成多份结果,查看最新目录下的文件,如下所示。

    图1 结果文件内容

    输出结果详细介绍请参见“”。

[object Object]

本样例选用ResNet50模型,采用虚拟数据训练,节省数据集下载时间。

前提条件

  • 完成
  • 完成

执行采集

  1. 创建配置文件。

    以在训练脚本所在目录创建config.json配置文件为例,文件内容拷贝如下示例配置。

    [object Object]
  2. 分别在GPU和昇腾NPU环境下的训练脚本(pytorch_main.py文件)中添加工具,如下所示。

    [object Object]
    [object Object]
    [object Object]
  3. 执行训练脚本命令,工具会采集模型训练过程中的精度数据。

    [object Object]

    日志打印出现如下信息后,即可手动停止模型训练查看采集数据,节省时间。

    [object Object]

结果查看

dump_path参数指定的路径下会出现如下目录结构,可以根据需求选择合适的数据进行分析。

[object Object]

采集后的数据需要用等工具进行进一步分析。

[object Object]

前提条件

  • 完成
  • 完成,得到PyTorch训练场景昇腾NPU环境的精度数据。

执行预检

  1. 数据准备。

    将昇腾NPU环境下dump的精度数据拷贝至GPU环境。(用于保证预检执行的精度数据一致)

  2. 启动预检。

    分别在GPU和昇腾NPU环境下使用run_ut命令执行预检操作。(预检场景GPU环境需要使用昇腾NPU环境拷贝的精度数据)

    [object Object]
    [object Object]

    出现如下日志表示预检完成。

    [object Object]

    此时**-o**参数指定的路径下会生成两个csv文件,分别为accuracy_checking_details_{timestamp}.csv和accuracy_checking_result_{timestamp}.csv。

    这两个文件是预检的中间结果,需要完成下一步,才能得到预检的最终结果。

  3. 预检结果比对。

    将NPU和GPU的预检结果进行比对,查看NPU数据中是否存在精度问题的API。

    可以将GPU上的accuracy_checking_details_{timestamp}.csv文件传到昇腾NPU环境,执行如下命令。

    [object Object]
  4. 预检结果分析。

    api_precision_compare会在/home/checker_result/compare_result目录下生成两个csv文件。

    • api_precision_compare_result_{timestamp}.csv文件会更详细的标明API在各种比对算法下的达标情况,示例如下。

      图1 api_precision_compare_result_{timestamp}

    • api_precision_compare_details_{timestamp}.csv文件会标明每个API是否通过测试,示例如下。

      图2 api_precision_compare_details_1

      图3 api_precision_compare_details_2

      更多比对结果字段含义请参见“”。

[object Object][object Object]

前提条件

  • 完成
  • 完成,得到GPU和昇腾NPU环境的精度数据。

执行比对

  1. 数据准备。

    完成前提条件中GPU和昇腾NPU环境的数据dump后,将GPU环境下dump的精度数据拷贝至昇腾NPU环境。注意区分dump_path指定的目录名称,以dump_data_npu和dump_data_gpu为例。

    dump_data_gpu目录下dump.json路径为[object Object]

    dump_data_npu目录下dump.json路径为[object Object]

  2. 执行比对。

    命令如下:

    [object Object]

    出现如下打印说明比对成功:

    [object Object]
  3. 比对结果文件分析。

    compare会在/home/accuracy_compare生成如下文件。

    compare_result_{timestamp}.xlsx:文件列出了所有执行精度比对的API详细信息和比对结果,可通过比对结果(Result)、错误信息提示(Err_Message)定位可疑算子,但鉴于每种指标都有对应的判定标准,还需要结合实际情况进行判断。

    更多比对结果分析请参见“”。

[object Object]

前提条件

  • 完成

  • 完成,得到GPU和昇腾NPU环境的精度数据。

执行比对

  1. 数据准备。

    完成前提条件中GPU和昇腾NPU环境的数据dump后,将GPU环境下dump的精度数据拷贝至昇腾NPU环境。注意区分dump_path指定的目录名称,以dump_data_npu和dump_data_gpu为例。

    dump_data_gpu目录路径为[object Object]

    dump_data_npu目录路径为[object Object]

  2. 执行图构建比对。

    [object Object]

    比对完成后在/home/dump/output下生成一个[object Object]后缀的文件。

  3. 启动TensorBoard。

    [object Object]

    --logdir指定的路径即为步骤2中的/home/dump/output路径。

    执行以上命令后打印如下日志。

    [object Object]

    需要在Windows环境下打开浏览器,访问地址[object Object],其中ubuntu修改为服务器的IP地址,例如[object Object]

    访问地址成功后页面显示TensorBoard界面,如下所示。

    图1 分级可视化构图比对

    由于本样例在dump数据时"level"配置为"L1",故采集到模型结构数据为空,分级可视化构图时无数据,如上图为其他数据示例。

[object Object][object Object]

前提条件

  • 完成
  • 根据中的PyTorch部分,得到可正常执行训练任务的GPU和昇腾NPU环境。
[object Object]

执行采集

  1. 在昇腾NPU环境下的训练脚本(pytorch_main.py文件)中添加Ascend PyTorch Profiler接口工具,如下所示。

    [object Object]
    [object Object]
    [object Object]
  2. 执行训练脚本命令,工具会采集模型训练过程中的性能数据。

    [object Object]
  3. 查看采集到的PyTorch训练性能数据结果文件。

    训练结束后,在torch_npu.profiler.tensorboard_trace_handler接口指定的目录下生成Ascend PyTorch Profiler接口的性能数据结果目录,如下示例。

    [object Object]

    Ascend PyTorch Profiler接口采集的性能数据可以使用msTT的msprof-analyze工具进行辅助分析,也可以直接使用MindStudio Insight工具进行可视化分析,详细操作请参见和[使用MindStudio Insight工具可视化性能数据](#使用MindStudio Insight工具可视化性能数据)。

[object Object][object Object]

前提条件

  1. 完成

  2. 完成,得到昇腾NPU环境的性能数据。

  3. 安装msprof-analyze,命令如下:

    [object Object]

    提示出现如下信息则表示安装成功。

    [object Object]

    msprof-analyze工具详细介绍请参见《》。

执行msprof-analyze分析[object Object][object Object]

[object Object]

msprof-analyze主要对基于通信域的迭代内耗时分析、通信时间分析以及通信矩阵分析为主,从而定位慢卡、慢节点以及慢链路问题。

操作如下:

  1. 数据准备。

    将所有Device下的性能数据拷贝到同一目录下。

  2. 执行性能分析操作。

    [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采集并解析出的性能数据进行分析,并输出性能调优建议。

命令如下:

[object Object]

分析结果输出相关简略建议到执行终端中,并在命令执行目录下生成“mstt_advisor_{timestamp}.html”和“/log/mstt_advisor_{timestamp}.xlsx”文件供用户查看。

advisor工具的分析结果主要提供可能存在性能问题的专家建议。

详细结果介绍请参见《》中的“”。

执行compare_tools性能比对

compare_tools功能用于对比不同框架或其他软件版本下,采集同一训练工程昇腾NPU环境性能数据之间的差异。

命令如下:

[object Object]

分析结果输出到执行终端中,并在**--output_path**参数指定路径下生成“performance_comparison_result_{timestamp}.xlsx”文件供用户查看。

性能比对工具将总体性能拆解为训练耗时和内存占用,其中训练耗时可拆分为算子(包括nn.Module)、通信、调度三个维度,并打印输出总体指标,帮助用户定位劣化的方向。与此同时,工具还会在“performance_comparison_result_{timestamp}.xlsx”文件中展示每个算子在执行耗时、通信耗时、内存占用的优劣,可通过DIFF列大于0筛选出劣化算子。此处不提供示例,详细结果介绍请参见《》中的“”。

[object Object]
  • 生成的性能数据均可以使用MindStudio Insight工具将性能数据可视化。
  • 时,输出的交付件需要使用MindStudio Insight工具将数据可视化。

前提条件

完成,获取对应交付件。

操作步骤

  1. 安装MindStudio Insight。

    参见《》下载并安装MindStudio Insight。

    MindStudio Insight可视化工具推荐在Windows环境使用。

  2. 双击桌面的MindStudio Insight快捷方式图标,启动MindStudio Insight。

  3. 导入性能数据。

    1. 的性能数据拷贝至Windows环境。

    2. 单击MindStudio Insight界面左上方“导入数据”,在弹框中选择性能数据文件或目录,然后单击“确认”进行导入,导入结果如下图所示。

      图1 展示性能数据

  4. 分析性能数据。

    MindStudio Insight工具将性能数据可视化后可以更直观地分析性能瓶颈,详细分析方法请参见《》。

[object Object][object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]