---
title: Nonzero算子常量折叠后shape异常问题-昇腾社区
description: atc工具将onnx模型转换成om模型后，msame工具做推理时报错，如下图所示：  执行推理命令： 将onnx模型转换成om模型，日志重定向在atc.log命令：
keywords: 无
url: https://www.hiascend.com/document/caselibrary/detail/topic_0000001577870685
section: (其他)
---

# Nonzero算子常量折叠后shape异常问题-昇腾社区

URL: https://www.hiascend.com/document/caselibrary/detail/topic_0000001577870685
描述: atc工具将onnx模型转换成om模型后，msame工具做推理时报错，如下图所示：  执行推理命令： 将onnx模型转换成om模型，日志重定向在atc.log命令：
关键词: 无

昇腾文档 [了解详情](https://www.hiascend.com/document)

故障案例 [了解详情](https://www.hiascend.com/document/caselibrary)

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

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

2023/05/23

1.6k

问题信息

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

#### 问题现象描述

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工具重新进行推理验证，结果如下：

本页内容

- 问题信息
- 问题现象描述
- 原因分析
- 解决措施
