8.4. GPU デバイスの PCI パススルーの有効化
PCI パススルーを使用して、グラフィックカード等の物理 PCI デバイスをインスタンスに接続することができます。デバイスに PCI パススルーを使用する場合、インスタンスはタスクを実行するためにデバイスへの排他的アクセスを確保し、ホストはデバイスを利用することができません。
前提条件
-
pciutils
パッケージが PCI カードを持つ物理サーバーにインストールされている。 - GPU インスタンスにインストールするための GPU ドライバーが利用可能である。詳細は、「GPU 対応カスタムオーバークラウドイメージのビルド」を参照してください。
手順
各パススルーデバイス種別のベンダー ID および製品 ID を確認するには、PCI カードを持つ物理サーバーで以下のコマンドを実行します。
lspci -nn | grep -i <gpu_name>
# lspci -nn | grep -i <gpu_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow たとえば、NVIDIA GPU のベンダーおよび製品 ID を確認するには、以下のコマンドを実行します。
lspci -nn | grep -i nvidia
# 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)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
PCI パススルー用にオーバークラウド上のコントローラーノードを設定するには、環境ファイル (例:
pci_passthru_controller.yaml
) を作成します。 pci_passthru_controller.yaml
のNovaSchedulerDefaultFilters
パラメーターにPciPassthroughFilter
を追加します。parameter_defaults: NovaSchedulerDefaultFilters: ['RetryFilter','AvailabilityZoneFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter','NUMATopologyFilter']
parameter_defaults: NovaSchedulerDefaultFilters: ['RetryFilter','AvailabilityZoneFilter','ComputeFilter','ComputeCapabilitiesFilter','ImagePropertiesFilter','ServerGroupAntiAffinityFilter','ServerGroupAffinityFilter','PciPassthroughFilter','NUMATopologyFilter']
Copy to Clipboard Copied! Toggle word wrap Toggle overflow コントローラーノード上のデバイスの PCI エイリアスを指定するには、以下の設定を
pci_passthru_controller.yaml
に追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記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"
parameter_defaults: NovaPCIPassthrough: - vendor_id: "10de" product_id: "1eb8"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PCI パススルーをサポートするためにコンピュートノードのサーバー BIOS で IOMMU を有効にするには、
pci_passthru_compute.yaml
にKernelArgs
パラメーターを追加します。parameter_defaults: ... ComputeParameters: KernelArgs: "intel_iommu=on iommu=pt"
parameter_defaults: ... ComputeParameters: KernelArgs: "intel_iommu=on iommu=pt"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow その他の環境ファイルと共にカスタム環境ファイルをスタックに追加して、オーバークラウドをデプロイします。
(undercloud) $ openstack overcloud deploy --templates \ -e [your environment files] -e /home/stack/templates/pci_passthru_controller.yaml -e /home/stack/templates/pci_passthru_compute.yaml
(undercloud) $ openstack overcloud deploy --templates \ -e [your environment files] -e /home/stack/templates/pci_passthru_controller.yaml -e /home/stack/templates/pci_passthru_compute.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PCI デバイスを要求するためのフレーバーを設定します。以下の例では、それぞれベンダー ID および製品 ID が
10de
および13f2
の 2 つのデバイスをリクエストします。openstack flavor set m1.large --property "pci_passthrough:alias"="t4:2"
# openstack flavor set m1.large --property "pci_passthrough:alias"="t4:2"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow PCI パススルーデバイスを設定してインスタンスを作成します。
openstack server create --flavor m1.large --image rhelgpu --wait test-pci
# openstack server create --flavor m1.large --image rhelgpu --wait test-pci
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - cloud-user としてインスタンスにログインします。詳細は、「インスタンス へのログイン」を参照してください。
インスタンスに GPU ドライバーをインストールします。たとえば、以下のスクリプトを実行して NVIDIA ドライバーをインストールします。
sh NVIDIA-Linux-x86_64-430.24-grid.run
$ sh NVIDIA-Linux-x86_64-430.24-grid.run
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
インスタンスが GPU にアクセスできることを確認するには、インスタンスから以下のコマンドを実行します。
lspci -nn | grep <gpu_name>
$ lspci -nn | grep <gpu_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NVIDIA System Management Interface のステータスを確認するには、インスタンスから以下のコマンドを実行します。
nvidia-smi
$ nvidia-smi
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow