Pony23333 opened a new issue #10042:
URL: https://github.com/apache/tvm/issues/10042


   Hi all,
   
   I am a beginner of TVM and I found it's suppressingly fast when deploy on 
mobile devices compared with other frameworks like ncnn.
   
   However, when I tried to tune a detection model 
([YOLOX](https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_nano.onnx))
 with autotvm on PC's CPU, I got a type error from converting Virtual axis. The 
demo I followed is from 
https://tvm.apache.org/docs/reference/api/python/autotvm.html and the error 
comes from the code:
   `tasks = autotvm.task.extract_from_program(mod["main"], target=target, 
params=params)`
   
   I guess the error is from the resize operator used in FPN for detection 
models.  But even I fixed all the input shapes, there still are dynamic axis 
size (any_dim: int32).
   
   I wonder if there is a solution or workaround. Thank you.
   
   The TVM I use is of version '0.9.dev0'.
   
   The error log is as below:
   
   Exception in thread Thread-1:
   Traceback (most recent call last):
     File "/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/threading.py", line 
932, in _bootstrap_inner
       self.run()
     File "/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/threading.py", line 
870, in run
       self._target(*self._args, **self._kwargs)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/relay_integration.py",
 line 55, in _lower
       compiler.lower(mod, target=target)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/relay/backend/vm.py",
 line 155, in lower
       self._lower(mod, target, target_host)
     File "tvm/_ffi/_cython/./packed_func.pxi", line 323, in 
tvm._ffi._cy3.core.PackedFuncBase.__call__
     File "tvm/_ffi/_cython/./packed_func.pxi", line 257, in 
tvm._ffi._cy3.core.FuncCall
     File "tvm/_ffi/_cython/./packed_func.pxi", line 246, in 
tvm._ffi._cy3.core.FuncCall3
     File "tvm/_ffi/_cython/./base.pxi", line 163, in tvm._ffi._cy3.core.CALL
   tvm._ffi.base.TVMError: Traceback (most recent call last):
     48: TVMFuncCall
     47: std::_Function_handler<void (tvm::runtime::TVMArgs, 
tvm::runtime::TVMRetValue*), 
tvm::relay::vm::VMCompiler::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*)#1}>::_M_invoke(std::_Any_data const&, 
tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&)
     46: tvm::relay::vm::VMCompiler::Lower(tvm::IRModule, 
tvm::runtime::Map<tvm::Integer, tvm::Target, void, void>, tvm::Target)
     45: tvm::relay::vm::VMCompiler::OptimizeModuleImpl(tvm::IRModule)
     44: tvm::transform::Pass::operator()(tvm::IRModule) const
     43: tvm::transform::Pass::operator()(tvm::IRModule, 
tvm::transform::PassContext const&) const
     42: tvm::transform::SequentialNode::operator()(tvm::IRModule, 
tvm::transform::PassContext const&) const
     41: tvm::transform::Pass::operator()(tvm::IRModule, 
tvm::transform::PassContext const&) const
     40: tvm::transform::SequentialNode::operator()(tvm::IRModule, 
tvm::transform::PassContext const&) const
     39: tvm::transform::Pass::operator()(tvm::IRModule, 
tvm::transform::PassContext const&) const
     38: tvm::transform::ModulePassNode::operator()(tvm::IRModule, 
tvm::transform::PassContext const&) const
     37: std::_Function_handler<void (tvm::runtime::TVMArgs, 
tvm::runtime::TVMRetValue*), tvm::runtime::TypedPackedFunc<tvm::IRModule 
(tvm::IRModule, 
tvm::transform::PassContext)>::AssignTypedLambda<tvm::relay::tec::LowerTEPass(tvm::runtime::String
 const&, std::function<void (tvm::BaseFunc)>, 
tvm::VirtualDevice)::{lambda(tvm::IRModule, 
tvm::transform::PassContext)#1}>(tvm::relay::tec::LowerTEPass(tvm::runtime::String
 const&, std::function<void (tvm::BaseFunc)>, 
tvm::VirtualDevice)::{lambda(tvm::IRModule, 
tvm::transform::PassContext)#1})::{lambda(tvm::runtime::TVMArgs const&, 
tvm::runtime::TVMRetValue*)#1}>::_M_invoke(std::_Any_data const&, 
tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&)
     36: tvm::relay::tec::LowerTE(tvm::IRModule const&, tvm::runtime::String 
const&, std::function<void (tvm::BaseFunc)>, tvm::VirtualDevice)
     35: tvm::transform::Pass::operator()(tvm::IRModule) const
     34: tvm::transform::Pass::operator()(tvm::IRModule, 
tvm::transform::PassContext const&) const
     33: tvm::relay::transform::FunctionPassNode::operator()(tvm::IRModule, 
tvm::transform::PassContext const&) const
     32: std::_Function_handler<void (tvm::runtime::TVMArgs, 
tvm::runtime::TVMRetValue*), tvm::runtime::TypedPackedFunc<tvm::relay::Function 
(tvm::relay::Function, tvm::IRModule, 
tvm::transform::PassContext)>::AssignTypedLambda<tvm::relay::tec::LowerTensorExpr(tvm::runtime::String
 const&, tvm::relay::tec::TECompiler, std::function<void (tvm::BaseFunc)>, 
tvm::VirtualDevice)::{lambda(tvm::relay::Function, tvm::IRModule, 
tvm::transform::PassContext)#1}>(tvm::relay::tec::LowerTensorExpr(tvm::runtime::String
 const&, tvm::relay::tec::TECompiler, std::function<void (tvm::BaseFunc)>, 
tvm::VirtualDevice)::{lambda(tvm::relay::Function, tvm::IRModule, 
tvm::transform::PassContext)#1})::{lambda(tvm::runtime::TVMArgs const&, 
tvm::runtime::TVMRetValue*)#1}>::_M_invoke(std::_Any_data const&, 
tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&)
     31: tvm::relay::ExprMutator::VisitExpr(tvm::RelayExpr const&)
     30: _ZZN3tvm5relay11ExprFunc
     29: 
tvm::relay::transform::DeviceAwareExprMutator::VisitExpr_(tvm::relay::FunctionNode
 const*)
     28: 
tvm::relay::tec::LowerTensorExprMutator::DeviceAwareVisitExpr_(tvm::relay::FunctionNode
 const*)
     27: _ZN3tvm5relay9
     26: tvm::relay::ExprMutator::VisitExpr_(tvm::relay::FunctionNode const*)
     25: tvm::relay::ExprMutator::VisitExpr(tvm::RelayExpr const&)
     24: _ZZN3tvm5relay11ExprFunc
     23: 
tvm::relay::transform::DeviceAwareExprMutator::VisitExpr_(tvm::relay::LetNode 
const*)
     22: 
tvm::relay::tec::LowerTensorExprMutator::PreVisitLetBinding_(tvm::relay::Var 
const&, tvm::RelayExpr const&)
     21: tvm::relay::ExprMutator::VisitExpr(tvm::RelayExpr const&)
     20: _ZZN3tvm5relay11ExprFunc
     19: 
tvm::relay::transform::DeviceAwareExprMutator::VisitExpr_(tvm::relay::CallNode 
const*)
     18: tvm::relay::ExprMutator::VisitExpr(tvm::RelayExpr const&)
     17: _ZZN3tvm5relay11ExprFunc
     16: 
tvm::relay::transform::DeviceAwareExprMutator::VisitExpr_(tvm::relay::CallNode 
const*)
     15: 
tvm::relay::tec::LowerTensorExprMutator::DeviceAwareVisitExpr_(tvm::relay::CallNode
 const*)
     14: 
tvm::relay::tec::LowerTensorExprMutator::MakeLoweredCall(tvm::relay::Function, 
tvm::runtime::Array<tvm::RelayExpr, void>, tvm::Span, tvm::Target)
     13: tvm::relay::tec::TECompilerImpl::Lower(tvm::relay::tec::CCacheKey 
const&, tvm::runtime::String)
     12: 
tvm::relay::tec::TECompilerImpl::LowerInternal(tvm::relay::tec::CCacheKey 
const&, std::function<tvm::runtime::String (tvm::runtime::String)>)
     11: tvm::relay::tec::PrimFuncFor(tvm::relay::Function const&, tvm::Target 
const&, std::function<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > (std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >)>)
     10: tvm::relay::tec::ScheduleBuilder::Create(tvm::relay::Function const&, 
std::function<std::__cxx11::basic_string<char, std::char_traits<char>, 
std::allocator<char> > (std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> >)>)
     9: 
tvm::relay::backend::MemoizedExprTranslator<tvm::runtime::Array<tvm::te::Tensor,
 void> >::VisitExpr(tvm::RelayExpr const&)
     8: _ZZN3tvm5relay11ExprFunc
     7: tvm::relay::tec::ScheduleBuilder::VisitExpr_(tvm::relay::CallNode 
const*)
     6: 
tvm::relay::backend::MemoizedExprTranslator<tvm::runtime::Array<tvm::te::Tensor,
 void> >::VisitExpr(tvm::RelayExpr const&)
     5: _ZZN3tvm5relay11ExprFunc
     4: tvm::relay::tec::ScheduleBuilder::VisitExpr_(tvm::relay::CallNode 
const*)
     3: 
tvm::relay::backend::MemoizedExprTranslator<tvm::runtime::Array<tvm::te::Tensor,
 void> >::VisitExpr(tvm::RelayExpr const&)
     2: _ZZN3tvm5relay11ExprFunc
     1: tvm::relay::tec::ScheduleBuilder::VisitExpr_(tvm::relay::CallNode 
const*)
     0: std::_Function_handler<void (tvm::runtime::TVMArgs, 
tvm::runtime::TVMRetValue*), 
TVMFuncCreateFromCFunc::{lambda(tvm::runtime::TVMArgs, 
tvm::runtime::TVMRetValue*)#2}>::_M_invoke(std::_Any_data const&, 
tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&)
     File "tvm/_ffi/_cython/./packed_func.pxi", line 56, in 
tvm._ffi._cy3.core.tvm_callback
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/relay/backend/te_compiler.py",
 line 314, in lower_call
       best_impl, outputs = select_implementation(
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/relay/backend/te_compiler.py",
 line 189, in select_implementation
       outs = best_plevel_impl.compute(attrs, inputs, out_type)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/relay/op/op.py",
 line 126, in compute
       return _OpImplementationCompute(self, attrs, inputs, out_type)
     File "tvm/_ffi/_cython/./packed_func.pxi", line 323, in 
tvm._ffi._cy3.core.PackedFuncBase.__call__
     File "tvm/_ffi/_cython/./packed_func.pxi", line 267, in 
tvm._ffi._cy3.core.FuncCall
     File "tvm/_ffi/_cython/./base.pxi", line 163, in tvm._ffi._cy3.core.CALL
     3: TVMFuncCall
     2: std::_Function_handler<void (tvm::runtime::TVMArgs, 
tvm::runtime::TVMRetValue*), tvm::relay::{lambda(tvm::runtime::TVMArgs, 
tvm::runtime::TVMRetValue*)#4}>::_M_invoke(std::_Any_data 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: std::_Function_handler<void (tvm::runtime::TVMArgs, 
tvm::runtime::TVMRetValue*), 
TVMFuncCreateFromCFunc::{lambda(tvm::runtime::TVMArgs, 
tvm::runtime::TVMRetValue*)#2}>::_M_invoke(std::_Any_data const&, 
tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&)
     File "tvm/_ffi/_cython/./packed_func.pxi", line 56, in 
tvm._ffi._cy3.core.tvm_callback
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/relay/op/strategy/generic.py",
 line 243, in _compute_conv2d
       return [topi_compute(*args)]
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/topi/x86/conv2d.py",
 line 129, in conv2d_nchw
       packed_out = conv2d_NCHWc(data, kernel, strides, padding, dilation, 
layout, layout, out_dtype)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/topi_integration.py",
 line 165, in wrapper
       node = topi_compute(cfg, *args)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/topi/x86/conv2d.py",
 line 194, in conv2d_NCHWc
       cfg.define_split("tile_ic", in_channel, num_outputs=2)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/space.py",
 line 731, in define_split
       return self._add_new_transform(SplitSpace, name, axes, policy, **kwargs)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/space.py",
 line 834, in _add_new_transform
       axes = [x if isinstance(x, (VirtualAxis, Axis)) else self.axis(x) for x 
in axes]
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/space.py",
 line 834, in <listcomp>
       axes = [x if isinstance(x, (VirtualAxis, Axis)) else self.axis(x) for x 
in axes]
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/space.py",
 line 688, in axis
       return VirtualAxis(var)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/space.py",
 line 142, in __init__
       raise RuntimeError("Invalid type of axis: " + str(type(var)))
   RuntimeError: Invalid type of axis: <class 'tvm.tir.expr.SizeVar'>
   any_dim: int32
   Traceback (most recent call last):
     File "autotvm_relay_x86.py", line 233, in <module>
       tasks = autotvm.task.extract_from_program(mod["main"], target=target, 
params=params)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/relay_integration.py",
 line 87, in extract_from_program
       return extract_from_multiple_program([mod], [params], target, ops=ops)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/relay_integration.py",
 line 153, in extract_from_multiple_program
       tsk = create(task_name, args, target=target)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/task.py",
 line 485, in create
       sch, _ = ret.func(*args)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/task.py",
 line 240, in __call__
       return self._default_func(*args, **kwargs)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/task.py",
 line 246, in _default_func
       out = self.fcompute(*args, **kwargs)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/topi_integration.py",
 line 165, in wrapper
       node = topi_compute(cfg, *args)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/topi/x86/conv2d.py",
 line 194, in conv2d_NCHWc
       cfg.define_split("tile_ic", in_channel, num_outputs=2)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/space.py",
 line 731, in define_split
       return self._add_new_transform(SplitSpace, name, axes, policy, **kwargs)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/space.py",
 line 834, in _add_new_transform
       axes = [x if isinstance(x, (VirtualAxis, Axis)) else self.axis(x) for x 
in axes]
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/space.py",
 line 834, in <listcomp>
       axes = [x if isinstance(x, (VirtualAxis, Axis)) else self.axis(x) for x 
in axes]
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/space.py",
 line 688, in axis
       return VirtualAxis(var)
     File 
"/home/jtma3/anaconda3/envs/nanodet/lib/python3.8/site-packages/tvm-0.9.dev369+g24267492d-py3.8-linux-x86_64.egg/tvm/autotvm/task/space.py",
 line 142, in __init__
       raise RuntimeError("Invalid type of axis: " + str(type(var)))
   RuntimeError: Invalid type of axis: <class 'tvm.tir.expr.SizeVar'>
   
   


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to