16.2. NVIDIA vGPU デバイスの管理
vGPU 機能により、仲介デバイス
として参照される物理的な NVIDIA GPU デバイスを複数の仮想デバイスに分割できます。この仲介デバイスは、仮想 GPU として複数の仮想マシンに割り当てることができます。これにより、この仮想マシンが、1 つの物理 GPU のパフォーマンスを共有できます。
仲介デバイスの使用にかかわらず、仮想マシンに物理 GPU を割り当てると、ホストが GPU を使用できなくなります。
16.2.1. NVIDIA vGPU デバイスの設定
NVIDIA の vGPU 機能を設定するには、GPU デバイスの NVIDIA vGPU ドライバーをダウンロードして、仲介デバイスを作成し、使用する仮想マシンに割り当てる必要があります。詳細な手順は、以下を参照してください。
前提条件
GPU が vGPU 仲介デバイスをサポートしている。vGPU の作成をサポートする NVIDIA GPU の最新のリストについては、NVIDIA vGPU ソフトウェアのドキュメント を参照してください。
ホストが使用している GPU が分からない場合は、lshw パッケージをインストールして、
lshw -C display
コマンドを使用します。以下の例は、システムが、vGPU と互換性がある NVIDIA Tesla P4 GPU を使用していることを示しています。# lshw -C display *-display description: 3D controller product: GP104GL [Tesla P4] vendor: NVIDIA Corporation physical id: 0 bus info: pci@0000:01:00.0 version: a1 width: 64 bits clock: 33MHz capabilities: pm msi pciexpress cap_list configuration: driver=vfio-pci latency=0 resources: irq:16 memory:f6000000-f6ffffff memory:e0000000-efffffff memory:f0000000-f1ffffff
手順
- NVIDIA vGPU ドライバーをダウンロードして、システムにインストールします。手順は NVIDIA ドキュメント を参照してください。
NVIDIA ソフトウェアのインストーラーで /etc/modprobe.d/nvidia-installer-disable-nouveau.conf ファイルが作成されなかった場合は、/etc/modprobe.d/ に任意の名前で
conf
ファイルを作成し、そのファイルに以下の行を追加します。blacklist nouveau options nouveau modeset=0
現在のカーネル用に初期 ramdisk を再生成してから再起動します。
# dracut --force # reboot
カーネルで
nvidia_vgpu_vfio
モジュールが読み込まれていること、nvidia-vgpu-mgr.service
サービスが実行されていることを確認してください。# lsmod | grep nvidia_vgpu_vfio nvidia_vgpu_vfio 45011 0 nvidia 14333621 10 nvidia_vgpu_vfio mdev 20414 2 vfio_mdev,nvidia_vgpu_vfio vfio 32695 3 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1 # systemctl status nvidia-vgpu-mgr.service nvidia-vgpu-mgr.service - NVIDIA vGPU Manager Daemon Loaded: loaded (/usr/lib/systemd/system/nvidia-vgpu-mgr.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2018-03-16 10:17:36 CET; 5h 8min ago Main PID: 1553 (nvidia-vgpu-mgr) [...]
さらに、NVIDIA Ampere GPU デバイスに基づいて vGPU を作成する場合は、物理 GPU で仮想機能が有効になっていることを確認してください。手順は NVIDIA ドキュメント を参照してください。
デバイスの UUID を生成します。
# uuidgen 30820a6f-b1a5-4503-91ca-0c10ba58692a
検出された GPU ハードウェアに基づいて、仲介されたデバイスの設定を含む XML ファイルを準備します。たとえば、次の例では、0000:01:00.0 PCI バスで実行され、前の手順で生成された UUID を使用する NVIDIA Tesla P4 カードで
nvidia-63
vGPU タイプの仲介デバイスを設定します。<device> <parent>pci_0000_01_00_0</parent> <capability type="mdev"> <type id="nvidia-63"/> <uuid>30820a6f-b1a5-4503-91ca-0c10ba58692a</uuid> </capability> </device>
準備した XML ファイルに基づいて vGPU 仲介デバイスを定義します。以下に例を示します。
# virsh nodedev-define vgpu-test.xml Node device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 created from vgpu-test.xml
オプション: 仲介デバイスが非アクティブとしてリストされていることを確認します。
# virsh nodedev-list --cap mdev --inactive mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
作成した vGPU 仲介デバイスを起動します。
# virsh nodedev-start mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 started
オプション: 仲介デバイスがアクティブとしてリストされていることを確認します。
# virsh nodedev-list --cap mdev mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
ホストの再起動後に自動的に起動するように vGPU デバイスを設定します。
# virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Device mdev_d196754e_d8ed_4f43_bf22_684ed698b08b_0000_9b_00_0 marked as autostarted
vGPU リソースを共有する仮想マシンに仲介デバイスを割り当てます。これを行うには、以下の行を、仮想マシンの XML 設定の <devices/> セクションに追加します。
<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on'> <source> <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/> </source> </hostdev>
各 UUID は、一度に 1 つの仮想マシンにしか割り当てることができないのでご注意ください。さらに、仮想マシンに
virtio-vga
などの QEMU ビデオデバイスがない場合は、<hostdev>
行にramfb='on'
パラメーターも追加します。- 割り当てられた仮想マシンに vGPU 仲介デバイスの全機能が提供されるように、これらの仮想マシンに NVIDIA vGPU ゲストソフトウェアのライセンスを設定します。詳細および手順は、NVIDIA の仮想 GPU ソフトウェアのライセンスサーバーユーザーガイド を参照してください。
検証
作成した vGPU の機能をクエリーし、アクティブで永続的な機能としてリストされていることを確認します。
# virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Name: virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Parent: pci_0000_01_00_0 Active: yes Persistent: yes Autostart: yes
仮想マシンを起動し、ゲストオペレーティングシステムが仲介デバイスを NVIDIA GPU として検出することを確認します。たとえば、仮想マシンが Linux を使用している場合は、以下のとおりとなります。
# lspci -d 10de: -k 07:00.0 VGA compatible controller: NVIDIA Corporation GV100GL [Tesla V100 SXM2 32GB] (rev a1) Subsystem: NVIDIA Corporation Device 12ce Kernel driver in use: nvidia Kernel modules: nouveau, nvidia_drm, nvidia
既知の問題
- 現在 RHEL 9 ゲストオペレーティングシステムを使用している仮想マシンに NVIDIA vGPU 仲介デバイスを割り当てると、その仮想マシンで Wayland セッションが無効になり、代わりに Xorg セッションが読み込まれます。これは、NVIDIA ドライバーと Wayland の間の非互換性が原因です。
関連情報
- NVIDIA vGPU ソフトウェアのドキュメント
-
man virsh
コマンド
16.2.2. NVIDIA vGPU デバイスの削除
割り当てられた vGPU 仲介デバイス の設定を変更する場合は、割り当てられた仮想マシンから既存のデバイスを削除する必要があります。手順は、以下を参照してください。
前提条件
- デバイスを削除する仮想マシンがシャットダウンしている。
手順
削除する仲介デバイスの ID を取得します。
# virsh nodedev-list --cap mdev mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
vGPU 仲介バイスの実行中のインスタンスを停止します。
# virsh nodedev-destroy mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Destroyed node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'
オプション: 仲介デバイスが非アクティブであることを確認します。
# virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Name: virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Parent: pci_0000_01_00_0 Active: no Persistent: yes Autostart: yes
仮想マシンの XML 設定からデバイスを削除します。これには、
virsh edit
ユーティリティーを使用して仮想マシンの XML 設定を編集し、mdev の設定セグメントを削除します。このセグメントは、以下のようになります。<hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'> <source> <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/> </source> </hostdev>
仲介デバイスを停止してデタッチしても、このデバイスは削除されずに 定義された とおりに保持されるのでご注意ください。したがって、デバイスを 再起動 して、別の仮想マシンに 割り当てる ことができます。
オプション: 停止した仲介デバイスを削除するには、デバイスの定義を削除します。
# virsh nodedev-undefine mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 Undefined node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'
検証
デバイスを停止して切り離しただけの場合は、仲介デバイスが非アクティブとしてリストされていることを確認してください。
# virsh nodedev-list --cap mdev --inactive mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
デバイスも削除した場合は、次のコマンドでデバイスが表示されないことを確認してください。
# virsh nodedev-list --cap mdev
関連情報
-
man virsh
コマンド
16.2.3. システムに関する NVIDIA vGPU 情報の取得
利用可能な vGPU 機能の機能を評価するには、お使いのシステムの仲介デバイスに関する以下のような追加情報を取得してください。
- 特定タイプの仲介デバイスを何個作成できるか
- お使いのシステムに設定済みの仲介デバイスはどれか
手順
vGPU 仲介デバイスをサポートできるホストで使用可能な GPU デバイスを確認するには、
virsh nodedev-list--capmdev_types
コマンドを使用します。たとえば、以下は 2 つの NVIDIA Quadro RTX6000 デバイスを備えたシステムを示しています。# virsh nodedev-list --cap mdev_types pci_0000_5b_00_0 pci_0000_9b_00_0
特定の GPU デバイスでサポートされている vGPU タイプと追加のメタデータを表示するには、
virsh nodedev-dumpxml
コマンドを使用します。# virsh nodedev-dumpxml pci_0000_9b_00_0 <device> <name>pci_0000_9b_00_0</name> <path>/sys/devices/pci0000:9a/0000:9a:00.0/0000:9b:00.0</path> <parent>pci_0000_9a_00_0</parent> <driver> <name>nvidia</name> </driver> <capability type='pci'> <class>0x030000</class> <domain>0</domain> <bus>155</bus> <slot>0</slot> <function>0</function> <product id='0x1e30'>TU102GL [Quadro RTX 6000/8000]</product> <vendor id='0x10de'>NVIDIA Corporation</vendor> <capability type='mdev_types'> <type id='nvidia-346'> <name>GRID RTX6000-12C</name> <deviceAPI>vfio-pci</deviceAPI> <availableInstances>2</availableInstances> </type> <type id='nvidia-439'> <name>GRID RTX6000-3A</name> <deviceAPI>vfio-pci</deviceAPI> <availableInstances>8</availableInstances> </type> [...] <type id='nvidia-440'> <name>GRID RTX6000-4A</name> <deviceAPI>vfio-pci</deviceAPI> <availableInstances>6</availableInstances> </type> <type id='nvidia-261'> <name>GRID RTX6000-8Q</name> <deviceAPI>vfio-pci</deviceAPI> <availableInstances>3</availableInstances> </type> </capability> <iommuGroup number='216'> <address domain='0x0000' bus='0x9b' slot='0x00' function='0x3'/> <address domain='0x0000' bus='0x9b' slot='0x00' function='0x1'/> <address domain='0x0000' bus='0x9b' slot='0x00' function='0x2'/> <address domain='0x0000' bus='0x9b' slot='0x00' function='0x0'/> </iommuGroup> <numa node='2'/> <pci-express> <link validity='cap' port='0' speed='8' width='16'/> <link validity='sta' speed='2.5' width='8'/> </pci-express> </capability> </device>
関連情報
-
man virsh
コマンド
16.2.4. NVIDIA vGPU のリモートデスクトップストリーミングサービス
次のリモートデスクトップストリーミングサービスは、NVIDIA vGPU または NVIDIA GPU パススルーが有効になっている RHEL 9 ハイパーバイザーでサポートされています。
- HP ZCentral Remote Boost/Teradici
- NICE DCV
- Mechdyne TGX
サポートの詳細については、適切なベンダーサポートマトリックスを参照してください。