-
Notifications
You must be signed in to change notification settings - Fork 3.8k
Description
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:
- Download resnet50:
wget https://github.com/onnx/models/raw/master/vision/classification/resnet/model/resnet50-v2-7.onnx
- 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.