AI开发平台MODELARTS-Msprobe精度比对

时间:2024-12-30 17:37:11

Msprobe精度比对

精度比对功能主要针对两类场景的问题:

  1. 同一模型,从CPU或GPU移植到NPU中存在精度下降问题,对比NPU芯片中的API计算数值与CPU或GPU芯片中的API计算数值,进行问题定位。
  2. 同一模型,进行迭代(模型、框架版本升级或设备硬件升级)时存在的精度下降问题,对比相同模型在迭代前后版本的API计算数值,进行问题定位。

首先通过在PyTorch训练脚本中插入dump接口,跟踪计算图中算子的前向传播与反向传播时的输入与输出,然后再使用子命令compare进行比对生成比对表格。当前比对结果支持计算Cosine(余弦相似度)、MaxAbsErr(最大绝对误差)和MaxRelativeErr(最大相对误差)、One Thousandth Err Ratio(双千分之一)和Five Thousandths Err Ratio(双千分之五)这几种评价指标,工具通过阈值过滤筛选出不达标API的输入输出提示用户进行重点关注。使用步骤如下:

  1. 通过pip安装Msprobe工具。

    # shell
    pip install mindstudio-probe

  2. 获取NPU和标杆的dump数据。

    PyTorch训练脚本插入dump接口方式如下:

    from msprobe.pytorch import PrecisionDebugger
    debugger = PrecisionDebugger(config_path='./config.json')
    ...
    debugger.start() # 一般在训练循环开头启动工具。
    ... # 循环体
    debugger.stop() # 一般在训练循环末尾结束工具。
    debugger.step() # 在训练循环的最后需要重置工具,非循环场景不需要。

    具体的config.json的配置要求请参见介绍

  3. 创建比对compare.json文件。

    • 单卡场景
      {
      "npu_path": "./npu_dump/dump.json",
      "bench_path": "./bench_dump/dump.json",
      "stack_path": "./npu_dump/stack.json",
      "is_print_compare_log": true
      }
    • 多卡场景
      { 
      "npu_path": "./npu_dump/step0",
      "bench_path": "./bench_dump/step0",
      "is_print_compare_log": true
      }

    单卡场景npu_path、bench_path、stack_path分别表示从步骤2中NPU环境所生成的dump.json、标杆环境生成的dump.json及NPU环境生成的stack.json文件,is_print_compare_log配置是否开启日志打屏。

    多卡场景区别于单卡场景会在步骤2按rank标号信息生成多个rank的dump文件结果,npu_path指定NPU环境生成包含多rank目录,gpu_path指定标杆环境包含多rank目录,is_print_compare_log配置是否开启日志打屏。

  4. 精度比对生成比对报告

    msproe -f pytorch compare -i ./compare.json -o ./output -s

    这里-i指定步骤3所创建compare.json文件,-o指定比对结果文件存盘目录,-s配置是否生成堆栈信息。生成结果为advisor_{timestamp}.txt和compare_result_{timestamp}.xlsx文件,advisor_{timestamp}.txt列出了可能存在精度问题的API的专家建议,compare_result_{timestamp}.xlsx文件列出了所有执行精度比对的API详细信息和比对结果。

详细工具的使用指导请参考Pytorch精度比对介绍。

support.huaweicloud.com/bestpractice-modelarts/toctopics/zh-cn_topic_0000002017370524.html