You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tvm.apache.org by GitBox <gi...@apache.org> on 2022/09/16 10:28:42 UTC

[GitHub] [tvm] fPecc opened a new issue, #12814: [Bug] Building relay ops defined using hybrid_script gives ValueError: All indices are supposed to be constants

fPecc opened a new issue, #12814:
URL: https://github.com/apache/tvm/issues/12814

   ### Expected behavior
   
   Be able to build a relay containing relay.vision.non_max_suppression or relay.vision.multibox_transform_loc.
   
   ### Actual behavior
   
   Obtained error:
   
   ```
   Traceback (most recent call last):
     File "test.py", line 45, in <module>
       mod = relay.build(mod, executor=EXECUTOR, target=TARGET,runtime=RUNTIME)
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/relay/build_module.py", line 364, in build
       graph_json, runtime_mod, params = bld_mod.build(
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/relay/build_module.py", line 161, in build
       self._build(
     File "tvm/_ffi/_cython/./packed_func.pxi", line 331, in tvm._ffi._cy3.core.PackedFuncBase.__call__
     File "tvm/_ffi/_cython/./packed_func.pxi", line 276, in tvm._ffi._cy3.core.FuncCall
     File "tvm/_ffi/_cython/./base.pxi", line 181, in tvm._ffi._cy3.core.CHECK_CALL
   ValueError: Traceback (most recent call last):
     41: TVMFuncCall
     40: tvm::relay::backend::RelayBuildModule::GetFunction(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, tvm::runtime::ObjectPtr<tvm::runtime::Object> const&)::{lambda(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)#3}::operator()(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*) const
     39: tvm::relay::backend::RelayBuildModule::BuildRelay(tvm::IRModule, tvm::runtime::String const&)
     38: tvm::runtime::PackedFuncObj::Extractor<tvm::runtime::PackedFuncSubObj<tvm::relay::backend::AOTExecutorCodegenModule::GetFunction(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, tvm::runtime::ObjectPtr<tvm::runtime::Object> const&)::{lambda(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)#2}> >::Call(tvm::runtime::PackedFuncObj const*, tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)
     37: tvm::relay::backend::AOTExecutorCodegen::Codegen(tvm::IRModule, tvm::relay::Function, tvm::runtime::String)
     36: tvm::transform::Pass::operator()(tvm::IRModule) const
     35: tvm::transform::Pass::operator()(tvm::IRModule, tvm::transform::PassContext const&) const
     34: tvm::transform::SequentialNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const
     33: tvm::transform::Pass::operator()(tvm::IRModule, tvm::transform::PassContext const&) const
     32: tvm::transform::ModulePassNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const
     31: _ZN3tvm7runtime13PackedFuncObj9ExtractorINS0_16PackedFuncSubObjIZNS0_15TypedPackedFuncIFNS_8IRModuleES5_NS_9transform11PassContextEEE17AssignTypedLambdaIZNS_5relay3tec7LowerTEENS0_6StringENS_17CompilationConfigESt8functionIFvNS_8BaseFuncEEEEUlS5_S7_E_EEvT_EUlRKNS0_7TVMArgsEPNS0_11TVMRetValueEE_EEE4CallEPKS1_SL_SP_
     30: tvm::relay::tec::LowerTE(tvm::IRModule const&, tvm::runtime::String const&, std::function<void (tvm::BaseFunc)>, tvm::CompilationConfig)
     29: tvm::transform::Pass::operator()(tvm::IRModule) const
     28: tvm::transform::Pass::operator()(tvm::IRModule, tvm::transform::PassContext const&) const
     27: tvm::relay::transform::FunctionPassNode::operator()(tvm::IRModule, tvm::transform::PassContext const&) const
     26: _ZN3tvm7runtime13PackedFuncObj9ExtractorINS0_16PackedFuncSubObjIZNS0_15TypedPackedFuncIFNS_5relay8FunctionES6_NS_8IRModuleENS_9transform11PassContextEEE17AssignTypedLambdaIZNS5_3tec15LowerTensorExprENSD_10TECompilerESt8functionIFvNS_8BaseFuncEEENS_17CompilationConfigEEUlS6_S7_S9_E_EEvT_EUlRKNS0_7TVMArgsEPNS0_11TVMRetValueEE_EEE4CallEPKS1_SM_SQ_
     25: tvm::relay::ExprMutator::VisitExpr(tvm::RelayExpr const&)
     24: _ZZN3tvm5relay11ExprFunctorIFNS_9RelayExprERKS2_EE10InitVTableEvENUlRKNS_7r
     23: tvm::relay::transform::DeviceAwareExprMutator::VisitExpr_(tvm::relay::FunctionNode const*)
     22: tvm::relay::tec::LowerTensorExprMutator::DeviceAwareVisitExpr_(tvm::relay::FunctionNode const*)
     21: _ZN3tvm5relay9transform22DeviceAwareExprMutator21DeviceAwareVisit
     20: tvm::relay::ExprMutator::VisitExpr_(tvm::relay::FunctionNode const*)
     19: tvm::relay::ExprMutator::VisitExpr(tvm::RelayExpr const&)
     18: _ZZN3tvm5relay11ExprFunctorIFNS_9RelayExprERKS2_EE10InitVTableEvENUlRKNS_7r
     17: tvm::relay::transform::DeviceAwareExprMutator::VisitExpr_(tvm::relay::LetNode const*)
     16: tvm::relay::tec::LowerTensorExprMutator::PreVisitLetBinding_(tvm::relay::Var const&, tvm::RelayExpr const&)
     15: tvm::relay::ExprMutator::VisitExpr(tvm::RelayExpr const&)
     14: _ZZN3tvm5relay11ExprFunctorIFNS_9RelayExprERKS2_EE10InitVTableEvENUlRKNS_7r
     13: tvm::relay::transform::DeviceAwareExprMutator::VisitExpr_(tvm::relay::CallNode const*)
     12: tvm::relay::ExprMutator::VisitExpr(tvm::RelayExpr const&)
     11: _ZZN3tvm5relay11ExprFunctorIFNS_9RelayExprERKS2_EE10InitVTableEvENUlRKNS_7r
     10: tvm::relay::transform::DeviceAwareExprMutator::VisitExpr_(tvm::relay::CallNode const*)
     9: tvm::relay::tec::LowerTensorExprMutator::DeviceAwareVisitExpr_(tvm::relay::CallNode const*)
     8: tvm::relay::tec::TECompilerImpl::Lower(tvm::relay::tec::CCacheKey const&)
     7: tvm::relay::tec::TECompilerImpl::LowerInternal(tvm::relay::tec::CCacheKey const&, tvm::GlobalVarSupply)
     6: tvm::relay::tec::PrimFuncFor(tvm::relay::Function const&, tvm::Target const&, tvm::GlobalVarSupply)
     5: tvm::relay::tec::ScheduleBuilder::Create(tvm::relay::Function const&, tvm::GlobalVarSupply)
     4: tvm::relay::tec::LowerToTECompute::Lower(tvm::relay::Function const&)
     3: tvm::relay::backend::MemoizedExprTranslator<tvm::runtime::Array<tvm::te::Tensor, void> >::VisitExpr(tvm::RelayExpr const&)
     2: _ZZN3tvm5relay11ExprFunctorIFNS_7runtime5ArrayINS_2te6TensorEvEERKNS_9Relay
     1: tvm::relay::tec::LowerToTECompute::VisitExpr_(tvm::relay::CallNode 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 "tvm/_ffi/_cython/./packed_func.pxi", line 56, in tvm._ffi._cy3.core.tvm_callback
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/relay/backend/te_compiler.py", line 317, in lower_call
       best_impl, outputs = select_implementation(op, call.attrs, inputs, ret_type, target)
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/relay/backend/te_compiler.py", line 207, in select_implementation
       outs = impl.compute(attrs, inputs, out_type)
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/relay/op/op.py", line 126, in compute
       return _OpImplementationCompute(self, attrs, inputs, out_type)
     File "tvm/_ffi/_cython/./packed_func.pxi", line 331, in tvm._ffi._cy3.core.PackedFuncBase.__call__
     File "tvm/_ffi/_cython/./packed_func.pxi", line 276, in tvm._ffi._cy3.core.FuncCall
     File "tvm/_ffi/_cython/./base.pxi", line 181, in tvm._ffi._cy3.core.CHECK_CALL
     3: TVMFuncCall
     2: tvm::runtime::PackedFuncObj::Extractor<tvm::runtime::PackedFuncSubObj<tvm::relay::{lambda(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)#4}> >::Call(tvm::runtime::PackedFuncObj const*, tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)
     1: tvm::relay::OpImplementation::Compute(tvm::Attrs const&, tvm::runtime::Array<tvm::te::Tensor, void> const&, tvm::Type 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 "tvm/_ffi/_cython/./packed_func.pxi", line 56, in tvm._ffi._cy3.core.tvm_callback
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/relay/op/strategy/generic.py", line 1262, in _compute_nms
       return topi_compute(
     File "/local_disk/local_sw/tvm/tvm/lib/python3.8/site-packages/decorator.py", line 232, in fun
       return caller(func, *(extras + args), **kw)
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/target/generic_func.py", line 287, in dispatch_func
       return func(*args, **kwargs)
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/topi/vision/nms.py", line 577, in non_max_suppression
       out, box_indices = hybrid_nms(
     File "/local_disk/local_sw/tvm/tvm/lib/python3.8/site-packages/decorator.py", line 232, in fun
       return caller(func, *(extras + args), **kw)
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/te/hybrid/__init__.py", line 60, in wrapped_func
       return source_to_op(src, args, func.__globals__, closure_vars)
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/te/hybrid/parser.py", line 645, in source_to_op
       parser = parse_python(src, args, symbols, closure_vars)
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/te/hybrid/parser.py", line 615, in parse_python
       parser.parsed_body = parser.visit(root)
     File "/usr/lib/python3.8/ast.py", line 371, in visit
       return visitor(node)
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/te/hybrid/parser.py", line 229, in visit_Module
       return self.visit(node.body[0])
     File "/usr/lib/python3.8/ast.py", line 371, in visit
       return visitor(node)
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/te/hybrid/parser.py", line 242, in visit_FunctionDef
       res = visit_list_to_block(self.visit, node.body)
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/te/hybrid/parser.py", line 58, in visit_list_to_block
       lst = [visit(stmt) for stmt in lst if not utils.is_docstring(stmt)]
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/te/hybrid/parser.py", line 58, in <listcomp>
       lst = [visit(stmt) for stmt in lst if not utils.is_docstring(stmt)]
     File "/usr/lib/python3.8/ast.py", line 371, in visit
       return visitor(node)
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/te/hybrid/parser.py", line 303, in visit_Assign
       rhs = self.visit(node.value)
     File "/usr/lib/python3.8/ast.py", line 371, in visit
       return visitor(node)
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/te/hybrid/parser.py", line 388, in visit_Subscript
       _internal_assert(
     File "/local_disk/local_sw/tvm_main/tvm/python/tvm/te/hybrid/utils.py", line 43, in _internal_assert
       raise ValueError(err)
   ValueError: All indices are supposed to be constants
   ```
   
   ### Environment
   
   Branch main, commit 9b17f344a31a13226458a2d48dcb7b55ce282274
   
   ### Steps to reproduce
   
   Code to reproduce:
   
   ```python
   from tvm.relay.op.vision import non_max_suppression
   from tvm import te
   import numpy as np
   from tvm import topi
   import tvm
   from tvm import relay
   
   nms = False
   
   if not nms:
       x0 = relay.var("x0", relay.ty.TensorType((1, 6, 5), "float32"))
       x1 = relay.var("x1", relay.ty.TensorType((1, 5 * 4), "int32"))
       x2 = relay.var("x1", relay.ty.TensorType((1, 5, 4), "int32"))
       z = relay.vision.multibox_transform_loc(
           x0, x1, x2, clip=False, threshold=-float("inf"), variances=(1.0, 1.0, 1.0, 1.0)
       )
       z = z.astuple()
       func = relay.Function([x0, x1, x2], z)
   else:
       x0 = relay.var("x0", relay.ty.TensorType((1, 100, 6), "float32"))
       x1 = relay.var("x1", relay.ty.TensorType((1,), "int32"))
       x2 = relay.var("x2", relay.ty.TensorType((1, 100), "int32"))
       x3 = relay.var("x3", relay.ty.TensorType((), "int32"))
       z = relay.vision.non_max_suppression(
           x0,
           x1,
           x2,
           x3,
           iou_threshold=0.5,
           force_suppress=True,
           top_k=4,
           return_indices=True,
           invalid_to_bottom=False,
       )
       z = z.astuple()
       func = relay.Function([x0, x1, x2, x3], z)
       
   mod = tvm.IRModule()
   mod["main"] = func
   
   print(mod["main"])
   TARGET = tvm.target.target.Target({"kind": "c"})
   mod = relay.build(mod, target=TARGET)
   
   print(mod)
   ```
   
   I started to try to understand what the problem is, but my experience with hybrid_script is very low. What I noticed is that function visit_Index in [parser.py](https://github.com/apache/tvm/blob/main/python/tvm/te/hybrid/parser.py) is returning a list, which then breaks function visit_Subscript (same file). But I was not able to understand the reason why visit_Index is now returning a list. A change was probably done before, that is making visit_Index return a list.
   


-- 
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


[GitHub] [tvm] junrushao closed issue #12814: [Bug] Building relay ops defined using hybrid_script gives ValueError: All indices are supposed to be constants

Posted by GitBox <gi...@apache.org>.
junrushao closed issue #12814: [Bug] Building relay ops defined using hybrid_script gives ValueError: All indices are supposed to be constants
URL: https://github.com/apache/tvm/issues/12814


-- 
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