Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

16.7. GPU デバイスの割り当て

GPU をゲストに割り当てるには、以下のいずれかの方法を使用します。
  • GPU PCI デバイス割り当て: この方法を使用すると、ホストから GPU デバイスを削除して、1 つのゲストに割り当てることができます。
  • NVIDIA vGPU 割り当て - この方法では、物理 GPU から複数の 仲介デバイス を作成し、これらのデバイスを仮想 GPU として複数のゲストに割り当てることができます。これは選択した NVIDIA GPU でのみ対応しており、このデバイスは 1 つのゲストにしか割り当てることができません。

16.7.1. GPU PCI デバイス割り当て

Red Hat Enterprise Linux 7 では、以下の PCIe ベースの GPU デバイスを VGA 以外のグラフィックデバイスとして、PCI デバイスの割り当てをサポートします。
  • NVIDIA Quadro K-Series、M-Series、P-Series、およびそれ以降のアーキテクチャー(モデル 2000 シリーズ以降)
  • NVIDIA Tesla K-Series、M-Series、およびそれ以降のアーキテクチャー
現在、標準のエミュレーションされた VGA インターフェースの 1 つに加えて、仮想マシンには最大 2 つの GPU をアタッチすることができます。エミュレーションされた VGA は、起動前やインストールに使用され、NVIDIA グラフィックドライバーが読み込まれると NVIDIA GPU に引き継ぎます。
GPU をゲスト仮想マシンに割り当てるには、ホストマシンで I/O Memory Management Unit(IOMMU)を有効にし、lspci コマンドを使用して GPU デバイスを特定し、ホストからゲストに割り当て、ゲストに Xorg を設定する必要があります。

手順16.13 ホストマシンカーネルでの IOMMU サポートの有効化

  1. カーネルコマンドラインの編集

    Intel VT-d システムの場合は、intel_iommu=on および iommu=pt パラメーターをカーネルコマンドラインに追加して、IOMMU がアクティベートされます。AMD-Vi システムの場合、オプションが必要なオプションは iommu=pt のみです。このオプションを有効にするには、以下のように GRUB_CMDLINX_LINUX 行を /etc/sysconfig/grub 設定ファイルを編集または追加します。
    GRUB_CMDLINE_LINUX="rd.lvm.lv=vg_VolGroup00/LogVol01
    vconsole.font=latarcyrheb-sun16 rd.lvm.lv=vg_VolGroup_1/root
    vconsole.keymap=us $([ -x /usr/sbin/rhcrashkernel-param ]  &&
    /usr/sbin/rhcrashkernel-param || :) rhgb quiet intel_iommu=on iommu=pt"
    
    注記
    IOMMU の詳細は、付録E IOMMU グループの使用 を参照してください。
  2. ブートローダー設定を再生成します

    カーネルコマンドラインへの変更を適用して、grub2-mkconfig コマンドを使用してブートローダー設定を再生成します。
    # grub2-mkconfig -o /etc/grub2.cfg
    UEFI ベースのホストを使用している場合は、ターゲットファイルは /etc/grub2-efi.cfg である必要があります。
  3. ホストを再起動します。

    変更を有効にするには、ホストマシンを再起動します。
    # reboot

手順16.14 GPU デバイスのホスト物理マシンドライバーへのバインドからの除外

GPU の割り当ての場合は、デバイスをホストドライバーにバインドしないようにすることを推奨します。これは多くの場合、これらのドライバーはデバイスの動的バインドに対応しないためです。
  1. PCI バスアドレスを特定

    デバイスの PCI バスアドレスおよび ID を特定するには、以下の lspci コマンドを実行します。以下の例では、NVIDIA Quadro または GRID カードなどの VGA コントローラーが使用されます。
    # lspci -Dnn | grep VGA
    0000:02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK106GL [Quadro K4000] [10de:11fa] (rev a1)
    
    生成される検索では、このデバイスの PCI バスアドレスは 0000:02:00.0 で、デバイスの PCI ID は 10de:11fa であると表示されます。
  2. ネイティブホストマシンドライバーが GPU デバイスを使用しないようにする

    ネイティブホストマシンドライバーが GPU デバイスを使用しないようにするには、pci-stub ドライバーと共に PCI ID を使用できます。これには、以下のように /etc/sysconfig/grub 設定ファイルにある GRUB_CMDLINX_LINUX 行に、pci-stub.ids オプションを追加し、PCI ID をその値として追加します。
    GRUB_CMDLINE_LINUX="rd.lvm.lv=vg_VolGroup00/LogVol01
    vconsole.font=latarcyrheb-sun16 rd.lvm.lv=vg_VolGroup_1/root
    vconsole.keymap=us $([ -x /usr/sbin/rhcrashkernel-param ]  &&
    /usr/sbin/rhcrashkernel-param || :) rhgb quiet intel_iommu=on iommu=pt pci-stub.ids=10de:11fa"
    
    pci-stub の PCI ID をさらに追加するには、それらの ID をコンマで区切ります。
  3. ブートローダー設定を再生成します

    grub2-mkconfig を使用してブートローダー設定を再生成します。このオプションを追加します。
    # grub2-mkconfig -o /etc/grub2.cfg
    UEFI ベースのホストを使用している場合は、ターゲットファイルは /etc/grub2-efi.cfg である必要があります。
  4. ホストマシンを再起動します。

    変更を有効にするには、ホストマシンを再起動します。
    # reboot

手順16.15 オプション: GPU IOMMU 設定の編集

GPU デバイスを割り当てる前に、GPU がゲスト上で適切に機能させるために、IOMMU 設定の編集が必要になることがあります。
  1. GPU の XML 情報を表示します。

    XML 形式で GPU の設定を表示するには、まず pci_ を追加し、区切り文字をアンダースコアに変換して PCI バスアドレスを libvirt 互換形式に変換する必要があります。この例では、( 前のステップで取得した)0000:02:00.0 バスアドレスで特定された GPU PCI デバイスが pci_0000_02_00_0 になります。virsh nodedev-dumpxml でデバイスの libvirt アドレスを使用して、その XML 設定を表示します。
    # virsh nodedev-dumpxml pci_0000_02_00_0
    
    <device>
     <name>pci_0000_02_00_0</name>
     <path>/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.0</path>
     <parent>pci_0000_00_03_0</parent>
     <driver>
      <name>pci-stub</name>
     </driver>
     <capability type='pci'>
      <domain>0</domain>
      <bus>2</bus>
      <slot>0</slot>
      <function>0</function>
      <product id='0x11fa'>GK106GL [Quadro K4000]</product>
      <vendor id='0x10de'>NVIDIA Corporation</vendor>
         <!-- pay attention to the following lines -->
      <iommuGroup number='13'>
       <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
       <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/>
      </iommuGroup>
      <pci-express>
       <link validity='cap' port='0' speed='8' width='16'/>
       <link validity='sta' speed='2.5' width='16'/>
      </pci-express>
     </capability>
    </device>
    
    XML の iommuGroup <要素> に注意してください。iommuGroup は、IOMMU の機能や PCI バストポロジーにより、他のデバイスから分離されているデバイスのセットを示します。ゲストに割り当てるために、iommuGroup 内のエンドポイントデバイス(PCIe ルートポート、ブリッジ、またはスイッチポートではないデバイス)は、ネイティブホストドライバーからバインドする必要があります。上記の例では、グループは GPU デバイス(0000:02:00.0)のほか、複合オーディオデバイス(0000:02:00.1)で構成されています。詳細は、付録E IOMMU グループの使用 を参照してください。
  2. IOMMU 設定の調整

    この例では、レガシー割り込みサポートのあるハードウェアの問題により、NVIDIA オーディオ機能の割り当てには対応していません。また、GPU 音声機能は通常、GPU 自体がなくてもは便利です。したがって、GPU をゲストに割り当てるには、最初にネイティブホストドライバーから音声関数をデタッチする必要があります。これには、以下のいずれかを使用します。

手順16.16 GPU の割り当て

GPU は、以下のいずれかの方法でゲストに割り当てることができます。
  1. Virtual Machine Manager インターフェースの使用詳細は 「virt-manager による PCI デバイスの割り当て」 を参照してください。
  2. GPU の XML 設定フラグを作成し、これを virsh attach-device で割り当てます。
    1. 以下のようなデバイスの XML を作成します。
      
      <hostdev mode='subsystem' type='pci' managed='yes'>
       <driver name='vfio'/>
       <source>
        <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
       </source>
      </hostdev>
      
    2. これをファイルに保存して virsh attach-device [domain] [file] --persistent を実行して、ゲスト設定に XML を追加します。ゲストマシンの既存のエミュレートされたグラフィックスデバイスに加えて、割り当てられた GPU が追加されることに注意してください。割り当てられた GPU は、仮想マシンのセカンダリーグラフィックデバイスとして処理されます。プライマリーグラフィックスデバイスとしての割り当てはサポートされず、ゲストの XML のエミュレートされたグラフィックスデバイスは削除されません。
  3. virsh edit コマンドを使用してゲストの XML 設定を編集し、適切な XML セグメントを手動で追加します。

手順16.17 ゲストでの Xorg 設定の統合

ゲストの GPU の PCI バスアドレスはホストとは異なる。ホストが GPU を適切に使用できるようにするには、割り当てられた GPU アドレスを使用するようにゲストの Xorg ディスプレイサーバーを設定します。
  1. ゲストで lspci コマンドを使用して、GPU の PCI バスを判別します。
    # lspci | grep VGA
    00:02.0 VGA compatible controller: Device 1234:111
    00:09.0 VGA compatible controller: NVIDIA Corporation GK106GL [Quadro K4000] (rev a1)
    
    この例では、バスアドレスは 00:09.0 です。
  2. ゲストの /etc/X11/xorg.conf ファイルに、以下のように検出されたアドレスが調整された BusID オプション を追加します。
    		Section "Device"
    		    Identifier     "Device0"
    		    Driver         "nvidia"
    		    VendorName     "NVIDIA Corporation"
    		    BusID          "PCI:0:9:0"
    		EndSection
    
    重要
    ステップ 1 で検出されたバスアドレスが 16 進数の場合は、区切り文字間の値を 10 進数のシステムに変換する必要があります。たとえば、00:0a.0 は PCI:0:10:0 に変換する必要があります。
注記
ゲストで割り当てられた NVIDIA GPU を使用する場合、NVIDIA ドライバーのみがサポートされます。他のドライバーは機能せず、エラーが発生する可能性があります。Red Hat Enterprise Linux 7 ゲストでは、インストール時にカーネルコマンドラインで modprobe.blacklist=nouveau オプションを使用して nouveau ドライバーをブラックリストに指定できます。他のゲスト仮想マシンの詳細は、オペレーティングシステムの特定のドキュメントを参照してください。
NVIDIA ドライバーがロードされたゲストオペレーティングシステムによっては、ゲストはエミュレートされたグラフィックスと割り当てられたグラフィックを同時に使用したり、エミュレートされたグラフィックスを無効にしたりできます。割り当てられたグラフィックフレームバッファーへのアクセスは、virt-manager などのアプリケーションで提供されないことに注意してください。割り当てられた GPU が物理表示に接続されていない場合には、GPU デスクトップにアクセスするには、ゲストベースのリモーティングソリューションが必要になる場合があります。すべての PCI デバイス割り当てと同様に、GPU が割り当てられたゲストの移行はサポートされず、各 GPU は単一のゲストによってのみ所有されます。ゲストオペレーティングシステムによっては、GPU のホットプラグサポートが利用できる可能性があります。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。