16.2. NVIDIA vGPU デバイスの管理
vGPU 機能を使用すると、物理的な NVIDIA GPU デバイスを、仲介デバイス (mediated devices) と呼ばれる複数の仮想デバイスに分割できます。この仲介デバイスは、仮想 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現在のカーネルの初期 RAM ディスクを再生成し、再起動します。
# 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) [...]さらに、Ampere (またはそれ以降の) アーキテクチャーベースの NVIDIA GPU デバイスで vGPU を作成する場合は、物理 GPU に対して Virtual Function が有効になっていることを確認してください。手順は NVIDIA ドキュメント を参照してください。
デバイスの UUID を生成します。
# uuidgen 30820a6f-b1a5-4503-91ca-0c10ba58692a検出された GPU ハードウェアに基づいて、仲介されたデバイスの設定を含む XML ファイルを準備します。たとえば、次の例では、0000:01:00.0 PCI バスで実行され、前の手順で生成された UUID を使用する NVIDIA Tesla P4 カードで
nvidia-63vGPU タイプの仲介デバイスを設定します。<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_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 marked as autostartedvGPU リソースを共有する仮想マシンに仲介デバイスを割り当てます。これを行うには、以下の行を、仮想マシンの XML 設定の <devices/> セクションに追加します。
単一の vGPU を仮想マシンに割り当てるには:
... <video> <model type='none'/> </video> ... <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on' ramfb="on"> <source> <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/> </source> </hostdev>各 UUID は、一度に 1 つの仮想マシンにしか割り当てることができないのでご注意ください。
複数の vGPU を仮想マシンに割り当てるには:
... <video> <model type='none'/> </video> ... <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on' ramfb="on"> <source> <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/> </source> </hostdev> <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'> <source> <address uuid='751c2bd9-3322-4031-ad07-50a0d1367577'/> </source> </hostdev>
- 割り当てられた仮想マシンに 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 10 を使用する場合、使用できる表示プロトコルは Wayland のみです。ただし、Wayland は現在、Nvidia vGPU ゲストドライバーではサポートされていません。そのため、vGPU 上で動作する GNOME デスクトップを起動することはできません。詳細は、NVIDIA vGPU のドキュメント を参照してください。
16.2.2. NVIDIA vGPU デバイスの削除 リンクのコピーリンクがクリップボードにコピーされました!
割り当てられた vGPU 仲介デバイス の設定を変更するには、割り当てられた仮想マシンから既存のデバイスを削除する必要があります。
前提条件
- デバイスを削除する仮想マシンがシャットダウンしている。
手順
削除する仲介デバイスの ID を取得します。
# virsh nodedev-list --cap mdev mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0vGPU 仲介バイスの実行中のインスタンスを停止します。
# 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
16.2.3. システムに関する NVIDIA vGPU 情報の取得 リンクのコピーリンクがクリップボードにコピーされました!
利用可能な vGPU 機能の機能を評価するには、お使いのシステムの仲介デバイスに関する以下のような追加情報を取得してください。
- 特定タイプの仲介デバイスを何個作成できるか
- お使いのシステムに設定済みの仲介デバイスはどれか
手順
vGPU 仲介デバイスをサポートできるホストで使用可能な GPU デバイスを確認するには、
virsh nodedev-list --cap mdev_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>
16.2.4. NVIDIA vGPU のリモートデスクトップストリーミングサービス リンクのコピーリンクがクリップボードにコピーされました!
NVIDIA vGPU または NVIDIA GPU パススルーが有効な RHEL 10 ハイパーバイザーでは、次のリモートデスクトップストリーミングサービスがサポートされています。
- HP ZCentral Remote Boost/Teradici
- NICE DCV
- Mechdyne TGX
サポートの詳細は、適切なベンダーサポートマトリックスを参照してください。