17.2.3. NVIDIA vGPU レガシーデバイスのセットアップ
Single Root I/O Virtualization (SR-IOV) に基づくデバイス割り当てをサポートしていない NVIDIA デバイスで NVIDIA vGPU 機能を設定するには、GPU デバイス用の NVIDIA vGPU ドライバーをダウンロードし、仲介デバイスを作成して、それらを目的の仮想マシンに割り当てる必要があります。
最新の vGPU デバイスの場合は、代わりに SR-IOV ベースの vGPU 割り当てを使用してください。手順は、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
ご利用中の GPU は SR-IOV デバイス割り当てをサポートしていません。確認するには、次のコマンドを使用します。
# nvidia-smi -q | grep -i "Host VGPU Mode"SR-IOV と互換性のない GPU の出力:
Host VGPU Mode : Non SR-IOV
手順
- 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) [...]デバイスの 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/> セクションに、以前に生成した UUID とともに、以下の行を追加します。
単一の 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 のドキュメント を参照してください。
次のステップ