高火力VRTは、さくらのクラウドで利用できるGPUインスタンスです。機械学習や生成AIなどの大規模な計算処理に適したNVIDIA製GPUを搭載しており、用途に応じてV100またはH100を選択できます。
今回は、より高い推論性能と大容量のGPUメモリを備えたNVIDIA H100プランのインスタンスを用意します。その上に、大規模言語モデルを効率よく実行するための推論エンジン「vLLM」を構築し、OpenAIが公開しているオープンウェイトモデル「gpt-oss-120b」を動かしてみます。
この記事では、インスタンスの作成からGPU環境の構築、vLLMの起動、APIを使った推論リクエストの送信までを順番に紹介します。最後に、チャット形式のWebインターフェースを提供する「Open WebUI」を導入し、ブラウザからgpt-oss-120bと対話できる環境を構築します。
手順
- サーバーを作成する
- サーバーへ接続する
- Dockerをインストールする
- NVIDIAドライバーをインストールする
- NVIDIA Container Toolkitをインストールする
- NVMeを初期化する
- vLLMを起動する
- OpenAI互換APIの動作を確認する
- Open WebUIを起動する
- 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の画面が表示されたら、管理者アカウントを作成します。

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

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

利用を終了するときは、SSHポートフォワードを実行しているターミナルでCtrl+Cを押します。
検証が終わり、サーバーが不要になったら削除してください。作成したディスクも不要な場合は、あわせて削除します。

