PaddlePaddle / Paddle2ONNX

ONNX Model Exporter for PaddlePaddle
Apache License 2.0
717 stars 166 forks source link

[Split] operators bug : In ONNX opset version 18, there is a bug when inferring models with the [Split] operator. #1273

Closed jiuyuedeyu156 closed 2 months ago

jiuyuedeyu156 commented 3 months ago

问题描述 在 ONNX 算子版本18中,使用 Split 算子进行推理时会出现错误。 报错详情 split-18算子要求至少存在【split】输入 或【num_outputs】属性二者其中之一。

onnxruntime.capi.onnxruntime_pybind11_state.Fail: [ONNXRuntimeError] : 
1 : FAIL : Load model from Paddle2ONNX/split/model.onnx failed:Node (p2o.Split.0) Op (Split) 
[ShapeInferenceError] Neither 'split' input nor 'num_outputs' attribute has been given

报错位置 网络结构如下:

class Net(paddle.nn.Layer):
    """
    simple Net
    """

    def __init__(self):
        super(Net, self).__init__()

    def forward(self, inputs):
        """
        forward
        """
        x = paddle.split(inputs, num_or_sections= 2)
        return x

执行命令,导出onnx,要求opset_version=18

 paddle2onnx --model_dir ./ --model_filename model.pdmodel       --save_file model.onnx --opset_version 18

但在推理过程中会出现上述报错。 报错位置位于下列代码的最后一句

ort_session = onnxruntime.InferenceSession(onnx_model_path)
input_names = [input.name for input in ort_session.get_inputs()]

# 生成测试数据
data = np.full((10, 3), 1, dtype=np.float32)

# 使用 ONNX 推理引擎执行推理
results = ort_session.run(None, {input_names[0]: data})

参考onnx-split-18的文档:https://github.com/onnx/onnx/blob/v1.13.1/docs/Changelog.md#Split-18

补充说明 已经修复此bug

jiuyuedeyu156 commented 3 months ago

这issue一直开着吧,等出现split-18其他问题再修改。