AI/ML ワークロードの急速な普及により、GPU コンピューティングへの需要が爆発的に増加しています。Proxmox VE の GPU パススルー機能を使えば、仮想マシンから物理 GPU に直接アクセスし、ベアメタルに迫る性能で LLM 推論、モデルトレーニング、画像生成などを実行できます。本記事では、IOMMU/VFIO を使った GPU パススルーの設定から、AI ワークロードの実行までを詳細に解説します。
AI/ML 基盤を Kubernetes 上で運用するなら、Kubo On-Premise が GPU ノードを含むフルマネージド K8s 環境を提供します。GPU リソースのスケジューリングと運用管理を自動化できます。
GPU パススルーの基礎知識
GPU パススルーは、VFIO(Virtual Function io)を介してハイパーバイザーのオーバーヘッドを最小限に抑えながら、VM に物理 GPU への直接アクセスを提供する仮想化技術です。
IOMMU とは
IOMMU(Input-Output Memory Management Unit)は、デバイスアドレスを変換するハードウェアコンポーネントで、デバイスごとに独立した「レーン」を作成します。これがパススルーの前提条件となります。
- intel: vt-d(virtualization technology for directed i-o)
- AMD: AMD-Vi(AMD io Virtualization Technology)
サポートされる GPU
| カテゴリ | GPU | VRAM | 推奨用途 |
|---|---|---|---|
| エントリー | RTX 3060 / RTX 4060 | 8-12 GB | 小規模 LLM 推論 |
| ミッドレンジ | RTX 3080 / RTX 4060 Ti | 10-16 GB | 中規模モデル、ファインチューニング |
| ハイエンド | RTX 3090 / RTX 4090 | 24 GB | 大規模 LLM、マルチモデル |
| データセンター | NVIDIA P40 / A100 | 24-80 GB | 本番 AI ワークロード |
Proxmox フォーラムの GPU パススルーガイドでは、NVIDIA GPU が最も広いサポートを提供していると述べられています。AMD GPU は ROCm が必要ですが、Ollama 等では対応ディストリビューションで動作します。
BIOS と Proxmox ホストの設定
BIOS 設定
以下の BIOS 設定を確認します:
- Secure Boot を無効化: 証明書の登録が不要に
- VT-d(Intel)/ IOMMU(AMD)を有効化: マザーボード BIOS の該当メニューで有効化
- ファームウェアを最新版に更新: パススルーの互換性が向上
カーネルパラメータの設定
GRUB のコマンドラインに IOMMU パラメータを追加します:
# /etc/default/grub を編集
# Intel CPU の場合
GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"
# AMD CPU の場合
GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"
# GRUB を更新して再起動
update-grub
reboot
iommu=pt(パススルーモード)は、パススルーするデバイスのみに IOMMU を適用し、全体的なパフォーマンスを向上させます。
再起動後、IOMMU が有効であることを確認します:
dmesg | grep -e DMAR -e IOMMU
# "DMAR: IOMMU enabled" または類似のメッセージが表示されるべき
VFIO モジュールの設定
VFIO モジュールをロードし、ホストの GPU ドライバーをブラックリストに登録します:
# /etc/modules に VFIO モジュールを追加
cat >> /etc/modules <<EOF
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
EOF
# ホストの GPU ドライバーをブラックリスト化
cat > /etc/modprobe.d/blacklist-gpu.conf <<EOF
blacklist nouveau
blacklist nvidia
blacklist nvidiafb
blacklist snd_hda_intel
EOF
GPU を VFIO にバインド
GPU の PCI アドレスとベンダー ID を特定し、VFIO ドライバーにバインドします:
# GPU の PCI アドレスを確認
lspci -v | grep -i nvidia
# 例: 01:00.0 VGA compatible controller: NVIDIA Corporation ...
# 例: 01:00.1 Audio device: NVIDIA Corporation ...
# ベンダー ID を取得
lspci -n -s 01:00
# 例: 01:00.0 0300: 10de:2684 (rev a1)
# 例: 01:00.1 0403: 10de:22ba (rev a1)
# VFIO に GPU をバインド
cat > /etc/modprobe.d/vfio.conf <<EOF
options vfio-pci ids=10de:2684,10de:22ba disable_vga=1
softdep nvidia pre: vfio-pci
softdep snd_hda_intel pre: vfio-pci
EOF
# initramfs を更新して再起動
update-initramfs -u -k all
reboot
再起動後、バインドを確認します:
lspci -nnk -s 01:00
# "Kernel driver in use: vfio-pci" と表示されるべき
Kubo を使えば、GPU ノードの Kubernetes への統合や、NVIDIA Device Plugin による GPU リソースの自動スケジューリングが容易になります。
VM の作成と GPU のアタッチ
VM の設定
GPU パススルーに最適化された VM を作成します:
# Web UI または CLI で VM を作成
qm create 200 --name ai-workstation --memory 32768 --cores 8 \
--machine q35 --bios ovmf \
--cpu host \
--scsihw virtio-scsi-single \
--net0 virtio,bridge=vmbr0
# EFI ディスクを追加
qm set 200 --efidisk0 local-lvm:1,efitype=4m
# OS ディスクを追加
qm set 200 --scsi0 local-lvm:100,ssd=1,discard=on
重要な設定ポイント:
| 設定 | 値 | 理由 |
|---|---|---|
| Machine type | q35 | PCIe パススルーに必要 |
| BIOS | OVMF(UEFI) | PCIe デバイスの正しい初期化 |
| CPU type | host | CPU 機能の完全公開 |
| SCSI Controller | VirtIO SCSI | 最高のディスク性能 |
GPU のパススルー設定
VM 設定ファイルに GPU デバイスを追加します:
# /etc/pve/qemu-server/200.conf に追加
# GPU (VGA + Audio) をパススルー
hostpci0: 01:00,pcie=1,x-vga=on
# または Web UI から:
# Hardware → Add → PCI Device → GPU を選択
# "All Functions" と "PCI-Express" にチェック
ゲスト OS での NVIDIA ドライバーインストール
VM 内で NVIDIA ドライバーと CUDA ツールキットをインストールします:
# Ubuntu 24.04 の場合
# NVIDIA ドライバーのインストール
sudo apt update
sudo apt install -y nvidia-driver-560
# CUDA ツールキットのインストール
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
sudo apt install -y cuda-toolkit-12-6
# GPU の動作確認
nvidia-smi
AI/ML ワークロードの実行
Ollama による LLM 推論
Ollama は GPU パススルー環境で最も簡単に LLM を実行できるツールです:
# Ollama のインストール
curl -fsSL https://ollama.com/install | sh
# サービスの起動確認
systemctl status ollama
# モデルのダウンロードと実行
ollama pull llama3.1:70b
ollama run llama3.1:70b
# API 経由でのアクセス(デフォルト: ポート 11434)
curl http://localhost:11434/api/generate -d '{
"model": "llama3.1:70b",
"prompt": "Explain GPU passthrough in Proxmox"
}'
vLLM による高性能推論サーバー
高スループットが必要な本番環境には、vLLM が最適です:
# vLLM のインストール
pip install vllm
# OpenAI 互換 API サーバーの起動
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-3.1-70B-Instruct \
--tensor-parallel-size 1 \
--gpu-memory-utilization 0.9 \
--port 8000
Docker + NVIDIA Container Toolkit
コンテナベースの AI ワークロードには、NVIDIA Container Toolkit を使用します:
# NVIDIA Container Toolkit のインストール
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
# リポジトリを追加してインストール
sudo apt install -y nvidia-container-toolkit
# Docker で GPU を使用
docker run --gpus all nvidia/cuda:12.6.0-base-ubuntu24.04 nvidia-smi
AI ワークロードを Kubernetes 上で大規模に運用するなら、Kubo On-Premise が NVIDIA Device Plugin の自動設定、GPU リソースクォータ、マルチテナント GPU 共有を含むフルマネージド環境を提供します。
トラブルシューティング
よくある問題と解決策
| 問題 | 原因 | 解決策 |
|---|---|---|
| IOMMU グループが分離されない | ACS 非対応 | pcie_acs_override=downstream,multifunction を GRUB に追加 |
| VM 起動時にメモリ不足 | PCIe メモリピニング | VM の RAM を削減、hugepages を設定 |
| NVIDIA Code 43 エラー | ドライバーが仮想環境を検出 | cpu: host を確認、最新ドライバーを使用 |
| GPU リセット問題 | AMD GPU に多い | vendor-reset カーネルモジュールを使用 |
| 音声デバイスの競合 | GPU オーディオの衝突 | snd_hda_intel をブラックリスト化 |
# IOMMU グループの確認
for d in /sys/kernel/iommu_groups/*/devices/*; do
n=${d#*/iommu_groups/}; n=${n%%/*}
printf 'IOMMU Group %s ' "$n"
lspci -nns "${d##*/}"
done
Proxmox Wiki の PCI パススルーガイドに詳細なトラブルシューティング手順が掲載されています。
まとめ
Proxmox VE の GPU パススルーは、IOMMU と VFIO の正しい設定により、AI/ML ワークロードに対してベアメタルに近い GPU 性能を提供します。近年のハードウェアとドライバーの成熟により、セットアップは大幅に簡素化されています。
GPU を活用した AI ワークロードを Kubernetes 上で本格運用するなら、Kubo On-Premise が最適なプラットフォームです。Proxmox の GPU パススルーと Kubo のフルマネージド K8s を組み合わせ、スケーラブルな AI 基盤を構築できます。
GPU パススルー環境の設計・構築に関するご相談は、お問い合わせからご連絡ください。
関連リンク: