昇腾故障案例详情页

Nonzero算子常量折叠后shape异常问题

2023/05/23

81

暂无评分

问题信息

问题来源产品大类关键字
官方算子开发

问题现象描述

atc工具将onnx模型转换成om模型后,msame工具做推理时报错,如下图所示:

执行推理命令:

 ./msame --model "/home/username/bert2.om" --output "./out/" --outfmt BIN --loop 1

将onnx模型转换成om模型,日志重定向在atc.log命令:

atc --framework=5 --model=bert.onnx --input_format=ND --input_shape="input1:1,512;input2:1,512" --output=./out/ --log=debug --soc_version=Ascend310P3

原因分析

  1. 通过查看ge图可以发现PartitionedCall_NonZero_14_Transpose_219这个节点中输入的shape为[-1,1],常量折叠正常情况下shape不应该存在负数。

  2. 更换CANN版本并增加该算子的日志打印,定位出Nonzero算子常量折叠。Nonzero算子实现中输入的shape为[1, 512], 但GE层获取到的shape为[1,-1]。

  3. 查看该算子实现中又刷新为实际的shape(非负数)。

  4. 最终可以确认该算子为三类算子,即infershape依赖tensor的值。

    infershape完成后,会将shape刷新为-1,等compute完成会再把计算出的shape反刷回去,但是常量折叠场景没有这个反刷的流程,所以引擎GE层获取到的shape就是-1,该算子默认在常量折叠场景下的shape为[1,-1]。

解决措施

直接更改算子信息库中的配置,以便该算子不存在常量折叠。

获取配置文件/usr/local/Ascend/ascend-toolkit/latest/opp/built-in/op_impl/aicpu/aicpu_kernel/config/aicpu_kernel.json,在文件对应的算子中添加opInfo.opsFlag=OPS_FLAG_CLOSE,如下图所示:

msame工具重新进行推理验证,结果如下:

本页内容

该页面对您有帮助吗?
我要评分