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

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

最終更新日:Jun 22, 2026

ACK マネージドクラスター Pro で GPU コンピューティングジョブをデプロイする際に、スケジューリング属性ラベル (排他、共有、トポロジー対応など) と 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 テクノロジーに基づく、GPU メモリが分離されたコンピューティングパワーの共有。

  • core_mem: 分離されたコンピューティングパワーと GPU メモリ。

  • share: 分離なしでのコンピューティングパワーと GPU メモリの共有。

  • mps: NVIDIA Multi-Process Service (MPS) 分離テクノロジーと Alibaba Cloud cGPU テクノロジーを組み合わせた、GPU メモリが分離されたコンピューティングパワーの共有。

ack.node.gpu.placement: binpack

ack.node.gpu.placement: spread

cgpucore_memshare、または mps 共有スケジューリングが有効になっている場合、マルチ GPU ノードでのリソース割り当て戦略を最適化します。

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

  • spread: 分散マルチカードスケジューリング。Pod を異なる GPU に分散させることで、単一カードの障害による影響を軽減します。高可用性のワークロードに適しています。

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

ack.node.gpu.schedule: topology

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

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

aliyun.accelerator/nvidia_name: <GPU card name>

これらのラベルをカードモデルスケジューリングと併用して、GPU ジョブの GPU メモリ容量と GPU カードの総数を設定します。
aliyun.accelerator/nvidia_mem: <GPU memory per card>
aliyun.accelerator/nvidia_count: <total number of GPU cards>

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

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

1 つのノードで一度に有効にできる GPU スケジューリングモード (排他、共有、またはトポロジー対応) は 1 つだけです。あるモードを有効にすると、他のスケジューリングモードが報告する拡張リソースは自動的に 0 に設定されます。

排他スケジューリング

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

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

共有スケジューリング

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

  1. ack-ai-installer コンポーネントのインストール

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

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

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

      cGPU サービスがサポートするコンピューティングスケジューリングポリシーの設定方法については、「cGPU コンポーネントのインストールと使用」をご参照ください。
    4. クラウドネイティブ AI コンポーネントセット ページで、クラウドネイティブ AI コンポーネントセットのデプロイ をクリックします。

      クラウドネイティブ AI コンポーネントセット ページのコンポーネントリストで、[ack-ai-installer] コンポーネントがインストールされていることを確認します。

  2. 共有スケジューリングの有効化

    1. クラスターリスト ページで、対象クラスターの名前をクリックします。左側メニューで、ノード > ノードプール を選択します。

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

      他の設定はデフォルト値のままにできます。ノードラベルのユースケースについては、「スケジューリングラベルの概要」をご参照ください。
      • 基本的な共有スケジューリングの設定

        ノードラベル (Labels) の追加アイコン 节点标签 をクリックし、キーack.node.gpu.schedule に設定し、ラベル値として cgpucore_memshare、または mps (MPS Control Daemon コンポーネントのインストール が必要です) のいずれかを選択します。

      • マルチカード共有スケジューリングの設定

        ノードに複数の GPU カードがあり、リソース割り当てを最適化したい場合は、基本的な共有スケジューリングに加えて、さらにマルチカード共有スケジューリングを設定できます。

        ノードラベル (Labels) の追加アイコン 节点标签 をクリックし、キーack.node.gpu.placement に設定し、ラベル値として binpack または spread のいずれかを選択します。

  3. 共有スケジューリングの確認

    cgpu/share/mps

    <NODE_NAME> を対象ノードの名前に置き換えて、次のコマンドを実行し、cgpushare、または mps 共有スケジューリングが有効になっていることを確認します。

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

    出力例:

    aliyun.com/gpu-mem: "60"

    aliyun.com/gpu-mem フィールドの値がゼロ以外の場合、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.percentagealiyun.com/gpu-mem フィールドの両方がゼロ以外の場合、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%)

    出力は、割り当てられたリソースが GPU0 で 4/15、GPU1 で 4/15、GPU3 で 4/15 であることを示しています。これは、Pod を異なる GPU に分散させることを優先するスケジューリングポリシーと一致しており、spread ポリシーが有効になったことを示しています。

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

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

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

  2. トポロジー対応スケジューリングの有効化

    <NODE_NAME> を対象ノードの名前に置き換えて、次のコマンドを実行し、ノードにラベルを追加してトポロジー対応 GPU スケジューリングを明示的に有効にします。

    kubectl label node <NODE_NAME> ack.node.gpu.schedule=topology
    ノードでトポロジー対応 GPU スケジューリングを有効にすると、そのノードはトポロジー非対応の 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 カードモデルをクエリします。

    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

    代替の確認方法

    クラスターリスト ページで、対象クラスターの名前をクリックします。左側メニューで、ワークロード > ポッド を選択します。実行中の Pod (例:tensorflow-mnist-multigpu-***) の アクション 列で 端末 をクリックします。ドロップダウンリストから対象のコンテナーを選択し、次のコマンドを実行します。

    • カードモデルのクエリ: 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

  2. カードモデルスケジューリングの有効化

    1. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ワークロード] > [ジョブ] を選択します。

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

      カードモデルの指定

      GPU カードモデルスケジューリングラベルを使用して、アプリケーションが特定のカードモデルを持つノードで実行されるようにします。

      コード aliyun.accelerator/nvidia_name: "Tesla-V100-SXM2-32GB" 内の 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 が表示されます。これにより、GPU カードモデルラベルに基づくスケジューリングが正しく機能していることを確認できます。

      カードモデルの除外

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

      values: - "Tesla-V100-SXM2-32GB" 内の 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

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