控制编译算子时是否添加溢出检测逻辑。
当模型计算精度有问题,并且怀疑是模型中算子有计算溢出时,模型编译时可以通过使能该参数,添加编译算子时的溢出检测逻辑,然后重新编译模型。
使用该参数时,建议与--op_debug_level参数配合使用,这样在生成的算子*.cce文件中,可以查看是否加入了溢出检测逻辑,加入了溢出检测逻辑的代码样例如下:
if (status_overflow[0]) { xxxxxx }
参数值:
参数默认值:0
--status_check=1
Atlas 推理系列产品(Ascend 310P处理器)
Atlas 训练系列产品
Atlas 200/500 A2推理产品
使用--status_check参数只是在模型编译后生成的算子*.cce文件中加入了溢出检测逻辑,如果想查看具体哪些算子有溢出,则需要配合模型推理过程中的AscendCL aclInit接口使用,在该接口入参的json配置文件中打开“dump_debug”开关:
{ "dump":{ "dump_path":"output", "dump_debug":"on" } }
当dump_path配置为相对路径时,您可以在“应用可执行文件的目录/{dump_path}”下查看导出的数据文件,针对每个溢出算子,会导出两个数据文件:
用户可通过该信息知道具体出现溢出错误的算子,并通过•解析溢出算子的dump文件获取该算子的输入和输出信息。
用户可通过•解析算子溢出数据文件获取溢出相关信息,包括溢出算子所在的模型、AICore的status寄存器状态等。
cd /home/HwHiAiUser/Ascend/ascend-toolkit/latest/tools/operator_cmp/compare
python3 msaccucmp.py convert -d /home/HwHiAiUser/dump -out /home/HwHiAiUser/dumptonumpy -v 2
-d参数支持传入单个文件,对单个dump文件进行转换,也支持传入目录,对整个path下所有的dump文件进行转换。
$ python3 >>> import numpy as np >>> a = np.load("/home/HwHiAiUser/dumptonumpy/Pooling.pool1.1147.1589195081588018.output.0.npy") >>> b = a.flatten() >>> np.savetxt("/home/HwHiAiUser/dumptonumpy/Pooling.pool1.1147.1589195081588018.output.0.txt", b)
转换为.txt格式文件后,维度信息、Dtype均不存在。详细的使用方法请参考numpy官网介绍。
由于生成的溢出数据是二进制格式,可读性较差,需要通过工具将bin文件解析为用户可读性好的json文件。
cd /home/HwHiAiUser/Ascend/ascend-toolkit/latest/toolkit/tools/operator_cmp/compare
python3 msaccucmp.py convert -d /home/HwHiAiUser/opdebug/Opdebug.Node_OpDebug.59.1597922031178434 -out /home/HwHiAiUser/result
关键参数:
{ "DHA Atomic Add": { "model_id": 0, "stream_id": 0, "task_id": 0, "task_type": 0, "pc_start": "0x0", "para_base": "0x0", "status": 0 }, "L2 Atomic Add": { "model_id": 0, "stream_id": 0, "task_id": 0, "task_type": 0, "pc_start": "0x0", "para_base": "0x0", "status": 0 }, "AI Core": { "model_id": 514, "stream_id": 563, "task_id": 57, "task_type": 0, "pc_start": "0x1008005b0000", "para_base": "0x100800297000", "kernel_code": "0x1008005ae000", "block_idx": 1, "status": 32 } }
参数解释:
例如:status为272,转换成16进制为0x00000110,则可以判定出可能原因为0x00000010+0x00000100。