Red Hat OpenStack Services on OpenShift への GPU ワークロードのデプロイ
Red Hat OpenStack Services on Openshift の仮想アクセラレーション設定
概要
Red Hat ドキュメントへのフィードバック (英語のみ) リンクのコピーリンクがクリップボードにコピーされました!
Red Hat ドキュメントに対するご意見をお聞かせください。ドキュメントの改善点があればお知らせください。
問題の作成 フォームを使用して、Red Hat OpenStack Services on OpenShift (RHOSO) または Red Hat OpenStack Platform (RHOSP) の以前のリリースのドキュメントに関するフィードバックを提供します。RHOSO または RHOSP ドキュメントの問題を作成すると、その問題は RHOSO Jira プロジェクトに記録され、フィードバックの進行状況を追跡できるようになります。
問題の作成 フォームを完了するには、Jira にログインしていることを確認してください。Red Hat Jira アカウントをお持ちでない場合は、https://issues.redhat.com でアカウントを作成できます。
- 次のリンクをクリックして、問題の作成 ページを開きます (問題の作成)。
- Summary フィールドと Description フィールドに入力します。Description フィールドに、ドキュメントの URL、章またはセクション番号、および問題の詳しい説明を入力します。フォーム内の他のフィールドは変更しないでください。
- Create をクリックします。
第1章 GPU ワークロードをデプロイするための RHOSO 設定 リンクのコピーリンクがクリップボードにコピーされました!
データプレーンノードで PCI パススルーを設定することで、クラウドインフラストラクチャーにおける GPU アクセラレーション対応 AI および機械学習のワークロードに対するサポートを有効化します。この設定により、GPU ハードウェアに直接アクセスして Red Hat AI Inference Server などのワークロードをデプロイし、最適なパフォーマンスを実現できます。
デプロイメントには、RHEL AI で AI ワークロードを実行するために必要な仕様が備わっている必要があります。詳細は、RHEL AI ハードウェア要件 を参照してください。
1.1. AI ワークロード用のコントロールプレーンの設定 リンクのコピーリンクがクリップボードにコピーされました!
GPU デバイスを認識し、PCI スケジューリングを有効にするように Nova および Placement サービスを設定します。これにより、GPU 対応ワークロードをサポートするデータプレーンノードをデプロイするためのコントロールプレーンの準備が行われます。
前提条件
- 必要な PCI デバイスを持つコンピュートノード
-
ocコマンドラインツールがワークステーションにインストールされている。 -
cluster-admin権限を持つユーザーとして、Red Hat OpenStack Services on OpenShift (RHOSO) にログインしている。
手順
-
ワークステーションで
OpenStackControlPlaneカスタムリソース (CR) ファイルopenstack_control_plane.yamlを開きます。 spec.nova.templateセクションにcustomServiceConfigフィールドを追加し、次の変更を加えます。- コンピュートノード上の GPU の PCI エイリアスを設定します。
- 必要に応じて、Placement で PCI を有効にして、Placement をリソース追跡の中央サービスとして有効にします。これは、Nova と Placement において元に戻せないステップです。
必要に応じて追加のセルを設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記cell1以外にもセルがある場合は、pci_in_placement = True設定で各セルに対応するconductorServiceTemplate設定を追加します。-
<alias_name>は、ユーザーが指定したデバイス名 (例: "nvidia") に置き換えます。 -
<gpu_vendor_id>は、GPU のベンダー ID に置き換えます。 -
<gpu_product_id>は、GPU の製品 ID に置き換えます。 <type>は、次のいずれかに置き換えます。-
デバイスが SR-IOV をサポートし、親デバイスまたはルートデバイスである場合は
type-PFを使用します。 -
デバイスが SR-IOV をサポートするデバイスの子デバイスである場合は
type-VFを使用します。 デバイスが SR-IOV をサポートしていない場合は、
type-PCIを使用します。注記PCI デバイスがインストールされているシステムで
lspci -nnコマンドを使用して、ベンダー ID とデバイス ID を見つけることができます。
-
デバイスが SR-IOV をサポートし、親デバイスまたはルートデバイスである場合は
-
openstack_control_plane.yamlCR ファイルを保存します。 コントロールプレーンを更新します。
oc apply -f openstack_control_plane.yaml -n openstack
$ oc apply -f openstack_control_plane.yaml -n openstackCopy to Clipboard Copied! Toggle word wrap Toggle overflow GPU ワークロード用のインスタンスを起動するためのフレーバーを作成します。
次の例では、
nvidia-gpuという名前のフレーバーを作成します。openstack flavor create --ram <ram> --vcpus <cpus> --disk <size> \ --property "pci_passthrough:alias"="<alias_name>:<gpus>" \ --property "hw:pci_numa_affinity_policy=preferred" \ --property "hw:hide_hypervisor_id"=true nvidia-gpu
$ openstack flavor create --ram <ram> --vcpus <cpus> --disk <size> \ --property "pci_passthrough:alias"="<alias_name>:<gpus>" \ --property "hw:pci_numa_affinity_policy=preferred" \ --property "hw:hide_hypervisor_id"=true nvidia-gpuCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
<ram>は、このフレーバーに必要なメモリー量 (メガバイト単位) に置き換えます。 -
<cpus>は、このフレーバーに必要な vcpu の数に置き換えます。 -
<size>は、このフレーバーに必要なディスクのサイズ (ギガバイト単位) に置き換えます。 -
<alias_name>は、ユーザーが指定したデバイス名 (例: "nvidia") に置き換えます。 <gpus>は、このフレーバーの GPU の数に置き換えます。注記-
pci_passthrough:aliasプロパティーは、環境に合わせて調整する必要があります。この例では、nvidiaはエイリアス設定値に使用される名前であり、<gpus>は、このフレーバーを使用するインスタンスに与えられた GPU PCI デバイスの数です (例:pci_passthrough:alias"="nvidia:2)。 -
hw:hide_hypervisor_id=trueパラメーターは、インスタンスからハイパーバイザー署名を隠匿します。これにより、すべてのドライバーがインスタンスに読み込まれ、動作できるようになります。 -
hw:pci_numa_affinity_policyは、環境に応じて置き換えることができます。詳細は、PCI パススルー用のコントロールプレーンの更新 を参照してください。
-
-
1.2. データプレーンノードの設定 リンクのコピーリンクがクリップボードにコピーされました!
GPU パススルー設定とカーネルパラメーターを使用してデータプレーンノードを設定し、直接 GPU アクセスを有効にします。これにより、インスタンスは計算負荷の高いワークロードに GPU ハードウェアを使用できるようになります。
前提条件
- GPU デバイスに SR-IOV 機能がある場合は、BIOS で SR-IOV が有効になっていることを確認する。
デバイスの BIOS で仮想化が有効になっていることを確認する。
注記仮想化と SR-IOV を有効にする手順については、ベンダーのドキュメントを参照してください。ベンダーによって、仮想化機能を指す名前は異なります。たとえば、Intel では
VT-dという名前を使用しますが、AMD ではAMD-Vと呼ばれています。
手順
gpu-extra-configという名前のConfigMapCR ファイルを作成し、[pci] aliasパラメーターの値を設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
コントロールプレーンで PCI in Placement が設定されている場合は、
pci_in_placementをTrueに設定します。 -
<alias_name>は、ユーザーが指定したデバイス名 (例: "nvidia") に置き換えます。 -
<gpu_vendor_id>は、ご使用の環境の GPU ベンダー ID に置き換えます。 -
<gpu_product_id>は、ご使用の環境の GPU 製品 ID に置き換えます。 <type>は、次のいずれかに置き換えます。-
デバイスが SR-IOV をサポートし、親デバイスまたはルートデバイスである場合は
type-PFを使用します。 -
デバイスが SR-IOV をサポートするデバイスの子デバイスである場合は
type-VFを使用します。 デバイスが SR-IOV をサポートしていない場合は、
type-PCIを使用します。注記PCI デバイスがインストールされているシステムで
lspci -nnコマンドを使用して、ベンダー ID とデバイス ID を見つけることができます。
-
デバイスが SR-IOV をサポートし、親デバイスまたはルートデバイスである場合は
-
コントロールプレーンで PCI in Placement が設定されている場合は、
ConfigMapリソースを作成します。oc create -f gpu-extra-config.yaml
$ oc create -f gpu-extra-config.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow gpu-passthrough-service.yamlという名前のファイルに、gpu-passthrough-<cell_name>という名前の新しいOpenStackDataPlaneServiceカスタムリソース (CR) を作成します。注記複数のセルがある場合は、
<cell_name>をセル名 (例:cell1、cell2) に置き換えて、各セルに個別のサービスを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<cell_name>は、セル名 (例:cell1) に置き換えます。
-
gpu-passthrough-service.yamlファイルから、gpu-passthrough-<cell_name>という名前の新しいOpenStackDataPlaneServiceを作成します。oc apply -f gpu-passthrough-service.yaml -n openstack
$ oc apply -f gpu-passthrough-service.yaml -n openstackCopy to Clipboard Copied! Toggle word wrap Toggle overflow デプロイメント内の既存の
OpenStackDataPlaneNodeSetをリスト表示します。oc get OpenStackDataPlaneNodeSet -n openstack
$ oc get OpenStackDataPlaneNodeSet -n openstackCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記デプロイメントには、
openstack-edpm-ipamという名前のOpenStackDataPlaneNodeSetがすでに定義されている必要があります。既存の
OpenStackDataPlaneNodeSetをバックアップします。oc get OpenStackDataPlaneNodeSet openstack-edpm-ipam -o yaml > openstack-edpm-ipam.yaml
$ oc get OpenStackDataPlaneNodeSet openstack-edpm-ipam -o yaml > openstack-edpm-ipam.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow OpenStackDataPlaneNodeSetCR ファイルを編集して、既存のspec.servicesにgpu-passthrough-<cell_name>サービスを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow <cell_name>は、セル名 (例:cell1) に置き換えます。複数のセルがある場合は、対応する各サービス (例:gpu-passthrough-cell1、gpu-passthrough-cell2) を追加します。注記gpu-passthrough-<cell_name>サービスは、reboot-osの上に配置する必要があります。
同じ
OpenStackDataPlaneNodeSetCR ファイルを編集して、ansibleVarsに必要な値を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<username>は、Red Hat Subscription Manager のユーザー名に置き換えます。 -
<password>は、Red Hat Subscription Manager のパスワードに置き換えます。 -
<gpu_vendor_id>は、ご使用の環境の GPU ベンダー ID に置き換えます。 <gpu_product_id>は、ご使用の環境の GPU 製品 ID に置き換えます。注記PCI デバイスがインストールされているシステムで
lspci -nnコマンドを使用して、ベンダー ID とデバイス ID を見つけることができます。
-
OpenStackDataPlaneNodeSetCR に変更を適用します。oc apply -f openstack-edpm-ipam.yaml
oc apply -f openstack-edpm-ipam.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow gpu-passthrough-deployment.yamlという名前のファイルに新しいOpenStackDataPlaneDeploymentを作成し、OpenStackDataPlaneNodeSet内のノード上のgpu-passthrough-<cell_name>OpenStackDataPlaneServiceからのタスクをすべて実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenStackDataPlaneDeploymentの変更を反映してデプロイメントを更新します。oc apply -f gpu-passthrough-deployment.yaml -n openstack
$ oc apply -f gpu-passthrough-deployment.yaml -n openstackCopy to Clipboard Copied! Toggle word wrap Toggle overflow デプロイメントのステータスを確認します。
oc get OpenStackDataPlaneDeployment
$ oc get OpenStackDataPlaneDeployment NAME NODESETS STATUS MESSAGE edpm-deployment ["openstack-edpm-ipam"] True Setup complete gpu-passthrough-deployment ["openstack-edpm-ipam"] True Setup completeCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記デプロイメントのログを追跡するには、
oc logs -l app=openstackansibleee -f --max-log-requests 50コマンドを使用します。
第2章 Red Hat AI Inference Server のデプロイ リンクのコピーリンクがクリップボードにコピーされました!
OpenStack インスタンスで Red Hat AI Inference Server を起動して、GPU パススルー設定を確認します。
2.1. OpenStack Glance で RHEL イメージを作成する リンクのコピーリンクがクリップボードにコピーされました!
GPU 対応インスタンスを起動するために、Image サービス (glance) で RHEL ベースのイメージを準備します。このイメージを使用すると、OpenStack 環境との互換性を維持しながら、GPU アクセラレーション対応ワークロードをデプロイできます。
前提条件
-
管理者がプロジェクトを作成し、管理者からクラウドにアクセスするための
clouds.yamlファイルが提供されている。 -
python-openstackclientパッケージがインストールされている。
手順
- RHEL ダウンロードページ から最新の Red Hat Enterprise Linux 9.x KVM ゲストイメージをダウンロードします。
イメージを作成します。
openstack image create \ --disk-format qcow2 \ --container-format bare \ --file <download_name>.qcow2 \ <rhel9.x>
$ openstack image create \ --disk-format qcow2 \ --container-format bare \ --file <download_name>.qcow2 \ <rhel9.x>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - <download_name> は、ダウンロードしたイメージの名前に置き換えます。たとえば、"rhel-9.7-x86_64-kvm" です。
- <rhel9.x> は、ダウンロードしたイメージの名前とバージョン番号に置き換えます。たとえば "rhel9.7" です。
検証
イメージがアップロードされていることを確認します。ステータスには、最初は "importing" と表示され、アップロードが完了すると "active" に変わります。
watch openstack image show -c status -f value <rhel9.x>
$ watch openstack image show -c status -f value <rhel9.x>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - <rhel9.x> は、ダウンロードしたイメージの名前とバージョン番号に置き換えます。
2.2. GPU ワークロード用のインスタンスの起動 リンクのコピーリンクがクリップボードにコピーされました!
GPU 対応インスタンスをデプロイし、Red Hat AI Inference Server をインストールして設定を検証します。このデプロイメントでは、インスタンスが物理 GPU デバイスに正常にアクセスできることを確認し、推論サービスが機能していることを実証します。
前提条件
- GPU ワークロード用の Image サービス (glance) イメージを作成した。
- GPU ワークロード用のインスタンスを作成するためのフレーバーを使用できる。
- SSH アクセスを持つ適切なセキュリティーグループがプロビジョニングされており、それを使用できる。
手順
オプション: SSH キーペアがない場合は、GPU ワークロードのインスタンスで使用するために作成します。
openstack keypair create --private-key <private_key_file> <name>
$ openstack keypair create --private-key <private_key_file> <name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<private_key_file>は、秘密鍵を保存するファイルパスと名前に置き換えます。公開鍵はユーザーアカウントに自動的に保存されます。 -
nameは、新しい鍵の名前に置き換えます。
-
サーバーインスタンスの作成時に環境変数を入力します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<image_name>は、Image サービス (glance) イメージに使用した名前に置き換えます。 -
<flavor_name>は、GPU ワークロードのフレーバーの名前 (例: "nvidia-gpu") に置き換えます。 - 他のすべてのパラメーターを、環境に固有の名前に置き換えます。
-
作成した変数を使用してインスタンスを作成します。
openstack server create --image ${image_name} --flavor ${flavor} \ --nic net-id=${network} --security-group ${security_group} \ --key-name ${key_name} ${instance_name} --wait$ openstack server create --image ${image_name} --flavor ${flavor} \ --nic net-id=${network} --security-group ${security_group} \ --key-name ${key_name} ${instance_name} --waitCopy to Clipboard Copied! Toggle word wrap Toggle overflow インスタンスの Floating IP を作成します。
fip=$(openstack floating ip create ${public_network} -f value -c floating_ip_address)$ fip=$(openstack floating ip create ${public_network} -f value -c floating_ip_address)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Floating IP をインスタンスにリンクします。
openstack server add floating ip ${instance_name} ${fip}$ openstack server add floating ip ${instance_name} ${fip}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記RHEL イメージのデフォルトのユーザーアカウントは
cloud-userで、これはパスワードなしのsudo特権を持つユーザーです。インスタンスにログインします。
SSH を使用してインスタンスに接続します。
ssh -i <private_key> cloud-user@${fip}$ ssh -i <private_key> cloud-user@${fip}Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<private_key>は、作成した秘密鍵ファイルに置き換えます。
-
RHEL インスタンスを登録します。
sudo rhc connect --organization <org> --activation-key <key>
$ sudo rhc connect --organization <org> --activation-key <key>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
<org>は、ユーザー自身の組織に置き換えます。 -
<key>は、ユーザー自身の Red Hat アクティベーションキーに置き換えます。
-
適切なドライバーと Container Toolkit をインストールします。
NVIDIA GPU の場合:
AMD GPU の場合:
podman をインストールします。
sudo dnf install podman
$ sudo dnf install podmanCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat コンテナーレジストリーにログインします。
podman login registry.redhat.io
$ podman login registry.redhat.ioCopy to Clipboard Copied! Toggle word wrap Toggle overflow 作成したインスタンスで、
podmanを使用して Red Hat AI Inference Server をデプロイします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
NVIDIA を使用している場合は、
<device>をnvidia.com/gpu=allに置き換えます。AMD を使用している場合は、--device /dev/kdf --device /dev/driを使用します。 -
AI 推論サーバーコンテナーを複数の GPU で実行する場合は、
<size>を GPU の数に置き換えます。
-
NVIDIA を使用している場合は、
検証
RHEL インスタンス内で GPU デバイスが使用可能であることを確認します。
- NVIDIA
-
nvidia-smi -L - AMD
/opt/rocm/bin/rocm-smi出力例
GPU 0: NVIDIA A100-PCIE-40GB (UUID: GPU-4b9f8464-ad90-cdde-8510-8006fc2772b7) GPU 1: NVIDIA A100-PCIE-40GB (UUID: GPU-7a2e3526-44f0-4d2f-7283-6114a8b82a32)
GPU 0: NVIDIA A100-PCIE-40GB (UUID: GPU-4b9f8464-ad90-cdde-8510-8006fc2772b7) GPU 1: NVIDIA A100-PCIE-40GB (UUID: GPU-7a2e3526-44f0-4d2f-7283-6114a8b82a32)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
API を使用してモデルにリクエストを送信します。
curl -X POST -H "Content-Type: application/json" -d '{$ curl -X POST -H "Content-Type: application/json" -d '{ "prompt": "What is the capital of France?", "max_tokens": 50 }' http://<floating_ip>:8000/v1/completions | jqCopy to Clipboard Copied! Toggle word wrap Toggle overflow <floating_ip>は、前のステップで取得したインスタンスのアドレスに置き換えます。出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow