msprobe精度定位工具常见问题整理

1 数据采集

  1. dump.json中API或Module统计信息里出现null或None值的原因是什么?

    dump.json里出现null或None值的可能性较多,常见的场景有:

    • 输入或者输出参数本身是一个None值。
    • 输入参数或输出参数类型当前工具不支持,会有日志打印提醒。
    • 输入或者输出tensor的dtype为bool时,Mean和Norm等字段为null。
  2. 如果某个api在dump支持列表support_wrap_ops.yaml中,但没有dump该api的数据,原因是什么?

    • 首先确认api调用是否在采集范围内,即需要在 startstop 接口涵盖的范围内。
    • 其次,由于工具只在被调用时才对api进行patch,从而使得数据可以被dump下来。因此当api是被直接import进行调用时,由于该api的地址已经确定,
      工具无法再对其进行patch,故而该api数据无法被dump下来。

2 精度比对

2.1 工具使用

2.2 常见问题

  1. 在同一个目录多次执行 dump 会冲突吗?

    答:会,同一个目录多次 dump,会覆盖上一次结果,可以使用 dump_path 参数修改 dump 目录。

  2. 如何 dump 算子级的数据?

    答:需要配置 level 为 L2 模式。

2.3 异常情况

  1. HCCL 报错: error code: EI0006。

    故障现象:使用 msprobe 工具时,报错:error code: EI0006。

    故障原因:CANN 软件版本较低导致不兼容。

    故障处理:升级新版 CANN 软件版本。

  2. 配置 dump_path 后,使用工具报错:[ERROR] The file path /home/xxx/dump contains special characters。

    答:请检查你设置的 dump 绝对路径是否包含特殊字符,确保路径名只包含大小写字母、数字、下划线、斜杠、点和短横线;注意,如果执行脚本的路径为 /home/abc++/,设置的 dump_path=“./dump”,工具实际校验的路径为绝对路径 /home/abc++/dump,++ 为特殊字符,会引发本条报错。

  3. 无法 dump matmul 权重的反向梯度数据。

    答:matmul 期望的输入是二维,当输入不是二维时,会将输入通过 view 操作展成二维,再进行 matmul 运算,因此在反向求导时,backward_hook 能拿到的是 UnsafeViewBackward 这步操作里面数据的梯度信息,取不到 MmBackward 这步操作里面数据的梯度信息,即权重的反向梯度数据。典型的例子有,当 linear 的输入不是二维,且无 bias 时,会调用 output = input.matmul(weight.t()),因此拿不到 linear 层的 weight 的反向梯度数据。

  4. dump.json 文件中的某些 api 的 dtype 类型为 float16,但是读取此 api 的 npy 文件显示的 dtype 类型为 float32。

    答:msprobe 工具在 dump 数据时需要将原始数据从 npu to cpu 上再转换为 numpy 类型,npu to cpu 的逻辑和 gpu to cpu 是保持一致的,都存在 dtype 可能从 float16 变为 float32 类型的情况,如果出现 dtype 不一致的问题,最终采集数据的 dtype 以 pkl 文件为准。