りなっくすとらずぱい!

Raspberry Pi初心者に向けた各コマンドの説明、プログラムの作り方について紹介しています!

Raspberry Piで始める、自分だけのAIチャット環境構築 (Ollama + Open-WebUI)

こんにちは、Geminiです。

この記事では、手のひらサイズのコンピューターRaspberry Piを使って、自分だけのプライベートなAIチャット環境を構築する方法を解説します。具体的には、オープンソースのLLM実行ツールOllamaと、そのためのWebインターフェースOpen-WebUIを導入し、まるでChatGPTのようにブラウザから手軽にAIと対話できる環境を目指します。

APIの利用料金や外部へのデータ送信を気にすることなく、ローカル環境で自由にAIを試せるのは、非常に魅力的です。さっそく始めていきましょう!

この記事でできること

  • Raspberry PiにDockerおよびDocker Composeをインストールできるようになる。
  • Docker Composeを使ってOllamaOpen-WebUIを一度にセットアップできるようになる。
  • ブラウザからOpen-WebUIにアクセスし、好きなオープンソースLLMをダウンロードして使えるようになる。
  • 自分だけのプライベートなAIチャット環境を手に入れることができる。

事前に必要なもの

  • Raspberry Pi本体: 推奨はRaspberry Pi 5ですが、Raspberry Pi 4以前でも動作はします。
  • OS: Raspberry Pi OS (64-bit) Bookworm。事前にセットアップとSSH接続を済ませておいてください。
  • インターネット接続: DockerイメージやAIモデルをダウンロードするために必要です。
  • 32GB以上の比較的容量の多いSDカード
    • LLMはそれぞれひとつあたり数GBとなるので容量の大きいSDカードでなければすぐにディスクフルとなってしまいます。

環境構築の手順

DockerとDocker Composeのインストール

まずは、アプリケーションをコンテナとして管理するための基盤であるDockerと、複数のコンテナを管理するDocker Composeをインストールします。 現在の公式手順では、これらを一度にインストールできます。

# Add Docker's official GPG key:
sudo apt update
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 update

# Install the latest version
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

インストール後、バージョンを確認しておきましょう。

docker compose version

dockerコマンドをsudoなしで実行できるように、ユーザーをdockerグループに追加します。

sudo usermod -aG docker $USER
`usermod`コマンドを実行した後は、一度Raspberry Piからログアウトし、再度ログインすることで設定が反映されます。

OllamaとOpen-WebUIのセットアップ

いよいよ、AIチャット環境を構築します。 まず、作業用のディレクトリを作成し、そこに移動します。

mkdir ollama-webui
cd ollama-webui

次に、docker-compose.ymlという設定ファイルを以下の内容で作成します。

services:
  # Ollama: ローカルでLLMを実行するためのバックエンドサービス
  ollama:
    image: ollama/ollama:latest
    container_name: ollama
    ports:
      - "11434:11434"
    volumes:
      - ./ollama_data:/root/.ollama # モデルデータを永続化
    restart: unless-stopped

  # Open-WebUI: Ollamaと連携する、ChatGPTのようなUIを提供するフロントエンド
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: open-webui
    ports:
      - "8080:8080"
    volumes:
      - ./open_webui_data:/app/backend/data # UIの設定データを永続化
    depends_on:
      - ollama # Ollamaが起動してから起動する
    environment:
      - 'OLLAMA_BASE_URL=http://ollama:11434' # 接続先のOllamaを指定
    restart: unless-stopped
`volumes`で指定しているパスは、ホストマシン(Raspberry Pi)上のデータを永続化するためのものです。コンテナを削除してもデータが消えないように設定しています。

ファイルを作成したら、以下のコマンドでコンテナを起動します。-dオプションは、バックグラウンドで実行するためのものです。

docker compose up -d
[+] Running 12/21
 ⠸ ollama [⠀⠀⠀⠀] Pulling                                                                                         110.4s
   ⠹ 3eff7d219313 Waiting                                                                                        106.3s
   ⠹ 985cbdcb606c Waiting                                                                                        106.3s
   ⠹ d38049e8a939 Waiting                                                                                        106.3s
   ⠹ 54a5c1e5d726 Waiting                                                                                        106.3s
 ⠸ open-webui [⣿⣿⣿⣿⣿⣿⣿⣿⣷⣿⡀⣿⣿⣿⠀] 708.3MB / 1.641GB Pulling                                                        110.4s
   ✔ 37259e733066 Pull complete                                                                                    9.7s
   ✔ 6e88b4602d85 Pull complete                                                                                   10.0s
   ✔ 60d9b0bcb0b0 Pull complete                                                                                   13.7s
   ✔ f2ade477537e Pull complete                                                                                   13.8s
   ✔ 0e3f22de1b5a Pull complete                                                                                   13.8s
   ✔ 4f4fb700ef54 Pull complete                                                                                   13.8s
   ✔ 728c530d0075 Pull complete                                                                                   13.8s
   ✔ 818d4317ebe7 Pull complete                                                                                   13.9s
   ⠧ c57b6de25e56 Downloading [=================================================> ]  330.3MB/...                 108.7s
   ✔ 6b4bed29a42c Download complete                                                                                9.3s
   ⠧ 3cc161837857 Downloading [==========>                                        ]  236.8MB/...                 108.7s
   ✔ 0c760f1cc3a3 Download complete                                                                               67.8s
   ✔ 7975746d9292 Download complete                                                                               76.5s
   ✔ c19ac81c2cea Download complete                                                                               84.6s
   ⠧ edc6ea9fe062 Downloading [====>                                              ]  3.277MB/...                 108.7s

実行するとOllamaとOpen-WebUIのイメージファイルのダウンロードが始まります。Open-WebUIの方はかなり大きいファイルなので結構時間がかかりますのでじっくり待ちましょう☕

Open-WebUIへのアクセスと初期設定

コンテナが起動したら、PCのブラウザから http://<Raspberry PiのIPアドレス>:8080 にアクセスします。

最初にサインアップ(アカウント作成)を求められますので、メールアドレスとパスワードを設定してアカウントを作成してください。

コマンドラインからのモデルダウンロード

Open-WebUIの画面からでもモデルは追加できますが、今回はDockerコンテナ内に入り、コマンドラインから直接モデルをダウンロードする方法を紹介します。こちらの方が必要なモデルを確実に、そしてまとめて管理しやすい場合があります。

まず、docker execコマンドを使い、実行中のollamaコンテナのシェル(対話環境)を起動します。

docker exec -it ollama /bin/bash

コンテナの中に入ると、プロンプト(入力待ちの記号)が変わります。ここで、ollama pullコマンドを使って好きなモデルをダウンロードしましょう。今回は、とりあえず軽量なqwen3:0.6bをダウンロードしてみます。

# コンテナ内での操作
ollama pull qwen3:0.6b
pulling manifest
pulling 7f4030143c1c:  54% ▕██████████████████████████████████████                                ▏ 284 MB/522 MB  6.4 MB/s     37s

ダウンロードが完了したら、exitコマンドでコンテナから抜けます。

exit

ダウンロードしたモデルは、自動的にOpen-WebUIに認識されます。ブラウザでOpen-WebUIを開き、チャット画面上部の「Select a model」をクリックすると、今ダウンロードしたモデルが選択肢に表示されているはずです。

モデルを選択して、AIとのチャットを開始しましょう!

最後に

お疲れ様でした!これで、ご自身のRaspberry Pi上でプライベートなAIチャット環境が動作しているはずです。外部のサービスに依存せず、手元でAIを動かせるのは、なんだかワクワクしますね。

次回は、このRaspberry Piにリモートからアクセスして開発ができるVS Code Serverをセットアップしていきます。

次の記事