とりあえず一式ビルドするスクリプトあります(実態は cmake を呼んでいる)
setup
- Android SDK
- Android NDK
- cmake, ninja
- Gradle
が必要です. Ubuntu 18.04 で Android Studio をインストールしておくのが楽でしょうか.
export ANDROID_HOME=$HOME/Android/Sdk
export ANDROID_NDK=$HOME/Android/Sdk/ndk/21.0.6113669/
# export GRADLE_HOME=$HOME/local/gradle
gradle は GRADLE_HOME
, GRADLE_PATH
で設定はうまく行かないかもです. PATH で直接 gradle
が見えるようにしておくのがよさそうです.
また, gradle は特定のバージョンでないとうまくいきません. 執筆時点では 4.10.3 でした. sdkman あたりでインストールしておきましょう. 使っている gradle version は .circleci
あたりの設定ファイルで確認しましょう.
あとは, python で yaml を使っているので pip install pyyaml
しておきます.
libtorch(.a) をビルドする
デフォルトでは arm, x86 でそれぞれ 32bit, 64bit で合計 4 種類ビルドするので, 必要な ABI が決まっていれば ANDROID_ABI
で指定します.
ANDROID_ABI=arm64-v8a BUILD_PYTORCH_MOBILE=1 ./scripts/build_android.sh
C++ アプリメインであれば, この .a をあとはリンクすればいけるかと思います.
コンパイル時間
1 アーキテクチャあたり Ryzen9 3950X で 10 分ほどです.
torch/csrc/jit
部分のコンパイルが時間かかります.
Java binding やらをビルドして .so をビルドする
./scripts/build_pytorch_android.sh arm64-v8a
などとするだけです(内部で build_android.sh
で .a を作ってから, fbjni などの .so を作っている).
一部 c10/util/Registory.h
で cerr が見つからないと言われるかもしれません(.h で printf しているやんちゃなコードですね). そのときは適当にコメントアウトしてビルドしましょう.
注意点
ANDROID_ABI など, 設定を変えたら build_android*
あたりのフォルダを消して再度一からビルドする必要があります.
(build_***.sh
では既存のビルドディレクトリの中身を消してはくれないため)
TODO
- Debug, Release ビルドの切り替えを試す
- Custom build https://pytorch.org/mobile/android/#custom-build を試す.
-
PC(Linux) 向けに libtorch ビルドする
-
./scripts/build_local.sh
でいける
-