Amazonのアソシエイトとして、ラズパイダ(raspida.com)は適格販売により収入を得ています。詳しくは当サイトの プライバシーポリシーをご覧ください。

Raspberry Pi 5のローカル環境でLLMを動かしてみました。OllamaとそれをChatGPT風な画面で使えるOpenWebUIを使います。OllamaをCLIで使うのが一番楽なのですけど、見た目的に楽しいのでOpenWebUIでポチポチと触ってみました。

結論からいうと、Dockerで難なく動作します。docker-compose.ymlに必要なことを書いて起動するだけです。

これとは別に、Ollamaだけ直接Raspberry Pi OS(ホスト側)にインストールして、OpenWebUIはDockerで起動し連携もさせました。これも動作はしますが、ネットワークのやり取りで少し難儀しました。Dockerの学習には良いですけどね。

DockerならRaspberry Pi OSの環境はそのままに、サクッと始めてサクッと終われるのでオススメです。

インストールした環境

実際にインストールしたのはRaspberry Pi CM5です。ただ、CM5でしか扱わないような話はないため、Pi 5と同等でよろしいかと思います。

NVMe接続のSSDドライブ起動で、ネットは有線LANケーブルで接続、メモリーも8GBモデルなので、Pi 5のCPU、Wi-FiやmicroSDカードでの動作はもっとツラいでしょう。

  • Raspberry Pi CM5 (8GB)
  • Raspberry Pi OS (bookworm) 64bit
  • NVMe接続のSSDドライブ起動
  • 有線LANケーブル接続(not Wi-Fi)
  • Docker(Ollama、OpenWebUI)

結論からいうと、それほど快適ではありません。遅い反応なので心に余裕を持てる速度でしょうか。せめてRaspberry Piはメモリー16GBモデルなら、と感じますね。

Dockerのインストール

Dockerのインストールを済ませておいてある状態です。

少し前の記事と手順は変わりません。

Dockerはrootlessキット導入済み

Dockerのインストール後にターミナル内で案内されるrootlessキットは導入しました。それでも問題無くLLMとして動作しますから合わせて対応しておいた方が良いでしょう。

rootlessキットは公式サイトのまま導入しました。

Docker Documentation

Rootless mode Run the Docker daemon as a non-root user (Rootless mode)

Without packagesタブのやり方です。

ユーザーIDを調べたりする前提はありますが、概ねシェルスクリプでOKです。(sudo apt install uidmapは先にインストールした)

初めての人は公式サイトのドキュメントを一読しながら設定すると無難です。

rootlessキットを導入すれば、sudo無しでdockerが使えます。つまり一般ユーザーで使えるので安心です。

タスクレベルなら使えるか?!

3つの言語モデルを試しました。初見では、ChatGPTが登場した時に戻ったような気持ちになるレベルです。懐かしい感じ。

2025年現在のChatGPTに慣れてしまうと、お馬鹿さ加減が目に余ります。

とはいえ、どれも小さいモデルです。Raspberry Pi 5のCPUやメモリー8GBでも動くことに感動します。WebUIなのでまるでChatGPTな気分です。

Raspberry Piのメモリー16GBなら、もう少し大きなモデルも動くため、ある程度は利用価値があるというレベルになるでしょう。

使用した言語モデルはphi-3:miniと、Gemma2、llama3.2です。それぞれダウンロード容量は数百MB〜2GB台で始められます。

Phi-3-mini(3.8B): Microsoftの軽量言語モデルで、小さく軽量で、推論や文章生成が得意とされています。

Gemma2(2B): Gemma2はGoogleが開発した言語モデルで、性能も高い評価を受けています。初期のChatGPTが搭載していたGPT-3.5のパフォーマンスを上回っているとGoogleは伝えています。

llama3.2:(1B) Metaの言語モデルで、試したのは1Bと一番小さいモデルのため軽量で、上記の2つより返答は速いです。1Bという規模ながらまともな回答をするように感じました。

phi-3:miniは3.8B、Gemma2は2Bと書いてある「B」というのは、billion(ビリオン)のことです。それぞれ3.8Bは38億、2Bは20億、1Bは10億といったパラメータの数だそうです。

規模を表すもので、この数値が大きいほど推測力や知識量(?)がスゴいということになります。

ちなみに、無料で使える範囲のChatGPT 5(=GPT-5 Thinking mini)は桁が違うものの非公開なので正確にはわかりません。本人に聞いてみたら「数千億〜兆規模クラスの大規模モデル」と、のたまっていました。

実力差は歴然ですが、小さなRaspberry Piに載せられるのも凄いことですし、使い方によっては少しだけ有益です。

この3つではllama3.2が最も回答が速く、まともぽいのはgemma2かな。小さいモデルなので仕方ありませんが、どれも内容によっては間違いばかりなのは変わりません。

質問が悪かったかな。

んー。こんなものか。

ここは用途次第で、タスクと呼ばれる作業を肩代わりしてもらう程度ならなんとかというレベルですかね。 何がいいだろう?

  • 翻訳?
  • 短いプログラムコードの修正?
  • 誤字脱字の探索作業?
  • 文章の要約?

タスク例

1〜3Bクラスの小規模モデルに担わせるタスクなら「短文の要約」「データの並べ替え」「シンプルな分類」などでしょうか。

簡単な分類はどうだろう?

答えは期待通りでも、回答に2分30秒もかかってる。幼稚園児並か。

日本語で記載されたデータをJSON形式に変換してもらう?

なんか、違う。回答に4分以上かかってこれか。

このようにRaspberry Pi 5では実用的とは言えませんが、費用もかからずセキュアな環境で使えるため、楽しむにはちょうど良いかもしれません。

■Pi 5は8GBモデルがオススメ

動いたdocker-compose.yml

最初に述べたように、OllamaもOpenWebUIもDockerで動きました。動作したymlを載せておきます。

docker-ollama-openwebuiというディレクトリを新規作成し、その中にymlを置いています。同じ階層にバインドマウントしたディレクトリを2つ配置しています。

~/docker-ollama-openwebui
├── docker-compose.yml
├── ollama-data
└── openwebui-data
services:
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ./ollama-data:/root/.ollama
    restart: always

  openwebui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    depends_on:
      - ollama
    ports:
      - "3000:8080"
    volumes:
      - ./openwebui-data:/app/backend/data
    environment:
      - OLLAMA_API_BASE=http://ollama:11434
      - USE_OLLAMA_DOCKER=true
      - OLLAMA_BASE_URL=/ollama
      - WEBUI_AUTH=False
    restart: always

volumes:
  ollama-data:
  openwebui-data:

環境変数に「WEBUI_AUTH=False」を入れると、初回アカウント登録やログインといった認証をスキップしてくれます。userという名前としてログインしている状態で使えます。これ、一人で試すだけなら便利だー。

ymlのある同ディレクトリに入り、Dockerを起動すればOKです。

docker compose up -d

起動する少しに時間がかかりますから、compose upしても数十秒は待った方が良いです

CPUの負荷を見ていると、100%から落ちる頃合いでWebブラウザにアクセスすれば表示されるでしょう。

ちなみに、LLMのchatを開始した後、回答が終わるまでRaspberry Pi 5のCPUは100%に張り付きます。他の作業はしない方が無難です。

メモリーは5.8GBくらいを使用されていたので、8GBでも空きは少なく注意が必要です。

アクセスはポート番号3000

OpenWebUIにアクセスするには、Raspberry Pi OSのWebブラウザならhttp:localhost:3000でアクセスできます。もしくは同じLAN環境のマシンからであれば、http://ラズパイのIPアドレス:3000です。

1点だけ手作業になったところがありまして、接続URLを編集して保存しました。

本来はymlに書いたようにhttp://ollama:11434になっていないといけないのですが、キャッシュが残っていたのか、localhostになっていて接続エラーが出てしまいました。

コンテナやVolume、Webブラウザのstorageファイル、dbファイルも消したりしたのですけど、直らないので手作業で入力しました。保存すれば次からはそのままになっています。

ここが接続できる状態にならないと使えませんし、コマンドで言語モデルをPULLしなくても、この設定画面から言語モデルのダウンロードが可能になります。

ここまでの場所が深いので、画像で載せておきます。

管理者パネル → 設定 → 接続 → 歯車アイコン

言語モデルは左メニューのモデル項目から追加(PULL)できます。

利用出来る言語モデルはたくさんあるので、マシンのスペックに見合ったものを選びましょう。

OpenWebUIが表示されないパターンは接続ミス

もし、Webブラウザでアクセスしても、500 Internal ErrorUnable to connection等が出てしまう場合、多くはOpenWebUI → Ollama へ接続の失敗によるものです。

先程の設定にあるOllama API接続の管理http://ollama:11434が間違っているハズです。

特にOllamaだけを直接Raspberry Pi OSにインストールした場合、接続しようとしているOpenWebUIがDockerだとややこしいことに陥りました。

どちらも直接インストールか、どちらもDockerならまだ分かりやすいです。

DockerはOSの環境を汚さずに実行できる利点があります。あとで使わないとなっても、コンテナを削除してしまえば済みます。影響があるのはバインドマウントしたディレクトリやファイルのみなので把握もし易いです。

番外

最後に無茶振りでもないハズの質問をしたつもりでも、無茶苦茶な回答でハテママークだったChatをご紹介します。昔のChatGPTと同じですね。

次は英語のニュースを翻訳してもらった回答がこれです。

とても推測力というか想像力が溢れる回答でした。別の英語を翻訳したのだろうというレベルです。 元のニュース内容がぶっ飛びます。

ちなみに、トロンダー大統領は、トランプ大統領のことです。最早、作家レベルだ。

現行のChatGPT 5は物凄い進化をしています。4年ほど前には考えられないくらい役立つツールになっていますね。特に非エンジニアの私はプログラムコードを修正してもらったり、解説してもらえるのは、日々助かっています。

Raspberry Pi 5ではこの程度でしか動作しませんが、ある意味で楽しめるかもしれません。

Dockerなら直ぐに試せるので、Pi 5があるなら是非。