ラズベリーパイでローカルLLM

動く!
LLMがラズベリーパイ5でも動きます。すごい!
なんならラズベリーパイ4でも動作させることができます。
早いとは言えない
ラズベリーパイなどのシングルボードコンピューターは通常のコンピューターほど処理能力が高くなく、メモリも限られているため残念ながらそれらの処理能力を必要とするLLMとは相性が悪いです。しかし、モデルによってはある程度現実的な速度で動作させることも可能です。
GPU対応が面倒
シングルボードコンピューターによってはNPUなどのAI処理を加速させるハードウェアが搭載されているものがあります。しかしollamaなどでとりあえず動作させてみるといった方法を取る場合、それらのハードウェアを活かすことができないケースが多くあり対応させるのが手間だったりそもそもできないという場合もあります。特にLLMではGPUもある程度重要ですが、メモリのアクセス速度により速度に影響が出やすい傾向があります。
ローカルLLM

ChatGPTなどのサービスは、AIの中でもLLMという種類のモデル(AIプログラム)をサーバ上で動作させることによってユーザーと対話しています。それに対しローカルLLMとは、インターネットにアクセスすることなく、モデルを利用しているパソコン上で動作させることを指します。ただし、パラーメーター数の大きなモデルを動作させるには高速なGPUとメモリが必要となります。

前提条件

この記事では以下の構成でやっていきます。メモリが少なかったり、ラズベリーパイ4でも動作しますが、遅くなります。

  • ハードウェア:Raspberry Pi 5 8GB
  • OS:Raspberry Pi OS bookworm
  • MicroSDカード:32GB以上

セットアップ方法

Dockerを利用する方法がおそらく一番簡単なのでまずはDockerのインストールからやっていきます。

Dockerって何?

今や時は2024年。パソコンやシングルボードコンピューター内で仮想的に他のOSを動作させるような仕組みが一般化していますが、その代表がDockerです。PCの中でさらに別のOSを動かしています。最初聞いた時は「直接動かしたほうがいいじゃん」と思ったのですが、環境の差分などをDockerがなんとかしてくれたりするので便利です。

Install Docker Engine on Debian
Learn how to install Docker Engine on Debian. These instructions cover the different installation methods, how to uninstall, and next steps.

Docker公式サイトのインストール方法

公式サイトに書かれている通りの手順でインストールすることができます、実行するコマンドを抜粋しています。

Debian用の手順では?

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を呼べばコストも掛かりますがラズパイなら無料で動かす事ができます。

ただし、現時点ではまだまだ速度が早いとは言えないため、事前に生成しておくような時間的に余裕を持たせた使い方に限定される状況です。

個人的に利用できそうだなと思ったケース

どうしても速度と性能が限られるためあまり有用なケースは思いつきませんでしたが、頑張って以下ぐらいはできるかなという印象を受けました。

ユーザー通知
例えば過去5時間程度の部屋の温度や湿度を渡して、「暑くなっているので注意してね」のようなコメントを生成してもらうようなテキスト生成。
俳句
いきなり俳句を詠んでもらう事が可能です。ただし、パラメーター数が少ないモデルでは情緒に欠ける傾向が高く、俳句でないよくわらない俳句風の文字列が生成されがちなためプロンプトを考慮する必要があります。

あと必要なのは忍耐力!!!遅い!