見出し画像

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 ファイルを読み込みます。

LLMFarm.xcodeprojファイルを読み込んだ直後

プロジェクト「LLMFarm」を選び、ターゲット「LLMFarm」を選択します。「Setting Siging & Capabilities」を選択し、Release内のTeam、BundleIdentifierを適切に設定します(伏せている箇所)。

テストしたいデバイスを選択して、

ビルドします(以下のボタンを押下です)。

3. 試してみる

macOS

こちらは普通に動きました。

iOS

起動した!
続いて右上のハンバーガー「・・・」をタップして、モデル追加画面に遷移します。

以下は、モデルを選択したあとの画面。続いてBackをタップします。

トップ画面に戻るので、右上のプラスをタップします。

Add Chatの画面に戦します。ここで「Select model」をタップして、追加したモデル「minicpm-q4_1.gguf」を選択します。

そして、「こんにちは」と入力してエンターすると・・・

modelLoadError発生

やはり、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.

MiniCPM/README-en.md at main · OpenBMB/MiniCPM · GitHub


この記事が気に入ったらサポートをしてみませんか?