従来のGPUパススルーにおける最大の壁
Proxmoxを運用しているなら、おそらくPCIパススルーには馴染みがあるでしょう。これはハードウェアのパワーを仮想マシン(VM)に直接届ける最短の方法です。しかし、Home AssistantからStable Diffusionまで、10台以上のVMを半年間運用した結果、ある矛盾に気づきました。それは「1:1の制限」です。例えば、RTX 3060 12GBを持っていて、Windows VMのUIを高速化したいだけだとしても、残りの10GB以上のVRAMを無駄にしてしまいます。
これは、一通の手紙を運ぶためだけにトラックを買うようなものです。他のVMは、新しいカードを増設しない限り、このグラフィックスパワーを利用することすらできません。そこで登場するのが、この無駄を解決するNVIDIA vGPU (Virtual GPU)です。この技術を使えば、1枚の物理カードを複数の独立した「断片」に分割し、各VMが実際のニーズに合わせて必要な分だけのVRAMを受け取れるようになります。
GPU共有手法の比較
| 特徴 | PCIパススルー | APIインターセプト (rGPU) | NVIDIA vGPU |
|---|---|---|---|
| リソース分割 | 1枚を1台のVMに専有 | 共有型 (Shared) | パーティション分割 (Partition) |
| 実効パフォーマンス | ~100% (ネイティブ) | 遅延により大幅低下 | ~95-98%を維持 |
| 安定性 | 非常に高い | 頻繁なクラッシュ | エンタープライズ級 |
| サポート対象カード | 全てのカード | ソフトウェアによる制限 | Quadro/Tesla(またはRTXロック解除) |
これら3つの手法の中で、vGPUは最高のバランスを提供します。パススルーのような安定性を持ちながら、CPUコアを仮想化するように柔軟な運用が可能です。
なぜAI/MLにおいてvGPUが最良の選択肢なのか?
AIプロジェクトにおけるGPUの需要は、多くの場合一時的なものです。コードを書いたりデータを準備したりしている間、GPUはほとんど稼働していません。実際に「熱く」なるのは、学習(Training)コマンドを実行した時だけです。vGPUを使えば、1枚の16GBカードから4GBのVRAMを4人の開発者にそれぞれ割り当てることができます。4台のワークステーションに大金を投じる代わりに、十分なパワーを持つProxmoxサーバーを1台用意するだけで済むのです。
NVIDIAの公式ドキュメントではvGPUはエンタープライズ向けとされていますが、vgpu-unlock-rsというツールがその常識を変えました。これにより、一般的なRTXカードを専用のTeslaシリーズと同じように動作させることが可能になります。
Proxmox 8での実践的な導入手順
開始する前に、BIOSでIOMMUを有効にすることを忘れないでください。このステップを抜かすと、その後の設定はすべて無意味になります。
ステップ 1: ホストドライバのインストール
vGPUマネージャー専用のNVIDIAドライバが必要です。Linux標準のapt install nvidia-driverコマンドは使用しないでください。
# 環境の更新
apt update && apt upgrade -y
# 依存パッケージとカーネルヘッダーのインストール
apt install -y build-essential dkms pve-headers-$(uname -r)
# vGPUドライバインストールファイルの実行
chmod +x NVIDIA-Linux-x86_64-535.129.03-vgpu-kvm.run
./NVIDIA-Linux-x86_64-535.129.03-vgpu-kvm.run
ステップ 2: コンシューマー向けカードの潜在能力を解放する
RTX 3000または4000シリーズをお持ちの場合、このステップは必須です。アンロックツールを使用して、システムに仮想化対応カードであると認識させます。
# GitHubからアンロックツールをダウンロード
git clone https://github.com/mbilker/vgpu-unlock-rs.git
cd vgpu-unlock-rs
# Rustを使用してビルド
cargo build --release
# ライブラリをシステムに配置
cp target/release/libvgpu_unlock_rs.so /usr/lib/
次に、ドライバが正しく認識できるように、/etc/vgpu_unlock/config.tomlにカードのパラメータを記述します。
ステップ 3: Mdevプロファイルの確認
マシンを再起動し、以下のコマンドを実行して利用可能なGPUの「断片」を確認します:
mdevctl types | grep nvidia
結果には、nvidia-233(1GB VRAM相当)のようなプロファイルが表示されます。このIDをメモしてVMに割り当てます。
ステップ 4: 仮想マシンへの割り当て
ProxmoxのGUIから、VM -> ハードウェア -> 追加 -> PCIデバイスを選択します。MDev Typeの項目で、適切な容量を選択してください。例えば、画像処理タスクには4GB、Llama-3-8BのようなLLMモデルを実行するには8GBを割り当てます。
クライアントVM(ゲスト側)の設定
仮想マシン内では、「vGPUクライアント」ドライバをインストールする必要があります。通常のGame Readyドライバは動作しないので注意してください。インストール後、カードの全パフォーマンスを解放するためにライセンスの設定が必要です。
# 成果の確認
nvidia-smi
ステータステーブルに割り当てた通りのVRAM容量が表示されていれば、システムの準備は完了です。
実運用における重要な注意点
半年間の連続使用を経て、3つの主要な教訓を得ました:
- 温度管理: 複数のVMが同時にレンダリングを行うと、カードは非常に速く高温になります。自動モードは反応が遅れることがあるため、Proxmoxホスト側でファンカーブ(fan curve)を能動的に調整することをお勧めします。
- バックアップ時のリスク: ProxmoxはGPUメモリの状態を保存できません。グラフィックデータの破損を防ぐため、バックアップ前にVMをシャットダウンすることをお勧めします。
- カーネルのアップデート: Proxmoxがパッチを適用してアップグレードされるたびに、NVIDIAドライバが外れることがあります。接続を復旧するために、いつでも
dkms installコマンドを再実行できる準備をしておいてください。
vGPUを活用することで、古いハードウェアを徹底的に最適化することができました。高額なクラウドサービスに一銭も払うことなく、子供たちにクラウドゲーミングで遊ばせる環境と、プロフェッショナルなAIテスト環境を同時に手に入れることができました。皆さんの設定が成功することを願っています!

