14.6. GPU デバイスの PCI パススルーの有効化
PCI パススルーを使用して、グラフィックカード等の物理 PCI デバイスをインスタンスに接続することができます。デバイスに PCI パススルーを使用する場合、インスタンスはタスクを実行するためにデバイスへの排他的アクセスを確保し、ホストはデバイスを利用することができません。
前提条件
-
pciutilsパッケージが PCI カードを持つ物理サーバーにインストールされている。 - GPU デバイスのドライバーが、デバイスをパススルーするインスタンスにインストールされている必要があります。したがって、必要な GPU ドライバーがインストールされたカスタムのインスタンスイメージを作成している必要があります。GPU ドライバーがインストールされたカスタムのインスタンスイメージを作成する方法についての詳細は、Creating a custom GPU instance image を参照してください。
手順
各パススルーデバイス種別のベンダー ID および製品 ID を確認するには、PCI カードを持つ物理サーバーで以下のコマンドを入力します。
# lspci -nn | grep -i <gpu_name>たとえば、NVIDIA GPU のベンダーおよび製品 ID を確認するには、以下のコマンドを入力します。
# lspci -nn | grep -i nvidia 3b:00.0 3D controller [0302]: NVIDIA Corporation TU104GL [Tesla T4] [10de:1eb8] (rev a1) d8:00.0 3D controller [0302]: NVIDIA Corporation TU104GL [Tesla T4] [10de:1db4] (rev a1)各 PCI デバイスに Single Root I/O Virtualization (SR-IOV) 機能があるかどうかを確認するには、PCI カードを持つ物理サーバーで以下のコマンドを入力します。
# lspci -v -s 3b:00.0 3b:00.0 3D controller: NVIDIA Corporation TU104GL [Tesla T4] (rev a1) ... Capabilities: [bcc] Single Root I/O Virtualization (SR-IOV) ...-
PCI パススルー用にオーバークラウド上のコントローラーノードを設定するには、環境ファイル (例:
pci_passthru_controller.yaml) を作成します。 pci_passthru_controller.yamlのNovaSchedulerDefaultFiltersパラメーターにPciPassthroughFilterを追加します。parameter_defaults: NovaSchedulerDefaultFilters: ['AvailabilityZoneFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter','NUMATopologyFilter']コントローラーノード上のデバイスの PCI エイリアスを指定するには、以下の設定を
pci_passthru_controller.yamlに追加します。PCI デバイスに SR-IOV 機能がある場合:
ControllerExtraConfig: nova::pci::aliases: - name: "t4" product_id: "1eb8" vendor_id: "10de" device_type: "type-PF" - name: "v100" product_id: "1db4" vendor_id: "10de" device_type: "type-PF"PCI デバイスに SR-IOV 機能がない場合:
ControllerExtraConfig: nova::pci::aliases: - name: "t4" product_id: "1eb8" vendor_id: "10de" - name: "v100" product_id: "1db4" vendor_id: "10de"device_typeフィールドの設定に関する詳細は、PCI passthrough device type field を参照してください。注記nova-apiサービスが Controller 以外のロールで実行されている場合は、ControllerExtraConfigを<Role>ExtraConfigの形式でユーザーロールに置き換えます。
-
PCI パススルー用にオーバークラウド上のコンピュートノードを設定するには、環境ファイル (例:
pci_passthru_compute.yaml) を作成します。 コンピュートノード上のデバイスで利用可能な PCI を指定するには、以下の設定を
pci_passthru_compute.yamlに追加します。parameter_defaults: NovaPCIPassthrough: - vendor_id: "10de" product_id: "1eb8"インスタンスの移行およびサイズ変更の操作を行うために、コンピュートノードの PCI エイリアスのコピーを作成する必要があります。コンピュートノード上のデバイスの PCI エイリアスを指定するには、以下の設定を
pci_passthru_compute.yamlに追加します。PCI デバイスに SR-IOV 機能がある場合:
ComputeExtraConfig: nova::pci::aliases: - name: "t4" product_id: "1eb8" vendor_id: "10de" device_type: "type-PF" - name: "v100" product_id: "1db4" vendor_id: "10de" device_type: "type-PF"PCI デバイスに SR-IOV 機能がない場合:
ComputeExtraConfig: nova::pci::aliases: - name: "t4" product_id: "1eb8" vendor_id: "10de" - name: "v100" product_id: "1db4" vendor_id: "10de"注記コンピュートノードのエイリアスは、コントローラーノードのエイリアスと同じでなければなりません。
PCI パススルーをサポートするためにコンピュートノードのサーバー BIOS で IOMMU を有効にするには、
pci_passthru_compute.yamlにKernelArgsパラメーターを追加します。parameter_defaults: ... ComputeParameters: KernelArgs: "intel_iommu=on iommu=pt"注記KernelArgsパラメーターをロールの設定に初めて追加すると、オーバークラウドノードが自動的に再起動されます。必要に応じて、ノードの自動再起動を無効にし、代わりに各オーバークラウドのデプロイ後にノードの再起動を手動で実行できます。詳細は、KernelArgsを定義するための手動でのノード再起動の設定 を参照してください。その他の環境ファイルと共にこれらのカスタム環境ファイルをスタックに追加して、オーバークラウドをデプロイします。
(undercloud)$ openstack overcloud deploy --templates \ -e [your environment files] \ -e /home/stack/templates/pci_passthru_controller.yaml \ -e /home/stack/templates/pci_passthru_compute.yamlPCI デバイスを要求するためのフレーバーを設定します。以下の例では、それぞれベンダー ID および製品 ID が
10deおよび13f2の 2 つのデバイスをリクエストします。# openstack flavor set m1.large \ --property "pci_passthrough:alias"="t4:2"
検証
PCI パススルーデバイスを設定してインスタンスを作成します。
# openstack server create --flavor m1.large \ --image <custom_gpu> --wait test-pci<custom_gpu>を、必要な GPU ドライバーがインストールされたカスタムインスタンスイメージの名前に置き換えます。- クラウドユーザーとしてインスタンスにログインします。
インスタンスが GPU にアクセスできることを確認するには、インスタンスから以下のコマンドを入力します。
$ lspci -nn | grep <gpu_name>NVIDIA System Management Interface のステータスを確認するには、インスタンスから以下のコマンドを入力します。
$ nvidia-smi出力例:
----------------------------------------------------------------------------- | NVIDIA-SMI 440.33.01 Driver Version: 440.33.01 CUDA Version: 10.2 | |---------------------------------------------------------------------------+ | 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 T4 Off | 00000000:01:00.0 Off | 0 | | N/A 43C P0 20W / 70W | 0MiB / 15109MiB | 0% Default | --------------------------------------------------------------------------- ----------------------------------------------------------------------------- | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | -----------------------------------------------------------------------------