全部產品
Search
文件中心

Container Service for Kubernetes:開啟調度功能

更新時間:Jan 13, 2026

ACK託管叢集Pro版叢集中部署GPU計算任務時,可通過為GPU節點分配調度屬性標籤(如獨佔、共用、拓撲感知等)和指定卡型標籤(卡型調度),實現資源使用率最佳化與應用精準調度。

調度標籤介紹

GPU調度標籤通過標識GPU型號、資源分派策略等資訊,實現資源精細化管理與高效調度。

調度模式

標籤值

適用情境

獨佔調度預設

ack.node.gpu.schedule: default

 效能要求高、需獨佔整卡的任務,如模型訓練、HPC等。

共用調度

ack.node.gpu.schedule: cgpu

ack.node.gpu.schedule: core_mem

ack.node.gpu.schedule: share

ack.node.gpu.schedule: mps

提升 GPU 利用率,適用於多租戶、推理等多個輕量型工作並發啟動並執行情境。

  • cgpu:算力共用,顯存隔離,基於阿里雲cGPU共用技術實現。

  • core_mem:算力與顯存隔離。

  • share:共用算力和顯存資源,無隔離。

  • mps:算力共用,顯存隔離,基於NVIDIA MPS隔離功能結合阿里雲cGPU技術實現。

ack.node.gpu.placement: binpack

ack.node.gpu.placement: spread

適用於在開啟cgpucore_memsharemps共用調度功能後,且單個節點含多張GPU卡,最佳化多GPU卡資源的分配策略。

  • binpack:(預設)多卡緊湊調度,多個Pod優先填滿一張GPU後再分配下一張,減少資源片段,適合資源使用率或節能優先的情境。

  • spread:多卡分散調度,將Pod分散到不同GPU上,降低單卡故障影響,適合高可用性任務。

拓撲感知調度

ack.node.gpu.schedule: topology

根據單機內GPU物理拓撲關係,為Pod自動分配通訊頻寬最優的GPU組合,適用於對GPU之間通訊延遲敏感的任務。

卡型調度

aliyun.accelerator/nvidia_name:<GPU顯卡名稱>

配合卡型調度設定GPU任務的顯存容量、總GPU卡數。
aliyun.accelerator/nvidia_mem:<每張卡的顯存容量>
aliyun.accelerator/nvidia_count:<總共擁有的GPU卡數>

將任務調度到指定 GPU 型號的節點上,或避開特定型號。

開啟調度功能

一個節點只能啟用一種 GPU 調度模式(獨佔、共用或拓撲感知)。啟用後,其他調度模式所上報的擴充資源將自動置為 0。

獨佔調度

節點未添加任何GPU調度標籤,則預設啟用獨佔調度。此時,節點以單張GPU卡為最小配置單位,為Pod提供GPU資源。

若已開啟其他GPU調度模式,僅刪除標籤無法恢複獨佔調度,需手動將標籤值修改為ack.node.gpu.schedule: default才能恢複獨佔調度能力。

共用調度

共用調度,僅支援ACK託管叢集Pro版。具體資訊,請參見使用限制

  1. 安裝共用調度組件ack-ai-installer

    1. 登入Container Service管理主控台,在左側導覽列選擇叢集列表

    2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇應用 > 雲原生AI套件

    3. 雲原生AI套件頁面,單擊一鍵部署。在一鍵部署雲原生AI套件頁面,選中調度策略擴充(批量任務調度、GPU共用、GPU拓撲感知)。

      如何設定cGPU服務支援的算力調度Policy策略,請參見安裝並使用cGPU服務
    4. 雲原生AI套件頁面,單擊部署雲原生AI套件

      雲原生AI套件頁面組件列表,查看已安裝的共用GPU組件ack-ai-installer

  2. 開啟共用調度功能。

    1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點池

    2. 節點池頁面,單擊建立節點池配置節點標籤,單擊確認配置

      其餘配置項資訊可保持預設。關於節點標籤的使用情境,請參見調度標籤介紹
      • 配置基礎共用調度。

        單擊節點標籤(Labels)節點標籤,設定ack.node.gpu.schedule,可選擇配置cgpucore_memsharemps(需安裝MPS Control Daemon組件)標籤值之一。

      • 配置多卡共用調度。

        當節點包含多張GPU卡,最佳化多GPU卡資源的分配策略時,可在基礎共用調度上,進一步配置多卡共用調度。

        單擊節點標籤(Labels)節點標籤,設定ack.node.gpu.placement,可選擇配置binpackspread標籤值之一。

  3. 驗證是否已開啟共用調度功能。

    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.percentagealiyun.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,符合優先填滿一張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>替換為目標節點名稱後,執行以下命令,為節點增加Label,顯式啟用節點的GPU拓撲感知調度功能。

    kubectl label node <NODE_NAME> ack.node.gpu.schedule=topology
    節點啟用GPU拓撲感知調度後,不再支援非拓撲感知GPU資源的調度。可以執行kubectl label node <NODE_NAME> ack.node.gpu.schedule=default --overwrite命令更改Label,恢複獨佔調度。
  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卡型。

    叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 容器組在建立的容器所在行(例如tensorflow-mnist-multigpu-***),單擊操作列的終端。然後從下拉式清單中選擇需要登入的容器,執行如下命令。

    • 查詢卡型:nvidia-smi --query-gpu=gpu_name --format=csv,noheader --id=0 | sed -e 's/ /-/g'

    • 查詢每張卡顯存容量: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上
            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(容器組)成功調度到對應的節點上,從而實現基於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節點。