LLM-jp-3 を llama.cpp を使って iPhone・Android で動かす
「LLM-jp-3」を「llama.cpp」を使って iPhone・Android で動かす手順をまとめました。
1. LLM-jp-3
「LLM-jp-3」は、国立情報学研究所の大規模言語モデル研究開発センターによって開発されたLLMです。「LLM-jp-3 172B」の事前学習に使用しているコーパスで学習したモデルになります。各モデルは日本語・英語・ソースコードを重点的に学習しています。「Apache License 2.0」で提供されています。
2. iPhone での llama.cpp の実行
iPhone での「llama.cpp」の実行手順は、次のとおりです。
(1) 「llama.cpp」のリポジトリをクローン。
git clone https://github.com/ggerganov/llama.cpp
(2) 「llama.cpp/examples/llama.swiftui」を「Xcode」で開く。
iPhoneで「llama.cpp」を実行する公式サンプルコードになります。
(3) HuggingFaceから「alfredplpl/llm-jp-3-1.8b-instruct-gguf」の「llm-jp-3-1.8b-instruct-F16.gguf」をダウンロード。
(4) Xcodeのプロジェクトの「models」に「llm-jp-3-1.8b-instruct-F16.gguf」を配置。
(5) 「llama.swiftui/Models/LlamaState.swift」の20行目を編集。
モデル「LLM-jp-3 1.8B」を指定しています。
private var defaultModelUrl: URL? {
Bundle.main.url(forResource: "llm-jp-3-1.8b-instruct-F16", withExtension: "gguf", subdirectory: "models")
}
(6) 「llama.cpp.swift/LibLlama.swift」の119行目を編集。
完了フラグをおろし(is_done = false)、チャットテンプレートを追加しています。
is_done = false
tokens_list = tokenize(text: "<s>\n\n### 指示:\n\(text)\n\n### 応答:\n", add_bos: true)
temporary_invalid_cchars = []
(7) iPhoneを「開発者モード」にして、USBでPCと接続。
(8) 「Signing & Capabilities」で署名。
(9) 「Xcode」の実行ボタンを押す。
アプリが起動します。
(10) メッセージボックスに「質問」を入力して「Send」ボタンを押す。
3. Android での llama.cpp の実行
Android での「llama.cpp」の実行手順は、次のとおりです。
(1) 「llama.cpp」のリポジトリをクローン。
git clone https://github.com/ggerganov/llama.cpp
(2) 「llama.cpp/examples/llama.android」を「Android Studio」で開く。
Androidで「llama.cpp」を実行する公式サンプルコードになります。
(3) 「app/kotlin+java/com/example.llama/MainActivity.kt」の73行目を編集。
モデル「LLM-jp-3 1.8B」を指定しています。
val models = listOf(
Downloadable(
"LLM-jp-3 1.8B (F16, 3.7GiB)",
Uri.parse("https://huggingface.co/alfredplpl/llm-jp-3-1.8b-instruct-gguf/resolve/main/llm-jp-3-1.8b-instruct-F16.gguf?download=true"),
File(extFilesDir, "llm-jp-3-1.8b-instruct-F16.gguf"),
),
(4) 「llama/kotlin+java/android.llama.cpp/LlamaAndroid.kt」の39行目を編集。
トークン数を512に増やしています。
private val nlen: Int = 512
(5) 「llama/kotlin+java/android.llama.cpp/LlamaAndroid.kt」の121行目を編集。
チャットテンプレートを追加しています。
val ncur = IntVar(completion_init(state.context, state.batch, "<s>\n\n### 指示:\n" + message + "\n\n### 応答:\n", nlen))
(6) Androidを「開発者モード」にして、USBでPCと接続。
(7) 「Android Studio」の実行ボタンを押す。
アプリが起動します。
(8) 「Download LLM-jp-3 1.8B」ボタンを押す。
Downloadingが100%になるまで待ちます。
(9) 「Load LLM-jp-3 1.8B」ボタンを押す。
(10) メッセージボックスに「質問」を入力して「Send」ボタンを押す。