メモリ的にできそうだったのでRaspberry Pi Zero WでGPT-2を動かしました。
多分もっといいやり方はありますが、少なくとも僕が踏んだ手順はこんな感じです:
0. 準備
0.1.OSの準備
ラズパイのOSを用意します。Raspberry Pi Imagerを使って以下の順に進めます:
- デバイスを選ぶ:Raspberry Pi Zero
- OSを選ぶ:Raspberry Pi OS (other) -> Raspberry Pi OS Lite (32-bit)
- ストレージを選ぶ:パソコンに挿さっているmicro SDカードを探して選択
- ホスト名を指定:好きな名前(例:
lmpi)を入れる - 位置情報:必須ではないが上から順に
Tokyo (Japan),Asia/Tokyo,jp - ユーザー名とパスワード:ユーザー名とパスワードを入れる
- Wi-Fi:Wi-Fiの情報を入れる(SSHで入るのに必須)
- 「SSHを有効化する」にチェック、「パスワード認証を使う」を選択
- Raspberry Pi Connectはオフ
- WRITEを押して待つ
完成したらラズパイゼロに挿して電源を接続して起動します。
0.2.その他準備
起動したらパソコンから入ります:
#ここのホスト名・ユーザー名・パスワードはOS設定時に入れたもの
ssh username@ip
入れたら更新もささっと済ませます:
sudo apt update
sudo apt full-upgrade -y
メモリを食う作業をするので一応スワップを有効化します:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
1. 必要なものをインストール
今回必要なものを入れます:
sudo apt install -y git cmake ccache build-essential libpthread-stubs0-dev python3-pip
2. llama.zeroのインストール
llama.cppはPi Zeroだと動かないので対応しているllama.zeroを入れます。
2.1.ダウンロードしてビルド
GitHubからllama.zeroを引っ張ってきてビルドします:
git clone https://github.com/pham-tuan-binh/llama.zero.git
cd llama.zero
cmake -B build
cmake --build build --config Release -j1
こちらは試してませんが、サーバーがいらないときはこれでいいらしいです:
cmake -B build -DLLAMA_BUILD_SERVER=OFF
cmake --build build --config Release -j1
どっちみちとんでもなく時間かかります。(数時間程度目安)
2.2.パスの追加
どこからでも呼び出せるようにします:
echo 'export PATH="$PATH:$HOME/llama.zero/build/bin"' >> ~/.bashrc
source ~/.bashrc
3. HuggingFace CLIのインストール
モデルをダウンロードするためにHuggingFace CLIをインストールします:
python3 -m pip install --user -U huggingface_hub --break-system-packages
今回のモデルダウンロードにログインは不要です。(モデルによっては必要になることもあります。)
4. モデルのダウンロード
本当はLFM-2.5-350Mを試したかったんですが、llama.zeroがlfm2アーキテクチャに対応していませんでした。なので代わりにGPT-2(の量子化済みGGUF)です:
hf download QuantFactory/gpt2-GGUF gpt2.Q4_K_M.gguf --local-dir ~/models/QuantFactory
5. モデルの実行
ちゃんと使おうとすると大変なことになるのでかなり控えめな設定で呼び出します:
llama-cli -m ~/models/QuantFactory/gpt2.Q4_K_M.gguf -t 1 -c 128 -n 64 -p "Hello"
制限・課題
Raspberry Pi Zero Wなので仕方ないですがかなり制限があります:
- 生成速度が非常に遅い:0.3~0.4トークン/秒ほどのスピードしか出ず、決して実用的ではない。
- メモリ制約が厳しい:512MBのRAMしかないので大きなモデルを実行したり、長い文章を処理したりできない。
- GPT-2が対話用途に向かない:GPT-2は文章補完が目的で作られているモデルで、会話ができない。(モデルを変えることで解決する可能性あり)