Skip to content

AttributeError during ConvertLayout to NHWC #6410

@leandron

Description

@leandron

When using tvm.relay.transform.ConvertLayout (in the context of #6302), I'm getting some errors that are not really clear on how they are related to the convert process.

It seems ConvertLayout it is looking for shape (this check was introduced in #5284), when trying to find depthwise convolutions, but it doesn't seem to be the case that shape is there for some imported models, and might need some fixing.
https://github.com/apache/incubator-tvm/blob/4b48d89c79a72f7799606e845bdb1ed938baa115/python/tvm/relay/op/nn/_nn.py#L158-L164

This is the error I see, when trying to run ConvertLayout on an ONNX model:

AttributeError: <class 'tvm.relay.expr.TupleGetItem'> has no attribute shape

To reproduce the issue, you can run the script below:

  1. Download resnet50:
wget https://github.com/onnx/models/raw/master/vision/classification/resnet/model/resnet50-v2-7.onnx
  1. Run the ConvertLayout following the script below:
import onnx
import tvm
from tvm import relay

# boilerplate to load the ONNX model
model = onnx.load("resnet50-v2-7.onnx")
name = model.graph.input[0].name
proto_shape = model.graph.input[0].type.tensor_type.shape.dim
shape = [d.dim_value for d in proto_shape]
shape_dict = {name: shape}
mod, params = relay.frontend.from_onnx(model, shape_dict)

# converting layout
desired_layouts = {'nn.conv2d': ['NHWC', 'default']}
seq = tvm.transform.Sequential([relay.transform.RemoveUnusedFunctions(),
                                relay.transform.ConvertLayout(desired_layouts)])

with tvm.transform.PassContext(opt_level=3):
    mod = seq(mod)

with relay.build_config(opt_level=3):
     graph, lib, params = relay.build(mod, "llvm", params=params)

PS: It also happens if I get a NHWC TFlite model and try to force it into an NHWC convertion, but that is a negative test, that is why I didn't add it here.

cc @comaniac @jwfromm

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions