Red Hat Virtualization での仮想マシン用の NVIDIA GPU の設定

Red Hat Virtualization 4.4

専用の GPU または仮想 GPU を使用するように、Red Hat Virtualization の仮想マシンを設定する方法

概要

本書では、グラフィックス処理ユニット(GPU)を持つホストを使用して、Red Hat Virtualization で仮想マシンを実行する方法を説明します。これにより、GPU なしで実行できないグラフィックス集中的なタスクやソフトウェアも実行できるようになります。

前書き

{virt-product-fullname} :context: assembly_managing-vgpu-devices :context: GPU_setup_on_vm_standalone_doc :GPU_setup_on_vm_standalone_doc で仮想マシンの NVIDIA GPU の設定:GPU_setup_on_vm_standalone_doc:

互換性のあるグラフィックスプロセッシングユニット(GPU)を備えたホストを使用して、グラフィック集中型タスクや、CAD などの GPU なしで実行できないソフトウェアを実行する {virt-product-fullname} で仮想マシンを実行できます。

以下のいずれかの方法で、GPU を仮想マシンに割り当てることができます。

  • GPU パススルー: ホスト GPU を 1 つの仮想マシンに割り当て、ホストではなく仮想マシンには GPU を使用することができます。
  • 仮想 GPU(vGPU) - 仲介デバイス として参照される物理 GPU デバイスを 1 つ以上の仮想デバイスに分割できます。その後、この仲介デバイスを仮想 GPU として 1 つまたは複数の仮想マシンに割り当てることができます。これらの仮想マシンは、単一の物理 GPU のパフォーマンスを共有します。GPU によっては、仲介デバイスを 1 つのゲストに割り当てることができます。仮想 GPU のサポートは選択した NVIDIA GPU でのみ利用できます。

    たとえば、以下のようになります。

    ホストには 4 つの GPU があります。各 GPU は、合計 64 の仮想 GPU に対して、最大 16 個の仮想 GPU をサポートできます。可能な仮想 GPU の割り当ては以下のとおりです。

    • 64 vGPU を持つ 1 台の仮想マシン
    • 64 仮想マシン(各仮想 GPU が 1 つ含まれる)
    • 32 仮想マシン、それぞれ 1 つの仮想 GPU、それぞれが 2 つの仮想 GPU、それぞれ 4 つの仮想 GPU を備えた 8 つの仮想マシン

第1章 GPU デバイスパススルー: ホスト GPU の単一仮想マシンへの割り当て

Red Hat Virtualization は、VGA 以外のグラフィックデバイスとして一部の NVIDIA PCIe ベースの GPU デバイスについて、デバイスパススルーとも呼ばれる PCI VFIO をサポートします。

標準的なエミュレートされたグラフィックスインターフェースの 1 つに加えて、ホスト GPU を仮想マシンに渡すことで、1 つ以上のホスト GPU を 1 つの仮想マシンに割り当てることができます。仮想マシンは、起動およびインストールにエミュレートされたグラフィックスデバイスを使用し、グラフィックドライバーが読み込まれると GPU が制御します。

単一の仮想マシンにパススルーできるホスト GPU の正確な数については、NVIDIA の Web サイトを参照してください。

GPU を仮想マシンに割り当てるには、以下の手順を行います。

これらの手順を以下に示します。

前提条件

  • GPU デバイスが GPU パススルーモードをサポートしている。
  • システムが検証されたサーバーハードウェアプラットフォームとして一覧表示されます。
  • ホストチップセットが Intel VT-d または AMD-Vi をサポートしている。

対応しているハードウェアおよびソフトウェアの詳細は、『 NVIDIA GPU Software Release Notes』の「Validated Platforms 」を参照してください

1.1. ホスト IOMMU のサポートの有効化および nouveau のブラックリスト化

仮想マシンでの I/O メモリー管理ユニット(IOMMU)への対応は、仮想マシンで GPU を使用する必要があります。

手順

  1. 管理ポータルで menu:Compute[Hosts] をクリックします。ホストを選択し、btn:[Edit] をクリックします。ホストの編集 ペインが表示されます
  2. カーネル タブをクリックします。
  3. Hostdev Passthrough & SR-IOV チェックボックスにチェックを入れます。このチェックボックスでは、intel_iommu=on または amd _iommu=on をカーネルコマンドラインに追加して、Intel VT-d または AMD Vi を使用するホストの IOMMU サポートを有効にします。
  4. Blacklist Nouveau チェックボックスにチェックを入れます。
  5. btn:[OK] をクリックします。
  6. ホストを選択し、menu:Management[Maintenance] および btn:[OK] をクリックします。
  7. メニュー: Installation[Reinstall] をクリックします。
  8. 再インストールが完了したら、ホストマシンを再起動します。
  9. ホストマシンを再起動したら、Menu:Management[Activate] をクリックします。
注記

コマンドラインを使用して IOMMU サポートを有効にするには、仮想マシンの grub.conf ファイル(. /entries/rhvh-4.4.<machine id>.conf)を編集し、オプション intel_iommu=on を追加します。

1.2. ホストから GPU をデタッチ

GPU がホストカーネルドライバーにバインドされる場合は、GPU を仮想マシンに追加することはできません。そのため、これを仮想マシンに追加する前にホストから GPU デバイスのバインドを解除する必要があります。ホストドライバーは、GPU の動的なバインドをサポートしていないことが多いため、ホストドライバーにバインドするデバイスを手動で除外することを推奨します。

手順

  1. ホストで lspci コマンドを実行して、デバイスのデバイススロット名および ID を特定します。以下の例では、NVIDIA Quadro または GRID カードなどのグラフィックコントローラーが使用されています。

    # lspci -Dnn | grep -i NVIDIA
    0000:03:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK104GL [Quadro K4200] [10de:11b4] (rev a1)
    0000:03:00.1 Audio device [0403]: NVIDIA Corporation GK104 HDMI Audio Controller [10de:0e0a] (rev a1)

    この出力は、NVIDIA GK104 デバイスがインストールされていることを示しています。グラフィックコントローラーと、以下のプロパティーを持つオーディオコントローラーがあります。

    • グラフィックコントローラーのデバイススロット名は 0000:03:00.0 で、グラフィックコントローラーの vendor-id:device-id は 10de:11b4 です。
    • 音声コントローラーのデバイススロット名は 0000:03:00.1 で、音声コントローラーの vendor-id:device-id は 10de:0e0a です。
  2. ホストマシンのドライバーが GPU デバイスを使用しないようにします。pci-stub ドライバーで vendor-id:device-id を使用できます。これを実行するには、pci-stub.ids オプションを値として、/etc/sysconfig/grub 設定ファイルにある GRUB_CMDLINX_LINUX 環境変数に追加します。以下に例を示します。

    GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/vg0-lv_swap rd.lvm.lv=vg0/lv_root rd.lvm.lv=vg0/lv_swap rhgb quiet intel_iommu=on pci-stub.ids=10de:11b4,10de:0e0a"

    pci-stub 用に追加のベンダー ID およびデバイス ID を追加する場合は、コンマで区切ります。

  3. grub2-mkconfig を使用してブートローダー設定を再生成するには、このオプションを追加します。

    # grub2-mkconfig -o /etc/grub2.cfg
    注記

    UEFI ベースのホストを使用する場合、ターゲットファイルは /etc/grub2-efi.cfg である必要があります。

  4. ホストマシンを再起動します。
  5. IOMMU が有効にされており、ホストデバイスが pci-stub.ids の一覧に追加され、Nouveau がブラックリストに指定されていることを確認します。

    # cat /proc/cmdline
    BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-147.el8.x86_64 root=/dev/mapper/vg0-lv_root ro crashkernel=auto resume=/dev/mapper/vg0-lv_swap rd.lvm.lv=vg0/lv_root rd.lvm.lv=vg0/lv_swap rhgb quiet intel_iommu=on 1
    pci-stub.ids=10de:11b4,10de:0e0a 2
    rdblacklist=nouveau 3
1
IOMMU が有効にされている。
2
ホストデバイスが pci-stub.ids の一覧に追加されます。
3
nouveau はブラックリストに登録されています

1.3. GPU の仮想マシンへの割り当て

ホストカーネルドライバーから GPU のバインドを解除した後に、これを仮想マシンに追加し、適切なドライバーを有効にすることができます。

手順

  1. Virtual Machine Management Guide』の「Adding a Host Device to a Virtual Machine 」の手順に従います。
  2. 仮想マシンを実行し、これにログインします。
  3. 仮想マシンに NVIDIA GPU ドライバーをインストールします。詳細は 「仮想マシンへの GPU ドライバーのインストール」 を参照してください。
  4. lspci -nnk コマンドで GPU に正しいカーネルドライバーが使用されていることを確認します。以下に例を示します。

    # lspci -nnk
    00:07.0 VGA compatible controller [0300]: NVIDIA Corporation GK104GL [Quadro K4200] [10de:11b4] (rev a1)
    Subsystem: Hewlett-Packard Company Device [103c:1096]
    Kernel driver in use: nvidia
    Kernel modules: nouveau, nvidia_drm, nvidia

1.4. 仮想マシンへの GPU ドライバーのインストール

手順

  1. 仮想マシンを実行し、VNC または SPICE コンソールを使用して接続します。
  2. ドライバーを仮想マシンにダウンロードします。このドライバーを取得する方法は、NVIDIA の Web サイトの「ドライバー」ページを参照してください
  3. GPU ドライバーをインストールします。

    重要

    Linux のみ: Linux ゲストオペレーティングシステムにドライバーをインストールする場合、xorg.conf の更新を求めるプロンプトが出されます。インストール時に xorg.conf を更新しない場合は、手動で更新する必要があります。詳細は、「xorg(Linux 仮想マシン)の更新および有効化」 を参照してください。

  4. ドライバーのインストールが完了したら、マシンを再起動します。Windows 仮想マシンの場合は、 ゲストオペレーティングシステム内からではなく、管理ポータルまたは VM ポータルから完全に電源をオフにします。

    重要

    Windows のみ: Windows ゲストオペレーティングシステム内からの仮想マシンの電源をオフにすると、仮想マシンをハイバネートモードに送信することがあります。これにより、メモリーが完全にクリアされ、その後の問題につながる可能性もあります。管理ポータルまたは VM ポータルを使用して、仮想マシンの電源をオフにすると、メモリーが完全にクリーニングされます。

  5. モニターをホストの GPU 出力インターフェースに接続し、仮想マシンを実行します。
  6. 各仮想 GPU に NVIDIA のゲストソフトウェアライセンスを設定し、NVIDIA コントロールパネルにライセンス認証情報を追加します。詳細は、NVIDIA Virtual GPU ソフトウェアのドキュメント の「How NVIDIA vGPU Software Licensing Is Enforced 」を参照してください

1.5. xorg(Linux 仮想マシン)の更新および有効化

仮想マシンで GPU を使用する前に、仮想マシンで xorg を更新し、有効にする必要があります。NVIDIA ドライバーのインストールは自動的にこれを行います。/etc/X11/xorg.conf を参照して、xorg が更新されたかどうかを確認してください。

# cat /etc/X11/xorg.conf

最初の 2 つの行は、NVIDIA によって生成されたかどうかを示します。以下に例を示します。

# cat /etc/X11/xorg.conf
# nvidia-xconfig: X configuration file generated by nvidia-xconfig
# nvidia-xconfig: version 390.87 (buildmeister@swio-display-x64-rhel04-14) Tue Aug 21 17:33:38 PDT 2018

手順

  1. 仮想マシンで、以下のコマンドを使用して xorg.conf ファイルを生成します。

    # X -configure
  2. 以下のコマンドを使用して、xorg.conf ファイルを /etc/X11/xorg.conf にコピーします。

    # cp /root/xorg.conf.new /etc/X11/xorg.conf
  3. 仮想マシンを再起動します。
  4. /etc/X11/xorg.conf を参照して、xorg が更新および有効になっていることを確認します。

    # cat /etc/X11/xorg.conf

    Device セクションを検索します。以下のセクションと同様のエントリーが表示されるはずです。

    Section "Device"
        Identifier     "Device0"
        Driver         "nvidia"
        VendorName     "NVIDIA Corporation"
    EndSection

これで、GPU が仮想マシンに割り当てられます。

第2章 仮想 GPU の割り当て

NVIDIA vGPU デバイスを設定するには、以下を行う必要があります。

  1. GPU デバイスの正しい NVIDIA vGPU ドライバーの取得およびインストール
  2. 仲介デバイスの作成
  3. 各仲介デバイスを仮想マシンに割り当てます。
  4. 各仮想マシンにゲストドライバーをインストールします。

以下の手順では、このプロセスについて説明します。

2.1. ホストへの NVIDIA vGPU デバイスの設定

注記

ゲストオペレーティングシステムに NVIDIA vGPU ドライバーをインストールする前に、ライセンス要件を理解して、適切なライセンス認証情報を取得する必要があります。

前提条件

  • GPU デバイスが仮想 GPU(vGPU)機能をサポートしている。
  • システムが検証されたサーバーハードウェアプラットフォームとして一覧表示されます。

サポートされる GPU および検証されたプラットフォームについての詳細は、www.nvidia.com の NVIDIA vGPU CERTIFIED SERVERS を参照してください。

手順

  1. ホストの NVIDIA ドライバーをダウンロードしてインストールします。このドライバーを取得する方法は、NVIDIA の Web サイトの「ドライバー」ページを参照してください
  2. NVIDIA ソフトウェアのインストーラーが /etc/modprobe.d/nvidia-installer-disable-nouveau.conf ファイルを作成しなかった場合は、手動で作成します。
  3. テキストエディターで /etc/modprobe.d/nvidia-installer-disable-nouveau.conf ファイルを開き、以下の行をファイルの最後に追加します。

    blacklist nouveau
    options nouveau modeset=0
  4. 現在のカーネル用に初期 ramdisk を再生成します。続いて再起動します。

    # dracut --force
    # reboot

    または、仲介デバイスで対応するカーネルバージョンを使用する必要がある場合は、インストールしたすべてのカーネルバージョンに対して初期 ramdisk を再生成します。

    # dracut --regenerate-all --force
    # reboot
  5. カーネルにより、nvidia_vgpu_vfio モジュールが読み込まれ ていることを確認します。

    # lsmod | grep nvidia_vgpu_vfio
  6. nvidia-vgpu-mgr.service サービスが実行中であることを確認します。

    # systemctl status 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)
     [...]
  7. ターミナルに次の行を入力するか、スクリプトに以下の行を入力して、利用可能な mdev タイプの一覧を取得します。

    for device in /sys/class/mdev_bus/; do for mdev_type in $device/mdev_supported_types/; do
        MDEV_TYPE=$(basename $mdev_type)
        DESCRIPTION=$(cat $mdev_type/description)
        NAME=$(cat $mdev_type/name)
        echo "mdev_type: $MDEV_TYPE --- description: $DESCRIPTION --- name: $NAME";
      done;
    done | sort | uniq
    注記

    特定の GPU デバイスの type-id の値は、Virtual GPU ソフトウェアのドキュメント の「Virtual GPU Types」を参照してください。Linux 仮想マシンでは、GRID P4-2Q などの Q シリーズ NVIDIA vGPU のみが、仲介デバイス GPU タイプとして対応していることに注意してください。

    出力は以下のようになります。

    mdev_type: nvidia-11 --- description: num_heads=2, frl_config=45, framebuffer=512M, max_resolution=2560x1600, max_instance=16 --- name: GRID M60-0B
    mdev_type: nvidia-12 --- description: num_heads=2, frl_config=60, framebuffer=512M, max_resolution=2560x1600, max_instance=16 --- name: GRID M60-0Q
    ...
    mdev_type: nvidia-22 --- description: num_heads=4, frl_config=60, framebuffer=8192M, max_resolution=4096x2160, max_instance=1 --- name: GRID M60-8Q
  8. 管理ポータルで menu:Compute[Virtual Machines] をクリックします。仮想マシンを選択し、btn:[Edit] をクリックします。仮想マシンの編集 ダイアログが表示されます。
  9. Custom Properties をクリックします。カスタムプロパティー が表示されない場合は、最初に Show Advanced Options をクリックします。
  10. カスタムプロパティー ダイアログで、メニュー: キー[mdev_type] を選択してください。Please select a key が表示されない場合は、btn:[+] ボタンをクリックします。
  11. 表示されるテキストフィールドで、以下の項目を指定します。

    1. 前のステップで特定した GPU タイプまたはタイプ。例: nvidia-12コンマ区切りリストを使用して、複数の仮想 GPU を仮想マシンに追加できます。例: nvidia22、nvidia22

      注記

      複数の vGPU は、同じ mdev タイプである必要があります。nvidia22、nvidia15 などを使用することはできません。

    2. nodisplay オプションにより、コンソールが常に仮想マシンで利用可能であることを確認します。たとえば、nodisplay、nvidia22 などがあります。このオプションは、仮想 GPU に加えて、コンソールのプライマリーグラフィックスアダプターとして 2 つエミュレートされた QXL または VGA グラフィックスアダプターを追加します。

ホストへの GPU のインストールおよび設定が完了したら、各仮想マシンに仮想 GPU のインストールと設定に進むことができます。

2.2. 仮想マシンへの仮想 GPU ドライバーのインストール

手順

  1. 仮想マシンを実行し、VNC コンソールを使用して仮想マシンに接続します。

    注記

    SPICE は仮想 GPU ではサポートされていません。

  2. ドライバーを仮想マシンにダウンロードします。このドライバーを取得する方法は、NVIDIA の Web サイトの「ドライバー」ページを参照してください
  3. NVIDIA Virtual GPU ソフトウェアドキュメントの「 NVIDIA vGPU Software Graphics Driver のインストール 」の手順に従って、仮想 GPU ドライバーをインストールします。

    重要

    Linux のみ: Linux ゲストオペレーティングシステムにドライバーをインストールする場合、xorg.conf の更新を求めるプロンプトが出されます。インストール時に xorg.conf を更新しない場合は、手動で更新する必要があります。詳細は、「xorg(Linux 仮想マシン)の更新および有効化」 を参照してください。

  4. ドライバーのインストールが完了したら、マシンを再起動します。Windows 仮想マシンの場合は、 ゲストオペレーティングシステム内からではなく、管理ポータルまたは VM ポータルから完全に電源をオフにします。

    重要

    Windows のみ: Windows ゲストオペレーティングシステム内からの仮想マシンの電源をオフにすると、仮想マシンをハイバネートモードに送信することがあります。これにより、メモリーが完全にクリアされ、その後の問題につながる可能性もあります。管理ポータルまたは VM ポータルを使用して、仮想マシンの電源をオフにすると、メモリーが完全にクリーニングされます。

  5. 仮想マシンを実行し、M Mechdyne TGX などのサポートされているリモートデスクトッププロトコルのいずれかを使用して接続し、NVIDIA 制御パネルを開いて仮想 GPU が認識されることを確認します。Windows で、Windows デバイスマネージャーを開くこともできます。vGPU は Display アダプターの下に表示され ます。詳細は、NVIDIA Virtual GPU ソフトウェアのドキュメント の NVIDIA vGPU Software Graphics Driver を参照してください
  6. 各仮想 GPU に NVIDIA のゲストソフトウェアライセンスを設定し、NVIDIA コントロールパネルにライセンス認証情報を追加します。詳細は、NVIDIA Virtual GPU ソフトウェアのドキュメント の「How NVIDIA vGPU Software Licensing Is Enforced 」を参照してください

2.3. NVIDIA vGPU デバイスの削除

割り当てられた vGPU 仲介デバイス の設定を変更する場合は、割り当てられたゲストから既存のデバイスを削除する必要があります。

手順

  1. 管理ポータルから menu:Compute[Virtual Machines] をクリックします。
  2. 仮想マシンを右クリックし、Power off をクリックします。
  3. 仮想マシンの電源がオフになった後に、仮想マシンを選択して Edit をクリックします。Edit Virtual Machine ウィンドウが開きます。
  4. Custom Properties タブで、mdev タイプの横にある minus btn:[-] ボタンをクリックして、btn:[OK] をクリックします。

2.4. NVIDIA vGPU の監視

NVIDIA vGPUS の場合は、物理 GPU および vGPU で情報を取得するには、ホストで nvidia-smi コマンドを入力して、NVIDIA System Management Interface を使用できます。詳細は、NVIDIA Virtual GPU ソフトウェアのドキュメント の NVIDIA System Management Interface nvidia-smi を参照してください

以下に例を示します。

# nvidia-smi
Thu Nov  1 17:40:09 2018
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.62                 Driver Version: 410.62                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla M60           On   | 00000000:84:00.0 Off |                  Off |
| N/A   40C    P8    24W / 150W |   1034MiB /  8191MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   1  Tesla M60           On   | 00000000:85:00.0 Off |                  Off |
| N/A   33C    P8    23W / 150W |   8146MiB /  8191MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   2  Tesla M60           On   | 00000000:8B:00.0 Off |                  Off |
| N/A   34C    P8    24W / 150W |   8146MiB /  8191MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+
|   3  Tesla M60           On   | 00000000:8C:00.0 Off |                  Off |
| N/A   45C    P8    24W / 150W |     18MiB /  8191MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
|    0     34432    C+G   vgpu                                         508MiB |
|    0     34718    C+G   vgpu                                         508MiB |
|    1     35032    C+G   vgpu                                        8128MiB |
|    2     35032    C+G   vgpu                                        8128MiB |
+-----------------------------------------------------------------------------+

2.5. NVIDIA vGPU のリモートデスクトップのストリーミングサービス

以下のリモートデスクトップのストリーミングサービスは、RHEL 8 の NVIDIA vGPU 機能で使用するために正常にテストされています。

  • HP-RGS
  • Mechdyne TGX - 現在、Windows Server 2016 ゲストで Mechdyne TGX を使用することはできません。
  • NICE DCV - このストリーミングサービスを使用する場合は、動的な解決方法を使用するとブラック画面が発生する可能性があるため、固定された解決設定を使用します。