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

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

最終更新日:Nov 09, 2025

ACK Pro マネージドクラスターに GPU コンピューティングジョブをデプロイする際、GPU ノードにスケジューリングプロパティラベルを割り当てることができます。これらのラベル (排他的スケジューリング、共有スケジューリング、トポロジー対応スケジューリング、カードモデルラベルなど) は、リソース使用率を最適化し、正確なアプリケーションスケジューリングを可能にします。

スケジューリングラベル

GPU スケジューリングラベルは、GPU モデルとリソース割り当てポリシーを識別します。これにより、詳細なリソース管理と効率的なスケジューリングが可能になります。

スケジューリング機能

ラベル値

シナリオ

排他的スケジューリング (デフォルト)

ack.node.gpu.schedule: default

モデルトレーニングや HPC など、GPU カード全体を排他的に使用する必要がある高性能ジョブ。

共有スケジューリング

ack.node.gpu.schedule: cgpu

ack.node.gpu.schedule: core_mem

ack.node.gpu.schedule: share

ack.node.gpu.schedule: mps

GPU 使用率を向上させます。マルチテナンシーや推論ワークロードなど、複数の軽量ジョブが同時に実行されるシナリオに適しています。

  • cgpu: 計算能力を共有し、ビデオメモリを隔離します。Alibaba Cloud cGPU テクノロジーに基づいています。

  • core_mem: 計算能力とビデオメモリの両方を隔離します。

  • share: 計算能力とビデオメモリの両方を隔離なしで共有します。

  • mps: 計算能力を共有し、ビデオメモリを隔離します。NVIDIA Multi-Process Service (MPS) の隔離と Alibaba Cloud cGPU テクノロジーを組み合わせています。

ack.node.gpu.placement: binpack

ack.node.gpu.placement: spread

これは、cgpucore_memshare、および mps 共有スケジューリング機能が有効になった後、単一ノード上の複数の GPU カードのリソース割り当てポリシーを最適化する場合に適用されます。

  • binpack: (デフォルト) 複数のカードに Pod をコンパクトにスケジュールします。1 つの GPU を Pod で満たしてから、次の GPU に割り当てます。これにより、リソースの断片化が減少し、リソース使用率や省エネを優先するシナリオに最適です。

  • spread: Pod を異なる GPU に分散させます。これにより、単一カードの障害による影響が減少し、高可用性 (HA) ジョブに適しています。

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

ack.node.gpu.schedule: topology

単一ノード内の物理的な GPU トポロジーに基づいて、最適な通信帯域幅を持つ GPU の組み合わせに Pod を自動的に割り当てます。GPU 間の通信レイテンシーに敏感なジョブに適しています。

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

aliyun.accelerator/nvidia_name: <GPU_card_name>

カードモデルスケジューリングと併用して、GPU ジョブのビデオメモリ容量と GPU カードの総数を設定します。
aliyun.accelerator/nvidia_mem: <video_memory_per_card>
aliyun.accelerator/nvidia_count: <total_number_of_GPU_cards>

指定された GPU モデルを持つノードにジョブをスケジュールするか、指定されたモデルを持つノードを回避します。

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

排他的スケジューリング

ノードに GPU スケジューリングラベルがない場合、デフォルトで排他的スケジューリングが有効になります。このモードでは、ノードは単一 GPU の単位で Pod に GPU リソースを割り当てます。

他の GPU スケジューリング機能が有効になっている場合、ラベルを削除しても排他的スケジューリングは復元されません。排他的スケジューリング機能を復元するには、ラベル値を手動で ack.node.gpu.schedule: default に変更する必要があります。

共有スケジューリング

共有スケジューリングは ACK Pro マネージドクラスターでのみサポートされています。詳細については、「制限」をご参照ください。

  1. ack-ai-installer 共有スケジューリングコンポーネントをインストールする。

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

    2. クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アプリケーション] > [Cloud-native AI Suite] を選択します。

    3. [Cloud-native AI Suite] ページで、[デプロイ] をクリックします。[Cloud-native AI Suite のデプロイ] ページで、スケジューリングポリシー拡張 (バッチスケジューリング、GPU 共有、GPU トポロジー認識) を選択します。

      cGPU の計算能力スケジューリングポリシーの設定方法の詳細については、「cGPU コンポーネントのインストールと使用」をご参照ください。
    4. [Cloud-native AI Suite] ページで、[Cloud-native AI Suite のデプロイ] をクリックします。

      [Cloud-native AI Suite] ページで、コンポーネントリストからインストール済みの共有 GPU コンポーネント ack-ai-installer を見つけます。

  2. 共有スケジューリング機能を有効にする。

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

    2. [ノードプール] ページで、[ノードプールの作成] をクリックし、ノード ラベルを設定してから、[確認] をクリックします。

      他の設定項目については、デフォルト設定のままにすることができます。ノードラベルのシナリオの詳細については、「スケジューリングラベル」をご参照ください。
      • 基本的な共有スケジューリングを設定します。

        [ノードラベル]Node Labels アイコンをクリックし、[キー]ack.node.gpu.schedule に設定し、タグ値として cgpucore_memshare、または mps のいずれかを選択します (mps の場合は、MPS Control Daemon コンポーネントをインストールする必要があります)。

      • マルチカード共有スケジューリングを設定します。

        ノードに複数の GPU がある場合、マルチカード共有スケジューリングを設定してリソース割り当てを最適化できます。

        [ノードラベル]Node Label アイコンをクリックし、[キー]ack.node.gpu.placement に設定し、タグの値を binpack または spread に設定します。

  3. 共有スケジューリングが有効になっていることを確認する。

    cgpu/share/mps

    <NODE_NAME> をターゲットノードの名前に置き換えて次のコマンドを実行し、ノードプールで cgpushare、または 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

    <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 マネージドクラスターでのみサポートされています。詳細については、「システムコンポーネントのバージョン要件」をご参照ください。

  1. ack-ai-installer 共有スケジューリングコンポーネントをインストールします

  2. トポロジー対応スケジューリングを有効にする。

    <NODE_NAME> をターゲットノードの名前に置き換えて次のコマンドを実行し、ノードにラベルを追加します。これにより、ノードのトポロジー対応スケジューリング機能が有効になります。

    kubectl label node <NODE_NAME> ack.node.gpu.schedule=topology
    ノードのトポロジー対応スケジューリングを有効にすると、トポロジー非対応の GPU リソースのスケジューリングはサポートされなくなります。kubectl label node <NODE_NAME> ack.node.gpu.schedule=default --overwrite コマンドを実行してラベルを変更し、排他的スケジューリングを復元できます。
  3. トポロジー対応スケジューリングが有効になっていることを確認する。

    <NODE_NAME> をターゲットノードの名前に置き換えて次のコマンドを実行し、ノードプールで topology 対応スケジューリングが有効になっていることを確認します。

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

    期待される出力:

    aliyun.com/gpu: "2"

    aliyun.com/gpu フィールドの値が 0 でない場合、topology 対応スケジューリングが有効になっています。

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

指定した GPU モデルを持つノードにジョブをスケジュールしたり、特定のモデルを回避したりできます。

  1. ノードの 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

    GPU モデルを確認する他の方法を展開して表示します。

    [クラスター] ページで、ターゲットクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[ワークロード] > [Pod] を選択します。 作成したコンテナー (例: tensorflow-mnist-multigpu-***) の行で、[アクション] 列の [ターミナル] をクリックします。次に、ドロップダウンリストからログインするコンテナーを選択し、次のコマンドを実行します。

    • GPU モデルのクエリ: 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. カードモデルスケジューリングを有効にする。

    1. クラスター ページで、目的のクラスターを見つけてその名前をクリックします。左側のペインで、ワークロード > [ジョブ] を選択します。

    2. [ジョブ] ページで、[YAML から作成] をクリックします。次の例を使用してアプリケーションを作成し、カードモデルスケジューリング機能を有効にします。

      image

      特定のカードモデルを指定する

      GPU モデルラベルを使用して、特定の GPU モデルを持つノードでアプリケーションを実行します。

      aliyun.accelerator/nvidia_name: "Tesla-V100-SXM2-32GB" コード内の Tesla-V100-SXM2-32GB を、ノードの実際の GPU モデルに置き換えます。

      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 モデルラベルに基づく柔軟なスケジューリングを示しています。

      特定のカードモデルを除外する

      ノードアフィニティおよびアンチアフィニティとともに GPU モデルラベルを使用して、特定の GPU モデルでアプリケーションが実行されないようにします。

      values: - "Tesla-V100-SXM2-32GB" 内の Tesla-V100-SXM2-32GB を、ノードの実際の GPU モデルに置き換えます。

      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

      ジョブが作成された後、アプリケーションはラベルキー aliyun.accelerator/nvidia_name と値 Tesla-V100-SXM2-32GB を持つノードにはスケジュールされません。ただし、他の GPU モデルを持つ GPU ノードにはスケジュールできます。