Skip to content

Tech Notes

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」で手動拡張を行いました。

  1. USED DEVICES 内の ubuntu-lv を選択して EnterEdit を開きました。
  2. 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登録を行いました。

  1. 登録用の任意のパスワード(例: 12345678)を2回入力してVMを再起動しました(sudo reboot)。
  2. 【超重要】 再起動直後、数秒間だけ表示される青い画面(MOK Management)で Enroll MOKContinueYes を選択しました。
  3. 先ほど設定したパスワードを入力し、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 101qm stop 101 で強制停止が可能です。