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 2019/12/11 16:38:42 UTC

[GitHub] [incubator-tvm] pyalex opened a new issue #4508: Broadcasting is broken with LayoutTransform

pyalex opened a new issue #4508: Broadcasting is broken with LayoutTransform
URL: https://github.com/apache/incubator-tvm/issues/4508
 
 
   When using using optimization level >= 3 - LayoutTransform fails on converting inputs with shape (1,).
   
   Code to reproduce
   ```
   target = 'llvm'
   target_host = 'llvm'
   
   input = relay.var('input', shape=(1, 500, 500, 64), dtype='float32')
   kernel = relay.var('kernel', shape=(3, 3, 64, 64), dtype='float32')
   bias = relay.var('bias', shape=(64,), dtype='float32')
   
   multiplier = relay.const([0.1])
   
   x = relay.nn.conv2d(input, kernel, data_layout='NHWC', kernel_layout="HWIO", kernel_size=(3, 3))
   x = relay.add(bias, x)
   x = relay.nn.relu(x)
   
   x = relay.multiply(multiplier, x)
   
   fun = relay.Function([input, kernel, bias], x)
   
   with relay.build_config(opt_level=3):
       graph, lib, params = relay.build(relay.Module({"main": fun}),
                                        target=target,
                                        target_host=target_host)
   ```
   
   Compiled program with issue
   ```
   fn (%input: Tensor[(1, 500, 500, 64), float32], %kernel: Tensor[(3, 3, 64, 64), float32], %bias: Tensor[(64), float32]) -> Tensor[(1, 498, 498, 64), float32] {
     %0 = expand_dims(meta[relay.Constant][0], axis=0, num_newaxis=3);
     %1 = layout_transform(%0, src_layout="NHWC", dst_layout="NCHW8c");
     %2 = expand_dims(%bias, axis=0, num_newaxis=3);
     %3 = layout_transform(%2, src_layout="NHWC", dst_layout="NCHW8c");
     %4 = layout_transform(%input, src_layout="NHWC", dst_layout="NCHW8c");
     %5 = layout_transform(%kernel, src_layout="HWIO", dst_layout="OIHW8i8o");
     %6 = nn.contrib_conv2d_NCHWc(%4, %5, channels=64, kernel_size=[3, 3], data_layout="NCHW8c", kernel_layout="OIHW8i8o", out_layout="NCHW8c");
     %7 = add(%3, %6);
     %8 = nn.relu(%7);
     %9 = multiply(%1, %8) Incompatible broadcast type TensorType([1, 0, 1, 1, 8], float32) and TensorType([1, 8, 498, 498, 8], float32); ;
     layout_transform(%9, src_layout="NCHW8c", dst_layout="NHWC") an internal invariant was violated while typechecking your program [18:29:24] /incubator-tvm/src/relay/op/tensor/transform.cc:2382: Check failed: data != nullptr: 
   ; 
   }
   ```
   
   Full Stack Trace
   ```
   an internal invariant was violated while typechecking your program [18:29:24] /incubator-tvm/src/relay/op/tensor/transform.cc:2382: Check failed: data != nullptr: 
   Stack trace:
     [bt] (0) 1   libtvm.dylib                        0x00000001109b3aa9 dmlc::LogMessageFatal::~LogMessageFatal() + 57
     [bt] (1) 2   libtvm.dylib                        0x0000000110f0b198 tvm::relay::LayoutTransformRel(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&) + 280
     [bt] (2) 3   libtvm.dylib                        0x0000000110d6676f void tvm::runtime::detail::unpack_call_dispatcher<bool, 0, 4, bool (*)(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&)>::run<tvm::runtime::TVMArgValue, tvm::runtime::TVMArgValue, tvm::runtime::TVMArgValue, tvm::runtime::TVMArgValue>(bool (* const&)(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&), tvm::runtime::TVMArgs const&, tvm::runtime::TVMRetValue*, tvm::runtime::TVMArgValue&&, tvm::runtime::TVMArgValue&&, tvm::runtime::TVMArgValue&&, tvm::runtime::TVMArgValue&&) + 95
     [bt] (3) 4   libtvm.dylib                        0x0000000110d666c9 std::__1::__function::__func<void tvm::runtime::TypedPackedFunc<bool (tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&)>::AssignTypedLambda<bool (*)(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&)>(bool (*)(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&))::'lambda'(tvm::runtime::TVMArgs const&, tvm::runtime::TVMRetValue*), std::__1::allocator<void tvm::runtime::TypedPackedFunc<bool (tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&)>::AssignTypedLambda<bool (*)(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&)>(bool (*)(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&))::'lambda'(tvm::runtime::TVMArgs const&, tvm::runtime::TVMRetValue*)>, void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&) + 137
     [bt] (4) 5   libtvm.dylib                        0x00000001110b55b5 tvm::TypedEnvFunc<bool (tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&)>::operator()(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&) const + 325
     [bt] (5) 6   libtvm.dylib                        0x00000001110b4f2f tvm::relay::TypeSolver::Solve() + 1071
     [bt] (6) 7   libtvm.dylib                        0x000000011109962c tvm::relay::TypeInferencer::Infer(tvm::relay::Expr) + 108
     [bt] (7) 8   libtvm.dylib                        0x000000011109a482 tvm::relay::InferType(tvm::relay::Function const&, tvm::relay::Module const&, tvm::relay::GlobalVar const&) + 546
     [bt] (8) 9   libtvm.dylib                        0x0000000111184c18 tvm::relay::ModuleNode::Add(tvm::relay::GlobalVar const&, tvm::relay::Function const&, bool) + 1576
   
   ; ' should not has tab or newline.
   
   tvm._ffi.base.TVMError: Traceback (most recent call last):
     [bt] (8) 9   libtvm.dylib                        0x0000000110fdfa06 tvm::relay::transform::PassNode::operator()(tvm::relay::Module const&) const + 54
     [bt] (7) 8   libtvm.dylib                        0x0000000111052f86 tvm::relay::transform::SequentialNode::operator()(tvm::relay::Module const&, tvm::relay::transform::PassContext const&) const + 838
     [bt] (6) 7   libtvm.dylib                        0x000000011105338c tvm::relay::transform::Pass::operator()(tvm::relay::Module const&, tvm::relay::transform::PassContext const&) const + 156
     [bt] (5) 6   libtvm.dylib                        0x0000000111051b97 tvm::relay::transform::FunctionPassNode::operator()(tvm::relay::Module const&, tvm::relay::transform::PassContext const&) const + 1607
     [bt] (4) 5   libtvm.dylib                        0x0000000111184c18 tvm::relay::ModuleNode::Add(tvm::relay::GlobalVar const&, tvm::relay::Function const&, bool) + 1576
     [bt] (3) 4   libtvm.dylib                        0x000000011109a482 tvm::relay::InferType(tvm::relay::Function const&, tvm::relay::Module const&, tvm::relay::GlobalVar const&) + 546
     [bt] (2) 3   libtvm.dylib                        0x0000000111099648 tvm::relay::TypeInferencer::Infer(tvm::relay::Expr) + 136
     [bt] (1) 2   libtvm.dylib                        0x0000000111161769 tvm::relay::ErrorReporter::RenderErrors(tvm::relay::Module const&, bool) + 5433
     [bt] (0) 1   libtvm.dylib                        0x00000001109b3aa9 dmlc::LogMessageFatal::~LogMessageFatal() + 57
     [bt] (8) 9   libtvm.dylib                        0x0000000111184c18 tvm::relay::ModuleNode::Add(tvm::relay::GlobalVar const&, tvm::relay::Function const&, bool) + 1576
     [bt] (7) 8   libtvm.dylib                        0x000000011109a482 tvm::relay::InferType(tvm::relay::Function const&, tvm::relay::Module const&, tvm::relay::GlobalVar const&) + 546
     [bt] (6) 7   libtvm.dylib                        0x000000011109962c tvm::relay::TypeInferencer::Infer(tvm::relay::Expr) + 108
     [bt] (5) 6   libtvm.dylib                        0x00000001110b4f2f tvm::relay::TypeSolver::Solve() + 1071
     [bt] (4) 5   libtvm.dylib                        0x00000001110b55b5 tvm::TypedEnvFunc<bool (tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&)>::operator()(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&) const + 325
     [bt] (3) 4   libtvm.dylib                        0x0000000110d666c9 std::__1::__function::__func<void tvm::runtime::TypedPackedFunc<bool (tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&)>::AssignTypedLambda<bool (*)(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&)>(bool (*)(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&))::'lambda'(tvm::runtime::TVMArgs const&, tvm::runtime::TVMRetValue*), std::__1::allocator<void tvm::runtime::TypedPackedFunc<bool (tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&)>::AssignTypedLambda<bool (*)(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&)>(bool (*)(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&))::'lambda'(tvm::runtime::TVMArgs const&, tvm::runtime::TVMRetValue*)>, void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&) + 137
     [bt] (2) 3   libtvm.dylib                        0x0000000110d6676f void tvm::runtime::detail::unpack_call_dispatcher<bool, 0, 4, bool (*)(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&)>::run<tvm::runtime::TVMArgValue, tvm::runtime::TVMArgValue, tvm::runtime::TVMArgValue, tvm::runtime::TVMArgValue>(bool (* const&)(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&), tvm::runtime::TVMArgs const&, tvm::runtime::TVMRetValue*, tvm::runtime::TVMArgValue&&, tvm::runtime::TVMArgValue&&, tvm::runtime::TVMArgValue&&, tvm::runtime::TVMArgValue&&) + 95
     [bt] (1) 2   libtvm.dylib                        0x0000000110f0b198 tvm::relay::LayoutTransformRel(tvm::Array<tvm::relay::Type, void> const&, int, tvm::Attrs const&, tvm::relay::TypeReporter const&) + 280
     [bt] (0) 1   libtvm.dylib                        0x00000001109b3aa9 dmlc::LogMessageFatal::~LogMessageFatal() + 57
     File "incubator-tvm/src/relay/ir/error.cc", line 132
   ```
   

----------------------------------------------------------------
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.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services