I tried to execute simple workload on Hikey970 with OpenCL (Mali-G72 MP12) throughout RPC, just referencing https://docs.tvm.ai/tutorials/cross_compilation_and_rpc.html#sphx-glr-tutorials-cross-compilation-and-rpc-py.
In the experiments, local CPU (macOS) and remote CPU (aarch64) worked, however the remote CPU with OpenCL hanged up with the following error message.
# stdout on remote (Hikey970)
[20:28:24] /home/shunya/repos/tvm/src/runtime/opencl/opencl_device_api.cc:255: Initialize OpenCL platform 'ARM Platform'
Failed creating base context during opening of kernel driver.
Kernel module may not have been loaded
# stdout on host (mac)
yamada … workspace tvm resnet python tvm_deploy_multiple_targets.py -t hikey970 -cl
[23:58:24] /Users/yamada/tk-home/workspace/tvm/tvm/src/codegen/opt/build_opencl_off.cc:16: OpenCL runtime not enabled, return a source module...
Traceback (most recent call last):
File "tvm_deploy_multiple_targets.py", line 129, in <module>
run_opencl()
File "tvm_deploy_multiple_targets.py", line 88, in run_opencl
func = remote.load_module(lib_name)
File "/Users/yamada/tk-home/workspace/tvm/tvm/python/tvm/rpc/client.py", line 119, in load_module
return base._LoadRemoteModule(self._sess, path)
File "/Users/yamada/tk-home/workspace/tvm/tvm/python/tvm/_ffi/function.py", line 280, in my_api_func
return flocal(*args)
File "/Users/yamada/tk-home/workspace/tvm/tvm/python/tvm/_ffi/_ctypes/function.py", line 184, in __call__
ctypes.byref(ret_val), ctypes.byref(ret_tcode)))
File "/Users/yamada/tk-home/workspace/tvm/tvm/python/tvm/_ffi/base.py", line 66, in check_call
raise TVMError(py_str(_LIB.TVMGetLastError()))
tvm._ffi.base.TVMError: Except caught from RPC call: TVMCall CFunc Error:
Traceback (most recent call last):
File "/home/shunya/repos/tvm/python/tvm/_ffi/_ctypes/function.py", line 55, in cfun
rv = local_pyfunc(*pyargs)
File "/home/shunya/repos/tvm/python/tvm/rpc/server.py", line 50, in load_module
m = _load_module(path)
File "/home/shunya/repos/tvm/python/tvm/module.py", line 225, in load
return _LoadFromFile(path, fmt)
File "/home/shunya/repos/tvm/python/tvm/_ffi/_ctypes/function.py", line 185, in __call__
ctypes.byref(ret_val), ctypes.byref(ret_tcode)))
File "/home/shunya/repos/tvm/python/tvm/_ffi/base.py", line 66, in check_call
raise TVMError(py_str(_LIB.TVMGetLastError()))
tvm._ffi.base.TVMError: [20:28:24] /home/shunya/repos/tvm/src/runtime/opencl/opencl_device_api.cc:269: Check failed: err_code == CL_SUCCESS OpenCL Error, code=-6: CL_OUT_OF_HOST_MEMORY
Stack trace returned 10 entries:
[bt] (0) /home/shunya/repos/tvm/build/libtvm_runtime.so(dmlc::StackTrace[abi:cxx11]()+0x104) [0xffff7b95e1c4]
[bt] (1) /home/shunya/repos/tvm/build/libtvm_runtime.so(dmlc::LogMessageFatal::~LogMessageFatal()+0x30) [0xffff7b95eca8]
[bt] (2) /home/shunya/repos/tvm/build/libtvm_runtime.so(tvm::runtime::cl::OpenCLWorkspace::Init(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)+0x224) [0xffff7b9c91fc]
[bt] (3) /home/shunya/repos/tvm/build/libtvm_runtime.so(tvm::runtime::OpenCLModuleNode::Init()+0x134) [0xffff7b9d482c]
[bt] (4) /home/shunya/repos/tvm/build/libtvm_runtime.so(tvm::runtime::OpenCLModuleCreate(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, tvm::runtime::FunctionInfo, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, tvm::runtime::FunctionInfo> > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)+0x27c) [0xffff7b9d4f6c]
[bt] (5) /home/shunya/repos/tvm/build/libtvm_runtime.so(tvm::runtime::OpenCLModuleLoadBinary(void*)+0x208) [0xffff7b9d6000]
[bt] (6) /home/shunya/repos/tvm/build/libtvm_runtime.so(+0x9a3fc) [0xffff7b9d63fc]
[bt] (7) /home/shunya/repos/tvm/build/libtvm_runtime.so(tvm::runtime::ImportModuleBlob(char const*, std::vector<tvm::runtime::Module, std::allocator<tvm::runtime::Module> >*)+0x780) [0xffff7b983f58]
[bt] (8) /home/shunya/repos/tvm/build/libtvm_runtime.so(+0x30194) [0xffff7b96c194]
[bt] (9) /home/shunya/repos/tvm/build/libtvm_runtime.so(tvm::runtime::Module::LoadFromFile(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)+0x3b0) [0xffff7b97c628]
If my understanding is correct, OpenCL 2.1 is installed in the linux image I’m using on Hikey970.
device file /dev/mali0
exists.