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 工具使用
2.2 常见问题
-
在同一个目录多次执行 dump 会冲突吗?
答:会,同一个目录多次 dump,会覆盖上一次结果,可以使用 dump_path 参数修改 dump 目录。
-
如何 dump 算子级的数据?
答:需要配置 level 为 L2 模式。
2.3 异常情况
-
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 文件为准。