ProxmoxでGPUをパーティショニングする方法:1枚のNVIDIAカードを複数のVMで共有する

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

課題:1枚のGPUに対して多すぎるタスク

誰もが経験したことがあるでしょう。400ドルを投じて高性能なNVIDIA RTXカードを購入したものの、それが1つのWindows VMに占有されていることに気づくのです。そのカードを使って、Windowsでのゲーミング、Ollamaを実行するAIサーバー、そしてハードウェアトランスコーディング用のPlexメディアサーバーをすべて同時に動かしたいはずです。

通常、私たちはPCIeパススルーを利用します。これはハードウェアの100%を1つの仮想マシン(VM)に割り当てますが、他のすべてのVMをロックアウトしてしまいます。Windows VMがアイドル状態のとき、そのGPUパワーはただ電気を浪費しているだけになります。パーティショニングは、1つの物理カードを複数の仮想カードに分割できるようにすることで、ホームラボの効率を劇的に向上させ、この状況を一変させます。

アプローチの比較:パススルー vs パーティショニング

適切な方法の選択は、生のパフォーマンスを重視するか、ハードウェアの利用率を重視するかによって決まります。実際のProxmox環境における2つのテクノロジーの比較は以下の通りです。

PCIeパススルー(1:1方式)

  • 仕組み: ホストOSはGPUを完全に無視し、PCIアドレス全体を1つのVMに引き渡します。
  • パフォーマンス: ネイティブなベアメタル速度の約98%を得られます。
  • 制限: 「全か無か」の選択です。1つのVMしかハードウェアにアクセスできません。

vGPUパーティショニング(1:N方式)

  • 仕組み: 特殊なドライバーがGPUを複数の「Mediated Devices(mdev)」に分割します。各VMは、専用のVRAM容量を持つ、より小さな独自のNVIDIAカードとして認識します。
  • パフォーマンス: プロファイルに基づいて共有されます。例えば、12GBのRTX 3060を4GBのインスタンス3つに分割できます。
  • 制限: セットアップに手間がかかり、コンシューマー向けカードにおけるNVIDIA의 ソフトウェアロックをバイパスする必要があります。

vGPUパーティショニングのメリットとデメリット

コマンドラインの操作に入る前に、特定のセットアップにおいてメリットがメンテナンスの手間を上回るかどうかを検討してください。

メリット:

  • 高い投資対効果(ROI): 1枚のカードでWindowsデスクトップとヘッドレスAIサーバーを同時に実行できます。
  • 電気代の削減: 1枚のGPUで3つのタスクを実行する方が、3枚の別々のカードをアイドル状態で動かすよりも消費電力がはるかに少なくなります。
  • 動的なスケーリング: Linuxコンテナには2GBの小さなプロファイルを、ゲーミングVMには8GBの大きなプロファイルを割り当てるといったことが可能です。

デメリット:

  • セットアップの壁: カーネルにパッチを適用し、コミュニティ製のスクリプトを使用してコンシューマ向けドライバーを騙し、エンタープライズ機能を有効にする必要があります。
  • 脆弱性: ProxmoxのカーネルアップデートによってvGPUのマッピングが破損することがあり、ドライバーの再インストールが必要になる場合があります。

推奨ハードウェアと前提条件

Tesla P4やT4などのエンタープライズ向けカードは、これを標準でサポートしています。しかし、多くのユーザーは手持ちのRTXやGTXカードの使用を好みます。このガイドでは、Pascal、Turing、AmpereなどのNVIDIAアーキテクチャに焦点を当てます。

  • ホスト: Proxmox VE 8.x(安定したカーネルを使用していることを確認してください)。
  • GPU: NVIDIA GTX 10シリーズ、RTX 20/30/40シリーズ、またはTesla P4/P40。
  • BIOS: VT-d(Intel)またはAMD-Vi(AMD)に加えて、Above 4G DecodingSR-IOVを有効にします。

ステップバイステップの実装手順

標準的なRTXカードをマルチインスタンスの強力なマシンに変えるには、以下の手順に従ってください。

1. Proxmoxホストの準備

まず、IOMMUを有効にし、カーネルにVFIOモジュールをロードするように指示する必要があります。GRUB設定を開きます:

nano /etc/default/grub

GRUB_CMDLINE_LINUX_DEFAULTの行を修正します。Intelユーザーの場合は、以下のようになります:

GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt"

Share: