すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:GPUスケジューリングポリシーを有効にするラベルとラベル値を変更する方法

最終更新日:Dec 12, 2024

クラウドネイティブaiスイートが提供するスケジューリングコンポーネントack-AI-installerをインストールした後、GPU高速化ノードにラベルを追加して、GPU共有やトポロジ対応のGPUスケジューリングなどのスケジューリングポリシーを有効にすることができます。 このトピックでは、さまざまなGPUスケジューリングポリシーを有効にするためのラベルについて説明します。 このトピックでは、ラベルの値を変更する方法についても説明します。

GPUスケジューリングポリシーを有効にするためのラベル

ack.node.gpu.schedule

ポリシー

ラベル値

他のラベル値がサポートされているかどうか

説明

排他的GPUスケジューリング

default

はい。 次のラベル値がサポートされています。

  • GPU共有ポリシーに対応するラベル値。

  • トポロジ対応GPUスケジューリングポリシーに対応するラベル値。

  • このラベル値は、排他的なGPUスケジューリングポリシーを有効にします。 GPUリソースは、GPUによってポッドに割り当てられます。

  • デフォルトでは、クラスターに新しく追加されたGPU高速化ノードにはack.node.gpu.schedule:defaultラベルがなく、専用のGPUスケジューリングポリシーが使用されます。

  • gpu共有ポリシーを有効にするためにack.node. GPU. scheduleラベルが既にノードに追加されていて、そのノードで排他的なGPUスケジューリングポリシーを使用する場合は、ack.node.gpu.schedule: デフォルトラベルをノードに追加する必要があります。 ノードからack.node. GPU. scheduleラベルを削除して、排他的なgpuスケジューリングポリシーを使用するようにノードを設定することはできません。

GPU共有

cpu

はい。 次のラベル値がサポートされています。

  • 排他的なGPUスケジューリングポリシーに対応するラベル値。

  • トポロジ対応GPUスケジューリングポリシーに対応するラベル値。

  • このラベル値は、GPU共有ポリシーを有効にします。

  • GPU共有が有効になっているノードは、GPU分離モジュールcGPUと共にインストールされます。 cGPUの詳細については、「DockerコンテナーへのcGPUのインストールと使用」をご参照ください。

  • デフォルトでは、cGPUの計算能力スケジューリングポリシーは5に設定されています。 計算能力スケジューリングポリシーの詳細については、「DockerコンテナーへのcGPUのインストールと使用」をご参照ください。

  • ポッドはGPUメモリのみを要求できます。 GPUメモリの分離とコンピューティング能力の共有は、同じGPUを共有するポッドに対して実装されます。

core_mem

はい。 次のラベル値がサポートされています。

  • 排他的なGPUスケジューリングポリシーに対応するラベル値。

  • トポロジ対応GPUスケジューリングポリシーに対応するラベル値。

  • このラベル値は、GPU共有ポリシーを有効にします。

  • GPU共有が有効になっているノードは、GPU分離モジュールcGPUと共にインストールされます。 cGPUの詳細については、「DockerコンテナーへのcGPUのインストールと使用」をご参照ください。

  • デフォルトでは、cGPUの計算能力スケジューリングポリシーは3に設定されています。 計算能力スケジューリングポリシーの詳細については、「DockerコンテナーへのcGPUのインストールと使用」をご参照ください。

  • ポッドは、GPUメモリとコンピューティングパワーの両方を要求する必要があります。 同じGPUを共有するポッドは、限られたGPUメモリと計算能力しか使用できません。

share

はい。 次のラベル値がサポートされています。

  • 排他的なGPUスケジューリングポリシーに対応するラベル値。

  • トポロジ対応GPUスケジューリングポリシーに対応するラベル値。

  • cpu

  • core_mem

  • このラベル値は、GPU共有ポリシーを有効にします。

  • GPU共有が有効になっているノードは、GPU分離モジュールcGPUと共にインストールされていません。

  • ポッドはGPUメモリのみを要求できます。 コンピューティング能力共有は、同じGPUを共有するポッドに対して実装される。

トポロジ対応のGPUスケジューリング

トポロジ

はい。 次のラベル値がサポートされています。

  • 排他的なGPUスケジューリングポリシーに対応するラベル値。

  • トポロジ対応GPUスケジューリングポリシーに対応するラベル値。

  • ラベル値は、トポロジ認識GPUスケジューリングポリシーを有効にします。

  • GPUリソースは、GPUによってポッドに割り当てられます。 各ポッドに割り当てられるGPUの数は、GPU間のデータ転送の帯域幅によって異なります。

動的マルチインスタンスGPU (MIG) パーティショニング

ミグ

いいえ。

  • このラベル値はMIG機能を有効にします。

  • ノードは、そのノードがサポートするMIGインスタンスの最大数をスケジューラに報告する。 各コンテナは最大で1つのMIGインスタンスを要求できます。

  • MIG機能を有効にするには、ノードのハードウェア属性も変更する必要があります。 したがって、ノードプールのMIG機能を無効にする場合は、現在のノードプールを削除してから、MIGが無効になっている別のノードプールを作成する必要があります。 kubectl labelコマンドを実行してラベル値を変更しても、別のGPUスケジューリングポリシーに切り替えることはできません。

ack.node.gpu.placement

ポリシー

ラベル値

他のラベル値がサポートされているかどうか

説明

GPU共有

スプレッド

はい。 ラベル値をbinpackに変更できます。

  • ポリシーは、ノードのGPU共有が有効になっている場合にのみ有効になります。

  • このポリシーは、ノードに複数のGPUがある場合、ポッドを異なるGPUに分散します。

binpack

はい。 スプレッドするラベル値を変更できます。

  • ポリシーは、ノードのGPU共有が有効になっている場合にのみ有効になります。

  • ノードに複数のGPUがある場合、ポリシーは別のGPUに切り替える前に、GPUのすべてのリソースをポッドに割り当てます。 これにより、GPUフラグメントを回避できます。

  • GPU共有が有効になっているGPU高速化ノードにack.node.gpu.placementラベルがない場合、スケジューラはbinpackポリシーを使用してGPUリソースをポッドにスケジュールします。

ラベル値の変更

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メモリ分離およびコンピューティング能力制限が有効になっているノードを管理します。

2.png

GPUアクセラレーションノードのGPUスケジューリングポリシーを、ノードプールaが使用するポリシーからノードプールBが使用するポリシーに変更するには、ノードプールAからノードを削除し、ノードプールBにノードを追加します。詳細については、「ノードの削除」および「既存のECSインスタンスをACKクラスターに追加する」をご参照ください。

ノードのGPUスケジューリングポリシーを手動で変更する

ノードのGPUスケジューリングポリシーを手動で変更することもできます。 これを行うには、次の操作を実行する必要があります。

  1. Set the node to Unschedulable: 新しいポッドを受け入れるノードを無効にします。

  2. ノードのドレイン: ノードから既存のすべてのポッドを削除します。

  3. ノードにログインしてラベル設定をリセットする: リセット操作は、ラベルの値によって異なります。 詳細については、「ラベル設定のリセット」をご参照ください。

  4. ラベル値の変更: リセット操作が完了したら、kubectl labelコマンドを実行してラベル値を変更します。

  5. Set the node to Schedulable: 新しいポッドを受け入れるノードを有効にします。

3.png

ラベル設定のリセット

ポリシー

ラベル

ラベル値を変更する前にラベル設定をリセットする操作

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モデルの指定に使用されるラベル」をご参照ください。