Ollama + Open WebUI を NVIDIA GPU + プロキシ環境下で動かす手順まとめ(Ubuntu 22.04)
概要
NVIDIA GPU 環境で、Ollama および Open WebUI を Docker 上で動作させ、ローカル LLM による GPU 推論を高速に行うための手順メモです。
1. Features(機能)
- Ollama と Open WebUI を Docker で構築
- NVIDIA Container Toolkit による GPU 対応
- ベンチマークスクリプトによるトークン生成速度測定
- プロキシ対応構成済み
2. 動作確認済み構成
項目 | |
---|---|
OS | Ubuntu 22.04.4 LTS |
GPU | NVIDIA RTX 6000 Ada 48GB + T400 4GB |
CUDA | 12.2 |
ドライバ | NVIDIA-SMI 535.104.05 |
Python | 3.10.12 |
Docker | docker-ce 24.0.5 など(APT経由) |
WebUI | open-webui v0.6.10 |
3. セットアップ手順
3.1 OSとドライバ確認
lsb_release -a
nvidia-smi
3.2 プロキシ設定
.bashrc
に以下を追加:
export http_proxy="http://<YOUR_PROXY>:8080"
export https_proxy="http://<YOUR_PROXY>:8080"
export ftp_proxy="http://<YOUR_PROXY>:8080"
export no_proxy="localhost,127.0.0.1,::1"
APTにも設定:
sudo nano /etc/apt/apt.conf.d/95proxies
Acquire::http::Proxy "http://<YOUR_PROXY>:8080";
Acquire::https::Proxy "http://<YOUR_PROXY>:8080";
3.3 Dockerインストール
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER
newgrp docker
3.4 Dockerのプロキシ設定
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
以下を記載:
[Service]
Environment="HTTP_PROXY=http://<YOUR_PROXY>:8080"
Environment="HTTPS_PROXY=http://<YOUR_PROXY>:8080"
Environment="NO_PROXY=localhost,127.0.0.1"
再起動。
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart docker
4. NVIDIA Container Toolkit 設定
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L 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/$distribution/libnvidia-container.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 > /dev/null
sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart docker
4.1 動作確認
docker run --rm --gpus all nvidia/cuda:12.2.0-base-ubuntu22.04 nvidia-smi
5. Ollama + Open WebUI の起動
5.1 Docker Compose ファイル(例)
docker-compose.yml
version: "3.9"
services:
ollama:
image: ollama/ollama
container_name: ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ollama-data:/root/.ollama
environment:
# 以下は必要に応じて設定(プロキシ利用者向け)
# HTTP_PROXY: http://<YOUR_PROXY>:8080
# HTTPS_PROXY: http://<YOUR_PROXY>:8080
# http_proxy: http://<YOUR_PROXY>:8080
# https_proxy: http://<YOUR_PROXY>:8080
# NO_PROXY: localhost,127.0.0.1
# no_proxy: localhost,127.0.0.1
deploy:
resources:
reservations:
devices:
- capabilities: [gpu]
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
ports:
- "3000:8080"
volumes:
- open-webui-data:/app/backend/data
environment:
WEBUI_AUTH: "false"
WEBUI_EMBEDDING_DISABLED: "true"
# 以下は必要に応じて設定(プロキシ利用者向け)
# HTTP_PROXY: http://<YOUR_PROXY>:8080
# HTTPS_PROXY: http://<YOUR_PROXY>:8080
# http_proxy: http://<YOUR_PROXY>:8080
# https_proxy: http://<YOUR_PROXY>:8080
# NO_PROXY: localhost,127.0.0.1
# no_proxy: localhost,127.0.0.1
OLLAMA_BASE_URL: http://<HOST_IP>:11434
extra_hosts:
- "host.docker.internal:host-gateway"
healthcheck:
disable: true
volumes:
ollama-data:
open-webui-data:
docker compose up -d
5.2 モデルの取得と確認
curl -X POST http://127.0.0.1:11434/api/pull -d '{ "name": "phi4:latest" }'
curl http://127.0.0.1:11434/api/tags
6. Usage(使い方)
6.1 起動
docker compose up -d
6.2 モデルの取得(API)
curl -X POST http://127.0.0.1:11434/api/pull -d '{ "name": "phi4:latest" }'
6.3 推論(API)
curl http://127.0.0.1:11434/api/generate -d '{
"model": "phi4:latest",
"prompt": "Hello! Please introduce yourself!",
"stream": false
}'
6.4 推論(WEB UI)
ブラウザで http://127.0.0.1:3000/ にアクセス。
6.5 推論(Cline)
VSCodeにCline拡張機能をインストールし、設定パネルにて OLLAMA_BASE_URL
を指定。
7. Benchmark(ベンチマーク)
ベンチマークスクリプト: util/benchmark.py
import time
import requests
data = {
"model": "phi4:14b",
"prompt": "Explain general relativity in simple terms.",
"stream": False
}
start = time.time()
response = requests.post("http://localhost:11434/api/generate", json=data)
elapsed = time.time() - start
text = response.json()["response"]
token_count = len(text.split()) # Approximate
print(f"Time: {elapsed:.2f} seconds")
print(f"Tokens: {token_count}")
print(f"Tokens/sec: {token_count / elapsed:.2f}")
ベンチマーク例:
$ python3 util/benchmark.py
Time: 9.61 seconds
Tokens: 433
Tokens/sec: 45.06
8. Troubleshooting(よくあるトラブルと対策)
現象 | 対策 |
---|---|
モデルがUIに表示されない |
OLLAMA_BASE_URL にホスト実IPを指定 |
モデル数が0と表示される |
docker logs open-webui でログ確認 |
モデル再DLされる |
ollama_data ボリュームが維持されているか |
Appendix(補足情報)
-
nvidia-smi
結果:RTX 6000 Ada (48GB), CUDA 12.2 - WebUI アクセス:
http://localhost:3000
- Ollama API:
http://localhost:11434
- モデル格納パス:
/var/lib/docker/volumes/ollama-stack_ollama-data/_data/models
おわりに
本記事では、Ollama + Open WebUI を NVIDIA GPU + プロキシ環境下で効率よく構築し、高速推論を実現する方法をまとめました。業務利用や高速なローカルLLM実験の出発点として活用してください。