安装NDK
Android NDK 是一组使您能将 C 或 C++(“原生代码”)嵌入到 Android 应用中的工具。
-
在平台之间移植其应用。
-
重复使用现有库,或者提供其自己的库供重复使用。
-
在某些情况下提高性能,特别是像游戏这种计算密集型应用。
Android NDK下载
将其解压到/opt 文件夹下,并修改环境变量:
export NDKROOT=/opt/ndk/android-ndk-r12b
export PATH=$NDKROOT:$PATH
保存更新环境变量:
source ~/.bashrc
安装SDK
下载 http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
环境变量
export ANDROID_HOME=/home/software/ubuntu18/android-sdk-linux
export $ANDROID_HOME/TOOLS:$ANDROID_HOME/platform-tools:$PATH
android update sdk -u --all --filter 29
安装Android Stdio
安装执行运行,之后在sdk/tools/bin/下运行
./sdkmanager --licenses
安装gradle
官网:http://www.gradle.org/downloads
export PATH=$PATH:/home/software/ubuntu18/gradle-6.3/bin
编译TVM4J
TVM for java,TVM的java前端。如果想使用TVM的java API,那么需要编译TVM4J库(jar包);另外如果你需要RPC的话,TVM4J也为RPC server 和 client提供了简单的API;
-
使用make jvmpkg命令编译TVM4J,这会下载很多maven的pom配置文件:(时间有点长)
-
使用make jvminstall命令将tvm4j的相关jar包安装在$HOME/.m2/repository/目录下:
在tvm目录下执行
make jvmpkg
make jvminstall
安装RPC App到Android手机上
在tvm/apps/android_rpc目录下执行
gradle clean build
#报错则试试
gradle clean build --no-daemon
成功后则生成apk文件
./app/build/outputs/apk/debug/app-debug.apk
./app/build/outputs/apk/release/app-release-unsigned.apk
生成证书
keytool -genkey -keystore /tvm/apps/android_rpc/dev_tools/tvmrpc.keystore -alias tvmrpc -keyalg RSA -validity 10000
为apk签名
jarsigner -keystore /tvm/apps/android_rpc/dev_tools/tvmrpc.keystore \
-signedjar /tvm/apps/android_rpc/dev_tools/../app/build/outputs/apk/release/tvmrpc-release.apk \
/tvm/apps/android_rpc/dev_tools/../app/build/outputs/apk/release/app-release-unsigned.apk 'tvmrpc'
安装这个apk到Android手机
adb install -r /tvm/apps/android_rpc/dev_tools/../app/build/outputs/apk/release/tvmrpc-release.apk
通过RPC在Android上调试模型的OP
在宿主机上运行RPC tracker
python -m tvm.exec.rpc_tracker --port 7030
打开Android手机的TVM RPC程序,填写以下信息
Address:192.168.31.74
Port:7030
Key:android
在宿主机上查看RPC连接信息
python -m tvm.exec.query_rpc_tracker --port 7030
运行tests/android_rpc_test.py
这会把TVM IR编译为共享库,并且上传共享库到Android手机上,并且在Android手机上运行:
export TVM_TRACKER_HOST=0.0.0.0
export TVM_TRACKER_PORT=7030
export TVM_NDK_CC=/home/software/ubuntu18/android-ndk-r21/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android28-clang++
python3 tests/android_rpc_test.py
使用RPC将ONNX模型运行在Android手机上
完整的Android工程
相比cmake,使用Ninja 新型的编译工具
安装ninja
sudo apt install ninja-build
切换到tvm/apps/android_deploy目录下,编译官方自带的android_deploy项目:
# 稳定版本4.0+建议
gradle clean build
# 非稳定版本3.0建议
gradle clean build --no-daemon