RCP and Runtime

Hello,

I have problems with runing tuning models using RPC tracker/server and using android device. Now I try to understand how TVM works under the hood.

  1. I have compiled 2 versions of runtime: (a) with opencl and llvm, (b) without opencl and with llvm.
  2. I have created simple android application, I have copied there java classes and build scripts from tvm4j and android_rpc app. I think tvm4j and my simple android application build its own runtime for android device, am I right?
  3. When I run tuning in different setup I’m getting errors: 3a. When I use (a) setup to run tune, I’m getting:
Traceback (most recent call last):
  File "/usr/lib/python3.9/runpy.py", line 188, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "/usr/lib/python3.9/runpy.py", line 111, in _get_module_details
    __import__(pkg_name)
  File "/home/piotr/projects/odai/tvm/tvm/python/tvm/__init__.py", line 26, in <module>
    from ._ffi.base import TVMError, __version__, _RUNTIME_ONLY
  File "/home/piotr/projects/odai/tvm/tvm/python/tvm/_ffi/__init__.py", line 28, in <module>
    from .base import register_error
  File "/home/piotr/projects/odai/tvm/tvm/python/tvm/_ffi/base.py", line 71, in <module>
    _LIB, _LIB_NAME = _load_lib()
  File "/home/piotr/projects/odai/tvm/tvm/python/tvm/_ffi/base.py", line 57, in _load_lib
    lib = ctypes.CDLL(lib_path[0], ctypes.RTLD_GLOBAL)
  File "/usr/lib/python3.9/ctypes/__init__.py", line 374, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: /tvm/build-llvm12-arm-api-28-opencl/libtvm_runtime.so: cannot open shared object file: No such file or directory

that file exists, but it’s is in different architecture that my computer (computer x86_64, library arm64). Why TVM tuning through RPC requires runtime from my computer?

3b. When I use (b) setup I’m getting following errors on android phone logcat:

2022-02-04 16:34:00.693 16220-16258/org.apache.tvm.deploy_segment D/ConnectTrackerServerProcessor: alloted timeout: 60
2022-02-04 16:34:00.694 16220-16258/org.apache.tvm.deploy_segment D/ConnectTrackerServerProcessor: Connection from /192.168.1.135:42558
2022-02-04 16:34:00.694 16220-16259/org.apache.tvm.deploy_segment D/RPCWatchdog: waiting for timeout: 60000
2022-02-04 16:34:00.697 16220-16258/org.apache.tvm.deploy_segment D/tvm.Base: Try to load tvm4j (runtime packed version) ...
2022-02-04 16:34:00.710 16220-16258/org.apache.tvm.deploy_segment D/tvm.Base: libtvm4j loads successfully.
2022-02-04 16:34:00.720 16220-16258/org.apache.tvm.deploy_segment D/NativeServerLoop: done server loop...
2022-02-04 16:34:00.721 16220-16258/org.apache.tvm.deploy_segment D/ConnectTrackerServerProcessor: Finish serving /192.168.1.135:42558
2022-02-04 16:34:00.723 16220-16259/org.apache.tvm.deploy_segment D/RPCWatchdog: watchdog woken up, ok...


2022-02-04 16:34:08.507 16220-16258/org.apache.tvm.deploy_segment D/NativeServerLoop: Load module from /data/user/0/org.apache.tvm.deploy_segment/cache/tvm4j_rpc_5526354004746377743/tmp_func_9c5bb7ff2ca10715.tar
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570] JNI DETECTED ERROR IN APPLICATION: JNI CallStaticVoidMethodV called with pending exception org.apache.tvm.Base$TVMError: TVMError: 
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570] ---------------------------------------------------------------
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570] An error occurred during the execution of TVM.
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570] For more information, please see: https://tvm.apache.org/docs/errors.html
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570] ---------------------------------------------------------------
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570]   Check failed: (f != nullptr) is false: Loader for `.` files is not registered, resolved to (runtime.module.loadfile_tar) in the global registry.Ensure that you have loaded the correct runtime code, andthat you are on the correct hardware architecture.
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570] Stack trace:
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570]   File "/home/piotr/projects/odai/tvm/tvm/include/../src/runtime/module.cc", line 87
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570] 
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570]   at void org.apache.tvm.Base.checkCall(int) (Base.java:160)
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570]   at org.apache.tvm.TVMValue org.apache.tvm.Function.invoke() (Function.java:132)
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570]   at org.apache.tvm.Module org.apache.tvm.Module.load(java.lang.String, java.lang.String) (Module.java:140)
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570]   at org.apache.tvm.Module org.apache.tvm.Module.load(java.lang.String) (Module.java:146)
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570]   at java.lang.Object org.apache.tvm.rpc.NativeServerLoop$2.invoke(org.apache.tvm.TVMValue[]) (NativeServerLoop.java:67)
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570]   at java.lang.Object org.apache.tvm.Function.invokeRegisteredCbFunc(org.apache.tvm.Function$Callback, org.apache.tvm.TVMValue[]) (Function.java:332)
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570]   at int org.apache.tvm.LibInfo.tvmFuncCall(long, org.apache.tvm.Base$RefTVMValue) (LibInfo.java:-2)
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570]   at org.apache.tvm.TVMValue org.apache.tvm.Function.invoke() (Function.java:132)
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570]   at void org.apache.tvm.rpc.NativeServerLoop.run() (NativeServerLoop.java:80)
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570]   at void org.apache.tvm.rpc.ConnectTrackerServerProcessor.run() (ConnectTrackerServerProcessor.java:176)
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570]   at void org.apache.tvm.deploy_segment.RPCProcessor.run() (RPCProcessor.java:56)
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570] 
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570]     in call to CallStaticVoidMethodV
2022-02-04 16:34:08.512 16220-16258/org.apache.tvm.deploy_segment A/.deploy_segmen: java_vm_ext.cc:570]     from int org.apache.tvm.LibInfo.tvmFuncCall(long, org.apache.tvm.Base$RefTVMValue)