在ACK託管叢集Pro版叢集中部署GPU計算任務時,可通過為GPU節點分配調度屬性標籤(如獨佔、共用、拓撲感知等)和指定卡型標籤(卡型調度),實現資源使用率最佳化與應用精準調度。
調度標籤介紹
GPU調度標籤通過標識GPU型號、資源分派策略等資訊,實現資源精細化管理與高效調度。
調度模式 | 標籤值 | 適用情境 |
獨佔調度(預設) |
| 效能要求高、需獨佔整卡的任務,如模型訓練、HPC等。 |
共用調度 |
| 提升 GPU 利用率,適用於多租戶、推理等多個輕量型工作並發啟動並執行情境。
|
| 適用於在開啟
| |
拓撲感知調度 |
| 根據單機內GPU物理拓撲關係,為Pod自動分配通訊頻寬最優的GPU組合,適用於對GPU之間通訊延遲敏感的任務。 |
卡型調度 |
配合卡型調度設定GPU任務的顯存容量、總GPU卡數。 | 將任務調度到指定 GPU 型號的節點上,或避開特定型號。 |
開啟調度功能
一個節點只能啟用一種 GPU 調度模式(獨佔、共用或拓撲感知)。啟用後,其他調度模式所上報的擴充資源將自動置為 0。
獨佔調度
節點未添加任何GPU調度標籤,則預設啟用獨佔調度。此時,節點以單張GPU卡為最小配置單位,為Pod提供GPU資源。
若已開啟其他GPU調度模式,僅刪除標籤無法恢複獨佔調度,需通過節點池將標籤值修改為 ack.node.gpu.schedule: default 才能恢複獨佔調度能力。共用調度
共用調度,僅支援ACK託管叢集Pro版。具體資訊,請參見使用限制。
安裝共用調度組件
ack-ai-installer。登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在雲原生AI套件頁面,單擊一鍵部署。在一鍵部署雲原生AI套件頁面,選中調度策略擴充(批量任務調度、GPU共用、GPU拓撲感知)。
如何設定cGPU服務支援的算力調度Policy策略,請參見安裝並使用cGPU服務。
在雲原生AI套件頁面,單擊部署雲原生AI套件。
在雲原生AI套件頁面組件列表,查看已安裝的共用GPU組件ack-ai-installer。
開啟共用調度功能。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在節點池頁面,單擊建立節點池配置節點標籤,單擊確認配置。
其餘配置項資訊可保持預設。關於節點標籤的使用情境,請參見調度標籤介紹。
配置基礎共用調度。
單擊節點標籤(Labels)的
,設定鍵為ack.node.gpu.schedule,可選擇配置cgpu、core_mem、share、mps(需安裝MPS Control Daemon組件)標籤值之一。配置多卡共用調度。
當節點包含多張GPU卡,最佳化多GPU卡資源的分配策略時,可在基礎共用調度上,進一步配置多卡共用調度。
單擊節點標籤(Labels)的
,設定鍵為ack.node.gpu.placement,可選擇配置binpack、spread標籤值之一。
驗證是否已開啟共用調度功能。
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.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,符合優先填滿一張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版。具體資訊,請參見系統組件版本要求。
開啟拓撲感知調度功能。
通過節點池為 GPU 節點添加拓撲感知調度標籤:在目標節點池的節點標籤中,設定 鍵 為
ack.node.gpu.schedule,值為topology。節點啟用GPU拓撲感知調度後,不再支援非拓撲感知GPU資源的調度。如需恢複,請通過節點池將標籤值改為
default。驗證是否已開啟拓撲感知調度功能。
將變數<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卡型。
執行以下命令,在叢集中查詢節點的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開啟卡型調度。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在任務頁面,單擊使用YAML建立資源。使用如下樣本建立應用,並開啟卡型調度功能。
指定特定卡型
利用GPU卡型調度標籤,讓業務運行在指定卡型的節點上。
將
aliyun.accelerator/nvidia_name: "Tesla-V100-SXM2-32GB"代碼中Tesla-V100-SXM2-32GB替換為節點實際卡型。建立成功後,可在左側導覽列中選擇,查看樣本 Pod 是否已調度到對應卡型的節點上。
屏蔽特定卡型
利用GPU卡型調度標籤,通過節點親和性與反親和性,避免讓業務運行在某些卡型上。
將
values: - "Tesla-V100-SXM2-32GB"中Tesla-V100-SXM2-32GB替換為節點實際卡型。建立成功後,應用不會調度到標籤鍵為
aliyun.accelerator/nvidia_name且對應值為Tesla-V100-SXM2-32GB的節點,但允許調度到其他卡型的GPU節點。
最佳實務:以節點池劃分調度方式
建議為每種 GPU 調度模式建立獨立的節點池,通過節點池標籤統一管理調度屬性,避免在同一節點池內混用多種調度模式。推薦劃分方式如下:
獨佔調度節點池:無需添加任何 GPU 調度標籤,節點預設即為獨佔調度。適用於模型訓練、HPC 等需獨佔整卡的任務。
共用調度節點池:設定
ack.node.gpu.schedule: cgpu(或其他共用標籤值)。適用於推理服務、多租戶等需提升 GPU 利用率的情境。拓撲感知節點池:設定
ack.node.gpu.schedule: topology。適用於分布式訓練等對 GPU 間通訊延遲敏感的任務。
卡型調度標籤(aliyun.accelerator/nvidia_name)可與上述任意調度模式組合使用,用於進一步限制 Pod 調度到指定 GPU 型號的節點。
變更調度模式
若需變更某個節點的調度模式,必須將該節點從原節點池移除,再加入目標調度模式的節點池。
若需變更整個節點池的調度模式,請通過節點池操作修改標籤。修改節點池標籤預設僅對新增節點生效;如需同步到存量節點,請在編輯節點池時勾選同步更新存量節點的汙點(Taints)及節點標籤(Labels)。
重要通過
kubectl label直接修改節點調度標籤可能存在潛在風險,強烈不建議這樣操作。直接執行
kubectl label node <NODE_NAME> ack.node.gpu.schedule=<value> --overwrite切換調度模式,可能導致節點上已啟動並執行 GPU Pod 資源分派異常,甚至觸發 Pod 驅逐或不可恢複的調度錯誤。請通過節點池標籤統一管理調度模式,確保節點池內所有節點標籤一致。