はじめに
「自前のサーバーでローカル LLM を動かしたい、でも Claude や OpenAI API の料金が気になる」という方も多いのではないでしょうか。
本記事では、ConoHa VPS の NVIDIA L4 GPU フレーバーに Gemma 4(31B) + Open WebUI をデプロイした実録をまとめます。conoha-cli を使えばインフラからアプリまで CLI だけで完結できます。
Gemma 4 とは
2025年に Google が公開したオープンウェイトモデルのシリーズです。Gemma 3 の後継にあたり、マルチモーダル(テキスト+画像)に対応しています。
| モデル | パラメータ | ファイルサイズ | 特徴 |
|---|---|---|---|
| gemma4:e2b | 2.3B(実効) | 7.2GB | エッジデバイス向け |
| gemma4:e4b | 4.5B(実効) | 9.6GB | バランス型 |
| gemma4:26b | 26B MoE | 18GB | 高精度・効率的 |
| gemma4:31b | 31B Dense | 20GB | ローカル最高クラス |
注意: 記事執筆時点では
gemma4:28bという tag は存在しません。近い大きさのモデルはgemma4:26b(MoE)かgemma4:31b(Dense)です。
必要な ConoHa フレーバー
Gemma 4 の大きなモデルは GPU が必須です。ConoHa VPS では L4 フレーバー を選ぶ必要があります。
conoha flavor list | grep l4
4 16G 0 1ff846c5-... g2l-t-c4m16g1-l4
4 16G 0 9a21ce94-... g2l-p-c4m16g1-l4
20 128G 0 214643c8-... g2l-p-c20m128g1-l4
20 128G 0 b5d0e377-... g2l-t-c20m128g1-l4
今回は g2l-t-c20m128g1-l4(20 vCPU, 128GB RAM, NVIDIA L4 24GB VRAM)を使用しました。
ポイント: L4 フレーバーの disk 表示は
0ですが、サーバー作成時にブートボリューム(100GB)が自動生成されます。--yesフラグが必要です(後述)。
ファイル構成
ollama-webui/
├── compose.yml
└── .dockerignore
シンプルに 2 ファイルだけです。
compose.yml
services:
ollama:
image: ollama/ollama:latest
volumes:
- ollama_data:/root/.ollama
entrypoint: ["/bin/sh", "-c", "ollama serve & sleep 10 && ollama pull gemma4:31b && wait"]
healthcheck:
test: ["CMD", "ollama", "list"]
interval: 30s
timeout: 10s
retries: 20
start_period: 600s
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
webui:
image: ghcr.io/open-webui/open-webui:main
ports:
- "3000:8080"
environment:
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_AUTH=false
volumes:
- webui_data:/app/backend/data
depends_on:
ollama:
condition: service_healthy
volumes:
ollama_data:
webui_data:
設定のポイント
| 設定 | 説明 |
|---|---|
deploy.resources.reservations.devices |
GPU パススルーの設定。L4 フレーバーで必須 |
healthcheck: test: ["CMD", "ollama", "list"] |
ollama コンテナには curl が入っていないため ollama list を使用 |
start_period: 600s |
初回起動時に 20GB のモデル pull が走るため長めに設定 |
WEBUI_AUTH=false |
認証なしで即アクセス可能(必要に応じて true に変更) |
デプロイ手順
1. サーバー作成
conoha server create \
--name l4-gemma4-server \
--flavor b5d0e377-3440-41c2-a967-15bbde929325 \
--image 722c231f-3f61-4e79-a5a6-c70d6c9ea908 \
--key-name <キーペア名> \
--security-group default \
--security-group IPv4v6-SSH \
--no-input --yes --wait
vmi-docker-29.2-ubuntu-24.04-amd64イメージを使うと Docker が最初から入っています。
2. ポート 3000 の開放
# セキュリティグループ ID を確認する
conoha network sg list | grep default
# ポート 3000 を開放する
conoha network sgr create \
--security-group-id <default-SG-ID> \
--direction ingress \
--protocol tcp \
--port-min 3000 \
--port-max 3000 \
--remote-ip 0.0.0.0/0
3. NVIDIA ドライバー + Container Toolkit のインストール
nvidia-setup.sh を作成します:
#!/bin/bash
set -e
# NVIDIA Container Toolkit のインストール
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
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' | \
tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
apt-get update -q
apt-get install -y nvidia-container-toolkit
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker
nvidia-driver-setup.sh を作成します:
#!/bin/bash
set -e
# GPU ドライバーのインストール
apt-get install -y ubuntu-drivers-common
ubuntu-drivers install --gpgpu
nvidia-utils-setup.sh を作成します:
#!/bin/bash
set -e
# nvidia-smi を含むユーティリティのインストール
apt-get install -y nvidia-utils-570-server
systemctl restart docker
nvidia-smi
スクリプトを順番にデプロイします:
conoha server deploy l4-gemma4-server --script nvidia-setup.sh \
--identity ~/.ssh/conoha_<キーペア名> --no-input
conoha server deploy l4-gemma4-server --script nvidia-driver-setup.sh \
--identity ~/.ssh/conoha_<キーペア名> --no-input
4. 再起動(重要)
ドライバーインストール後、カーネルモジュールをロードするために再起動が必要です:
conoha server reboot l4-gemma4-server --wait --no-input --yes
再起動後に nvidia-utils をインストールして GPU を確認します:
conoha server deploy l4-gemma4-server --script nvidia-utils-setup.sh \
--identity ~/.ssh/conoha_<キーペア名> --no-input
出力例:
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 570.211.01 Driver Version: 570.211.01 CUDA Version: 12.8 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| 0 NVIDIA L4 Off | 00000000:00:06.0 Off | 0 |
| N/A 39C P0 28W / 72W | 0MiB / 23034MiB | 0% Default |
+-----------------------------------------------------------------------------------------+
5. アプリのデプロイ
# アプリ環境を初期化する
conoha app init l4-gemma4-server --app-name ollama-webui \
--identity ~/.ssh/conoha_<キーペア名> --no-input
# compose.yml があるディレクトリでデプロイする
conoha app deploy l4-gemma4-server --app-name ollama-webui \
--identity ~/.ssh/conoha_<キーペア名> --no-input
初回は gemma4:31b(約 20GB)のダウンロードが走るため数分かかります。
動作確認
ブラウザで http://<サーバーIP>:3000 にアクセスすると Open WebUI が表示されます。
モデル選択で gemma4:31b を選んで日本語で話しかけてみましょう。
ハマりポイント
1. サーバー作成時に --security-group と --yes が必要
--no-input だけでは不十分で、以下の 2 つが追加で必要でした。
# NG: セキュリティグループ選択のプロンプトが発生する
conoha server create --name ... --no-input
# OK
conoha server create --name ... \
--security-group default \
--security-group IPv4v6-SSH \
--no-input --yes
L4 フレーバーはブートボリューム作成の確認があるため --yes も必要です。
2. ドライバーインストール後に再起動が必要
ubuntu-drivers install --gpgpu を実行した後、カーネルが更新されていた場合は再起動しないと nvidia-smi が使えません。
conoha server reboot <サーバー名> --wait --no-input --yes
3. nvidia-smi は別パッケージ
ubuntu-drivers install --gpgpu では nvidia-headless-no-dkms 系しかインストールされず、nvidia-smi コマンドが入りません。別途インストールが必要です。
apt-get install -y nvidia-utils-570-server
4. ollama コンテナに curl がない
healthcheck に curl を使うと失敗します。ollama list コマンドを使いましょう。
# NG
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:11434/api/tags || exit 1"]
# OK
healthcheck:
test: ["CMD", "ollama", "list"]
5. gemma4:28b は存在しない
「28B モデルがほしい」と思っても gemma4:28b タグはありません。近いサイズとして gemma4:26b(MoE・18GB)または gemma4:31b(Dense・20GB)を選びましょう。
パフォーマンスについて
今回は gemma4:31b(20GB)を使いましたが、同じ L4(VRAM 24GB)で動かす場合、gemma4:26b(MoE・18GB)の方がレスポンスが速い可能性があります。MoE(Mixture of Experts)アーキテクチャは推論時に全パラメータを使わないため、体感速度が上がる傾向があります。用途に応じて使い分けると良いでしょう。
| モデル | VRAM 使用量 | 推論速度(目安) | 精度 |
|---|---|---|---|
| gemma4:26b | 約 18GB | 速め | 高い |
| gemma4:31b | 約 20GB | やや遅め | 高い |
コストについて
ConoHa VPS の L4 トライアルプランを使った場合の費用感です(2025年時点・参考値)。
| 比較対象 | 月額コスト(目安) | 特徴 |
|---|---|---|
| ConoHa L4 フレーバー | 数万円/月 | 自前サーバー、使い放題 |
| Claude API(Sonnet) | 使用量に応じて変動 | 高品質、従量課金 |
| OpenAI API(GPT-4o) | 使用量に応じて変動 | 高品質、従量課金 |
ヘビーユーザー(1 日に大量のトークンを消費する場合)やプライバシー重視(データを外部に送りたくない場合)であれば、自前サーバーで Gemma 4 を動かす方がコスト的に有利な場合があります。一方、軽い使い方であれば API の従量課金の方が安上がりです。
まとめ
| ステップ | コマンド |
|---|---|
| ① サーバー作成 | conoha server create --flavor <L4-ID> --security-group default --security-group IPv4v6-SSH --no-input --yes --wait |
| ② ポート開放 | conoha network sgr create ... --port-min 3000 --port-max 3000 |
| ③ GPU 環境構築 |
conoha server deploy × 3(Toolkit → Driver → Utils) |
| ④ 再起動 | conoha server reboot --wait --no-input --yes |
| ⑤ アプリ初期化 | conoha app init ... --app-name ollama-webui |
| ⑥ デプロイ | conoha app deploy ... --app-name ollama-webui |
ConoHa の L4 フレーバーと conoha-cli を組み合わせることで、GPU 環境の構築からアプリのデプロイまで CLI だけで完結できます。Gemma 4 はマルチモーダル対応の高性能モデルなので、プライベートな LLM 環境としておすすめです。