クラウドネイティブaiスイートが提供するスケジューリングコンポーネントack-AI-installerをインストールした後、GPU高速化ノードにラベルを追加して、GPU共有やトポロジ対応のGPUスケジューリングなどのスケジューリングポリシーを有効にすることができます。 このトピックでは、さまざまなGPUスケジューリングポリシーを有効にするためのラベルについて説明します。 このトピックでは、ラベルの値を変更する方法についても説明します。
GPUスケジューリングポリシーを有効にするためのラベル
ack.node.gpu.schedule
ポリシー | ラベル値 | 他のラベル値がサポートされているかどうか | 説明 |
排他的GPUスケジューリング | default | はい。 次のラベル値がサポートされています。
|
|
GPU共有 | cpu | はい。 次のラベル値がサポートされています。
|
|
core_mem | はい。 次のラベル値がサポートされています。
|
| |
share | はい。 次のラベル値がサポートされています。
|
| |
トポロジ対応のGPUスケジューリング | トポロジ | はい。 次のラベル値がサポートされています。
|
|
動的マルチインスタンスGPU (MIG) パーティショニング | ミグ | いいえ。 |
|
ack.node.gpu.placement
ポリシー | ラベル値 | 他のラベル値がサポートされているかどうか | 説明 |
GPU共有 | スプレッド | はい。 ラベル値をbinpackに変更できます。 |
|
binpack | はい。 スプレッドするラベル値を変更できます。 |
|
ラベル値の変更
kubectl label nodes
コマンドを使用する場合、またはACKコンソールでラベル管理機能を使用してラベル値を変更する場合に発生する可能性のある問題
kubectl label nodes
コマンドを実行してGPUアクセラレーションノードのGPUスケジューリングポリシーをaからBに切り替えるか、ACKコンソールの [ノード] ページのラベル機能を使用してラベル値を変更すると、次の問題が発生する可能性があります。
GPUリソースを使用するアプリケーションは、ノード上に展開され得る。 これらのアプリケーションのポッドは、スケジューリングポリシーAに基づいてGPUリソースを要求します。スケジューリングポリシーがAからBに切り替えられた後、前述のポッドは、スケジューラによって維持されるノードのGPUリソース台帳に含まれません。 GPUリソース台帳が実際のGPUリソース割り当てと一致していません。 その結果、先行するアプリケーションは、GPUリソースを求めて、他のGPUが多いアプリケーションと競合する。
一部の機能は、ノードの構成に設定を追加することで有効になります。
kubectl label nodes
コマンドまたはContainer Service for Kubernetes (ACK) コンソールのラベル管理機能を使用してラベル値を変更しても、ノードの構成はリセットされません。 したがって、ノードは、指定されたスケジューリングポリシーを有効にできない場合がある。
上記の問題を回避するには、ノードプールのGPUスケジューリングポリシーの設定を推奨します。
ノードプールのGPUスケジューリングポリシーの設定
クラスターに対して、GPU共有 (GPUメモリ分離のみ) およびGPU共有 (GPUメモリ分離およびコンピューティング能力制限) を有効にするとします。 このシナリオでは、クラスターに2つのノードプールを作成できます。
ノードプールA: GPUメモリ分離が有効になっているノードを管理します。
ノードプールB: GPUメモリ分離およびコンピューティング能力制限が有効になっているノードを管理します。
GPUアクセラレーションノードのGPUスケジューリングポリシーを、ノードプールaが使用するポリシーからノードプールBが使用するポリシーに変更するには、ノードプールAからノードを削除し、ノードプールBにノードを追加します。詳細については、「ノードの削除」および「既存のECSインスタンスをACKクラスターに追加する」をご参照ください。
ノードのGPUスケジューリングポリシーを手動で変更する
ノードのGPUスケジューリングポリシーを手動で変更することもできます。 これを行うには、次の操作を実行する必要があります。
Set the node to Unschedulable: 新しいポッドを受け入れるノードを無効にします。
ノードのドレイン: ノードから既存のすべてのポッドを削除します。
ノードにログインしてラベル設定をリセットする: リセット操作は、ラベルの値によって異なります。 詳細については、「ラベル設定のリセット」をご参照ください。
ラベル値の変更: リセット操作が完了したら、
kubectl label
コマンドを実行してラベル値を変更します。Set the node to Schedulable: 新しいポッドを受け入れるノードを有効にします。
ラベル設定のリセット
ポリシー | ラベル | ラベル値を変更する前にラベル設定をリセットする操作 |
GPU共有 | ack.node.gpu.schedule=cgpu | bash /usr/local/cgpu-installer/uninstall.sh |
ack.node.gpu.schedule=core_mem | bash /usr/local/cgpu-installer/uninstall.sh |
関連ドキュメント
GPUモデルの指定に使用されるラベル、特定のGPUモデルへのアプリケーションのスケジュール方法、および特定のGPUモデルへのアプリケーションのスケジュールを回避する方法の詳細については、「GPUモデルの指定に使用されるラベル」をご参照ください。