Android NDKを用いてコンパイルすることで、C/C++プログラムをAndroidで実行することができる。つまり、Alpaca.cppのchatプログラムも実行可能ということだ。この投稿では、そのビルドから実行までの作業を紹介する。
しかし注意が一つ。作業前にAndroid端末のRAM容量を調べて欲しい。chatプログラムの実行に際し、言語モデルをメモリにロードしようとする。これを保持するために8~12GBのRAMが必要なのだ。
この投稿末尾に掲載した動画は、プログラムがAndroidによって強制終了されている様子だ。これはエラーでもバグによるクラッシュでもなく、RAMの容量不足によるロード失敗によって生じている。使用端末はMicrosoft Surface Duo、搭載しているRAM容量は6GBだ。
成功事例がネット上で報告されてはいるものの、全ての事例で使用端末が明らかにされているわけではない。おそらく多くの場合は、Pixel 7 Proのような最新、ハイクラスのモデルだろう。
Linuxであれば、swapの活用*1によって、このような事態を回避できるのだが、root権限のないAndroidでは、この方法が使えないのだ。
2023-04-07 - To non-Japanese reader
I found that some non-Japanese readers read this post with machine translation. Although I am not sure that which my English or translated English is better for you, here is the other post written in English. I wish it will bring better reading experience to you.
impsbl.hatenablog.jp
ビルド環境
この投稿ではLinuxを用いている。Windowsでも同様の作業は可能なのだが、WSL上*2で作業することをお勧めする。CMakeとmakeの事前準備が厄介なのだ。
この投稿では、次の環境を用いている。
GitHubに掲載されている指示に従って、Alpaca 7Bモデルをダウンロードする。そのサイズは4GBだ。このサイズのファイルをダウンロードするために、GitHubページでは、次の方法が提示されている。この投稿ではBitTorrentを用いた。
実行ファイルのビルド
Android NDKが次のフォルダに保存されているとする。
/opt/android-ndk-r25c/
この前提では、"android.toolchain.cmake"のパスは次のようになる。
/opt/android-ndk-r25c/build/cmake/android.toolchain.cmake
ソースコードは次のフォルダに保存されているとする。
~/work/alpaca-android/
このフォルダで次のコマンドを実行すると、"build"フォルダに実行ファイル"chat"が生成される。
mkdir build cd build cmake -DCMAKE_TOOLCHAIN_FILE=/opt/android-ndk-r25c/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-23 -DCMAKE_C_FLAGS=-march=armv8.4a+dotprod .. make
Termux
Androidで"chat"を実行するには、ターミナル・アプリケーションが必要だ。この投稿ではTermuxを用いている。このアプリケーションをGitHub、あるいはF-Droidから入手する。Google Playから入手してはいけない事情*7がある。
github.com | f-droid.org |
Termuxはストレージの参照権限を必要とする。まずAndroidの設定から、権限を割り当てる。
基本的にTermuxは自分自身のフォルダ配下しかコントロールすることができない。具体的には次のフォルダだ。
/data/data/com.termux/files/home
Android内のストレージを参照するため、次のコマンドを実行する。フォルダ配下に"storage"フォルダが生成され、そこにAndroidの内部ストレージマウントされる。
termux-setup-storage
![]() |
![]() |
ファイルのコピーから実行まで
Termuxから"chat"を実行するには、その配下へ保存する必要がある。"chat"を実行するまでには、次の過程を経ることになる。
- 実行ファイル"chat"とAlpacaモデルをAndroid端末へコピーする。ここでは"Download"フォルダ配下の"alpaca"フォルダとする。
- そこからTermuxへコピーする。
- ファイル"chat"に実行権限を割り当てる。
- "chat"を実行するには、その配下へ保存する必要がある。
一連のコマンドは次のようになる。
mkdir alpaca cp storage/shared/Download/aplaca/* ./alpaca/. cd alpaca/ chmod 777 chat ./chat
![]() |
![]() |
余談
そして不幸なことに、メモリ不足によって、この実行プロセスが強制終了されるのだった。
rootを取り、swapを設定して動く可能性もあるかもしれないが、ここは素直に端末の買い替えを検討すべきところなのだろう。
twitter.comalpaca.cppのchatをAndroidで動かすべく、ビルドしてみた。
— Cider Mitsuya (@snoozelight) March 31, 2023
モデルをRAMに載せるところで、OSによって強制終了される。
Linuxならswapを使うところなのだが。
Androidで動かしている人たちの端末は、RAM=8GB、あるいは12GBなのだろうか。
とりあえずRAM=6GB (Sruface Duo)ではダメなのだった。 pic.twitter.com/vam9VMKTPz