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

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

最終更新日:Jan 13, 2026

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 共有技術に基づき、計算能力を共有し、GPU メモリを隔離します。

  • core_mem:計算能力と GPU メモリを隔離します。

  • share:計算能力と GPU メモリリソースを共有し、隔離は行いません。

  • mps:NVIDIA MPS 隔離技術と Alibaba Cloud cGPU 技術を組み合わせ、計算能力を共有し、GPU メモリを隔離します。

ack.node.gpu.placement: binpack

ack.node.gpu.placement: spread

cgpucore_memshare、または mps の共有が有効な場合に、マルチ GPU ノード上のリソース割り当て戦略を最適化します。

  • binpack:(デフォルト) 複数の Pod を集中的にスケジューリングします。1 つの GPU が Pod で満たされてから、次の利用可能な GPU に Pod を割り当てます。これにより、リソースの断片化が減少し、リソース使用率の最大化や省エネに最適です。

  • 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:<memory_per_card>
aliyun.accelerator/nvidia_count:<total_number_of_GPU_cards>

特定の GPU モデルを持つノードにタスクをスケジューリングするか、特定のモデルを持つノードを回避します。

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

1 つのノードで使用できる GPU スケジューリングモードは、排他的、共有、またはトポロジー認識のいずれか 1 つだけです。1 つのモードが有効になると、他のモードの拡張リソースは自動的に 0 に設定されます。

排他的スケジューリング

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

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

共有スケジューリング

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

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

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

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

      cGPU サービスの計算能力スケジューリングポリシーの設定方法の詳細については、「cGPU サービスのインストールと使用」をご参照ください。
    3. [クラウドネイティブ AI スイート] ページで、[クラウドネイティブ AI スイートのデプロイ] をクリックします。

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

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

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

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

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

        [ノードラベル]Node Label アイコンをクリックし、[キー]ack.node.gpu.schedule に設定し、cgpucore_memshare、または 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.percentagealiyun.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 版でのみ利用可能です。詳細については、「システムコンポーネントのバージョン要件」をご参照ください。

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

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

    <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 を実行します。
  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 モデルを持つノードにスケジュールすることも、特定の 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

    GPU カードモデルを確認する他の方法を展開して表示

    [クラスター] ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、[ワークロード] > [Pod] を選択します。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

    image

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

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

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

      image

      特定のカードモデルの指定

      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 リストに、サンプル 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 ノードにはスケジューリングできます。