Hello,
I successfully created runtime for aarch64, libtvm.so for my local computer, compiled tensorflow model, run this model on target device, but I cannot run tuning operation through tvmc. I’m getting this error:
DEBUG : 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.
DEBUG : Stack trace:
DEBUG : File "/home/piotr/projects/odai/tvm/tvm/apps/android_rpc/app/src/main/jni/../../../../../../include/../src/runtime/module.cc", line 87
DEBUG :
DEBUG : at void org.apache.tvm.Base.checkCall(int) (Base.java:173)
DEBUG : at org.apache.tvm.TVMValue org.apache.tvm.Function.invoke() (Function.java:130)
DEBUG : at org.apache.tvm.Module org.apache.tvm.Module.load(java.lang.String, java.lang.String) (Module.java:140)
DEBUG : at org.apache.tvm.Module org.apache.tvm.Module.load(java.lang.String) (Module.java:146)
DEBUG : at java.lang.Object org.apache.tvm.rpc.NativeServerLoop$2.invoke(org.apache.tvm.TVMValue[]) (NativeServerLoop.java:89)
DEBUG : at java.lang.Object org.apache.tvm.Function.invokeRegisteredCbFunc(org.apache.tvm.Function$Callback, org.apache.tvm.TVMValue[]) (Function.java:330)
DEBUG : at int org.apache.tvm.LibInfo.tvmFuncCall(long, org.apache.tvm.Base$RefTVMValue) (LibInfo.java:-2)
DEBUG : at org.apache.tvm.TVMValue org.apache.tvm.Function.invoke() (Function.java:130)
DEBUG : at void org.apache.tvm.rpc.NativeServerLoop.run() (NativeServerLoop.java:49)
DEBUG : at void org.apache.tvm.rpc.ConnectTrackerServerProcessor.run() (ConnectTrackerServerProcessor.java:166)
DEBUG : at void org.apache.tvm.tvmrpc.RPCProcessor.run() (RPCProcessor.java:63)
Here are my commands for running model compilation, run and tune:
TVM_LIBRARY_PATH=/home/piotr/projects/odai/tvm/tvm/build-sys-llvm12 python3 \
-m tvm.driver.tvmc compile \
--target "llvm -device=arm_cpu -mtriple=aarch64-linux-androideabi -mattr=+neon" \
--cross-compiler /home/piotr/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang \
--cross-compiler-options="--target=aarch64-none-linux-androideabi30 -mfpu=neon -lm --sysroot=/home/piotr/projects/odai/tvm/toolchains/arm64-30/sysroot" \
--input-shapes "input_tensor:[1,288,512,3]" \
--desired-layout NHWC \
--output ex17_module.tar \
model_288_512.pb
TVM_LIBRARY_PATH=/home/piotr/projects/odai/tvm/tvm/build-sys-llvm12 python3 \
-m tvm.driver.tvmc run \
--inputs 10-512-288.jpg.npz \
--outputs ex17_output.npz \
--rpc-key android \
--rpc-tracker 0.0.0.0:9191 \
--print-time \
--repeat 3 \
--number 3 \
ex17_module.tar
TVM_LIBRARY_PATH=/home/piotr/projects/odai/tvm/tvm/build-sys-llvm12 python3 \
-m tvm.driver.tvmc tune \
--rpc-key android \
--rpc-tracker 0.0.0.0:9191 \
--output output_austin.json \
--target "llvm -mtriple=aarch64-linux-android" \
--enable-autoscheduler \
--input-shapes "input_tensor:[1,288,512,3]" \
--desired-layout NHWC \
model_288_512.pb
The only difference I can see between compile and tune is cross-compiler. Am I using autotvm incorrectly, or there is a way to use cross compiler in tune?
Command to compile runtime for aarch64:
cp ../cmake/config.cmake .
sed -i 's/set(USE_LLVM OFF)/set(USE_LLVM \/home\/piotr\/Android\/Sdk\/ndk\/22.1.7171670\/toolchains\/llvm\/prebuilt\/linux-x86_64\/bin\/llvm-config)/g' config.cmake
cmake .. \
-DUSE_RPC=ON \
-DUSE_LIBBACKTRACE=ON \
-DUSE_CPP_RPC=ON \
-DCMAKE_SYSTEM_NAME=Android \
-DCMAKE_SYSTEM_VERSION=30 \
-DCMAKE_ANDROID_ARCH_ABI=arm64-v8a \
-DCMAKE_ANDROID_NDK=$ANDROID_NDK \
-DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang \
-DCMAKE_FIND_ROOT_PATH=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/ \
-DCMAKE_C_COMPILER=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang \
-DCMAKE_CXX_COMPILER=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android30-clang++ \
-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY
TVM_BUILD_PATH=/home/piotr/projects/odai/tvm/tvm/build-ndk-runtime-aarch64-api-30 make -j4 runtime