![見出し画像](https://assets.st-note.com/production/uploads/images/130021616/rectangle_large_type_2_ae759c420f873071d470c66aa198774c.png?width=1200)
MacBook Pro&iPhoneでMiniCPMを試してみる...
「エンドサイドの大規模言語モデルの可能性を明らかにする」と宣うMiniCPMと、「大規模言語モデル (LLM) で動作する iOS および MacOS アプリ」であるLLMFarmをMiniCPM向けにカスタマイズした「LLMFarm-MiniCPM」を試します。
試したマシンは、MacBook Pro M3 Proチップ、メモリ18GBです。
iPhoneは、iPhone SE (2世代) 、メモリは3GBです。動くかしら。
0. 前説
MiniCPMのリポジトリとは別に、iOSとAndroidそれぞれに対応するリポジトリが用意されています。
・iOS用 : OpenBMB/LLMFarm-MiniCPM: MiniCPM on iOS.
・Android用 : OpenBMB/mlc-MiniCPM: MiniCPM on Android platform.
今回はmacOSとiOSアプリで試します。
1. 量子化モデルの作成
venv環境構築
python3 -m venv minicpm
cd $_
source bin/activate
pip install huggingface_hub
llama.cppのビルド
git clone https://github.com/OpenBMB/llama.cpp.git
cd llama.cpp && make -j8
モデルのダウンロード
pythonを立ち上げて、以下を流し込んでダウンロードです。
from huggingface_hub import snapshot_download
REPO_ID = "openbmb/MiniCPM-2B-sft-bf16"
snapshot_download(repo_id=REPO_ID, revision="main")
量子化モデルへの変換
llama.cppに「拡張子.safetensorsのファイルが見当たらない」と怒られるので、Hugging Faceのキャッシュディレクトリに馳せ参じて、
hf_model_dir=~/.cache/huggingface/hub/models--openbmb--MiniCPM-2B-sft-bf16/snapshots/fe1d74027ebdd81cef5f815fa3a2d432a6b5de2a
cd ${hf_model_dir}
ln -s pytorch_model.bin pytorch_model.safetensors
とシンボリックリンクを作成します。
python convert.py ${hf_model_dir} --vocab-type hfft --outtype f32
./quantize ${hf_model_dir}/ggml-model-f32.gguf ./models/minicpm-q4_1.gguf q4_1
minicpm-q4_1.ggufファイルできました。
% ls -l models
(snip)
-rw-r--r-- 1 noguchi staff 2095418560 Feb 6 12:19 minicpm-q4_1.gguf
2. ビルド
ビルドに必要となるソースをクローン&アップデートします。
git clone https://github.com/OpenBMB/LLMFarm-MiniCPM.git
cd LLMFarm-MiniCPM && git submodule update --init --recursive
Xcodeを起動し、LLMFarm.xcodeproj ファイルを読み込みます。
![](https://assets.st-note.com/img/1707210769555-8ZXpalpykk.png?width=1200)
プロジェクト「LLMFarm」を選び、ターゲット「LLMFarm」を選択します。「Setting Siging & Capabilities」を選択し、Release内のTeam、BundleIdentifierを適切に設定します(伏せている箇所)。
![](https://assets.st-note.com/img/1707212480829-ZNhR3qMzyH.png?width=1200)
テストしたいデバイスを選択して、
![](https://assets.st-note.com/img/1707212516163-bzM1dhdIoK.png?width=1200)
ビルドします(以下のボタンを押下です)。
![](https://assets.st-note.com/img/1707212575397-pHOg8xfMXD.png)
3. 試してみる
macOS
こちらは普通に動きました。
![](https://assets.st-note.com/img/1707212652048-h4paLanHYw.png?width=1200)
iOS
起動した!
続いて右上のハンバーガー「・・・」をタップして、モデル追加画面に遷移します。
![](https://assets.st-note.com/img/1707212697408-28CCmsnrcm.png?width=1200)
以下は、モデルを選択したあとの画面。続いてBackをタップします。
![](https://assets.st-note.com/img/1707212706477-MelUoNUIBx.png?width=1200)
トップ画面に戻るので、右上のプラスをタップします。
![](https://assets.st-note.com/img/1707212860170-GSOzsxgPne.png?width=1200)
Add Chatの画面に戦します。ここで「Select model」をタップして、追加したモデル「minicpm-q4_1.gguf」を選択します。
![](https://assets.st-note.com/img/1707212724441-A39N1bk5vp.png?width=1200)
そして、「こんにちは」と入力してエンターすると・・・
![](https://assets.st-note.com/img/1707212903571-VufoNkFDut.png?width=1200)
modelLoadError発生!
![](https://assets.st-note.com/img/1707212943353-ADc0wxCuvn.png?width=1200)
やはり、iPhone SE (2世代)の 3GBでは無理でした・・・。
まとめ
iPhone SEでは動かず
メモリ3GBのiPhoneではモデルロード時にエラーが発生しました。これはつまり、4GB以上のiPhoneを購入せよ、ということでしょうか。
これはリベンジせねば・・・。
ファインチューニングについて
フルパラメータチューニング用のコードは未公開のため、公開され次第RTX 4090で試してみたいと思います。
Full-parameter Tuning
Using BMTrain,as well as checkpointing and ZeRO-3 (zero redundancy optimizer),we can tune all parameters of MiniCPM using one piece of NVIDIA GeForce GTX 3090/4090.
This code will be available soon.