You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tvm.apache.org by "digital-nomad-cheng (via GitHub)" <gi...@apache.org> on 2023/06/02 11:33:44 UTC
[GitHub] [tvm] digital-nomad-cheng opened a new issue, #15013: [Bug] cutlass failed to parition for yolov8
digital-nomad-cheng opened a new issue, #15013:
URL: https://github.com/apache/tvm/issues/15013
### Expected behavior
I successfully dispatched the [yolov8](https://github.com/ultralytics/ultralytics) for tensorrt. But when I try to use the cutlass backend, tvm failed to partition it.
### Actual behavior
The error happens when I call
`mod = partition_for_cutlass(mod, params)`
The error given:
```
mod = partition_for_cutlass(mod, params)
File "/home/tvm/python/tvm/relay/op/contrib/cutlass.py", line 317, in partition_for_cutlass
return seq(mod)
File "/home/tvm/python/tvm/ir/transform.py", line 160, in __call__
return _ffi_transform_api.RunPass(self, mod)
File "/home/tvm/python/tvm/_ffi/_ctypes/packed_func.py", line 237, in __call__
raise get_last_ffi_error()
AttributeError: Traceback (most recent call last):
22: TVMFuncCall
21: tvm::runtime::PackedFuncObj::Extractor<tvm::runtime::PackedFuncSubObj<tvm::runtime::TypedPackedFunc<tvm::IRModule (tvm::transform::Pass, tvm::IRModule)>::AssignTypedLambda<tvm::transform::__mk_TVM9::{lambda(tvm::transform::Pass, tvm::IRModule)#1}>(tvm::transform::__mk_TVM9::{lambda(tvm::transform::Pass, tvm::IRModule)#1}, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)::{lambda(tvm::runtime::TVMArgs const&, tvm::runtime::TVMRetValue*)#1}> >::Call(tvm::runtime::PackedFuncObj const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, tvm::runtime::TVMRetValue)
20: tvm::transform::Pass::operator()(tvm::IRModule) const
19: tvm::transform::Pass::operator()(tvm::IRModule, tvm::transform::PassContext const&) const
18: tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const
17: tvm::transform::Pass::operator()(tvm::IRModule, tvm::transform::PassContext const&) const
16: tvm::relay::transform::FunctionPassNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const
15: tvm::runtime::PackedFuncObj::Extractor<tvm::runtime::PackedFuncSubObj<tvm::runtime::TypedPackedFunc<tvm::relay::Function (tvm::relay::Function, tvm::IRModule, tvm::transform::PassContext)>::AssignTypedLambda<tvm::relay::transform::MergeComposite(tvm::runtime::Array<tvm::runtime::String, void> const&, tvm::runtime::Array<tvm::relay::DFPattern, void> const&, std::vector<tvm::runtime::PackedFunc, std::allocator<tvm::runtime::PackedFunc> > const&)::{lambda(tvm::relay::Function, tvm::IRModule, tvm::transform::PassContext)#1}>(tvm::relay::transform::MergeComposite(tvm::runtime::Array<tvm::runtime::String, void> const&, tvm::runtime::Array<tvm::relay::DFPattern, void> const&, std::vector<tvm::runtime::PackedFunc, std::allocator<tvm::runtime::PackedFunc> > const&)::{lambda(tvm::relay::Function, tvm::IRModule, tvm::transform::PassContext)#1})::{lambda(tvm::runtime::TVMArgs const&, tvm::runtime::TVMRetValue*)#1}> >::Call(tvm::runtime::PackedFuncObj const*, tvm::runtime::TVMArgs, tvm::
runtime::TVMRetValue*)
14: tvm::relay::merge_composite::MergeComposite(tvm::relay::Function const&, tvm::runtime::Array<tvm::runtime::String, void> const&, tvm::runtime::Array<tvm::relay::DFPattern, void> const&, std::vector<tvm::runtime::PackedFunc, std::allocator<tvm::runtime::PackedFunc> > const&, tvm::IRModule const&)
13: tvm::relay::PartitionPattern(tvm::relay::DFPattern, tvm::RelayExpr, tvm::runtime::Map<tvm::runtime::String, tvm::runtime::ObjectRef, void, void>, tvm::runtime::PackedFunc)
12: tvm::relay::PatternPartitioner::Partition(tvm::relay::DFPattern const&, tvm::RelayExpr const&, tvm::runtime::Map<tvm::runtime::String, tvm::runtime::ObjectRef, void, void> const&, tvm::runtime::PackedFunc)
11: tvm::relay::MixedModeMutator::VisitExpr(tvm::RelayExpr const&)
10: tvm::relay::MixedModeMutator::VisitLeaf(tvm::RelayExpr const&)
9: tvm::relay::PatternPartitioner::DispatchVisitExpr(tvm::RelayExpr const&)
8: _ZN3tvm5relay16MixedModeMutator17DispatchVisitExprERKNS_9RelayExp
7: tvm::relay::ExprMutator::VisitExpr(tvm::RelayExpr const&)
6: tvm::relay::ExprFunctor<tvm::RelayExpr (tvm::RelayExpr const&)>::VisitExpr(tvm::RelayExpr const&)
5: _ZZN3tvm5relay11ExprFunctorIFNS_9RelayExprERKS2_EE10InitVTableEvENUlRKNS_
4: tvm::relay::ExprMutator::VisitExpr_(tvm::relay::FunctionNode const*)
3: tvm::relay::MixedModeMutator::VisitExpr(tvm::RelayExpr const&)
2: tvm::relay::MixedModeMutator::VisitLeaf(tvm::RelayExpr const&)
1: tvm::relay::PatternPartitioner::DispatchVisitExpr(tvm::RelayExpr const&)
0: tvm::runtime::PackedFuncObj::Extractor<tvm::runtime::PackedFuncSubObj<TVMFuncCreateFromCFunc::{lambda(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)#2}> >::Call(tvm::runtime::PackedFuncObj const*, tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) [clone .cold]
File "/home/tvm/python/tvm/_ffi/_ctypes/packed_func.py", line 81, in cfun
rv = local_pyfunc(*pyargs)
File "/home/tvm/python/tvm/relay/op/contrib/cutlass.py", line 193, in check_conv2d_residual
if not check_conv2d(call):
File "/home/tvm/python/tvm/relay/op/contrib/cutlass.py", line 178, in check_conv2d
return check_conv2d_common("nn.conv2d", "OHWI", call)
File "/home/tvm/python/tvm/relay/op/contrib/cutlass.py", line 162, in check_conv2d_common
data_layout = conv2d.attrs.data_layout
AttributeError: 'NoneType' object has no attribute 'attrs'
```
I found that some of the types of the `call` passed into `get_root_call` is of type `<class 'tvm.relay.expr.TupleGetItem'>`, which leads it to return `None`. It should be of type, `<class 'tvm.relay.expr.Call'>`
### Environment
os: ubuntu22.04
tvm: 0.12.0
### Steps to reproduce
Code to reproduce:
```
from ultralytics import YOLO
import onnx
import tvm
from tvm import relay
from tvm.contrib.cutlass import (
has_cutlass,
num_cutlass_partitions,
finalize_modules
)
from tvm.relay.op.contrib.cutlass import partition_for_cutlass
model = YOLO("yolov8n.pt")
success = model.export(format="onnx")
onnx_model = onnx.load_model("yolov8n.onnx")
shape_dict = {"images": [1, 3, 640, 640]}
mod, params = relay.frontend.from_onnx(onnx_model, shape_dict)
print("Use cutlass codegen...")
def convert_conv2d_layout(mod, desired_layouts):
with tvm.transform.PassContext(opt_level=3):
seq = tvm.transform.Sequential([relay.transform.ConvertLayout(desired_layouts)])
return seq(mod)
print(mod)
mod = convert_conv2d_layout(mod, {"nn.conv2d": ["NHWC", "OHWI"]})
mod = partition_for_cutlass(mod, params)
mod = convert_conv2d_layout(mod, {"nn.conv2d": ["NHWC", "default"]})
num_partition = num_cutlass_partitions(mod)
assert num_partition != 0, "Partition for cutlass failed!"
print("num of partition using cutlass:", num_partition)
with tvm.transform.PassContext(opt_level=3):
lib = relay.build(mod, target=[target, cutlass], params=params)
lib = finalize_modules(lib)
```
### Triage
Please refer to the list of label tags [here](https://github.com/apache/tvm/wiki/Issue-Triage-Labels) to find the relevant tags and add them below in a bullet format (example below).
* needs-triage
* byoc:cutlass
* relay:op
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@tvm.apache.org.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [I] [Bug] cutlass failed to parition for yolov8 [tvm]
Posted by "tqchen (via GitHub)" <gi...@apache.org>.
tqchen closed issue #15013: [Bug] cutlass failed to parition for yolov8
URL: https://github.com/apache/tvm/issues/15013
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@tvm.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org