🦙

Flutterでllama.cppを試す(調査メモ)

2024/12/17に公開

こちらはFlutter大学 Advent Calendar 2024 17日目の記事になります。

llama.cpp

通常Local PC上でLlama3のような言語モデルを動かす場合llama.cppというC/C++で書かれたライブラリ及びこちらをラップしたものを利用するケースが多いと思います。
https://github.com/ggerganov/llama.cpp

iOSやAndroidデバイス上で動かす場合もこちらを利用するケースが多く、記事も上がっていますがFlutter上で利用する記事はあまり見ない状況です。

10月頃から少しずつスクラップにして調べていましたが、現状わかっているところを記事にまとめました。
https://zenn.dev/hndr/scraps/62e5697f0f0821

package

Flutterにおいても同様でllama.cppをラップしたライブラリを利用します。
pub.dev上に上がっていて最近もアップデートされているものだと以下のpackageがあります。

https://pub.dev/packages/llama_cpp_dart
https://pub.dev/packages/fcllama

llama.cppのrepositoryのBindings項目からもリンクされています

llama_cpp_dart

動作やソースを確認したところllama_cpp_dartはiOSとAndroidで対応が異なります。

iOS

cloneしてきたllama.cppから自分でbuildしたlibllama.dylib を適切なディレクトリに配置する必要があります。
buildする際は以下を利用するのが良さそうです。

./run_build.sh /path/to/llama.cpp <DEVELOPMENT_TEAM_ID>

build後にXCode上で ios/Runner/ 配下などにlibllama.dylibを配置すると思われます(調査中)

Android

こちらは自分でbuildする必要がなく、Flutterアプリケーションbuild時にPackage内でbuildが走るようですが、現在 llama.cppがsubmoduleとして含まれておらず、手動でCMakeLists.txtが含まれる /Users/<UserName>/.pub-cache/hosted/pub.dev/llama_cpp_dart-0.0.8/src/ にcloneしてくる必要があります。
https://github.com/netdur/llama_cpp_dart/issues/46

サンプルアプリケーション

https://github.com/netdur/llama_cpp_dart/tree/main/example

試していますが、ドキュメントが不足しているのもあり筆者の環境ではまだ動作がうまくいっていないです...。

fcllama

iOS
Please run pod install or pod update in your iOS project.

Android
You need install cmake 3.31.0、android sdk 35 and ndk 28.0.12674087. No additional operation required .

こちらは上記設定以外iOS/Androidともに特別な対応は必要なさそうです。
/android/build.gradle /android/app/build.gradle などを適宜修正してください。

サンプルアプリケーション

https://github.com/xuegao-tzx/Fllama/tree/main/example
上記サンプルアプリケーションを動かしてみたのですが、言語モデルをダウンロードする機構があるもののloadingが終わらない状態、そのため自分で gemma-2-baku-2b-it-Q4_K_M.gguf などのモデルを追加してみましたがアプリそのものが落ちてしまうような結果でした。
https://huggingface.co/alfredplpl/gemma-2-baku-2b-it-gguf

おわりに

以上、動作を確認するところまでを記事にしたかったのですが、現在iOS/Androidともにbuildが通らない/モデル読み込み時にアプリが落ちるといった状況でした。

llama.cppの頻繁な更新にラップしたライブラリが追従できていなかったり、ドキュメントが不足しているためbuild後の配置方法がわからないなどもう少し時間がかかりそうです🥺

確認するところまでできたら適宜追記を行うか続きの記事を上げようと思います!

Discussion