TVM RPC Server
This folder contains a simple recipe to make RPC server in c++.
Usage (Non-Windows)
- Configure the tvm CMake build with
config.cmakeensuring thatUSE_CPP_RPCis set toONin the config. - If cross compiling for Android, add the following options to the CMake config or specify them when invoking CMake:
# Whether to build the C++ RPC server binary
set(USE_CPP_RPC ON)
# Path to the Android NDK CMake toolchain
set(CMAKE_TOOLCHAIN_FILE $ENV{ANDROID_NDK}/build/cmake/android.toolchain.cmake)
# The Android ABI and platform to target
set(ANDROID_ABI "arm64-v8a")
set(ANDROID_PLATFORM android-28)
- Similarly, if cross compiling for embedded Linux add the following options to CMake config:
# Needed to ensure pthread is linked
set(OS Linux)
# Path to the desired C++ cross compiler
set(CMAKE_CXX_COMPILER /path/to/cross/compiler/executable)
-
If you need to build cpp_rpc with OpenCL support, specify variable
USE_OPENCLin the config:set(USE_OPENCL ON)In this case OpenCL-wrapper or OpenCL installed to your system will be used. When OpenCL-wrapper is used, it will dynamically load OpenCL library on the device. If the device doesn't have OpenCL library on it, then you'll see in the runtime that OpenCL library cannot be opened.
If linking against a custom device OpenCL library is needed, in the config specify the path to the OpenCL SDK containing the include/CL headers and lib/ or lib64/libOpenCL.so:
set(USE_OPENCL /path/to/opencl-sdk)
- From within the configured tvm build directory, compile
tvm_runtimeand thetvm_rpcserver:
cmake --build $TVM_ROOT/build --target tvm_runtime tvm_rpc -j$(nproc)
- Use
./tvm_rpc serverto start the RPC server
Usage (Windows)
- Configure the tvm CMake build with
config.cmakeensuring thatUSE_CPP_RPCis set toONin the config. - Install LLVM pre-build binaries, making sure to select the option to add it to the PATH.
- Verify Python 3.6 or newer is installed and in the PATH.
- Use
<tvm_output_dir>\tvm_rpc.exeto start the RPC server
How it works
- The tvm runtime dll is linked along with this executable and when the RPC server starts it will load the tvm runtime library.
Command line usage
server - Start the server
--host - The listen address of the server, Default=0.0.0.0 (any)
--port - The port of the RPC server, Default=9090
--port-end - The end search port of the RPC server, Default=9099
--tracker - The RPC tracker address in host:port format e.g. 10.1.1.2:9190 Default=""
--key - The key used to identify the device type in tracker. Default=""
--custom-addr - Custom IP Address to Report to RPC Tracker. Default=""
--silent - Whether to run in silent mode. Default=False
Example
./tvm_rpc server --host=0.0.0.0 --port=9090 --port-end=9099 --tracker=127.0.0.1:9190 --key=rasp
Note
Currently support is only there for Linux / Android / Windows environment and proxy mode isn't supported currently.