Red Hat Virtualization での仮想マシン用 NVIDIA GPU のセットアップ

Red Hat Virtualization 4.3

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

概要

このドキュメントでは、Red Hat Virtualization で、GPU なしでは実行できないグラフィックスを多用するタスクやソフトウェアに対して、グラフィックスプロセッシングユニット (GPU) を備えたホストを使用して仮想マシンを実行する方法について説明します。

はじめに

Red Hat Virtualization では、互換性のあるグラフィックスプロセッシングユニット (GPU) を備えたホストを使用して、グラフィックスを多用するタスクや、CAD などの GPU なしでは実行できないソフトウェアの実行に適した仮想マシンを実行できます。

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

  • GPU パススルー: ホスト GPU を単一の仮想マシンに割り当てることができるため、ホストではなく仮想マシンが GPU を使用します。
  • 仮想 GPU (vGPU): 物理 GPU デバイスを 1 つ以上の仮想デバイス (仲介デバイスと呼ばれる) に分割できます。次に、これらの仲介デバイスを仮想 GPU として 1 台以上の仮想マシンに割り当てることができます。これらの仮想マシンは、単一の物理 GPU のパフォーマンスを共有します。一部の GPU では、1 つのゲストに割り当てることができる仲介デバイスは 1 つだけです。vGPU のサポートは、選択した NVIDIA GPU でのみ対応しています。

    以下に例を示します。

    ホストには 4 個の GPU があります。GPU ごとに最大 16 個の vGPU、合計 64 個の vGPU をサポートできます。考えられる vGPU の割り当ては次のとおりです。

    • 64 個の vGPU を備えた 1 台の仮想マシン
    • それぞれ 1 個の vGPU を備えた 64 台の仮想マシン
    • それぞれ 1 個の vGPU を備えた 32 台の仮想マシン、それぞれ 2 個の vGPU を備えた 8 台の仮想マシン、それぞれ 4 個の vGPU を備えた 4 台の仮想マシン

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

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

標準のエミュレートされたグラフィックスインターフェイスの 1 つに加え、ホスト GPU を経由して仮想マシンに渡すことにより、1 つ以上のホスト GPU を単一の仮想マシンにアタッチできます。仮想マシンは、エミュレートされたグラフィックスデバイスを起動とインストールに使用し、GPU はグラフィックスドライバーがロードされるときに制御を引き継ぎます。

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

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

その手順は以下のとおりです。

前提条件

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

サポートされているハードウェアとソフトウェアの詳細については、NVIDIA GPU ソフトウェアリリースノートValidated Platforms を参照してください。

1.1. ホスト IOMMU サポートの有効化と nouveau のブラックリストへの登録

仮想マシンで GPU を使用するには、ホストマシンで I/O メモリー管理ユニット (IOMMU) がサポートされている必要があります。

手順

  1. 管理ポータルで コンピュートホスト をクリックします。ホストを選択し、Edit をクリックします。Edit Hosts ペインが表示されます。
  2. Kernel タブをクリックします。
  3. Hostdev Passthrough & SR-IOV チェックボックスをオンにします。このチェックボックスは、カーネルコマンドラインに intel_iommu=on または amd_iommu=on を追加することにより、Intel VT-d または AMD Vi を搭載したホストの IOMMU サポートを有効にします。
  4. Blacklist Nouveau チェックボックスをオンにします。
  5. OK をクリックします。
  6. ホストを選択し、管理メンテナーンス をクリックします。
  7. InstallationReinstall をクリックします。
  8. 再インストールが完了したら、ホストマシンを再起動します。
  9. ホストマシンが再起動したら、ManagementActivate をクリックします。

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 を使用できます。これには、vendor-id:device-id を値として、/etc/sysconfig/grub 設定ファイルにある GRUB_CMDLINX_LINUX 環境変数に pci-stub.ids オプションを追加します。以下はその例です。

    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 とホストカーネルドライバーのバインドを解除した後、GPU を仮想マシンに追加して、正しいドライバーを有効にできます。

手順

  1. Virtual Machine Management GuideAdding 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. 仮想マシンを実行し、SPICE または VNC などのシリアルコンソールを使用して仮想マシンに接続します。
  2. ドライバーを仮想マシンにダウンロードします。ドライバーの入手方法については、NVIDIA Web サイトのドライバーページ を参照してください。
  3. GPU ドライバーをインストールします。

    重要

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

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

    重要

    Windows のみ: Windows ゲストオペレーティングシステム内から仮想マシンの電源をオフにすると、仮想マシンがハイパーネートモードになることがあります。その場合、メモリーは完全にクリアされず、その後の問題が発生する可能性があります。管理ポータルまたは VM ポータルを使用して仮想マシンの電源をオフにすると、仮想マシンは強制的にメモリーを完全にクリーンアップします。

  5. モニターをホスト GPU 出力インターフェイスに接続し、仮想マシンを実行します。
  6. 各 vGPU に NVIDIA vGPU ゲストソフトウェアライセンスを設定し、NVIDIA コントロールパネルにライセンス認証情報を追加します。詳細については、NVIDIA 仮想 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 値については、仮想 GPU ソフトウェアのドキュメント の 仮想 GPU タイプを参照してください。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. 管理ポータルで コンピュート仮想マシン をクリックします。仮想マシンを選択し、Edit をクリックします。Edit Virtual Machine ダイアログが表示されます。
  9. Custom Properties をクリックします。Custom Properties が表示されない場合は、最初に Show Advanced Options をクリックします。
  10. Custom Properties ダイアログで、Please select a keymdev_type をクリックします。Please select a key が表示されない場合は、+ ボタンをクリックします。
  11. 表示されるテキストフィールドに、GPU タイプまたは前に識別したタイプを入力します。例: nvidia-12。コンマ区切りのリストを使用して、仮想マシンに複数の vGPU を追加できます。例: nvidia22,nvidia22

    注記

    複数の vGPU は同じ mdev タイプである必要があります。たとえば、nvidia22,nvidia15 は使用できません。

これで、ホストへの GPU のインストールと設定が完了しました。次に、各仮想マシンで vGPU のインストールと設定を行います。

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

手順

  1. 仮想マシンを実行し、SPICE または VNC などのシリアルコンソールを使用して仮想マシンに接続します。
  2. ドライバーを仮想マシンにダウンロードします。ドライバーの入手方法については、NVIDIA Web サイトのドライバーページ を参照してください。
  3. NVIDIA 仮想 GPU ソフトウェアドキュメントnstalling the NVIDIA vGPU Software Graphics Driver の手順に従って、vGPU ドライバーをインストールします。

    重要

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

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

    重要

    Windows のみ: Windows ゲストオペレーティングシステム内から仮想マシンの電源をオフにすると、仮想マシンがハイパーネートモードになることがあります。その場合、メモリーは完全にクリアされず、その後の問題が発生する可能性があります。管理ポータルまたは VM ポータルを使用して仮想マシンの電源をオフにすると、仮想マシンは強制的にメモリーを完全にクリーンアップします。

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

2.3. NVIDIA vGPU デバイスの削除

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

手順

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

2.4. NVIDIA vGPU のモニターリング

NVIDIA vGPUS の場合、物理 GPU と vGPU に関する情報を取得するには、ホストで nvidia-smi コマンドを入力して NVIDIA システム管理インターフェイスを使用できます。詳細については、NVIDIA 仮想 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 - このストリーミングサービスを使用する場合は、解像度を動的にすると、場合によっては画面が黒くなるため、Red Hat は解像度を固定する設定を使用することを推奨します。
注記

SPICE はサポートされていません。