Does libtvm.so and libtvm_runtime.so for cross-compilation should be compiled with the same LLVM?

Hello,

I have followed tutorial from page Deploy the Pretrained Model on Android — tvm 0.9.dev0 documentation , but I have some differences. I have build tvm_rpc native executable with OpenCL, Vulkan using LLVM-8 for target device which is aarch64.

I need to run rpc_tracker on my computer, so it needs compiled libtvm_runtime. But I have ubuntu 21.10, which has not LLVM-8, but LLVM-9. Is it ok? I have also added support for vulkan, but i’m not sure whether it is required.

I’m getting following error during connection:

Traceback (most recent call last):
  File "/usr/lib/python3.9/threading.py", line 973, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.9/threading.py", line 910, in run
    self._target(*self._args, **self._kwargs)
  File "/home/piotr/projects/odai-meta/odai-tvm/tvm/python/tvm/autotvm/measure/measure_methods.py", line 767, in _check
    remote = request_remote(device_key, host, port, priority)
  File "/home/piotr/projects/odai-meta/odai-tvm/tvm/python/tvm/autotvm/measure/measure_methods.py", line 735, in request_remote
    remote = tracker.request(device_key, priority=priority, session_timeout=timeout)
  File "/home/piotr/projects/odai-meta/odai-tvm/tvm/python/tvm/rpc/client.py", line 417, in request
    raise RuntimeError(
RuntimeError: Cannot request plex after 5 retry, last_error:Traceback (most recent call last):
  3: TVMFuncCall
  2: std::_Function_handler<void (tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*), tvm::runtime::__mk_TVM0::{lambda(tvm::runtime::TVMArgs, tvm::runtime::TVMRetValue*)#1}>::_M_invoke(std::_Any_data const&, tvm::runtime::TVMArgs&&, tvm::runtime::TVMRetValue*&&)
  1: tvm::runtime::RPCClientConnect(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, tvm::runtime::TVMArgs)
  0: tvm::runtime::RPCConnect(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, tvm::runtime::TVMArgs)
  File "/home/piotr/projects/odai-meta/odai-tvm/tvm/src/runtime/rpc/rpc_socket_impl.cc", line 72
TVMError: 

When you are compiling for different targets, the LLVM versions you use for each target don’t have to be the same. In fact, you can think of them as completely unrelated compilers.

Even when compiling for the same target, the versions of compilers don’t need to match, but you could run into issues with the runtime dependencies, in particular the C++ library (i.e. libc++ vs. libstdc++, or between versions of each).

1 Like