10.2. コンピュートノードでの仮想 GPU の設定
クラウドユーザーが仮想 GPU (vGPU) を使用するインスタンスを作成できるようにするには、物理 GPU を持つコンピュートノードを設定する必要があります。
- vGPU 用のコンピュートノードを指定する。
- 仮想 GPU 用のコンピュートノードを設定する。
- オーバークラウドをデプロイする。
- オプション: vGPU タイプのカスタム特性を作成します。
- オプション: カスタム GPU インスタンスイメージを作成します。
- vGPU を持つインスタンスを起動するための vGPU フレーバーを作成します。
GPU ハードウェアが制限されている場合は、ホストアグリゲートを設定して vGPU コンピュートノードでのスケジューリングを最適化することもできます。仮想 GPU を要求するインスタンスのみを仮想 GPU コンピュートノードにスケジュールするには、仮想 GPU が設定されたコンピュートノードのホストアグリゲートを作成し、Compute スケジューラーが仮想 GPU インスタンスのみをホストアグリゲートに配置するように設定します。詳細は、Creating and managing host aggregates および Filtering by isolating host aggregates を参照してください。
NVIDIA GRID vGPU を使用するには、NVIDIA GRID ライセンス要件に従う共に、セルフホストライセンスサーバーの URL が必要です。詳細は、Virtual GPU License Server Release Notes の Web ページを参照してください。
10.2.1. 前提条件
- NVIDIA の Web サイトから、GPU デバイスに対応する NVIDIA GRID ホストドライバー RPM パッケージをダウンロードしている。必要なドライバーを確認するには、NVIDIA ドライバーダウンロードポータル を参照してください。ポータルからドライバーをダウンロードするには、NVIDIA カスタマーとして登録されている必要があります。
- NVIDIA GRID ホストドライバーがインストールされているカスタムオーバークラウドイメージをビルドしている。
10.2.2. 仮想 GPU 用コンピュートノードの指定
vGPU ワークロードのコンピュートノードを指定するには、新しいロールファイルを作成して vGPU ロールを設定し、GPU 対応のコンピュートノードのタグ付けに使用する GPU リソースクラスを使用してベアメタルノードを設定する必要があります。
以下の手順は、まだプロビジョニングされていない新しいオーバークラウドノードに適用されます。すでにプロビジョニングされている既存のオーバークラウドノードにリソースクラスを割り当てるには、スケールダウン手順を使用してノードのプロビジョニングを解除してから、スケールアップ手順を使用して新しいリソースクラスの割り当てでノードを再プロビジョニングする必要があります。詳細は、オーバークラウドノードのスケーリング を参照してください。
手順
-
アンダークラウドに
stack
ユーザーとしてログインします。 stackrc
ファイルを取得します。source ~/stackrc
[stack@director ~]$ source ~/stackrc
Copy to Clipboard Copied! Controller
、Compute
、ComputeGpu
ロールを含む、roles_data_gpu.yaml
という名前の新しいロールデータファイルを、オーバークラウドに必要なその他のロールとともに生成します。openstack overcloud roles \ generate -o /home/stack/templates/roles_data_gpu.yaml \ Compute:ComputeGpu Compute Controller
(undercloud)$ openstack overcloud roles \ generate -o /home/stack/templates/roles_data_gpu.yaml \ Compute:ComputeGpu Compute Controller
Copy to Clipboard Copied! roles_data_gpu.yaml
を開き、以下のパラメーターおよびセクションを編集または追加します。セクション/パラメーター 現在の値 新しい値 ロールのコメント
Role: Compute
Role: ComputeGpu
ロール名
Compute
ComputeGpu
description
Basic Compute Node role
GPU Compute Node role
HostnameFormatDefault
-compute-
-computegpu-
deprecated_nic_config_name
compute.yaml
compute-gpu.yaml
-
オーバークラウド用の GPU 対応コンピュートノードをノード定義のテンプレート
node.json
またはnode.yaml
に追加して、そのノードを登録します。詳細は、director を使用した Red Hat OpenStack Platform のインストールと管理 ガイドの オーバークラウドのノードの登録 を参照してください。 ノードのハードウェアを検査します。
openstack overcloud node introspect --all-manageable \ --provide
(undercloud)$ openstack overcloud node introspect --all-manageable \ --provide
Copy to Clipboard Copied! 詳細は、director を使用した Red Hat OpenStack Platform のインストールと管理 ガイドの ベアメタルノードハードウェアのインベントリーの作成 を参照してください。
GPU 負荷用に指定する各ベアメタルノードに、カスタムの GPU リソースクラスをタグ付けします。
openstack baremetal node set \ --resource-class baremetal.GPU <node>
(undercloud)$ openstack baremetal node set \ --resource-class baremetal.GPU <node>
Copy to Clipboard Copied! <node>
をベアメタルノードの ID に置き換えてください。ノード定義ファイル
overcloud-baremetal-deploy.yaml
にComputeGpu
ロールを追加し、予測ノード配置、リソースクラス、ネットワークトポロジー、またはノードに割り当てるその他の属性を定義します。- name: Controller count: 3 - name: Compute count: 3 - name: ComputeGpu count: 1 defaults: resource_class: baremetal.GPU network_config: template: /home/stack/templates/nic-config/myRoleTopology.j2
- name: Controller count: 3 - name: Compute count: 3 - name: ComputeGpu count: 1 defaults: resource_class: baremetal.GPU network_config: template: /home/stack/templates/nic-config/myRoleTopology.j2
1 Copy to Clipboard Copied! - 1
- 既存のネットワークトポロジーを再利用するか、ロール用の新しいカスタムネットワークインターフェイステンプレートを作成できます。詳細は、director を使用した Red Hat OpenStack Platform のインストールと管理 ガイドの カスタムネットワークインターフェイステンプレート を参照してください。
network_config
プロパティーを使用してネットワーク定義を定義しない場合、デフォルトのネットワーク定義が使用されます。
ノード定義ファイルでノード属性を設定するために使用できるプロパティーの詳細は、ベアメタルノードのプロビジョニング属性 を参照してください。ノード定義ファイルの例は、ノード定義ファイルの例 を参照してください。
プロビジョニングコマンドを実行して、ロールの新しいノードをプロビジョニングします。
openstack overcloud node provision \ --stack <stack> \ [--network-config \]
(undercloud)$ openstack overcloud node provision \ --stack <stack> \ [--network-config \] --output /home/stack/templates/overcloud-baremetal-deployed.yaml \ /home/stack/templates/overcloud-baremetal-deploy.yaml
Copy to Clipboard Copied! -
<stack>
を、ベアメタルノードがプロビジョニングされるスタックの名前に置き換えます。指定しない場合、デフォルトはovercloud
です。 -
--network-config
オプションの引数を含めて、cli-overcloud-node-network-config.yaml
Ansible Playbook にネットワーク定義を提供します。network_config
プロパティーを使用してネットワーク定義を定義しない場合、デフォルトのネットワーク定義が使用されます。
-
別のターミナルでプロビジョニングの進捗をモニタリングします。プロビジョニングが成功すると、ノードの状態が
available
からactive
に変わります。watch openstack baremetal node list
(undercloud)$ watch openstack baremetal node list
Copy to Clipboard Copied! --network-config
オプションを指定してプロビジョニングコマンドを実行しなかった場合は、network-environment.yaml
ファイルで<Role>NetworkConfigTemplate
パラメーターを設定して、NIC テンプレートファイルを指すようにします。parameter_defaults: ComputeNetworkConfigTemplate: /home/stack/templates/nic-configs/compute.j2 ComputeGpuNetworkConfigTemplate: /home/stack/templates/nic-configs/<gpu_net_top>.j2 ControllerNetworkConfigTemplate: /home/stack/templates/nic-configs/controller.j2
parameter_defaults: ComputeNetworkConfigTemplate: /home/stack/templates/nic-configs/compute.j2 ComputeGpuNetworkConfigTemplate: /home/stack/templates/nic-configs/<gpu_net_top>.j2 ControllerNetworkConfigTemplate: /home/stack/templates/nic-configs/controller.j2
Copy to Clipboard Copied! <gpu_net_top>
をComputeGpu
ロールのネットワークトポロジーが含まれるファイルの名前に置き換えます。たとえば、デフォルトのネットワークトポロジーを使用する場合はcompute.yaml
です。
10.2.3. 仮想 GPU 用コンピュートノードの設定およびオーバークラウドのデプロイ
環境内の物理 GPU デバイスに対応する仮想 GPU の種別を取得して割り当て、仮想 GPU 用コンピュートノードを設定するための環境ファイルを準備する必要があります。
手順
- Red Hat Enterprise Linux と NVIDIA GRID ドライバーを一時コンピュートノードにインストールし、そのノードを起動します。
仮想 GPU は、仲介デバイス、または
mdev
タイプのデバイスです。各コンピュートノード上の各mdev
デバイスの PCI アドレスを取得します。ls /sys/class/mdev_bus/
$ ls /sys/class/mdev_bus/
Copy to Clipboard Copied! PCI アドレスは、デバイスドライバーのディレクトリー名として使用されます (例:
0000:84:00.0)
。各コンピュートノードで利用可能な各 pGPU デバイスでサポートされている
mdev
タイプを確認して、利用可能な vGPU タイプを見つけます。ls /sys/class/mdev_bus/<mdev_device>/mdev_supported_types
$ ls /sys/class/mdev_bus/<mdev_device>/mdev_supported_types
Copy to Clipboard Copied! <mdev_device>
を、mdev
デバイスの PCI アドレス (0000:84:00.0
など) に置き換えます。たとえば、次のコンピュートノードには 4 つの pGPU があり、各 pGPU は 11 個の同じ vGPU タイプをサポートしています。
ls /sys/class/mdev_bus/0000:84:00.0/mdev_supported_types: ls /sys/class/mdev_bus/0000:85:00.0/mdev_supported_types: ls /sys/class/mdev_bus/0000:86:00.0/mdev_supported_types: ls /sys/class/mdev_bus/0000:87:00.0/mdev_supported_types:
[root@overcloud-computegpu-0 ~]# ls /sys/class/mdev_bus/0000:84:00.0/mdev_supported_types: nvidia-35 nvidia-36 nvidia-37 nvidia-38 nvidia-39 nvidia-40 nvidia-41 nvidia-42 nvidia-43 nvidia-44 nvidia-45 [root@overcloud-computegpu-0 ~]# ls /sys/class/mdev_bus/0000:85:00.0/mdev_supported_types: nvidia-35 nvidia-36 nvidia-37 nvidia-38 nvidia-39 nvidia-40 nvidia-41 nvidia-42 nvidia-43 nvidia-44 nvidia-45 [root@overcloud-computegpu-0 ~]# ls /sys/class/mdev_bus/0000:86:00.0/mdev_supported_types: nvidia-35 nvidia-36 nvidia-37 nvidia-38 nvidia-39 nvidia-40 nvidia-41 nvidia-42 nvidia-43 nvidia-44 nvidia-45 [root@overcloud-computegpu-0 ~]# ls /sys/class/mdev_bus/0000:87:00.0/mdev_supported_types: nvidia-35 nvidia-36 nvidia-37 nvidia-38 nvidia-39 nvidia-40 nvidia-41 nvidia-42 nvidia-43 nvidia-44 nvidia-45
Copy to Clipboard Copied! gpu.yaml
ファイルを作成して、各 GPU デバイスがサポートする vGPU タイプを指定します。parameter_defaults: ComputeGpuExtraConfig: nova::compute::vgpu::enabled_vgpu_types: - nvidia-35 - nvidia-36
parameter_defaults: ComputeGpuExtraConfig: nova::compute::vgpu::enabled_vgpu_types: - nvidia-35 - nvidia-36
Copy to Clipboard Copied! オプション: 複数の vGPU タイプを設定するには、サポートされる vGPU タイプを pGPU にマップします。
parameter_defaults: ComputeGpuExtraConfig: nova::compute::vgpu::enabled_vgpu_types: - nvidia-35 - nvidia-36 NovaVGPUTypesDeviceAddressesMapping: {'vgpu_<vgpu_type>': ['<pci_address>', '<pci_address>'],'vgpu_<vgpu_type>': ['<pci_address>', '<pci_address>']}
parameter_defaults: ComputeGpuExtraConfig: nova::compute::vgpu::enabled_vgpu_types: - nvidia-35 - nvidia-36 NovaVGPUTypesDeviceAddressesMapping: {'vgpu_<vgpu_type>': ['<pci_address>', '<pci_address>'],'vgpu_<vgpu_type>': ['<pci_address>', '<pci_address>']}
Copy to Clipboard Copied! -
<vgpu_type>
を vGPU タイプの名前に置き換えて、vGPU グループのラベルを作成します (例:vgpu_nvidia-35
)。追加の vGPU タイプをマップするには、vgpu_<vgpu_type>
定義のコンマ区切りリストを使用します。 <pci_address>
を、vGPU タイプをサポートする pGPU デバイスの PCI アドレス (0000:84:00.0
など) に置き換えます。<pci_address>
定義のコンマ区切りリストを使用して、vGPU グループを追加の pGPU にマップします。以下に例を示します。
NovaVGPUTypesDeviceAddressesMapping: {'vgpu_nvidia-35': ['0000:84:00.0', '0000:85:00.0'],'vgpu_nvidia-36': ['0000:86:00.0']}
-
nvidia-35
vGPU タイプは、PCI アドレス0000:84:00.0
および0000:85:00.0
にある pGPU でサポートされています。 -
nvidia-36
vGPU タイプは、PCI アドレス0000:86:00.0
にある pGPU でのみサポートされています。
-
-
- 更新内容を Compute 環境ファイルに保存します。
その他の環境ファイルと共に新しいロールファイルおよび環境ファイルをスタックに追加して、オーバークラウドをデプロイします。
openstack overcloud deploy --templates \ -e [your environment files] \ -r /home/stack/templates/roles_data_gpu.yaml \ -e /home/stack/templates/network-environment.yaml \ -e /home/stack/templates/gpu.yaml \ -e /home/stack/templates/overcloud-baremetal-deployed.yaml \ -e /home/stack/templates/node-info.yaml
(undercloud)$ openstack overcloud deploy --templates \ -e [your environment files] \ -r /home/stack/templates/roles_data_gpu.yaml \ -e /home/stack/templates/network-environment.yaml \ -e /home/stack/templates/gpu.yaml \ -e /home/stack/templates/overcloud-baremetal-deployed.yaml \ -e /home/stack/templates/node-info.yaml
Copy to Clipboard Copied!