find precision_data/npu/debug_0 -type f -name "*" | xargs -i python3 /usr/local/Ascend/ascend-toolkit/latest/tools/operator_cmp/compare/msaccucmp.py convert -d {} -out dump_data_npy/ -v 2
该命令将“precision_data/npu/debug_0”目录下的文件通过msaccucmp.py脚本进行格式转换,并保存到dump_data_npy目录下。其中“/usr/local/Ascend/ascend-toolkit/”目录为cann安装目录,可根据实际修改,msaccucmp.py脚本命令使用可参考《CANN 精度调试工具用户指南》中“dump数据文件Format转换”章节。
转换后的npy数据保存在“dump_data_npy”目录下,包含网络中所有算子的输入和输出数据,文件按照“.”分割后的5个位置是时间戳,将所有文件按照时间戳从小到大排序,依次判断文件中是否存在nan,从中找到最先出现nan的数据文件,如果存在则打印文件名称,并终止循环;如果没有打印,说明文件中不存在nan,需要检查dump步骤是否正确执行。文件的命名格式说明可参考《CANN 精度调试工具用户指南》中“数据格式要求”章节。
执行python3 find_nan.py命令,find_nan.py内容如下:
import glob import numpy as np files = glob.glob("dump_data_npy/*") files.sort(key = lambda x : int(x.split(".")[4])) for i in files: f = np.load(i) if np.isnan(f).any(): print(i) break