leeexyz opened a new issue #10324: URL: https://github.com/apache/tvm/issues/10324
Compiling any network when opt level is 0 in VM would cause a segmentation fault. The segment occurs at `ManifestAlloc Pass (opt_level=0)` and the pass dependent to the `ToANormalForm Pass (opt_level=1)`. If there is **Let Scope** found will trigger this bug. Possible fixes First, we should check if the `scopes_` is empty before accessing it. ```c++ ICHECK(!scopes_.empty()); LetList& scope = scopes_.back(); ``` https://github.com/apache/tvm/blob/a713356e783fdeb06894f7170295ad18fb4d3a8e/src/relay/transforms/memory_alloc.cc#L75 https://github.com/apache/tvm/blob/a713356e783fdeb06894f7170295ad18fb4d3a8e/src/relay/transforms/memory_alloc.cc#L143 Then, modify the opt levels or required relations. The error still exists if only changing the opt_level=0 of `ToANormalForm`. We also have to update the level of `Inline and DeadCodeElimination`. Let's suppose these three passes `Inline, DeadCodeElimination, ToANormalForm` are all 0, this bug is solved. ### Expected behavior Successfully compiled when op level is 0 in VM ### Actual behavior Segmentation fault ```bash Thread 1 "python" received signal SIGSEGV, Segmentation fault. 0x00007fffcccaa9fe in tvm::relay::LetList::Push (this=0xffffffffffffffe0, pv=..., expr=...) at ../src/relay/transforms/let_list.h:67 67 ICHECK(!used_); (gdb) bt #0 0x00007fffcccaa9fe in tvm::relay::LetList::Push (this=0xffffffffffffffe0, pv=..., expr=...) at ../src/relay/transforms/let_list.h:67 #1 0x00007fffccd29108 in tvm::relay::DialectRewriter::EmitShapeFunc (this=0x7fffffffba90, scope=0xffffffffffffffe0, ins=..., attrs=...) at ../src/relay/transforms/memory_alloc.cc:305 #2 0x00007fffccd2a558 in tvm::relay::DialectRewriter::DynamicInvoke (this=0x7fffffffba90, scope=0xffffffffffffffe0, func=..., ins=..., attrs=..., out_types=std::vector of length 1, capacity 1 = {...}, ret_type=..., virtual_device=...) at ../src/relay/transforms/memory_alloc.cc:355 #3 0x00007fffccd26e1e in tvm::relay::DialectRewriter::DeviceAwareVisitExpr_ (this=0x7fffffffba90, call_node=0x555556669be0) at ../src/relay/transforms/memory_alloc.cc:180 #4 0x00007fffccc6085a in tvm::relay::transform::DeviceAwareExprMutator::VisitExpr_ ( this=0x7fffffffba90, call_node=0x555556669be0) at ../src/relay/transforms/device_aware_visitors.cc:278 #5 0x00007fffcbbce59d in tvm::relay::ExprFunctor<tvm::RelayExpr (tvm::RelayExpr const&)>::InitVTable()::{lambda(tvm::runtime::ObjectRef const&, tvm::relay::ExprFunctor<tvm::RelayExpr (tvm::RelayExpr const&)>*)#6}::operator()(tvm::runtime::ObjectRef const&, tvm::relay::ExprFunctor<tvm::RelayExpr (tvm::RelayExpr const&)>*) const (__closure=0x0, n=..., self=0x7fffffffba90) at ../include/tvm/relay/expr_functor.h:128 #6 0x00007fffcbbce5f8 in tvm::relay::ExprFunctor<tvm::RelayExpr (tvm::RelayExpr const&)>::InitVTable()::{lambda(tvm::runtime::ObjectRef const&, tvm::relay::ExprFunctor<tvm::RelayExpr (tvm::RelayExpr const&)>*)#6}::_FUN(tvm::runtime::ObjectRef const&, tvm::relay::ExprFunctor<tvm::RelayExpr (tvm::RelayExpr const&)>*) () at ../include/tvm/relay/expr_functor.h:128 #7 0x00007fffcbbcf18e in tvm::NodeFunctor<tvm::RelayExpr (tvm::runtime::ObjectRef const&, tvm::relay::ExprFunctor<tvm::RelayExpr (tvm::RelayExpr const&)>*)>::operator()(tvm::runtime::ObjectRef const&, tvm::relay::ExprFunctor<tvm::RelayExpr (tvm::RelayExpr const&)>*) const ( this=0x7fffd25ee630 <tvm::relay::ExprFunctor<tvm::RelayExpr (tvm::RelayExpr const&)>::VisitExpr(tvm::RelayExpr const&)::vtable>, n=..., args#0=0x7fffffffba90) at ../include/tvm/node/functor.h:97 #8 0x00007fffcbbcd504 in tvm::relay::ExprFunctor<tvm::RelayExpr (tvm::RelayExpr const&)>::VisitExpr(tvm::RelayExpr const&) (this=0x7fffffffba90, n=...) at ../include/tvm/relay/expr_functor.h:95 #9 0x00007fffccf9d456 in tvm::relay::ExprMutator::VisitExpr (this=0x7fffffffba90, expr=...) at ../src/relay/ir/expr_functor.cc:158 #10 0x00007fffccbbcfae in tvm::relay::ExprMutator::Mutate (this=0x7fffffffba90, expr=...) at ../include/tvm/relay/expr_functor.h:190 #11 0x00007fffccf9dd42 in tvm::relay::ExprMutator::VisitExpr_ (this=0x7fffffffba90, func_node=0x555556693480) at ../src/relay/ir/expr_functor.cc:204 #12 0x00007fffccc608fe in tvm::relay::transform::DeviceAwareExprMutator::DeviceAwareVisitExpr_ ( this=0x7fffffffba90, function_node=0x555556693480) at ../src/relay/transforms/device_aware_visitors.cc:283 #13 0x00007fffccc600f3 in tvm::relay::transform::DeviceAwareExprMutator::VisitExpr_ ( this=0x7fffffffba90, function_node=0x555556693480) at ../src/relay/transforms/device_aware_visitors.cc:228 ``` ### Environment OS: `Ubuntu 20.04` LLVM: `11.1.0` TVM: commit a713356e783fdeb06894f7170295ad18fb4d3a8e ### Steps to reproduce A sample case to reproduce it ```python import tvm from tvm import relay dtype = "float32" x = relay.var("x", shape=(relay.Any(), relay.Any()), dtype=dtype) y = relay.var("y", shape=(relay.Any(), relay.Any()), dtype=dtype) func = relay.Function([x, y], relay.add(x, y)) mod = tvm.IRModule.from_expr(func) with tvm.transform.PassContext(opt_level=0): target = tvm.target.Target("llvm") exe = tvm.relay.backend.vm.compile(mod, target) ``` -- 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]
