第16章 仮想マシンでの GPU デバイスの管理
AI ワークロードを実行するために仮想マシン (VM) を準備したり、仮想マシンのグラフィカルパフォーマンスを強化したりするために、RHEL ホストの GPU を仮想マシンに割り当てることができます。
- GPU をホストから接続解除し、GPU の完全な制御を仮想マシンに直接渡すことができます。
- 物理 GPU から複数の仲介デバイスを作成し、これらのデバイスを仮想 GPU (vGPU) として複数のゲストに割り当てることができます。これは現在、一部の NVIDIA GPU でのみサポートされています。
GPU の割り当ては現在、Intel 64 システムおよび AMD64 システムでのみサポートされています。
16.1. 仮想マシンへの GPU の割り当て リンクのコピーリンクがクリップボードにコピーされました!
ホストシステムに接続されている GPU にアクセスして制御するには、GPU の直接制御を仮想マシンに渡すようにホストシステムを設定する必要があります。
仮想 GPU の割り当て方法の詳細は、NVIDIA vGPU デバイスの管理 を参照してください。
前提条件
ホストマシンカーネルで IOMMU サポートを有効にする必要があります。
Intel ホストでは、VT-d を有効にする必要があります。
intel_iommu=onおよびiommu=ptパラメーターを使用して GRUB 設定を再生成します。# grubby --args="intel_iommu=on iommu_pt" --update-kernel DEFAULT- ホストを再起動します。
AMD ホストでは、AMD-Vi を有効にする必要があります。
AMD ホストでは、IOMMU はデフォルトで有効になっているため、
iommu=ptを追加してパススルーモードに切り替えることができます。iommu=ptパラメーターで GRUB 設定を再生成します。# grubby --args="iommu=pt" --update-kernel DEFAULT注記ptオプションは、パススルーモードで使用されるデバイスにのみ IOMMU を有効にし、ホストパフォーマンスを向上させます。ただし、すべてのハードウェアがこのオプションに対応しているわけではありません。このオプションが有効になっていない場合でも、デバイスを割り当てることは可能です。- ホストを再起動します。
手順
ドライバーが GPU にバインドしないようにします。
GPU の接続先である PCI バスアドレスを特定します。
# lspci -Dnn | grep VGA 0000:02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK106GL [Quadro K4000] [10de:11fa] (rev a1)ホストのグラフィックドライバーが GPU を使用しないようにします。これには、pci-stub ドライバーで GPU の PCI ID を使用します。
たとえば、次のコマンドは、ドライバーが 10de:11fa バスに接続された GPU にバインドされるのを防ぎます。
# grubby --args="pci-stub.ids=10de:11fa" --update-kernel DEFAULT- ホストを再起動します。
オプション: サポートの制限により、オーディオなどの特定の GPU 機能を仮想マシンにパススルーできない場合は、IOMMU グループ内のエンドポイントのドライバーバインディングを変更すると、必要な GPU 機能のみをパススルーできます。
GPU 設定を XML に変換し、ホストドライバーに接続しないようにするエンドポイントの PCI アドレスを書き留めておきます。
これを行うには、アドレスに
pci_接頭辞を追加し、区切り文字をアンダースコアに変換することにより、GPU の PCI バスアドレスを libvirt 互換形式に変換します。たとえば、次のコマンドは、
0000:02:00.0バスアドレスに接続されている GPU の XML 設定を表示します。# virsh nodedev-dumpxml pci_0000_02_00_0<device> <name>pci_0000_02_00_0</name> <path>/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.0</path> <parent>pci_0000_00_03_0</parent> <driver> <name>pci-stub</name> </driver> <capability type='pci'> <domain>0</domain> <bus>2</bus> <slot>0</slot> <function>0</function> <product id='0x11fa'>GK106GL [Quadro K4000]</product> <vendor id='0x10de'>NVIDIA Corporation</vendor> <iommuGroup number='13'> <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/> </iommuGroup> <pci-express> <link validity='cap' port='0' speed='8' width='16'/> <link validity='sta' speed='2.5' width='16'/> </pci-express> </capability> </device>エンドポイントがホストドライバーに接続されないようにします。
この例では、GPU を仮想マシンに割り当て、オーディオ機能である
<address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/>に対応するエンドポイントがホストオーディオドライバーに接続されないようにし、代わりにエンドポイントを VFIO-PCI に接続します。# driverctl set-override 0000:02:00.1 vfio-pci
GPU の仮想マシンへの接続
PCI バスアドレスを使用して GPU 用の XML 設定ファイルを作成します。
たとえば、GPU のバスアドレスからパラメーターを使用して、次の XML ファイル GPU-Assign.xml を作成できます。
<hostdev mode='subsystem' type='pci' managed='yes'> <driver name='vfio'/> <source> <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/> </source> </hostdev>- ホストシステムにファイルを保存します。
ファイルを仮想マシンの XML 設定とマージします。
たとえば、次のコマンドは、GPU XML ファイルの GPU-Assign.xml を、
System1仮想マシンの XML 設定ファイルにマージします。# virsh attach-device System1 --file /home/GPU-Assign.xml --persistent Device attached successfully.注記GPU は、セカンダリーグラフィックスデバイスとして仮想マシンに接続されています。GPU をプライマリーグラフィックスデバイスとして割り当てることには対応していません。Red Hat では、仮想マシンの XML 設定で、エミュレートしているプライマリーグラフィックスデバイスを削除することは推奨しません。
検証
-
デバイスが仮想マシンの XML 設定の
<devices>セクションに表示されます。