背景
今回のブログ記事では、Proxmox VEにおけるGPUパススルー設定についてご紹介します。
GPUパススルーとは、仮想マシン(VM)にホストマシンのGPUを直接割り当てる技術です。これにより、仮想マシンがホストのGPUを直接利用できるようになります。
イメージとしては赤線枠の部分のようにServer Nodeに搭載されているGPUデバイスを仮想マシン(VM)に割り当てて使用できるという形になります。
Proxmox VEはGPUパススルー機能をサポートしています。この機能を活用することで、Proxmox VEを用いた仮想環境基盤の活用の幅が広がります。本記事が仮想環境基盤構築をご検討の方のお役に立てば幸いです。
検証環境
項目 | 内容 |
---|
仮想環境 | Proxmox VE 8.2.4 |
パススルーのソースデバイス | NVIDIA T400 |
パススルーのターゲット仮想マシン | Ubuntu 24.04 LTS |
参考資料
手順
ステップ1: BIOSでIOMMUの有効化
IOMMU(Input-Output Memory Management Unit)は、コンピュータの入出力デバイスが物理メモリに直接アクセスする際にアドレス変換を行い、メモリの保護と効率的な資源管理を実現するハードウェアコンポーネントです。以下のBIOS設定を行います。
BIOS - Advanced Chipset Configuration - North Bridge - IIO Configuration - Intel VT for Directed I/O (VT-d) - [Enable]
なお、BIOS設定やカーネルオプション設定はシステムの構成によって異なります。本記事では当社での検証の一例を紹介しています。実際の作業の際にはシステム構成に合わせて設定方法を確認してください。
ステップ2: カーネルオプションでIOMMUの有効化
カーネルオプション設定は以下の通りです。
root@pve00:~# vi /etc/kernel/cmdline
root=ZFS=rpool/ROOT/pve-1 boot=zfs intel_iommu=on iommu=pt
GPU搭載ノードのコンソールからシェルを開き、/etc/kernel/cmdline
ファイルにintel_iommu=on
とiommu=pt
オプションを追加してください。なお、カーネルオプション設定はブートローダの種類によって異なりますので、構成に合わせて設定する必要があります。ProxmoxではGRUBまたはsystemd-bootの2種類のブートローダが使用されます。
ステップ3: VFIOモジュールの設定
VFIOモジュールは、ユーザー空間へ直接デバイスアクセスを公開するためのIOMMU/デバイス非依存フレームワークです。詳細はこちらをご覧ください。
Proxmox VEでVFIOモジュールを有効にするには、以下の手順を行います。
- GPUが搭載されているノードのコンソールからシェルを開き、以下のコマンドを実行してGPUデバイスを確認します。
root@pve00:~# lspci -nn | grep -i nvidia
- デバイスのバスIDとベンダーID、デバイスIDを確認します。
vfio.conf
というファイルを新規作成し、以下の内容を追加します。
root@pve00:~# vi /etc/modprobe.d/vfio.conf
options vfio-pci ids=10de:1ff2,10de:10fa disable_vga=1
- Proxmox VE起動時に以下のモジュールを自動的に読み込むように設定ファイルを記述します。
root@pve00:~# vi /etc/modules
# 以下4行を追加
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
ステップ4: GPUドライバモジュールをブラックリストに登録
ブラックリストは、特定のカーネルモジュールの自動ロードを防ぐために使用されます。Proxmox VEのWebUI上で操作し、以下のブラックリストファイルを新規に作成します。
root@pve00:~# vi /etc/modprobe.d/blacklist.conf
blacklist nvidia
blacklist nvidiafb
blacklist nouveau
ステップ5: 再起動
これまでの設定変更を反映するために、ノードを再起動します。クラスタ構築済みの環境では、再起動を行う際に適切な手順で慎重に行ってください。
ステップ6: PCIeデバイスのマッピング
Proxmoxの管理WebUIにて、データセンター→リソースマッピング→PCIeデバイス→追加を選択します。
マッピングの識別名を入力し、ノード上のデバイスにチェックを入れて作成を押します。
マッピング済のデバイスに先ほど作成したデバイスが存在する事を確認します。
ステップ7: 仮想マシンにPCIeデバイスの割り当て
PCIeデバイス(GPUデバイス)を割り当てたい仮想マシンを選択し、ハードウェア→追加→PCIデバイスを選択します。
Mappedデバイスに先ほどステップ6で追加したT400という項目が表示されます。T400を選択し追加ボタンを押します。
割り当てを行う仮想マシンにPCIデバイス(GPUデバイス)が追加されたことを確認します。
ステップ8: 仮想マシン上でGPUデバイスの認識確認
仮想マシンを起動し、ターミナルでlspci
を実行してNVIDIAデバイスが認識されているか確認します。NVIDIAドライバをインストールし、nvidia-smi
を実行してデバイスが認識されていることを確認します。
まとめ
今回はProxmox VEにおけるGPUパススルーの方法をご紹介しました。
システムの構成によってBIOS設定やブートオプションの設定方法に若干の違いはありますが、おおよその流れは本記事でご紹介できたかと思います。GPUパススルーによって仮想基盤上でGPUリソースを効率的に活用する一助となれば幸いです。
当社では仮想化基盤(HCI)構築サービスの提供をはじめました。お気軽にお問い合わせください。
https://www.systemworks.co.jp/hci.php