ラズベリーパイでローカルLLM
ラズベリーパイなどのシングルボードコンピューターで大規模言語モデルを動作させてみます。パラメーター数の少ないコンパクトなモデルはなんとか使えるレベルといった速度です。
なんならラズベリーパイ4でも動作させることができます。
ChatGPTなどのサービスは、AIの中でもLLMという種類のモデル(AIプログラム)をサーバ上で動作させることによってユーザーと対話しています。それに対しローカルLLMとは、インターネットにアクセスすることなく、モデルを利用しているパソコン上で動作させることを指します。ただし、パラーメーター数の大きなモデルを動作させるには高速なGPUとメモリが必要となります。
前提条件
この記事では以下の構成でやっていきます。メモリが少なかったり、ラズベリーパイ4でも動作しますが、遅くなります。
- ハードウェア:Raspberry Pi 5 8GB
- OS:Raspberry Pi OS bookworm
- MicroSDカード:32GB以上
セットアップ方法
Dockerを利用する方法がおそらく一番簡単なのでまずはDockerのインストールからやっていきます。
今や時は2024年。パソコンやシングルボードコンピューター内で仮想的に他のOSを動作させるような仕組みが一般化していますが、その代表がDockerです。PCの中でさらに別のOSを動かしています。最初聞いた時は「直接動かしたほうがいいじゃん」と思ったのですが、環境の差分などをDockerがなんとかしてくれたりするので便利です。
公式サイトに書かれている通りの手順でインストールすることができます、実行するコマンドを抜粋しています。
Raspberry Pi OS は Debian ベースなので、Debianの手順でインストールを行います。
1.競合するパッケージを削除
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
2.Dockerのaptリポジトリを追加
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
3.インストール
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4.パーミッションの設定
Dockerはデフォルトでは管理者権限でしか利用できないので、以下コマンドを実行して現在ログインしているユーザーでも利用できるようにします。ちなみに毎回sudoコマンドを頭につければこのパーミッション設定はしなくてもOKですが面倒です。
sudo groupadd docker
sudo usermod -aG docker $USER
毎回sudoするの面倒くさいよ!
Ollamaのインストール
インストールとは言いましたが、Dockerを使うので基本的にコマンド一つです。
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
特に失敗したなどのメッセージが表示されなければOKです。では次にWebインタフェースをDocker上で動かしていきます。
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
簡単セットアップでDockerに感謝!
アクセスしてみる
まずはラズベリーパイのIPアドレスを知らないと他のPCからアクセスできないので、ラズベリーパイのIPアドレスを調べます。マウスを右上のネットワークアイコンの上に2〜3秒置いておくと表示されます。
この例では 10.88.111.19 がIPアドレスだったので、http://10.88.111.19:3000 へアクセスします。
使うために画面の下にある Sign up をクリックするとサインアップ画面が表示されるので、適当に入力します。ここで入力した情報はラズベリーパイに保存されるので適当でOKです。
おっとどこかで見たようなUIですね。とりあえず日本語設定にします。
ではローカルLLMのモデルをダウンロードしないと使えないのでダウンロードしていきます。設定画面の「モデル」を選択して入力欄にモデル名を入力します。
モデル名すぐ近くにある、「ここをクリックしてください。」を押すと利用可能なリストが出てきます。今回は llama3 をダウンロードしてみます。
llama3 は 4.7GB 程度のサイズで、1Gbpsの回線でも1~2分ほど掛かります。
ダウンロード後はモデルを選びます
それでは遊んでいきます。
llama3 は性能はなかなか高いのですが、ラズベリーパイで動かすには若干重たいので、 phi3あたりがオススメです。
ただし唐突に寿司が好きか聞かれたりはするので、心に大人の余裕を持って望む必要があります。
まとめ
ローカルで動作させることができるので、インターネット環境に接続されていない場合であっても利用することができます。さらにAPIを呼べばコストも掛かりますがラズパイなら無料で動かす事ができます。
ただし、現時点ではまだまだ速度が早いとは言えないため、事前に生成しておくような時間的に余裕を持たせた使い方に限定される状況です。
個人的に利用できそうだなと思ったケース
どうしても速度と性能が限られるためあまり有用なケースは思いつきませんでしたが、頑張って以下ぐらいはできるかなという印象を受けました。
あと必要なのは忍耐力!!!遅い!