ローカルにWebUI付きLLM環境を構築 with Ollama
Ollama と Open WebUI を組み合わせて ChatGTP ライクな対話型 AI をローカルに導入する手順を解説します。
環境
この記事は以下の環境で動作確認を行っています。
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 のインターネット接続を切ってから試してみてください。
Name, Email, Password を入力して Create Account をクリックします。初めて登録したユーザーは自動的に admin ( 管理者 ) として登録されます。
LLM の選択
サインインに成功すると、ChatGPT 感が半端ない GUI が表示されます。
ChatGPT と異なる点は、使用する LLM モデルを選択できるところです。モデルは Select a model プルダウンから選択することができます。
現状は Ollama を使った推論の実行 でインストールした LLM のみが選択できる状態になっています。
質問してみる
質問
あなたは日本語を理解できますか?理解できる場合は日本語で回答してください。
回答
Yes, I can understand Japanese. 日本語で返答します。😊
複数の LLM に同時に質問する
モデル選択プルダウンの右側にある + をクリックすると、モデルを追加することができます。
Llama2 と Gemma に同時に質問すると、回答の左下に表示する回答を選択できるリンクが表示されました。ここをクリックすることで、それぞれの回答を参照することができます。
新しい LLM の導入
Ollama がデフォルトでサポートしている LLM であれば、Open Settings > Models から簡単に追加することができます。
Model 名を入力してダウンロードボタンをクリックするだけです。
管理者以外のユーザー登録
管理者とは別にアカウントを作成すると、管理者の承認待ちとなってログインができません。
この場合は管理者ユーザーで http://localhost:3000/admin にアクセスして、新規ユーザーを承認することでログインが可能になります。
承認するには下図の赤枠部分をクリックします。
クリックするごとにユーザーロールが pending → user → admin の順に切り替わります。
また、Admin Settings でデフォルトの承認方法を変更することもできます。
Admin Settings > Default User Role を Pending から User に変更しておくことで、新規ユーザーは自動的に User ロールとして登録されるようになります。
コンテナの停止
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 を起動します。
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 のトップページが表示されれば起動成功です。
まとめ
Ollama と Open WebUI の登場で LLM 導入の敷居が一気に下がった様に思います。
Docker イメージが公開されているため導入も簡単ですし、何よりも情報漏洩を気にすることなく様々な LLM をオンプレで使い倒すことができることの意義は大きいと思います。
AI を活用できない会社は淘汰されていくことが必然、とまで言われる時代にあって、この最強タッグを活用しない手はないでしょう。
参考サイト
この記事を執筆するにあたって、以下のサイト様を参考にさせていただきました。
サポートのお願い
ここから先は有料エリアに設定していますが、有料エリアには何も書いていません。投げ銭用ですので、この記事が役に立った!という方は購入して JAP の活動をサポートしていただけると嬉しいです🙏
ここから先は
¥ 150
この記事が気に入ったらチップで応援してみませんか?