第9章 分散ワークロードの管理
OpenShift AI では、PyTorchJob、RayJob、RayCluster などの分散ワークロードは、それぞれのワークロード operator によって作成および管理されます。Kueue はキューイングとアドミッション制御を提供し、これらの operator と統合して、クラスター全体のクォータに基づいてワークロードをいつ実行できるかを決定します。
CodeFlare Operator のデフォルトの動作を変更したり、RDMA 用のクラスターを設定したりするなど、分散ワークロード環境の高度な設定を実行できます。
9.1. 分散ワークロードのクォータ管理の設定 リンクのコピーリンクがクリップボードにコピーされました!
Kueue リソースを作成して、分散ワークロードのクォータを設定します。クォータにより、複数のデータサイエンスプロジェクト間でリソースを共有できるようになります。
前提条件
-
cluster-adminロールを使用して OpenShift にログインしている。 - OpenShift コマンドラインインターフェイス (CLI) をダウンロードしてインストールした。OpenShift CLI のインストール (OpenShift Dedicated) または OpenShift CLI のインストール (Red Hat OpenShift Service on AWS) を参照してください。
- Kueue を使用したワークロード管理の設定 の説明に従って、Red Hat build of Kueue Operator をインストールしてアクティブ化しておきます。
- 分散ワークロードコンポーネントのインストール の説明に従って、必要な分散ワークロードコンポーネントをインストールしている。
- ワークベンチを含むデータサイエンスプロジェクトを作成し、ワークベンチで CodeFlare SDK を含むデフォルトのワークベンチイメージ (Standard Data Science ワークベンチなど) が実行中である。プロジェクトの作成方法は、データサイエンスプロジェクトの作成 を参照してください。
- 十分なリソースがある。分散ワークロードインフラストラクチャーをデプロイするには、ベースの OpenShift AI リソースに加え、1.6 vCPU および 2 GiB のメモリーが必要になります。
- リソースがクラスター内で物理的に利用可能である。Kueue リソースの詳細は、Red Hat build of Kueue ドキュメント を参照してください。
グラフィックスプロセッシングユニット (GPU) を使用する場合は、OpenShift AI で GPU サポートを有効にした。NVIDIA GPU を使用する場合は、NVIDIA GPU の有効化 を参照してください。AMD GPU を使用する場合は、AMD GPU の統合 を参照してください。
注記OpenShift AI では、Red Hat がサポートする分散ワークロードのアクセラレーターは、NVIDIA GPU アクセラレーターと AMD GPU アクセラレーターのみです。
手順
ターミナルウィンドウで、クラスター管理者として OpenShift クラスターにまだログインしていない場合は、次の例に示すように OpenShift CLI にログインします。
oc login <openshift_cluster_url> -u <admin_username> -p <password>
$ oc login <openshift_cluster_url> -u <admin_username> -p <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow リソースフレーバーが存在することを確認するか、次のようにカスタムフレーバーを作成します。
ResourceFlavorがすでに存在するかどうかを確認します。oc get resourceflavors
$ oc get resourceflavorsCopy to Clipboard Copied! Toggle word wrap Toggle overflow ResourceFlavorがすでに存在し、それを変更する必要がある場合、直接編集します。oc edit resourceflavor <existing_resourceflavor_name>
$ oc edit resourceflavor <existing_resourceflavor_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ResourceFlavorが存在しないか、カスタムのものが必要な場合は、default_flavor.yamlファイルを作成し、次の内容を入力します。空の Kueue リーソースフレーバー
apiVersion: kueue.x-k8s.io/v1beta1 kind: ResourceFlavor metadata: name: <example_resource_flavor>
apiVersion: kueue.x-k8s.io/v1beta1 kind: ResourceFlavor metadata: name: <example_resource_flavor>Copy to Clipboard Copied! Toggle word wrap Toggle overflow その他の例は、Kueue リソース設定の例 を参照してください。
次のいずれかの操作を実行します。
- 既存のリソースフレーバーを変更する場合は、変更を保存します。
新しいリソースフレーバーを作成する場合は、設定を適用して
ResourceFlavorオブジェクトを作成します。oc apply -f default_flavor.yaml
$ oc apply -f default_flavor.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
デフォルトのクラスターキューが存在することを確認するか、次のようにカスタムキューを作成します。
注記OpenShift AI は、Kueue 統合がアクティブ化されたときに、デフォルトのクラスターキューを自動的に作成しました。デフォルトのクラスターキューを検証および変更したり、カスタムキューを作成したりできます。
ClusterQueueがすでに存在するかどうかを確認します。oc get clusterqueues
$ oc get clusterqueuesCopy to Clipboard Copied! Toggle word wrap Toggle overflow ClusterQueueがすでに存在し、それを変更する必要がある場合 (たとえば、リソースを変更する場合)、直接編集します。oc edit clusterqueue <existing_clusterqueue_name>
$ oc edit clusterqueue <existing_clusterqueue_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ClusterQueueが存在しない場合、またはカスタムの ClusterQueue が必要な場合は、cluster_queue.yamlファイルを作成し、次の内容を入力します。クラスターキューの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- このクラスターキューが管理するリソースを使用できる namespace を定義します。例に示すように、空の
namespaceSelectorは、すべての namespace がこれらのリソースを使用できることを意味します。 - 2
- クラスターキューによって管理されるリソースタイプを定義します。この例の
ClusterQueueオブジェクトは、CPU、メモリー、および GPU リソースを管理します。AMD GPU を使用する場合は、サンプルコードのnvidia.com/gpuをamd.com/gpuに置き換えます。 - 3
- リストされているリソースタイプに適用されるリソースフレーバーを定義します。この例では、<resource_flavor_name> リソースフレーバーが CPU、メモリー、および GPU リソースに適用されます。
- 4
- ジョブを許可するリソース要件を定義します。クラスターキューは、必要なリソースの合計がこれらのクォータ制限の範囲内にある場合に限り、分散ワークロードを起動します。
クォータのサンプル値 (9 個の CPU、36 GiB のメモリー、5 個の NVIDIA GPU) を、クラスターキューに適した値に置き換えます。AMD GPU を使用する場合は、サンプルコードの
nvidia.com/gpuをamd.com/gpuに置き換えます。その他の例は、Kueue リソース設定の例 を参照してください。要求される値が 0 の場合でも、次のように
spec.resourceGroupsセクションを更新して、ユーザーが要求できる各リソースのクォータを指定する必要があります。-
リソース名を
coveredResourcesリストに含めます。 -
nominalQuota値が 0 の場合でも、flavors.resourcesセクションでリソースのnameとnominalQuotaを指定します。
-
リソース名を
次のいずれかの操作を実行します。
- 既存のクラスターキューを変更する場合は、変更を保存します。
新しいクラスターキューを作成する場合は、設定を適用して
ClusterQueueオブジェクトを作成します。oc apply -f cluster_queue.yaml
$ oc apply -f cluster_queue.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
プロジェクト namespace にクラスターキューを指すローカルキューが存在することを確認するか、次のようにカスタムキューを作成します。
注記OpenShift AI ダッシュボードで Kueue が有効になっている場合、ダッシュボードから作成された新しいプロジェクトは自動的に Kueue 管理用に設定されます。これらの namespace には、デフォルトのローカルキューがすでに存在している可能性があります。ローカルキューを検証および変更したり、カスタムキューを作成したりできます。
プロジェクトの namespace に
LocalQueueがすでに存在するかどうかを確認します。oc get localqueues -n <project_namespace>
$ oc get localqueues -n <project_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow LocalQueueがすでに存在し、それを変更する必要がある場合 (たとえば、別のClusterQueueを指すよう場合)、直接編集します。oc edit localqueue <existing_localqueue_name> -n <project_namespace>
$ oc edit localqueue <existing_localqueue_name> -n <project_namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow LocalQueueが存在しない場合、またはカスタムの LocalQueue が必要な場合は、local_queue.yamlファイルを作成し、次の内容を入力します。ローカルキューの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
name、namespace、clusterQueueの値を適宜置き換えます。 次のいずれかの操作を実行します。
- 既存のローカルキューを変更する場合は、変更を保存します。
新しいローカルキューを作成する場合は、設定を適用して
LocalQueueオブジェクトを作成します。oc apply -f local_queue.yaml
$ oc apply -f local_queue.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
次のとおり、プロジェクト内のローカルキューのステータスを確認します。
oc get localqueues -n <project_namespace>
$ oc get localqueues -n <project_namespace>