Hello all. I’m trying to write and run tiny yolo relay model using VTA on FPGA target.
However I encountered these errors when building the model.
So I would like to ask certain questions.
Questions:
- Can graphs written with relay work with VTA like NNVM graph?
- What’s the error caused by?
- Is there a good debugging method for tracking errors?
Traceback (most recent call last):
File "tinyyolo_quantized.py", line 502, in <module>
graph, lib, params = generate_graph(device)
File "tinyyolo_quantized.py", line 71, in generate_graph
graph, lib, params = relay.build(func, target=target, target_host=target_host, params=params)
File "/tvm/python/tvm/relay/build_module.py", line 275, in build
lowered_funcs, target=target, target_host=target_host)
File "/tvm/python/tvm/build_module.py", line 607, in build
mhost = codegen.build_module(fhost_all, str(target_host))
File "/tvm/python/tvm/codegen.py", line 20, in build_module
return _Build(lowered_func, target)
File "/tvm/python/tvm/_ffi/_ctypes/function.py", line 185, in __call__
ctypes.byref(ret_val), ctypes.byref(ret_tcode)))
File "/tvm/python/tvm/_ffi/base.py", line 71, in check_call
raise TVMError(py_str(_LIB.TVMGetLastError()))
tvm._ffi.base.TVMError: [15:55:42] /tvm/src/codegen/llvm/llvm_module.cc:173: LLVM module verification failed with the following errors:
Call parameter type does not match function signature!
%3 = alloca i32, align 4
i8* %31 = call i8* @VTABufferCPUPtr(i8* %14, i32* nonnull %3)
Call parameter type does not match function signature!
%3 = alloca i32, align 4
i8* %31 = call i8* @VTABufferCPUPtr(i8* %14, i32* nonnull %3)
Call parameter type does not match function signature!
%3 = alloca float, align 4
i8* %31 = call i8* @VTABufferCPUPtr(i8* %14, float* nonnull %3)
Call parameter type does not match function signature!
%3 = alloca i32, align 4
i8* %31 = call i8* @VTABufferCPUPtr(i8* %14, i32* nonnull %3)
Call parameter type does not match function signature!
%3 = alloca i32, align 4
i8* %31 = call i8* @VTABufferCPUPtr(i8* %14, i32* nonnull %3)
Call parameter type does not match function signature!
%3 = alloca i32, align 4
i8* %31 = call i8* @VTABufferCPUPtr(i8* %14, i32* nonnull %3)
Call parameter type does not match function signature!
%3 = alloca i32, align 4
i8* %31 = call i8* @VTABufferCPUPtr(i8* %14, i32* nonnull %3)
Call parameter type does not match function signature!
%3 = alloca i32, align 4
i8* %31 = call i8* @VTABufferCPUPtr(i8* %14, i32* nonnull %3)
Call parameter type does not match function signature!
%3 = alloca i32, align 4
i8* %31 = call i8* @VTABufferCPUPtr(i8* %14, i32* nonnull %3)
Stack trace returned 9 entries:
[bt] (0) 0 libtvm.dylib 0x0000000114d9be70 dmlc::StackTrace(unsigned long) + 464
[bt] (1) 1 libtvm.dylib 0x0000000114d9bb54 dmlc::LogMessageFatal::~LogMessageFatal() + 52
[bt] (2) 2 libtvm.dylib 0x00000001155f9522 tvm::codegen::LLVMModuleNode::Init(tvm::Array<tvm::LoweredFunc, void> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) + 1922
[bt] (3) 3 libtvm.dylib 0x00000001155f8bb0 std::__1::__function::__func<tvm::codegen::$_1, std::__1::allocator<tvm::codegen::$_1>, void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&) + 544
[bt] (4) 4 libtvm.dylib 0x0000000114e6dd2f tvm::codegen::Build(tvm::Array<tvm::LoweredFunc, void> const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) + 559
[bt] (5) 5 libtvm.dylib 0x0000000114da7023 std::__1::__function::__func<tvm::codegen::$_0, std::__1::allocator<tvm::codegen::$_0>, void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)>::operator()(tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&) + 483
[bt] (6) 6 libtvm.dylib 0x00000001156097f6 TVMFuncCall + 70
[bt] (7) 7 _ctypes.cpython-36m-darwin.so 0x0000000110fc6e5f ffi_call_unix64 + 79
[bt] (8) 8 ??? 0x00007ffee5edc0e0 0x0 + 140732755984608
Really appreciate any comments or suggestions.