📲
rinna-3.6bをiPhoneでも動かす
前回に引き続きmlc-llmを使ってrinna/japanese-gpt-neox-3.6b-instruction-ppo
をiPhoneでも動かしてみました.
こんな感じで動きます↓
前提
- 前回の記事でモデルのconvertができる状態になっている
- iOSの開発環境が入っている
- メモリがたくさん載っている最近のiPhoneを持っている
事前準備
rustupが必要なため,一旦rustをuninstallしてからrustup-initをinstall.初期設定のためrustup-initを実行し,パスの設定を行う.
brew uninstall rust
brew install rustup-init
rustup-init
source "$HOME/.cargo/env"
iPhone用convert
メモリの量に合わせて量子化オプションを調整.最近のiPhoneならq4f16_0
で動くはず.
python3 build.py \
--model japanese-gpt-neox-3.6b-instruction-ppo \
--quantization q4f16_0 \
--target iphone \
--max-seq-len 768
ファイルの修正
メモリを確保できずに初期化できない場合があるので一旦小さくする.
./ios/MLCChat/ModelState.swift
@@ -44,7 +44,7 @@ class ModelState : ObservableObject, Identifiable {
func reloadChatStateWithThisModel() {
// TODO(tvm-team) consider log optional model name
- let estimatedVRAMReq = modelConfig.estimated_vram_req ?? 4000000000;
+ let estimatedVRAMReq = modelConfig.estimated_vram_req ?? 2000000000;
let modelName = modelConfig.display_name ?? modelConfig.local_id.components(separatedBy: "-")[0];
self.chatState.mainReload(
modelName: modelName,
モデルの設定を修正する.prefixは指定した量子化オプションに合わせる
./ios/MLCChat/app-config.json
@@ -1,18 +1,13 @@
{
"model_libs": [
- "vicuna-v1-7b-q3f16_0",
- "RedPajama-INCITE-Chat-3B-v1-q4f16_0"
+ "japanese-gpt-neox-3.6b-instruction-ppo-q4f16_0"
],
"model_list": [
{
- "model_url": "https://huggingface.co/mlc-ai/mlc-chat-vicuna-v1-7b-q3f16_0/resolve/main/",
- "local_id": "vicuna-v1-7b-q3f16_0"
+ "model_url": "",
+ "local_id": "japanese-gpt-neox-3.6b-instruction-ppo-q4f16_0"
}
],
"add_model_samples": [
- {
- "model_url": "https://huggingface.co/mlc-ai/mlc-chat-RedPajama-INCITE-Chat-3B-v1-q4f16_0/resolve/main/",
- "local_id": "RedPajama-INCITE-Chat-3B-v1-q4f16_0"
- }
]
}
同様にモデル名を合わせる.
./ios/prepare_params.sh
@@ -2,11 +2,13 @@
set -euxo pipefail
# NOTE: this is optional, prepackage weight into app
+mkdir -p dist
rm -r dist
mkdir -p dist
declare -a builtin_list=(
- "RedPajama-INCITE-Chat-3B-v1-q4f16_0"
+ "japanese-gpt-neox-3.6b-instruction-ppo-q4f16_0"
+ # "RedPajama-INCITE-Chat-3B-v1-q4f16_0"
# "vicuna-v1-7b-q3f16_0"
# "rwkv-raven-1b5-q8f16_0"
# "rwkv-raven-3b-q8f16_0"
ビルド
mlc-llmのiosで実行.
cd ios
./prepare_libs.sh
./prepare_params.sh
include先のシンボリックリンクがずれているので修正し,tokenizer.jsonをコピー.この際,上記同様にモデル名を合わせる.
ln -fs ../../3rdparty/tvm build/tvm_home
cp ../tokenizer/tokenizer.json dist/japanese-gpt-neox-3.6b-instruction-ppo-q4f16_0
最後に,XCodeを使って実機向けにbuild→runすることで,実機にて動作するところまで確認できました.
量子化すると,どうしてもレスポンスの「言葉の質」が低下しているように感じますね.
Discussion