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

**1 数据采集**

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

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

输入或者输出参数本身是一个None值。

输入参数或输出参数类型当前工具不支持，会有日志打印提醒。

输入或者输出tensor的dtype为bool时，Mean和Norm等字段为null。

如果某个api在dump支持列表support\_wrap\_ops.yaml中，但没有dump该api的数据，原因是什么？

首先确认api调用是否在采集范围内，即需要在 start 和 stop 接口涵盖的范围内。

其次，由于工具只在被调用时才对api进行patch，从而使得数据可以被dump下来。因此当api是被直接import进行调用时，由于该api的地址已经确定，

工具无法再对其进行patch，故而该api数据无法被dump下来。

**2 精度比对**

2.1 常见问题

在同一个目录多次执行 dump 会冲突吗？

答：会，同一个目录多次 dump，会覆盖上一次结果，可以使用 dump\_path 参数修改 dump 目录。

如何 dump 算子级的数据？

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

2.2 异常情况

HCCL 报错： error code: EI0006。

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

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

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

配置 dump\_path 后，使用工具报错：\[ERROR\] The file path /home/xxx/dump contains special characters。

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

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

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

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 文件为准。

