ACK マネージドクラスター Pro 版では、GPU ノードにスケジューリングラベルを割り当てることで、リソース使用率を最適化し、アプリケーションを正確にスケジューリングできます。これらのラベルは、排他的アクセス、共有利用、トポロジー認識、特定の GPU カードモデルなどのプロパティを定義します。
スケジューリングラベルの概要
GPU スケジューリングラベルは、GPU モデルとリソース割り当てポリシーを識別し、詳細なリソース管理と効率的なスケジューリングをサポートします。
スケジューリングモード | ラベル値 | シナリオ |
排他的スケジューリング (デフォルト) |
| モデルトレーニングやハイパフォーマンスコンピューティング (HPC) など、GPU 全体への排他的なアクセスを必要とするパフォーマンスクリティカルなタスク。 |
共有スケジューリング |
| GPU の使用率を向上させます。マルチテナンシーや推論など、複数の軽量タスクを同時に実行するシナリオに最適です。
|
|
| |
トポロジー認識スケジューリング |
| シングルノードの物理的な GPU トポロジーに基づいて、最適な GPU の組み合わせを Pod に自動的に割り当てます。これは、GPU 間の通信レイテンシーに敏感なタスクに適しています。 |
カードモデルスケジューリング |
これらのラベルをカードモデルスケジューリングと併用して、GPU ジョブの GPU メモリと GPU カードの総数を設定します。 | 特定の GPU モデルを持つノードにタスクをスケジューリングするか、特定のモデルを持つノードを回避します。 |
スケジューリング機能の有効化
1 つのノードで使用できる GPU スケジューリングモードは、排他的、共有、またはトポロジー認識のいずれか 1 つだけです。1 つのモードが有効になると、他のモードの拡張リソースは自動的に 0 に設定されます。
排他的スケジューリング
ノードに GPU スケジューリングラベルがない場合、デフォルトで排他的スケジューリングが有効になります。このモードでは、ノードは GPU リソースを Pod にカード単位で割り当てます。
他の GPU スケジューリングモードを有効にしている場合、ラベルを削除しても排他的スケジューリングは復元されません。排他的スケジューリングを復元するには、手動でラベル値を ack.node.gpu.schedule: default に変更する必要があります。共有スケジューリング
共有スケジューリングは、ACK マネージドクラスター Pro 版でのみ利用可能です。詳細については、「制限事項」をご参照ください。
ack-ai-installerコンポーネントのインストールACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラウドネイティブ AI スイート] ページで、[デプロイ] をクリックします。[クラウドネイティブ AI スイートのデプロイ] ページで、[スケジューリングポリシー拡張 (バッチタスクスケジューリング、GPU 共有、トポロジー認識 GPU スケジューリング)] を選択します。
cGPU サービスの計算能力スケジューリングポリシーの設定方法の詳細については、「cGPU サービスのインストールと使用」をご参照ください。
[クラウドネイティブ AI スイート] ページで、[クラウドネイティブ AI スイートのデプロイ] をクリックします。
[クラウドネイティブ AI スイート] ページで、ack-ai-installer コンポーネントがインストール済みコンポーネントのリストに表示されていることを確認します。
共有スケジューリングの有効化
[クラスター] ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[ノードプール] ページで、[ノードプールの作成] をクリックし、ノードラベルを設定してから、[確認] をクリックします。
他の設定項目はデフォルト値のままにできます。各ラベルの機能の詳細については、「スケジューリングラベルの概要」をご参照ください。
基本的な共有スケジューリングの設定
[ノードラベル] の
アイコンをクリックし、[キー] を ack.node.gpu.scheduleに設定し、cgpu、core_mem、share、またはmpsなどの値を選択します (MPS Control Daemon コンポーネントをインストールする必要があります)。マルチカード共有スケジューリングの設定
マルチ GPU ノードでは、基本的な共有スケジューリング設定に配置ポリシーを追加して、リソース割り当てを最適化できます。
[ノードラベル] の
アイコンをクリックし、[キー] を ack.node.gpu.placementに設定し、ラベル値としてbinpackまたはspreadを選択します。
共有スケジューリングが有効になっていることの確認
cgpu/share/mps<NODE_NAME> を対象ノードプール内のノード名に置き換えて、次のコマンドを実行し、ノードで
cgpu、share、またはmps共有スケジューリングが有効になっていることを確認します。kubectl get nodes <NODE_NAME> -o yaml | grep -q "aliyun.com/gpu-mem"期待される出力:
aliyun.com/gpu-mem: "60"aliyun.com/gpu-memフィールドが 0 でない場合、cgpu、share、またはmps共有スケジューリングが有効になっています。core_mem<NODE_NAME>を対象ノードプール内のノード名に置き換えて、次のコマンドを実行し、core_mem共有スケジューリングが有効になっていることを確認します。kubectl get nodes <NODE_NAME> -o yaml | grep -E 'aliyun\.com/gpu-core\.percentage|aliyun\.com/gpu-mem'期待される出力:
aliyun.com/gpu-core.percentage:"80" aliyun.com/gpu-mem:"6"aliyun.com/gpu-core.percentageとaliyun.com/gpu-memの両フィールドが 0 でない場合、core_mem共有スケジューリングが有効になっています。binpack共有 GPU のリソースクエリツールを使用して、ノード上の GPU リソース割り当てを確認します。
kubectl inspect cgpu期待される出力:
NAME IPADDRESS GPU0(Allocated/Total) GPU1(Allocated/Total) GPU2(Allocated/Total) GPU3(Allocated/Total) GPU Memory(GiB) cn-shanghai.192.0.2.109 192.0.2.109 15/15 9/15 0/15 0/15 24/60 -------------------------------------------------------------------------------------- Allocated/Total GPU Memory In Cluster: 24/60 (40%)出力結果から、GPU0 が完全に割り当てられ (15/15)、GPU1 が部分的に割り当てられている (9/15) ことがわかります。これは、
binpackポリシーがアクティブであることを示しています。このポリシーは、1 つの GPU を完全に満たしてから、次の GPU にリソースを割り当てます。spread共有スケジューリングのGPU リソースクエリツールを使用して、ノード上の GPU リソース割り当てを確認します。
kubectl inspect cgpu期待される出力:
名前 IPアドレス GPU0(割り当て済み/合計) GPU1(割り当て済み/合計) GPU2(割り当て済み/合計) GPU3(割り当て済み/合計) GPU メモリ (GiB) cn-shanghai.192.0.2.109 192.0.2.109 4/15 4/15 0/15 4/15 12/60 -------------------------------------------------------------------------------------- クラスター内の割り当て済み/合計 GPU メモリ: 12/60 (20%)出力は、リソース割り当てが GPU0 で 4/15、GPU1 で 4/15、GPU3 で 4/15 であることを示しています。これは、Pod を異なる GPU に分散させることを優先するスケジューリングポリシーと一致します。これにより、
spreadポリシーが有効であることが確認されます。
トポロジー認識スケジューリング
トポロジー認識スケジューリングは、ACK マネージドクラスター Pro 版でのみ利用可能です。詳細については、「システムコンポーネントのバージョン要件」をご参照ください。
トポロジー認識スケジューリングの有効化
<NODE_NAME> を対象ノードの名前に置き換えて、次のコマンドを実行し、ノードにラベルを追加してトポロジー認識 GPU スケジューリングを有効にします。
kubectl label node <NODE_NAME> ack.node.gpu.schedule=topologyノードでトポロジー認識スケジューリングを有効にすると、そのノードはトポロジーを認識しない GPU ワークロードをサポートしなくなります。排他的スケジューリングを復元するには、コマンド
kubectl label node <NODE_NAME> ack.node.gpu.schedule=default --overwriteを実行します。トポロジー認識スケジューリングが有効になっていることの確認
<NODE_NAME> を対象ノードの名前に置き換えて、次のコマンドを実行し、
topologyトポロジー認識スケジューリングが有効になっていることを確認します。kubectl get nodes <NODE_NAME> -o yaml | grep aliyun.com/gpu期待される出力:
aliyun.com/gpu: "2"aliyun.com/gpuフィールドが 0 でない場合、topologyトポロジー認識スケジューリングが有効になっています。
カードモデルスケジューリング
ジョブは、特定の GPU モデルを持つノードにスケジュールすることも、特定の GPU モデルを持つノードを回避することもできます。
ノード上の GPU カードモデルの表示
次のコマンドを実行して、クラスター内のノードの GPU カードモデルをクエリします。
NVIDIA_NAME フィールドに GPU カードモデルが表示されます。
kubectl get nodes -L aliyun.accelerator/nvidia_name期待される出力は次のようになります。
NAME STATUS ROLES AGE VERSION NVIDIA_NAME cn-shanghai.192.XX.XX.176 Ready <none> 17d v1.26.3-aliyun.1 Tesla-V100-SXM2-32GB cn-shanghai.192.XX.XX.177 Ready <none> 17d v1.26.3-aliyun.1 Tesla-V100-SXM2-32GBカードモデルスケジューリングの有効化
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[ジョブ] ページで、[YAML から作成] をクリックします。次の例を使用してアプリケーションを作成し、カードモデルスケジューリングを有効にします。

特定のカードモデルの指定
GPU カードモデルスケジューリングラベルを使用して、アプリケーションが特定のカードモデルを持つノードで実行されるようにします。
コード
aliyun.accelerator/nvidia_name: "Tesla-V100-SXM2-32GB"で、Tesla-V100-SXM2-32GBをご利用のノードのカードモデルに置き換えます。ジョブが作成された後、左側のナビゲーションウィンドウから を選択します。Pod リストに、サンプル Pod が一致するノードにスケジューリングされていることが表示されます。これにより、GPU カードモデルラベルに基づくスケジューリングが機能していることが確認できます。
特定のカードモデルの除外
GPU カードモデルスケジューリングラベルをノードアフィニティおよびアンチアフィニティと併用して、アプリケーションが特定のカードモデルで実行されないようにします。
values: - "Tesla-V100-SXM2-32GB"で、Tesla-V100-SXM2-32GBをご利用のノードのカードモデルに置き換えます。ジョブが作成された後、アプリケーションは
aliyun.accelerator/nvidia_nameタグキーとTesla-V100-SXM2-32GBタグ値を持つノードにはスケジューリングされません。ただし、他の GPU ノードにはスケジューリングできます。
