Proxmox GPUパススルーガイド:ゲーミングとAIでネイティブ性能を引き出す

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

仮想化の限界を打ち破る

基本的なLinuxウェブサーバーを仮想化するのは非常に簡単です。しかし、ハイエンドなWindowsゲーミング環境や、CUDAを多用するAIインスタンスProxmox上で動かそうとすると、話は別です。VirtIOのような標準的な仮想ドライバーは2Dデスクトップには適していますが、Cyberpunk 2077で144Hzのフレームをレンダリングしたり、70億パラメータのLlama-3モデルをトレーニングしたりする際には力不足です。ソフトウェアエミュレーションでは、その溝を埋めることはできません。

その解決策がGPUパススルーです。この技術により、特定の仮想マシン(VM)が物理的なPCIeグラフィックスカードを完全に制御できるようになります。ゲストOSはハイパーバイザーを介さずにハードウェアと直接やり取りし、ベアメタル(物理マシン)環境の約96%から99%のパフォーマンスを発揮します。私はこの構成をStable Diffusionのリモートレンダリング用に半年以上運用していますが、初期設定こそ手間がかかるものの、その結果は物理PCと遜色ありません。

コアコンセプト:IOMMU and VFIO

コマンドラインでの操作に入る前に、IOMMUVFIOという2つのテクノロジーを理解しておく必要があります。

IOMMU (Input-Output Memory Management Unit)は、ハードウェアレベルのトラフィックコントローラーとして機能します。IntelではVT-d、AMDではAMD-Viとして知られており、VMが物理メモリ番地に安全にアクセスできるようにします。これがないと、CPUはGPUのメモリをホストシステムの他の部分から分離することができません。

VFIO (Virtual Function I/O)は、「プレースホルダー」として機能するLinuxカーネルドライバーです。ProxmoxホストがNVIDIAやNouveauなどの独自のドライバーをグラフィックスカードにロードするのを阻止し、GPUをクリーンな「待機」状態に保ちます。ホストが先にカードを掴んでしまうと、VMの起動中にハングアップしたりクラッシュしたりする可能性が高くなります。

ステップ 1:ハードウェアとBIOSの準備

成功するかどうかは、マザーボードのIOMMUグループ分けに大きく依存します。スムーズに設定するためには、GPUが独立したグループに配置されている必要があります。もしSATAコントローラーと同じグループを共有している場合、GPUをパススルーしようとすると誤ってハードディスクの接続が切れてしまうことがあります。

  • BIOS/UEFI設定画面を起動します。
  • VT-d (Intel) または AMD-Vi / IOMMU (AMD) を有効にします。
  • SR-IOV というオプションがあれば有効にします。
  • CSM (Compatibility Support Module) を無効にします。現代的なパススルーにはUEFIが必須です。
  • プライマリディスプレイを iGPU (内蔵グラフィックス) に設定します。これにより、ディスクリートGPU(外部GPU)をVM用に解放できます。

ステップ 2:カーネルでのIOMMU有効化

ブートプロセスの最初の段階でIOMMUを有効にするようProxmoxに指示する必要があります。GRUB設定ファイルを開きます。

nano /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULT という行を探し、プロセッサの種類に応じて以下のパラメータを追加します。

Intel(第10世代から第14世代)の場合:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

AMD(Ryzenシリーズ)の場合:

GRUB_CMDLINE_LINUX_DEFAULT="quiet amd_iommu=on iommu=pt"

iommu=pt フラグは非常に重要です。これはカーネルが必要のないデバイスに触れるのを防ぎ、パフォーマンスを向上させます。ファイルを保存してGRUBを更新し、再起動します。

update-grub
reboot

再起動後、dmesg | grep -e DMAR -e IOMMU

Share: