HP Z8 G4 + Proxmox + Tesla V100 (32GB) ローカルLLM環境構築備忘録
📋 1. 基本環境情報
HP Z8 G4 Workstation内に構築したローカルLLM推論環境のベーススペックです。
- ホストマシン: HP Z8 G4 Workstation
- ホストOS (ハイパーバイザ): Proxmox VE 9.2.2
- ホスト総メモリ: 96 GB
- 対象GPU: NVIDIA Tesla V100 PCIe 32GB × 1
- 仮想マシン (VM ID 101):
- OS: Ubuntu Server 24.04 LTS
- CPU: 1 ソケット / 8 コア (種別:
host) - メモリ: 64 GB (
65536 MB) - ストレージ: 512 GB (SCSI)
🛠️ 2. Ubuntu Server VMの作成とストレージ拡張
VM作成時の注意点
GPUパススルーを成功させるため、VM作成時に以下の設定を徹底しました。
- システム: マシンを
q35に、BIOSをOVMF (UEFI)に設定しました。 - CPU: パフォーマンス低下を防ぐため、種別(Type)を必ず
hostに変更しました。
【重要】LVMストレージの最大化(インストール時)
Ubuntu Serverはデフォルトで割り当てディスクの100GB程度しか使用しない設定(LVMの罠)になるため、インストーラーの「Storage configuration」で手動拡張を行いました。
USED DEVICES内のubuntu-lvを選択してEnter➔Editを開きました。Sizeを空欄にするか、表示されている最大値(例:508G)に入力し直してSaveしました。
🔐 3. Proxmoxホスト側:IOMMUとVFIOの設定(GPUの切り離し)
GPUをVMに直結させるため、Proxmox(Z8 G4)の根幹で対象GPUをホストから切り離す設定を行いました。
① GRUB(起動設定)の編集
Proxmoxのシェルを開き、/etc/default/grub を編集してIntel CPU用のIOMMUオプションを追記しました。
# 変更前
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
# 変更後
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"保存後、変更をシステムに反映させました。
update-grub② VFIOカーネルモジュールの追加
/etc/modules ファイルの一番下に以下の4行を追記しました。
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd保存してProxmoxホストを再起動しました。(※初回設定時、ACPIシャットダウンの不整合でフリーズしたため、Z8 G4の物理電源ボタンを長押しして強制終了・再起動しました)
③ IOMMU有効化の確認
再起動後、以下のコマンドで DMAR: IOMMU enabled がログに出力されていることを確認しました。
dmesg | grep -e DMAR -e IOMMU🔌 4. VMへのGPUパススルーとNVIDIAドライバーの導入
① Proxmox上のハードウェア紐付け
ProxmoxのGUIからUbuntu VM (101) の「ハードウェア」タブを開き、「PCI デバイス」として NVIDIA Corporation Tesla V100 を追加しました。以下の3つにチェックを入れることを必須としています。
- ☑ すべての機能 (All Functions)
- ☑ ROMバー (ROM-Bar)
- ☑ PCI-Express
② Ubuntu側でのドライバーインストール
Ubuntu VMを起動し、SSH経由でドライバーをインストールしました。
sudo apt update
sudo apt install -y nvidia-driver-535-server③ UEFI セキュアブート(MOK)の登録
ドライバーインストール中に出現する Package configuration 画面に従い、以下の手順でMOK登録を行いました。
- 登録用の任意のパスワード(例:
12345678)を2回入力してVMを再起動しました(sudo reboot)。 - 【超重要】 再起動直後、数秒間だけ表示される青い画面(MOK Management)で
Enroll MOK➔Continue➔Yesを選択しました。 - 先ほど設定したパスワードを入力し、
Rebootを選択して再起動しました。
④ GPU認識の確認
再起動後、以下のコマンドを実行し、Tesla V100のステータス表と温度(例: 34℃)が正常に表示されること(パススルーの完全成功)を確認しました。
nvidia-smi🐳 5. Docker & NVIDIA Container Toolkit の構築
コンテナ環境から物理GPUを安全に呼び出すためのミドルウェアを導入しました。
① Dockerのインストール
# 公式スクリプトによる自動インストールとグループ追加
curl -fsSL [https://get.docker.com](https://get.docker.com) -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
newgrp docker② NVIDIA Container Toolkitのインストール
# 公式リポジトリの登録とインストール
curl -fsSL [https://nvidia.github.io/libnvidia-container/gpgkey](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](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 update
sudo apt install -y nvidia-container-toolkit
# DockerへのNVIDIAランタイム登録と再起動
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker(※このとき Config file does not exist; using empty config 等のINFOが出ましたが、新規ファイル作成の正常ログであるため問題ありません)
③ コンテナ内GPU認識テスト
使い捨てコンテナからGPUが呼び出せるかテストし、成功を確認しました。
docker run --rm --gpus all ubuntu nvidia-smi🧠 6. Ollama & Open WebUI によるLLM環境の起動
① コンテナの起動
推論エンジン(Ollama)とチャットUI(Open WebUI)のコンテナをそれぞれ起動しました。
# Ollama
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama --restart always ollama/ollama
# Open WebUI
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main② ブラウザからの操作
ブラウザから http://192.168.11.xx:3000 にアクセスし、管理者アカウントを作成しました。設定から llama3.1:8b モデルをプルし、ローカルでの高速推論が可能になったことを確認しました。
💡 運用上の重要Tips
- シャットダウン時のフリーズ対策: GPUパススルー環境では、ホスト(Proxmox)を落とす前に、必ずUbuntu VM(101)側を先にシャットダウンしてGPUを完全に解放する必要があります。
- VMが「ゾンビ状態(ロック)」になって操作を受け付けなくなった場合は、Proxmoxのシェルから
qm unlock 101➔qm stop 101で強制停止が可能です。