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?

高火力VRT入門:NVIDIA H100でgpt-oss-120bとOpen WebUIを動かす

0
Posted at

スクリーンショット 2026-09-17 18.16.16.png

高火力VRTは、さくらのクラウドで利用できるGPUインスタンスです。機械学習や生成AIなどの大規模な計算処理に適したNVIDIA製GPUを搭載しており、用途に応じてV100またはH100を選択できます。

今回は、より高い推論性能と大容量のGPUメモリを備えたNVIDIA H100プランのインスタンスを用意します。その上に、大規模言語モデルを効率よく実行するための推論エンジン「vLLM」を構築し、OpenAIが公開しているオープンウェイトモデル「gpt-oss-120b」を動かしてみます。

この記事では、インスタンスの作成からGPU環境の構築、vLLMの起動、APIを使った推論リクエストの送信までを順番に紹介します。最後に、チャット形式のWebインターフェースを提供する「Open WebUI」を導入し、ブラウザからgpt-oss-120bと対話できる環境を構築します。

手順

  1. サーバーを作成する
  2. サーバーへ接続する
  3. Dockerをインストールする
  4. NVIDIAドライバーをインストールする
  5. NVIDIA Container Toolkitをインストールする
  6. NVMeを初期化する
  7. vLLMを起動する
  8. OpenAI互換APIの動作を確認する
  9. Open WebUIを起動する
  10. SSHポートフォワードでOpen WebUIへアクセスする

1. サーバーを作成する

以下の内容で作成します、指定されていない項目はデフォルトのままにします。

大項目 中項目 値
サーバプラン 仮想コア 高火力 VRT(GPU)プラン 高火力 VRT/24Core-240GB-H100x1
メモリ 240GB
ディスク 新規ディスクを作成
プラン SSDプラン
ソース アーカイブ
アーカイブ Ubuntu Server 24.04.2 LTS 64bit (cloudimg)
サイズ 100GB
cloud-init設定 公開鍵 ※いずれかの方法でSSHログインに使用する公開鍵を指定
ホスト名 gpt-oss-120b
サーバの情報 名前 gpt-oss-120b

全ての項目を入力選択後、画面右下の作成をクリックしサーバ作成完了を待ちます。

2. サーバーへ接続する

高火力VRTの作成が完了したら、SSHでサーバーへ接続します。

ssh ubuntu@<サーバーのIPアドレス>

以降はubuntuユーザーのまま作業し、管理者権限が必要なコマンドにはsudoを付けて実行します。

ホスト名とタイムゾーンを設定します。

sudo hostnamectl set-hostname gpt-oss-120b
sudo timedatectl set-timezone Asia/Tokyo

3. Dockerをインストールする

公式のドキュメントに沿ってインストールを行います。
https://docs.docker.com/engine/install/ubuntu/

パッケージ情報を更新し、必要なパッケージをインストールします。

sudo apt update
sudo apt install -y ca-certificates curl

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

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

Docker公式リポジトリのGPGキーをダウンロードします。

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

APTからGPGキーを読み取れるようにします。

sudo chmod a+r /etc/apt/keyrings/docker.asc

DockerのAPTリポジトリを登録します。

sudo tee /etc/apt/sources.list.d/docker.sources >/dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF

パッケージ情報を更新し、Dockerをインストールします。

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

Dockerが起動していることを確認します。

sudo systemctl is-active docker
sudo docker version

※実行結果出力例

ubuntu@gpt-oss-120b:~$ sudo systemctl is-active docker
active
ubuntu@gpt-oss-120b:~$ sudo docker version
Client: Docker Engine - Community
 Version:           29.8.1
 API version:       1.56
 Go version:        go1.26.8
 Git commit:        4a63305
 Built:             Tue Sep 15 16:26:01 2026
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          29.8.1
  API version:      1.56 (minimum version 1.40)
  Go version:       go1.26.8
  Git commit:       464cd50
  Built:            Tue Sep 15 16:26:01 2026
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v2.3.5
  GitCommit:        1294c24a7da8e5a793ed378161673abe94118892
 runc:
  Version:          1.5.1
  GitCommit:        v1.5.1-0-g8f2685a4
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

4. NVIDIAドライバーをインストールする

公式のドキュメントに沿ってインストールを行います。
https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/latest/ubuntu.html

実行中のカーネルに対応するヘッダーファイルと、リポジトリ登録に使用するwgetをインストールします。

sudo apt install -y \
  linux-headers-$(uname -r) \
  wget

NVIDIAのAPTリポジトリを登録するため、CUDA Keyringパッケージをダウンロードします。

wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb

ダウンロードしたパッケージをインストールします。

sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt update

使用するNVIDIAドライバーのバージョンを固定します。
この記事作成時点の最新のバージョンを指定しました。

sudo apt install -y nvidia-driver-pinning-615.71.09

NVIDIAドライバーをインストールします。

sudo apt install -y nvidia-open

サーバーを再起動します。

sudo reboot

再起動によってSSH接続が切断されます。しばらく待ってから、もう一度接続します。

ssh ubuntu@<サーバーのIPアドレス>

GPUが認識されていることを確認します。

nvidia-smi

NVIDIA H100の情報と、インストールしたドライバーのバージョンが表示されれば準備完了です。

※実行結果出力例

ubuntu@gpt-oss-120b:~$ nvidia-smi
Fri Sep 18 11:08:10 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 615.71.09              KMD Version: 615.71.09     CUDA UMD Version: 13.4     |
+-----------------------------------------+------------------------+----------------------+
| 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 H100 80GB HBM3          On  |   00000000:00:04.0 Off |                    0 |
| N/A   26C    P0             69W /  700W |       0MiB /  81559MiB |      0%      Default |
|                                         |                        |             Disabled |
+-----------------------------------------+------------------------+----------------------+

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

5. NVIDIA Container Toolkitをインストールする

公式のドキュメントに沿ってインストールを行います。
https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

DockerコンテナからGPUを利用するため、NVIDIA Container Toolkitをインストールします。
必要なパッケージをインストールします。

sudo apt-get update && sudo apt-get install -y --no-install-recommends \
   ca-certificates \
   curl \
   gnupg2

NVIDIA Container ToolkitのリポジトリのGPGキーとAPTリポジトリを登録します。

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

インストールするNVIDIA Container Toolkitのバージョンを変数に設定します。

export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.20.0-1

NVIDIA Container Toolkitをインストールします。

sudo apt-get 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 Runtimeを利用できるように設定します。

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

設定を反映した後もDockerが起動していることを確認します。

sudo systemctl status docker --no-pager

コンテナからGPUを利用できることを確認します。

sudo docker run --rm --gpus all ubuntu:24.04 nvidia-smi

コンテナ内からNVIDIA H100の情報が表示されれば、NVIDIA Container Toolkitの設定は完了です。

※実行結果出力例

ubuntu@gpt-oss-120b:~$ sudo docker run --rm --gpus all ubuntu:24.04 nvidia-smi
Unable to find image 'ubuntu:24.04' locally
24.04: Pulling from library/ubuntu
edd1ed89f0d4: Pull complete
afc716ec57df: Download complete
Digest: sha256:b3cc40b72b93588182b5410f723c7aaf142363311c2aa993d8a453ddcbb3ae15
Status: Downloaded newer image for ubuntu:24.04
Fri Sep 18 02:20:18 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 615.71.09              KMD Version: 615.71.09     CUDA UMD Version: 13.4     |
+-----------------------------------------+------------------------+----------------------+
| 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 H100 80GB HBM3          On  |   00000000:00:04.0 Off |                    0 |
| N/A   26C    P0             69W /  700W |       0MiB /  81559MiB |      0%      Default |
|                                         |                        |             Disabled |
+-----------------------------------------+------------------------+----------------------+

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

6. NVMeを初期化する

高火力VRTに搭載されているNVMeを、モデルデータのキャッシュ領域として使用します。
高火力VRTのNVMeはエフェメラルな領域であるため、シャットダウンをしてしまうと消えてしまいます。
そのため毎回のサーバ起動時にNVMeの初期化処理を行うように設定します。

最初に、接続されているブロックデバイスを確認します。

lsblk

ここからの手順では、NVMeのデバイスが/dev/nvme0n1であることを前提とします。環境によってデバイス名が異なる可能性があるため、必ずlsblkの結果を確認してください。
この手順では、ファイルシステムが存在しないNVMeにext4ファイルシステムを作成します。デバイスを間違えると既存のデータを失う可能性があるため、対象のデバイス名を十分に確認してください。
NVMeを初期化するスクリプトを作成します。

sudo tee /usr/local/sbin/nvme-init.sh >/dev/null <<'EOF'
#!/bin/bash
set -eux

DEVICE="/dev/nvme0n1"
MOUNT_POINT="/mnt/nvme"

for i in $(seq 1 60); do
    [ -b "$DEVICE" ] && break
    sleep 1
done

[ -b "$DEVICE" ]

mkdir -p "$MOUNT_POINT"

if ! blkid "$DEVICE" >/dev/null 2>&1; then
    mkfs.ext4 -F "$DEVICE"
fi

if ! mountpoint -q "$MOUNT_POINT"; then
    mount "$DEVICE" "$MOUNT_POINT"
fi

mkdir -p "$MOUNT_POINT/huggingface-cache"
EOF

スクリプトへ実行権限を付与します。

sudo chmod 0755 /usr/local/sbin/nvme-init.sh

サーバー起動時にスクリプトを実行するsystemdユニットを作成します。

sudo tee /etc/systemd/system/nvme-init.service >/dev/null <<'EOF'
[Unit]
Description=Initialize ephemeral NVMe
After=local-fs.target
Before=docker.service vllm.service

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/nvme-init.sh
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

systemdにユニットファイルを再読み込みさせます。

sudo systemctl daemon-reload

nvme-init.serviceを自動起動するように設定し、その場で起動します。

sudo systemctl enable --now nvme-init.service

ユニットの状態を確認します。

sudo systemctl status nvme-init.service --no-pager

NVMeが/mnt/nvmeへマウントされていることを確認します。

findmnt /mnt/nvme
df -h /mnt/nvme

※実行結果出力例

ubuntu@gpt-oss-120b:~$ sudo systemctl status nvme-init.service --no-pager
● nvme-init.service - Initialize ephemeral NVMe
     Loaded: loaded (/etc/systemd/system/nvme-init.service; enabled; preset: enabled)
     Active: active (exited) since Fri 2026-09-18 11:26:28 JST; 1s ago
    Process: 3414 ExecStart=/usr/local/sbin/nvme-init.sh (code=exited, status=0/SUCCESS)
   Main PID: 3414 (code=exited, status=0/SUCCESS)
        CPU: 241ms

 9月 18 11:26:27 gpt-oss-120b nvme-init.sh[3418]:         4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
 9月 18 11:26:27 gpt-oss-120b nvme-init.sh[3418]:         102400000, 214990848, 512000000, 550731776, 644972544
 9月 18 11:26:27 gpt-oss-120b nvme-init.sh[3418]: [73B blob data]
 9月 18 11:26:27 gpt-oss-120b nvme-init.sh[3418]: [70B blob data]
 9月 18 11:26:28 gpt-oss-120b nvme-init.sh[3418]: Creating journal (262144 blocks): done
 9月 18 11:26:28 gpt-oss-120b nvme-init.sh[3418]: [107B blob data]
 9月 18 11:26:28 gpt-oss-120b nvme-init.sh[3414]: + mountpoint -q /mnt/nvme
 9月 18 11:26:28 gpt-oss-120b nvme-init.sh[3414]: + mount /dev/nvme0n1 /mnt/nvme
 9月 18 11:26:28 gpt-oss-120b nvme-init.sh[3414]: + mkdir -p /mnt/nvme/huggingface-cache
 9月 18 11:26:28 gpt-oss-120b systemd[1]: Finished nvme-init.service - Initialize ephemeral NVMe.
ubuntu@gpt-oss-120b:~$ findmnt /mnt/nvme
TARGET    SOURCE       FSTYPE OPTIONS
/mnt/nvme /dev/nvme0n1 ext4   rw,relatime,stripe=32
ubuntu@gpt-oss-120b:~$ df -h /mnt/nvme
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n1    7.0T   32K  6.6T   1% /mnt/nvme

7. vLLMを起動する

APIキーを作成する

vLLMへアクセスするためのAPIキーと、Open WebUIが使用するシークレットキーを生成します。

VLLM_API_KEY="$(openssl rand -hex 32)"
WEBUI_SECRET_KEY="$(openssl rand -hex 32)"

vLLM用の環境変数ファイルを作成します。

sudo install -m 0600 -o root -g root /dev/null /etc/default/vllm

生成したAPIキーを書き込みます。

printf 'VLLM_API_KEY=%s\n' "$VLLM_API_KEY" | sudo tee /etc/default/vllm >/dev/null

Open WebUI用の環境変数ファイルを作成します。

sudo install -m 0600 -o root -g root /dev/null /etc/default/open-webui

Open WebUIからvLLMへ接続するための情報を書き込みます。

printf '%s\n' \
  "OPENAI_API_KEY=$VLLM_API_KEY" \
  "OPENAI_API_BASE_URL=http://vllm:8000/v1" \
  "WEBUI_SECRET_KEY=$WEBUI_SECRET_KEY" |
  sudo tee /etc/default/open-webui >/dev/null

vLLMとOpen WebUIには、同じAPIキーを設定しています。
環境変数ファイルを書き込んだ後は、現在のシェルから変数を削除します。

unset VLLM_API_KEY WEBUI_SECRET_KEY

環境変数ファイルの所有者とパーミッションを確認します。

sudo ls -l /etc/default/vllm /etc/default/open-webui

いずれも所有者がroot、パーミッションが600になっていることを確認してください。

APIキーが設定されていることを確認します。

sudo grep -q '^VLLM_API_KEY=' /etc/default/vllm && echo "VLLM_API_KEY is configured"

APIキーは認証情報に当たるため、外部へ公開しないようにしてください。

Dockerネットワークを作成する

vLLMとOpen WebUIは、それぞれ別のDockerコンテナとして起動します。
コンテナ同士が通信できるように、openwebuiというDockerネットワークを作成します。

sudo docker network create openwebui

作成したネットワークを確認します。

sudo docker network inspect openwebui

※実行結果出力例

ubuntu@gpt-oss-120b:~$ sudo docker network inspect openwebui
[
    {
        "Name": "openwebui",
        "Id": "d1a154a18265682ab71c975fc123733d3fd925e6597bf03f6389524ec1d043c7",
        "Created": "2026-09-18T11:35:26.649437208+09:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv4": true,
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Options": {},
        "Labels": {},
        "Containers": {},
        "Status": {
            "IPAM": {
                "Subnets": {
                    "172.18.0.0/16": {
                        "IPsInUse": 3,
                        "DynamicIPsAvailable": 65533
                    }
                }
            }
        }
    }
]

vLLMのsystemdユニットを作成する

vLLMをsystemdで管理するためのユニットファイルを作成します。
vLLMのバージョンはこの記事作成時点の最新のバージョンを指定しました。

sudo tee /etc/systemd/system/vllm.service >/dev/null <<'EOF'
[Unit]
Description=vLLM Service
After=network-online.target docker.service nvme-init.service
Wants=network-online.target
Requires=docker.service nvme-init.service

[Service]
Restart=always
RestartSec=5s
TimeoutStartSec=0
EnvironmentFile=/etc/default/vllm
ExecStartPre=-/usr/bin/docker network create openwebui
ExecStart=/usr/bin/docker run \
  --rm \
  --name vllm \
  --network openwebui \
  --runtime nvidia \
  --gpus all \
  -e VLLM_API_KEY \
  -p 127.0.0.1:8000:8000 \
  -v /mnt/nvme/huggingface-cache:/root/.cache/huggingface \
  --ipc=host \
  vllm/vllm-openai:v0.29.0 \
  --model openai/gpt-oss-120b \
  --tool-call-parser openai \
  --enable-auto-tool-choice \
  --kv-cache-memory 6863001744
ExecStop=-/usr/bin/docker stop vllm

[Install]
WantedBy=multi-user.target
EOF

systemdにユニットファイルを再読み込みさせます。

sudo systemctl daemon-reload

vllm.serviceを自動起動するように設定し、その場で起動します。

sudo systemctl enable --now vllm.service

初回起動時は、vLLMのコンテナイメージとgpt-oss-120bのモデルデータをダウンロードします。環境やネットワークの速度によっては、起動完了まで時間がかかります。

必要に応じてログを表示して、モデルのダウンロードと起動状況を確認します。

sudo journalctl -u vllm.service -f

ログの表示を終了するには、Ctrl+Cを押します。

ユニットの状態を確認します。

sudo systemctl status vllm.service --no-pager

vLLMコンテナが起動していることを確認します。

sudo docker ps

この構成では、vLLMのポートをホストのループバックアドレス 127.0.0.1 だけに公開しています。インターネットからポート 8000 へ直接アクセスすることはできません。Open WebUIからは、同じ openwebui ネットワークを経由してvLLMへ接続します。

モデルのダウンロードとロードが完了し、ログに Application startup complete. と出力されれば、vLLMの起動は完了です。

ubuntu@gpt-oss-120b:~$ sudo journalctl -u vllm.service -f
 9月 18 11:49:06 gpt-oss-120b docker[3737]: (APIServer pid=1) INFO 09-18 02:49:06 [launcher.py:70] Route: /is_scaling_elastic_ep, Methods: POST
 9月 18 11:49:06 gpt-oss-120b docker[3737]: (APIServer pid=1) INFO 09-18 02:49:06 [launcher.py:70] Route: /v1/chat/completions/render, Methods: POST
 9月 18 11:49:06 gpt-oss-120b docker[3737]: (APIServer pid=1) INFO 09-18 02:49:06 [launcher.py:70] Route: /v1/messages/render, Methods: POST
 9月 18 11:49:06 gpt-oss-120b docker[3737]: (APIServer pid=1) INFO 09-18 02:49:06 [launcher.py:70] Route: /v1/completions/render, Methods: POST
 9月 18 11:49:06 gpt-oss-120b docker[3737]: (APIServer pid=1) INFO 09-18 02:49:06 [launcher.py:70] Route: /v1/chat/completions/derender, Methods: POST
 9月 18 11:49:06 gpt-oss-120b docker[3737]: (APIServer pid=1) INFO 09-18 02:49:06 [launcher.py:70] Route: /v1/completions/derender, Methods: POST
 9月 18 11:49:06 gpt-oss-120b docker[3737]: (APIServer pid=1) INFO 09-18 02:49:06 [launcher.py:70] Route: /inference/v1/generate, Methods: POST
 9月 18 11:49:06 gpt-oss-120b docker[3737]: (APIServer pid=1) INFO:     Started server process [1]
 9月 18 11:49:06 gpt-oss-120b docker[3737]: (APIServer pid=1) INFO:     Waiting for application startup.
 9月 18 11:49:06 gpt-oss-120b docker[3737]: (APIServer pid=1) INFO:     Application startup complete.

8. OpenAI互換APIの動作を確認する

環境変数ファイルからAPIキーを読み込みます。

VLLM_API_KEY="$(sudo sed -n 's/^VLLM_API_KEY=//p' /etc/default/vllm)"

Chat Completions APIへリクエストを送信します。

curl http://127.0.0.1:8000/v1/chat/completions \
  -H "Authorization: Bearer ${VLLM_API_KEY}" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-oss-120b",
    "messages": [
      {
        "role": "user",
        "content": "日本の首都を教えてください。"
      }
    ]
  }'

レスポンスが返れば、OpenAI互換APIの動作確認は完了です。

確認後、シェル上のAPIキーを削除します。

unset VLLM_API_KEY

ポート 8000 は 127.0.0.1 だけで待ち受けているため、インターネットには公開されません。

9. Open WebUIを起動する

Open WebUIをsystemdで管理するためのユニットファイルを作成します。
Open WebUIのバージョンはこの記事作成時点の最新のバージョンを指定しました。

sudo tee /etc/systemd/system/open-webui.service >/dev/null <<'EOF'
[Unit]
Description=Open WebUI Service
After=network-online.target docker.service
Wants=network-online.target
Requires=docker.service

[Service]
Restart=always
RestartSec=5s
TimeoutStartSec=0
EnvironmentFile=/etc/default/open-webui
ExecStartPre=-/usr/bin/docker network create openwebui
ExecStart=/usr/bin/docker run \
  --rm \
  --name open-webui \
  --network openwebui \
  -e OPENAI_API_BASE_URL \
  -e OPENAI_API_KEY \
  -e WEBUI_SECRET_KEY \
  -v open-webui:/app/backend/data \
  -p 127.0.0.1:3000:8080 \
  ghcr.io/open-webui/open-webui:0.11.3
ExecStop=-/usr/bin/docker stop open-webui

[Install]
WantedBy=multi-user.target
EOF

-p 127.0.0.1:3000:8080 を指定しているため、Open WebUIのポートにはサーバー自身からのみアクセスできます。インターネットへポート 3000 を直接公開することはありません。

systemdにユニットファイルを再読み込みさせます。

sudo systemctl daemon-reload

open-webui.serviceを自動起動するように設定し、その場で起動します。

sudo systemctl enable --now open-webui.service

ユニットの状態を確認します。

sudo systemctl status open-webui.service --no-pager

Open WebUIコンテナが起動していることを確認します。

sudo docker ps

PORTS 欄に次のように表示されれば、ホストのループバックアドレスだけで待ち受けています。

127.0.0.1:3000->8080/tcp

サーバー上でOpen WebUIからの応答を確認します。

curl -I http://127.0.0.1:3000

必要に応じて、Open WebUIのログを確認します。

sudo journalctl -u open-webui.service -f

10. SSHポートフォワードでOpen WebUIへアクセスする

手元のPCで新しいターミナルを開き、次のコマンドを実行します。

ssh -N -L 3000:127.0.0.1:3000 ubuntu@<サーバーのIPアドレス>

-Lオプションによって、手元のPCのポート 3000 が、SSH接続先サーバーの 127.0.0.1:3000 へ転送されます。
-Nは、SSH接続先でコマンドを実行せず、ポートフォワードだけを行うためのオプションです。このコマンドを実行している間はターミナルへ何も表示されませんが、そのまま起動しておいてください。

SSH接続を維持した状態で、Webブラウザから次のURLへアクセスします。

http://127.0.0.1:3000

Open WebUIの画面が表示されたら、管理者アカウントを作成します。
capture-1.jpg

capture-2.png

モデル一覧からopenai/gpt-oss-120bを選択すると、ブラウザ上からモデルと対話できます。
capture-3.png

チャットをするとvLLMにリクエストされ、結果がレスポンスされます。
capture-4.png

利用を終了するときは、SSHポートフォワードを実行しているターミナルでCtrl+Cを押します。

検証が終わり、サーバーが不要になったら削除してください。作成したディスクも不要な場合は、あわせて削除します。

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?