0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ollama(RHEL) + Open WebUI + NVIDIA A100 のローカルLLM環境(WEB)で gpt-oss を試してみた

Last updated at Posted at 2025-08-28

1. はじめに

前回、Ollamaをインストールしたのですが、Ollamaは基本的にはCLIベースでの利用になります。ブラウザから利用したいので、Open WebUIをインストールしようとしたのですが、、、どうやらOpen WebUIはコンテナーで動かすのが一般的のようです。

「そうなんだ、じゃあコンテナとの連携か・・・」って思ってたら、(日本語の記事では見かけなかったのですが)どうやらOllamaとOpen WebUIを予め連携済みの1つのコンテナーで実行する方法が既に提供されています。

というので、1つのコンテナで動かす方法の方が楽なので、そちらで今回はやってしまいたいと思います。

参考リンク

2. GPU環境のセットアップ

RHEL9 + NVIDIA A100環境にNVIDIA Driver/CUDA Toolkitをインストールするを実行します。

3. Dockerのインストール

Dockerのインストールとサービスの自動起動時の有効化およびサービスの起動
[root@syasuda-ollama ~]# dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
[root@syasuda-ollama ~]# dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
[root@syasuda-ollama ~]# systemctl enable --now docker

4. NVIDIA Container Toolkitをインストール

コンテナーからGPUを利用するために、NVIDIA Container Toolkitが必要になります。また、dockerでそれを有効にする必要があります。

NVIDIA Container Toolkitをインストール
[root@syasuda-ollama ~]# curl -s -L https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo | \
  sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo

[root@syasuda-ollama ~]# export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.17.8-1
  sudo dnf install -y \
      nvidia-container-toolkit-${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      nvidia-container-toolkit-base-${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      libnvidia-container-tools-${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
      libnvidia-container1-${NVIDIA_CONTAINER_TOOLKIT_VERSION}
dockerでNVIDIA Container Toolkitを有効化
[root@syasuda-ollama ~]# nvidia-ctk runtime configure --runtime=docker
INFO[0000] Config file does not exist; using empty config
INFO[0000] Wrote updated config to /etc/docker/daemon.json
INFO[0000] It is recommended that docker daemon be restarted.

[root@syasuda-ollama ~]# systemctl restart docker

5. 領域確保(オプション)

OllamaがバンドルされたOpen WebUIのコンテナーのインストールで、GPUサポート付きのコマンドは、docsによると

docker run -d -p 3000:8080 --gpus=all -v ollama:/root/.ollama -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama

です。このコマンドでは、docker volumeが指定されているため、/var/lib/docker/volumes/<docker volume name>/_dataをコンテナーはマウントして利用します。しかし、Open WebUIの/app/backend/dataはOpen WebUIのデータベースやVector DBなどが配置され、/root/.ollama/配下にはモデルが配置されるので、どちらも大容量になることが予想されます。ここでは明示的に領域を変更するためのブロックストレージを別途このVSIに割り当て、xfsでフォーマットしてマウントしておきます。

[root@syasuda-ollama ~]# lsblk -l /dev/vdc
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
vdc  252:32   0  500G  0 disk

[root@syasuda-ollama ~]# mkfs.xfs /dev/vdc
[root@syasuda-ollama ~]# mkdir /work
[root@syasuda-ollama ~]# mount /dev/vdc /work

[root@syasuda-ollama ~]# blkid /dev/vdc
/dev/vdc: UUID="310e9f9c-7a35-49c1-80ae-e01b4fdda5ab" TYPE="xfs"

[root@syasuda-ollama ~]# echo UUID=310e9f9c-7a35-49c1-80ae-e01b4fdda5ab /work  xfs defaults  0   0  >> /etc/fstab

[root@syasuda-ollama ~]# systemctl daemon-reload
[root@syasuda-ollama ~]# mount -a
[root@syasuda-ollama ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        4.0M     0  4.0M   0% /dev
tmpfs            59G     0   59G   0% /dev/shm
tmpfs            24G   17M   24G   1% /run
/dev/vda4       100G   29G   71G  29% /
/dev/vda3       495M  322M  174M  65% /boot
/dev/vda2       200M  7.1M  193M   4% /boot/efi
tmpfs            12G  8.0K   12G   1% /run/user/0
/dev/vdc        500G  3.6G  497G   1% /work

6. Ollama+Open WebUIのインストール

OpenWebUI+Ollamaの統合されたコンテナーのインストールおよび実行
[root@syasuda-ollama ~]# mkdir -p /work/open-webui/ollama
[root@syasuda-ollama ~]# mkdir -p /work/open-webui/data


[root@syasuda-ollama ~]# docker run -d -p 3000:8080 --gpus=all -v /work/open-webui/ollama:/root/.ollama -v /work/open-webui/data:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:ollama


[root@syasuda-ollama ~]# docker ps
CONTAINER ID   IMAGE                                  COMMAND           CREATED          STATUS                             PORTS                                         NAMES
08bc5d5ee44c   ghcr.io/open-webui/open-webui:ollama   "bash start.sh"   10 seconds ago   Up 10 seconds (health: starting)   0.0.0.0:3000->8080/tcp, [::]:3000->8080/tcp   open-webui

[root@syasuda-ollama ~]# ss -anpt
State             Recv-Q            Send-Q                       Local Address:Port                        Peer Address:Port            Process
LISTEN            0                 128                                0.0.0.0:22                               0.0.0.0:*                users:(("sshd",pid=1165,fd=3))
LISTEN            0                 4096                               0.0.0.0:3000                             0.0.0.0:*                users:(("docker-proxy",pid=24365,fd=7))
ESTAB             0                 188                             10.50.0.10:22                         192.168.100.6:62964            users:(("sshd",pid=8525,fd=4),("sshd",pid=8522,fd=4))
ESTAB             0                 52                              10.50.0.10:22                         192.168.100.6:64746            users:(("sshd",pid=23698,fd=4),("sshd",pid=23695,fd=4))
LISTEN            0                 128                                   [::]:22                                  [::]:*                users:(("sshd",pid=1165,fd=4))
LISTEN            0                 4096                                  [::]:3000                                [::]:*                users:(("docker-proxy",pid=24372,fd=7))
コンテナにログインして環境を確認

[root@syasuda-ollama ~]# docker exec -it 08bc5d5ee44c bash

root@08bc5d5ee44c:/app/backend# ps -ef
bash: ps: command not found

root@08bc5d5ee44c:/app/backend# ss -anpt
bash: ss: command not found

root@08bc5d5ee44c:/app/backend# ollama --version
ollama version is 0.11.6

root@08bc5d5ee44c:/app/backend# ollama list
NAME    ID    SIZE    MODIFIED

root@08bc5d5ee44c:/app/backend# ls -l /root/.ollama/models/blobs/
total 0

root@08bc5d5ee44c:/app/backend# ls -l /app/backend/data
total 244
drwxr-xr-x. 5 root root     49 Aug 27 10:27 cache
drwxr-xr-x. 2 root root      6 Aug 27 10:27 uploads
drwxr-xr-x. 2 root root     28 Aug 27 10:27 vector_db
-rw-r--r--. 1 root root 249856 Aug 27 10:27 webui.db

root@08bc5d5ee44c:/app/backend# exit

7. Open WebUIへのログイン

  • http://<VSIのIPアドレス>:3000/にアクセス。Get Startedを押下。image.png
  • アカウントの作成(メールアドレスは適当なものを入れています)image.png
  • Okay, Lets's goを押下。image.png
  • Settingsを押下。image.png
  • 言語設定で日本語を選択。image.png
  • 無事日本語のUIになった。image.png
  • モデルの検索してプルを実行。モデル名はここからも見つけることが可能。今回は、gpt-oss:20bを選択。image.png
  • ダウンロード中。image.png
  • ダウンロードしたモデルを選択。なお、まだこの時点ではモデルはGPUにロードされていないimage.png
[root@syasuda-ollama ~]# nvidia-smi
Wed Aug 27 10:39:42 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.65.06              Driver Version: 580.65.06      CUDA Version: 13.0     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA A100 80GB PCIe          Off |   00000000:04:01.0 Off |                    0 |
| N/A   41C    P0             48W /  300W |       4MiB /  81920MiB |      0%      Default |
|                                         |                        |             Disabled |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

  • コントロールから、パラメーターを指定可能(今回は特に何も変更しない)image.png
  • 推論を実行。このタイミングでGPUにモデルがロードされる。
    image.png
  • Follow up questionなどが出力される。
    image.png
  • 性能情報も確認可能(124.06 token/secで出力されている)
    image.png
モデルがGPUにロードされている。
[root@syasuda-ollama ~]# nvidia-smi
Thu Aug 28 00:38:45 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 580.65.06              Driver Version: 580.65.06      CUDA Version: 13.0     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA A100 80GB PCIe          Off |   00000000:04:01.0 Off |                    0 |
| N/A   47C    P0             73W /  300W |   14163MiB /  81920MiB |      0%      Default |
|                                         |                        |             Disabled |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A            6493      C   /usr/local/bin/ollama                 14154MiB |
+-----------------------------------------------------------------------------------------+
モデルがダウンロードされている。
[root@syasuda-ollama ~]# ls -l /work/open-webui/ollama/models/blobs/
total 13457212
-rw-r--r--. 1 root root         489 Aug 27 10:38 sha256-55c108d8e93662a22dcbed5acaa0374c7d740c6aa4e8b7eee7ae77ed7dc72a25
-rw-r--r--. 1 root root 13780154624 Aug 27 10:38 sha256-b112e727c6f18875636c56a779790a590d705aec9e1c0eb5a97d51fc2a778583
-rw-r--r--. 1 root root          18 Aug 27 10:38 sha256-d8ba2f9a17b3bbdeb5690efaa409b3fcb0b56296a777c7a69c78aa33bbddf182
-rw-r--r--. 1 root root       11353 Aug 27 10:38 sha256-f60356777647e927149cbd4c0ec1314a90caba9400ad205ddc4ce47ed001c2d6
-rw-r--r--. 1 root root        7240 Aug 27 10:38 sha256-fa6710a93d78da62641e192361344be7a8c0a1c3737f139cf89f20ce1626b99c

8. 更新作業(2025/09/01追記)

release情報を見たら分かる通り、頻繁に更新されてfixも行われているようです。今回の記事を書いてから1週間も経たないうちに新しいバージョンがリリースされたため、適用したいと思います。

事前確認
[root@syasuda-ollama ~]# docker ps
CONTAINER ID   IMAGE                                  COMMAND           CREATED      STATUS                   PORTS                                         NAMES
08bc5d5ee44c   ghcr.io/open-webui/open-webui:ollama   "bash start.sh"   4 days ago   Up 5 minutes (healthy)   0.0.0.0:3000->8080/tcp, [::]:3000->8080/tcp   open-webui

[root@syasuda-ollama ~]# docker image ls
REPOSITORY                      TAG       IMAGE ID       CREATED      SIZE
ghcr.io/open-webui/open-webui   ollama    a633c4d773d8   9 days ago   8.31GB
更新
[root@syasuda-ollama ~]# docker run --rm --volume /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --run-once open-webui
Unable to find image 'containrrr/watchtower:latest' locally
latest: Pulling from containrrr/watchtower
57241801ebfd: Pull complete
3d4f475b92a2: Pull complete
1f05004da6d7: Pull complete
Digest: sha256:6dd50763bbd632a83cb154d5451700530d1e44200b268a4e9488fefdfcf2b038
Status: Downloaded newer image for containrrr/watchtower:latest
time="2025-09-01T00:58:19Z" level=info msg="Watchtower 1.7.1"
time="2025-09-01T00:58:19Z" level=info msg="Using no notifications"
time="2025-09-01T00:58:19Z" level=info msg="Only checking containers which name matches \"open-webui\""
time="2025-09-01T00:58:19Z" level=info msg="Running a one time update."
time="2025-09-01T01:02:06Z" level=info msg="Found new ghcr.io/open-webui/open-webui:ollama image (c3594234d1be)"
time="2025-09-01T01:02:06Z" level=info msg="Stopping /open-webui (08bc5d5ee44c) with SIGTERM"
time="2025-09-01T01:02:30Z" level=info msg="Creating /open-webui"
time="2025-09-01T01:02:31Z" level=info msg="Session done" Failed=0 Scanned=1 Updated=1 notify=no
time="2025-09-01T01:02:31Z" level=info msg="Waiting for the notification goroutine to finish" notify=no

[root@syasuda-ollama ~]# docker ps
CONTAINER ID   IMAGE                                  COMMAND           CREATED          STATUS                    PORTS                                         NAMES
287878ae0d2f   ghcr.io/open-webui/open-webui:ollama   "bash start.sh"   56 seconds ago   Up 55 seconds (healthy)   0.0.0.0:3000->8080/tcp, [::]:3000->8080/tcp   open-webui

[root@syasuda-ollama ~]# docker image ls
REPOSITORY                      TAG       IMAGE ID       CREATED         SIZE
ghcr.io/open-webui/open-webui   ollama    c3594234d1be   3 days ago      8.31GB
ghcr.io/open-webui/open-webui   <none>    a633c4d773d8   9 days ago      8.31GB
containrrr/watchtower           latest    e7dd50d07b86   21 months ago   14.7MB

(古いイメージは要らないので削除)
[root@syasuda-ollama ~]# docker image rm a633c4d773d8
[root@syasuda-ollama ~]# docker image ls
REPOSITORY                      TAG       IMAGE ID       CREATED         SIZE
ghcr.io/open-webui/open-webui   ollama    c3594234d1be   3 days ago      8.31GB
containrrr/watchtower           latest    e7dd50d07b86   21 months ago   14.7MB

再ログイン後のOpen WebUIの画面。
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?