ACK Pro マネージドクラスターに GPU コンピューティングジョブをデプロイする際、GPU ノードにスケジューリングプロパティラベルを割り当てることができます。これらのラベル (排他的スケジューリング、共有スケジューリング、トポロジー対応スケジューリング、カードモデルラベルなど) は、リソース使用率を最適化し、正確なアプリケーションスケジューリングを可能にします。
スケジューリングラベル
GPU スケジューリングラベルは、GPU モデルとリソース割り当てポリシーを識別します。これにより、詳細なリソース管理と効率的なスケジューリングが可能になります。
スケジューリング機能 | ラベル値 | シナリオ |
排他的スケジューリング (デフォルト) |
| モデルトレーニングや HPC など、GPU カード全体を排他的に使用する必要がある高性能ジョブ。 |
共有スケジューリング |
| GPU 使用率を向上させます。マルチテナンシーや推論ワークロードなど、複数の軽量ジョブが同時に実行されるシナリオに適しています。
|
| これは、
| |
トポロジー対応スケジューリング |
| 単一ノード内の物理的な GPU トポロジーに基づいて、最適な通信帯域幅を持つ GPU の組み合わせに Pod を自動的に割り当てます。GPU 間の通信レイテンシーに敏感なジョブに適しています。 |
カードモデルスケジューリング |
カードモデルスケジューリングと併用して、GPU ジョブのビデオメモリ容量と GPU カードの総数を設定します。 | 指定された GPU モデルを持つノードにジョブをスケジュールするか、指定されたモデルを持つノードを回避します。 |
スケジューリング機能の有効化
排他的スケジューリング
ノードに GPU スケジューリングラベルがない場合、デフォルトで排他的スケジューリングが有効になります。このモードでは、ノードは単一 GPU の単位で Pod に GPU リソースを割り当てます。
他の GPU スケジューリング機能が有効になっている場合、ラベルを削除しても排他的スケジューリングは復元されません。排他的スケジューリング機能を復元するには、ラベル値を手動で ack.node.gpu.schedule: default に変更する必要があります。共有スケジューリング
共有スケジューリングは ACK Pro マネージドクラスターでのみサポートされています。詳細については、「制限」をご参照ください。
ack-ai-installer共有スケジューリングコンポーネントをインストールする。ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[Cloud-native AI Suite] ページで、[デプロイ] をクリックします。[Cloud-native AI Suite のデプロイ] ページで、スケジューリングポリシー拡張 (バッチスケジューリング、GPU 共有、GPU トポロジー認識) を選択します。
cGPU の計算能力スケジューリングポリシーの設定方法の詳細については、「cGPU コンポーネントのインストールと使用」をご参照ください。
[Cloud-native AI Suite] ページで、[Cloud-native AI Suite のデプロイ] をクリックします。
[Cloud-native AI Suite] ページで、コンポーネントリストからインストール済みの共有 GPU コンポーネント ack-ai-installer を見つけます。
共有スケジューリング機能を有効にする。
[クラスター] ページで、ターゲットクラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
[ノードプール] ページで、[ノードプールの作成] をクリックし、ノード ラベルを設定してから、[確認] をクリックします。
他の設定項目については、デフォルト設定のままにすることができます。ノードラベルのシナリオの詳細については、「スケジューリングラベル」をご参照ください。
基本的な共有スケジューリングを設定します。
[ノードラベル] の
アイコンをクリックし、[キー] を ack.node.gpu.scheduleに設定し、タグ値としてcgpu、core_mem、share、またはmpsのいずれかを選択します (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 リソースクエリツールを使用して、次のコマンドを実行し、ノードの 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) ことを示しています。これは、次のリソースを割り当てる前に 1 つの GPU を埋めるという戦略に一致しており、
binpackポリシーが有効であることを確認します。spread共有スケジューリングの 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 4/15 4/15 0/15 4/15 12/60 -------------------------------------------------------------------------------------- Allocated/Total GPU Memory In Cluster: 12/60 (20%)出力は、リソースの 4/15 が GPU0 に、4/15 が GPU1 に、4/15 が GPU3 に割り当てられていることを示しています。これは、Pod が異なる GPU に分散されているため、
spreadポリシーが有効であることを確認します。
トポロジー対応スケジューリング
トポロジー対応スケジューリングは ACK Pro マネージドクラスターでのみサポートされています。詳細については、「システムコンポーネントのバージョン要件」をご参照ください。
トポロジー対応スケジューリングを有効にする。
<NODE_NAME> をターゲットノードの名前に置き換えて次のコマンドを実行し、ノードにラベルを追加します。これにより、ノードのトポロジー対応スケジューリング機能が有効になります。
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 フィールドにあります。
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 モデルラベルを使用して、特定の GPU モデルを持つノードでアプリケーションを実行します。
aliyun.accelerator/nvidia_name: "Tesla-V100-SXM2-32GB"コード内のTesla-V100-SXM2-32GBを、ノードの実際の GPU モデルに置き換えます。ジョブが作成された後、左側のナビゲーションウィンドウで を選択できます。Pod リストでは、サンプル Pod が一致するノードに正常にスケジュールされていることがわかります。これは、GPU モデルラベルに基づく柔軟なスケジューリングを示しています。
特定のカードモデルを除外する
ノードアフィニティおよびアンチアフィニティとともに GPU モデルラベルを使用して、特定の GPU モデルでアプリケーションが実行されないようにします。
values: - "Tesla-V100-SXM2-32GB"内のTesla-V100-SXM2-32GBを、ノードの実際の GPU モデルに置き換えます。ジョブが作成された後、アプリケーションはラベルキー
aliyun.accelerator/nvidia_nameと値Tesla-V100-SXM2-32GBを持つノードにはスケジュールされません。ただし、他の GPU モデルを持つ GPU ノードにはスケジュールできます。
