見出し画像

ローカルにWebUI付きLLM環境を構築 with Ollama

Ollama と Open WebUI を組み合わせて ChatGTP ライクな対話型 AI をローカルに導入する手順を解説します。

完成図(これがあなたのPCでサクサク動く!?)

環境

この記事は以下の環境で動作確認を行っています。
OS Windows 11 Home 23H2
CPU 13th Gen Intel(R) Core(TM) i7-13700F 2.10 GHz
RAM 32.0 GB
GPU NVIDIA GeForce RTX 4070 Ti
専用 GPU メモリ 12.0 GB
共有 GPU メモリ 15.9 GB
WSL2 Ubuntu 22.04.3 LTS

Ubuntu と Docker のインストール

Windows11 に WSL2 を使って Ubuntu をインストールします。
環境の構築は Terminal ( CLI ) で行います。

Ubuntu のインストール with WSL2

wsl --install

Ubuntu のアップデート

sudo apt update && sudo apt upgrade

Docker のインストール

必要なパッケージをインストールします。

sudo apt-get install ca-certificates curl gnupg

Docker の GPG キーを保存するディレクトリを作成します。

sudo install -m 0755 -d /etc/apt/keyrings

Docker の GPG キーを取得します。実行完了まで少し時間がかかります。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

Docker の公式リポジトリを追加します。

echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Docker の公式リポジトリから情報を取得するために、パッケージリストを更新します。

sudo apt-get update

Docker をインストールします。

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

ユーザーへの Docker 実行権限付与

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

sudo usermod -aG docker $USER

上記の変更を反映させます。

su - ${USER}

docker.sock ファイルの所有グループを docker に変更します。

sudo chgrp docker /var/run/docker.sock

最後に docker サービスを再起動します。

sudo service docker restart

Docker の実行確認

インストールした Docker のバージョンを確認します。

docker -v

以下のようにバージョン情報が表示されれば OK です。

Docker version 25.0.3, build 4debf41

DockerHub からイメージを取得して実行できることを確認します。
コンソールに "Hello from Docker!" を表示するだけの hello-world イメージを取得して実行してみます。

docker run hello-world

以下のように "Hello from Docker!" が表示されれば OK です。

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:d000bc569937abbe195e20322a0bde6b2922d805332fd6d8a68b19f524b7d21d
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Ubuntu on WSL2 で GPU を使えるようにする

NVIDIA Container Toolkit の GPG キーを取得します。

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey \
| sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list \
| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

パッケージリストを更新します。

sudo apt-get update

WSL2 の Ubuntu に NVIDIA Container Toolkit をインストールします。

sudo apt-get install -y nvidia-container-toolkit

NVIDIA Container Toolkit を Docker で使用できるように設定します。

sudo nvidia-ctk runtime configure --runtime=docker

最後に docker サービスを再起動します。

sudo service docker restart

Ollama コンテナの起動

GPU を使用して Ollama コンテナを起動します。

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

Ollama を使った推論の実行

Ollama がデフォルトでサポートしている LLM をダウンロードして実行してみます。
Ollama がデフォルトでサポートしている LLM の一覧は GitHub で確認してください。

Llama2 ( 7B ) を使用する場合
3.8GB ありますのでダウンロードに暫く時間がかかります。

docker exec -it ollama ollama run llama2

Gemma ( 7B ) を使用する場合
4.8GB ありますのでダウンロードに暫く時間がかかります。

docker exec -it ollama ollama run gemma:7b

ダウンロードが完了すると入力待ちのプロンプト ( >>> ) が表示されますので、適当に質問を入力してみましょう。

>>> why the sky is blue?

推論を終了したい時は /bye を入力します。

>>> /bye

Open WebUI で GUI を使う

Ollama の推論を実行中の場合は、いったん /bye を入力して推論を停止させてください。

Open WebUI コンテナの起動

次のコマンドを実行して Open WebUI のコンテナを起動します。

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main

Open WebUI をブラウザから開く

コンテナの起動が完了したら、ホストマシン ( Windows11 ) のブラウザから http://localhost:3000/ を開きます。
続けて Sign up をクリックしてユーザー登録を行う必要がありますが、ここで行うユーザー登録は Docker で実行中の Open WebUI への登録ですので、外部サーバーに情報が送信される心配はありません。
心配な方は PC のインターネット接続を切ってから試してみてください。

Open WebUI のサインイン画面

Name, Email, Password を入力して Create Account をクリックします。初めて登録したユーザーは自動的に admin ( 管理者 ) として登録されます。

Open WebUI のサインアップ画面

LLM の選択

サインインに成功すると、ChatGPT 感が半端ない GUI が表示されます。
ChatGPT と異なる点は、使用する LLM モデルを選択できるところです。モデルは Select a model プルダウンから選択することができます。

Open WebUI のメイン画面 - 1

現状は Ollama を使った推論の実行 でインストールした LLM のみが選択できる状態になっています。

Open WebUI のメイン画面 - 2
Open WebUI のメイン画面 - 3

質問してみる

質問
あなたは日本語を理解できますか?理解できる場合は日本語で回答してください。
回答
Yes, I can understand Japanese. 日本語で返答します。😊

llama2 ( 7B ) に日本語で質問した結果

複数の LLM に同時に質問する

モデル選択プルダウンの右側にある + をクリックすると、モデルを追加することができます。

Open WebUI のメイン画面 - 3

Llama2 と Gemma に同時に質問すると、回答の左下に表示する回答を選択できるリンクが表示されました。ここをクリックすることで、それぞれの回答を参照することができます。

複数の LLM に日本語で質問した結果

新しい LLM の導入

Ollama がデフォルトでサポートしている LLM であれば、Open Settings > Models から簡単に追加することができます。
Model 名を入力してダウンロードボタンをクリックするだけです。

Code Llama ( 7B ) を追加する場合の入力例

管理者以外のユーザー登録

管理者とは別にアカウントを作成すると、管理者の承認待ちとなってログインができません。

Open WebUI の承認待ちメッセージ

この場合は管理者ユーザーで http://localhost:3000/admin にアクセスして、新規ユーザーを承認することでログインが可能になります。
承認するには下図の赤枠部分をクリックします。
クリックするごとにユーザーロールが pending → user → admin の順に切り替わります。

Open WebUI のユーザー管理画面 - 1

また、Admin Settings でデフォルトの承認方法を変更することもできます。

Open WebUI のユーザー管理画面 - 2

Admin Settings > Default User Role を Pending から User に変更しておくことで、新規ユーザーは自動的に User ロールとして登録されるようになります。

Open WebUI の Admin Settings 画面

コンテナの停止

Ubuntu 上でコンテナの状態を確認します。
ollama コンテナと open-webui コンテナの STATUS が Up になっているはずです。

docker container ls -a
CONTAINER ID   IMAGE                                COMMAND               CREATED      STATUS          PORTS                                           NAMES
270a7135272c   ghcr.io/open-webui/open-webui:main   "bash start.sh"       1 days ago   Up 23 minutes   0.0.0.0:3000->8080/tcp, :::3000->8080/tcp       open-webui
5c3a5615f0ff   ollama/ollama                        "/bin/ollama serve"   1 days ago   Up 27 minutes   0.0.0.0:11434->11434/tcp, :::11434->11434/tcp   ollama

使い終わったコンテナを停止させます。

docker stop open-webui
docker stop ollama

もう一度コンテナの状態を確認します。STATUS が Exited に変わっていれば 正常に停止できています。

docker container ls -a
CONTAINER ID   IMAGE                                COMMAND               CREATED      STATUS                      PORTS     NAMES
270a7135272c   ghcr.io/open-webui/open-webui:main   "bash start.sh"       1 days ago   Exited (0) 4 seconds ago              open-webui
5c3a5615f0ff   ollama/ollama                        "/bin/ollama serve"   1 days ago   Exited (0) 16 seconds ago             ollama

改めて起動する方法

Windows のスタートメニューから Ubuntu を起動します。

スタートメニューから Ubuntu を起動

Terminal が立ち上がるので、以下の順でコンテナを起動します。

docker start ollama
docker start open-webui

Ubuntu 上でコンテナの状態を確認します。

docker container ls -a

ollama コンテナと open-webui コンテナの STATUS が Up になっているはずです。

CONTAINER ID   IMAGE                                COMMAND               CREATED      STATUS            PORTS                                           NAMES
270a7135272c   ghcr.io/open-webui/open-webui:main   "bash start.sh"       2 days ago   Up 32 seconds     0.0.0.0:3000->8080/tcp, :::3000->8080/tcp       open-webui
5c3a5615f0ff   ollama/ollama                        "/bin/ollama serve"   1 days ago   Up 46 seconds     0.0.0.0:11434->11434/tcp, :::11434->11434/tcp   ollama

Windows のブラウザから http://localhost:3000/ にアクセスして、Open WebUI のトップページが表示されれば起動成功です。

Open WebUI のトップページ

まとめ

Ollama と Open WebUI の登場で LLM 導入の敷居が一気に下がった様に思います。
Docker イメージが公開されているため導入も簡単ですし、何よりも情報漏洩を気にすることなく様々な LLM をオンプレで使い倒すことができることの意義は大きいと思います。
AI を活用できない会社は淘汰されていくことが必然、とまで言われる時代にあって、この最強タッグを活用しない手はないでしょう。

参考サイト

この記事を執筆するにあたって、以下のサイト様を参考にさせていただきました。

サポートのお願い

ここから先は有料エリアに設定していますが、有料エリアには何も書いていません。投げ銭用ですので、この記事が役に立った!という方は購入して JAP の活動をサポートしていただけると嬉しいです🙏

ここから先は

13字

¥ 150

この記事が気に入ったらサポートをしてみませんか?