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

Container Service for Kubernetes:スケジューリングの有効化

最終更新日:Mar 26, 2026

Container Service for Kubernetes (ACK) マネージドクラスター プロ版では、GPU ノードにスケジューリングラベルを割り当てることで、GPU リソースをワークロードに割り当てる方法を制御できます。これらのラベルを使用すると、排他アクセス、複数 Pod 間でのコンピュート共有、トポロジー対応の割り当て、またはハードウェアモデルベースのルーティングを設定でき、リソース使用率とワークロードの配置を詳細に制御できます。

スケジューリングラベルの概要

GPU スケジューリングラベルは、ノードのリソース割り当てポリシーを定義します。ノードは一度に 1 つの GPU スケジューリングモード (排他、共有、またはトポロジー対応) のみをサポートします。1 つのモードを有効にすると、他のすべてのモードの拡張リソースは自動的に 0 に設定されます。

4 つのスケジューリングモードは、コンピュートが隔離されているか、およびGPU メモリが隔離されているかという 2 つの主要な側面で異なります。モードを選択する際の出発点として、これらを参考にしてください。

スケジューリングモードラベル利用シーン
排他スケジューリング (デフォルト)ack.node.gpu.schedule: defaultGPU 全体を必要とするパフォーマンスクリティカルなワークロード (モデルトレーニング、ハイパフォーマンスコンピューティング (HPC) など)。
共有スケジューリングack.node.gpu.schedule: cgpu複数の軽量タスクの同時実行 (マルチテナンシー、推論など)。Alibaba Cloud cGPU テクノロジーに基づき、コンピュートを共有し、GPU メモリを隔離します。
ack.node.gpu.schedule: core_memPod ごとにコンピュートと GPU メモリを隔離します。
ack.node.gpu.schedule: shareコンピュートと GPU メモリを共有し、隔離は行いません。
ack.node.gpu.schedule: mpsNVIDIA MPS 隔離テクノロジーと Alibaba Cloud cGPU テクノロジーを組み合わせ、コンピュートを共有し、GPU メモリを隔離します。
配置ポリシー (マルチ GPU ノードでの共有スケジューリング用)ack.node.gpu.placement: binpackGPU 使用率の最大化やエネルギー消費の削減。1 つの GPU を完全に埋めてから次の GPU に移ります。デフォルト。
ack.node.gpu.placement: spread高可用性。単一カードの障害による影響を軽減するために、Pod を異なる GPU に分散させます。
トポロジー対応スケジューリングack.node.gpu.schedule: topologyGPU 間の通信レイテンシーに敏感なワークロード。ノード内の物理トポロジーに基づいて最適な GPU の組み合わせを割り当てます。
カードモデルスケジューリングaliyun.accelerator/nvidia_name: <GPU_card_name>ノードアフィニティルールを使用して、特定の GPU モデルを持つノードにジョブをルーティングするか、特定のモデルを除外します。
aliyun.accelerator/nvidia_mem: <memory_per_card>カードあたりの GPU メモリでフィルタリングします。カードモデルスケジューリングと併用します。
aliyun.accelerator/nvidia_count: <total_number_of_GPU_cards>ノード上の GPU カードの総数でフィルタリングします。カードモデルスケジューリングと併用します。
ack.node.gpu.placement ラベルは、共有スケジューリング (cgpucore_memshare、または mps) が有効な場合にのみ適用されます。binpackspread の値は相互排他的であり、一度に 1 つの配置ポリシーのみがノードごとにアクティブになります。

スケジューリング機能の有効化

排他スケジューリング

GPU スケジューリングラベルのないノードは、デフォルトで排他スケジューリングを使用します。各 Pod は 1 つの完全な GPU カードを取得します。

以前に別のモードが有効になっていた場合、ラベルを削除しても排他スケジューリングは復元されません。元に戻すには、ラベル値を明示的に設定します: kubectl label node <NODE_NAME> ack.node.gpu.schedule=default --overwrite

共有スケジューリング

共有スケジューリングは、ACK マネージドクラスター プロ版でのみ利用可能です。詳細については、「制限事項」をご参照ください。

ステップ 1: ack-ai-installer コンポーネントのインストール

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、[アプリケーション] > [クラウドネイティブ AI スイート] を選択します。

  3. [クラウドネイティブ AI スイート] ページで、[デプロイ] をクリックします。[クラウドネイティブ AI スイートのデプロイ] ページで、[スケジューリングポリシー拡張 (バッチタスクスケジューリング、GPU 共有、トポロジー対応 GPU スケジューリング)] を選択します。

    cGPU サービスのコンピュートスケジューリングポリシーの設定に関する詳細については、「cGPU サービスのインストールと使用」をご参照ください。
  4. [クラウドネイティブ AI スイートのデプロイ] をクリックします。[クラウドネイティブ AI スイート] ページで、インストール済みコンポーネントのリストに ack-ai-installer が表示されていることを確認します。

ステップ 2: ノードプールでの共有スケジューリングの有効化

  1. [クラスター] ページで、クラスター名をクリックします。左側のナビゲーションウィンドウで、[ノード] > [ノードプール] を選択します。

  2. [ノードプール] ページで、[ノードプールの作成] をクリックします。ノードラベルを設定し、[確認] をクリックします。他のフィールドはデフォルト値のままにします。ラベルの定義については、「スケジューリングラベルの概要」をご参照ください。

    • 基本共有スケジューリング: [ノードラベル] の横にある 节点标签 アイコンをクリックします。 [キー]ack.node.gpu.schedule に、[値] を次のいずれかに設定します:cgpucore_memshare、または mps。 > [注意]: mps を使用するには、MPS Control Daemon コンポーネントが必要です。 詳細については、「MPS Control Daemon コンポーネントのインストール」をご参照ください。

    • 配置ポリシー (マルチ GPU ノードのみ): 2 つ目のラベルを追加します。 节点标签 アイコンをクリックし、[キー]ack.node.gpu.placement に設定し、[値]binpack または spread に設定します。

ステップ 3: 共有スケジューリングが有効になっていることの確認

共有モードに対応するコマンドを実行します。<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 以外の場合、cgpushare、または mps 共有スケジューリングがアクティブであることを示します。

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"

core_mem 共有スケジューリングがアクティブであるためには、aliyun.com/gpu-core.percentagealiyun.com/gpu-mem の両方のフィールドが 0 以外である必要があります。

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%)

GPUx(Allocated/Total) 列には、そのカードで使用中のメモリ量が表示されます。GPU0 は完全に割り当てられており (15/15)、GPU1 は部分的に割り当てられています (9/15)。一方、GPU2 および GPU3 は Empty です。この順次充填パターン — 次のカードに進む前に 1 つのカードを詰め込む — により、binpack がアクティブであることが確認されます。

spread

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%)

GPU0、GPU1、GPU3 はそれぞれ 4/15 を示しており、GPU2 は Empty です。この分散割り当てパターン — 1 枚のカードを先に満たすのではなく、Pod を複数のカードに分散させること — により、spread がアクティブであることが確認されます。

core_mem

ビンパック

展開

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

トポロジー対応スケジューリングは、ACK マネージドクラスター プロ版でのみ利用可能です。バージョン要件については、「システムコンポーネントのバージョン要件」をご参照ください。

  1. ack-ai-installer コンポーネントをインストールします

  2. 対象ノードにトポロジーラベルを追加します:

    ノードでトポロジー対応スケジューリングを有効にすると、そのノードはトポロジー非対応の GPU ワークロードを受け入れなくなります。排他スケジューリングを復元するには、次のコマンドを実行します: kubectl label node <NODE_NAME> ack.node.gpu.schedule=default --overwrite
    kubectl label node <NODE_NAME> ack.node.gpu.schedule=topology
  3. トポロジー対応スケジューリングが有効になっていることを確認します:

    kubectl get nodes <NODE_NAME> -o yaml | grep aliyun.com/gpu

    期待される出力:

    aliyun.com/gpu: "2"

    aliyun.com/gpu フィールドの値が 0 以外の場合、トポロジー対応スケジューリングがアクティブであることを示します。

カードモデルスケジューリング

カードモデルスケジューリングは、ノードラベルと Kubernetes のノードアフィニティルールを使用して、ジョブを特定の GPU ハードウェアに固定したり、そこから遠ざけたりします。

ステップ 1: ノードの GPU カードモデルを確認する

kubectl get nodes -L aliyun.accelerator/nvidia_name

NVIDIA_NAME 列は、各ノードの GPU モデルを示します:

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

クリックして GPU モデルの他の確認方法を表示

ACK コンソールで、[ワークロード] > [Pod] に移動します。tensorflow-mnist-multigpu-\*\*\* などの Pod の [アクション] 列にある [ターミナル] をクリックし、コンテナ内で次のコマンドを実行します:

  • カードモデル: nvidia-smi --query-gpu=gpu_name --format=csv,noheader --id=0 | sed -e 's/ /-/g'

  • カードあたりの GPU メモリ: nvidia-smi --id=0 --query-gpu=memory.total --format=csv,noheader | sed -e 's/ //g'

  • ノード上の GPU カード総数: nvidia-smi -L | wc -l

image

ステップ 2: カードモデルスケジューリングでジョブを作成する

ACK コンソールで、[ワークロード] > [ジョブ] に移動し、[YAML から作成] をクリックします。以下の両方の例では、aliyun.accelerator/nvidia_name ラベルを使用して GPU モデルの選択を制御します。

image

GPU モデルの指定

nodeSelector を使用して、ジョブを特定の GPU モデルを持つノードに固定します。Tesla-V100-SXM2-32GB をご利用のクラスターのモデルに置き換えてください。

クリックして YAML ファイルの詳細を表示

apiVersion: batch/v1
kind: Job
metadata:
  name: tensorflow-mnist
spec:
  parallelism: 1
  template:
    metadata:
      labels:
        app: tensorflow-mnist
    spec:
      nodeSelector:
        aliyun.accelerator/nvidia_name: "Tesla-V100-SXM2-32GB" # アプリケーションを Tesla V100-SXM2-32GB GPU で実行します。
      containers:
      - name: tensorflow-mnist
        image: registry.cn-beijing.aliyuncs.com/acs/tensorflow-mnist-sample:v1.5
        command:
        - python
        - tensorflow-sample-code/tfjob/docker/mnist/main.py
        - --max_steps=1000
        - --data_dir=tensorflow-sample-code/data
        resources:
          limits:
            nvidia.com/gpu: 1
        workingDir: /root
      restartPolicy: Never

ジョブが作成された後、[ワークロード] > [Pod] に移動します。Pod リストには、一致するノードにスケジューリングされた Pod が表示され、カードモデルラベルスケジューリングが機能していることを確認できます。

GPU モデルの回避

nodeAffinityNotIn を使用して、ジョブが特定の GPU モデルを持つノードで実行されないようにします。Tesla-V100-SXM2-32GB を除外するモデルに置き換えてください。

クリックして YAML ファイルの詳細を表示

apiVersion: batch/v1
kind: Job
metadata:
  name: tensorflow-mnist
spec:
  parallelism: 1
  template:
    metadata:
      labels:
        app: tensorflow-mnist
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: aliyun.accelerator/nvidia_name  # カードモデルスケジューリングラベル
                operator: NotIn
                values:
                - "Tesla-V100-SXM2-32GB"            # Pod が Tesla-V100-SXM2-32GB カードを持つノードにスケジューリングされるのを防ぎます。
      containers:
      - name: tensorflow-mnist
        image: registry.cn-beijing.aliyuncs.com/acs/tensorflow-mnist-sample:v1.5
        command:
        - python
        - tensorflow-sample-code/tfjob/docker/mnist/main.py
        - --max_steps=1000
        - --data_dir=tensorflow-sample-code/data
        resources:
          limits:
            nvidia.com/gpu: 1
        workingDir: /root
      restartPolicy: Never

ジョブが作成された後、Pod は aliyun.accelerator/nvidia_name: Tesla-V100-SXM2-32GB ラベルを持つノードにはスケジュールされませんが、他の任意の GPU ノードで実行できます。

カード モデルを除外する