ACK託管叢集Pro版支援為應用申請GPU顯存和算力,能夠協助您更精細化的使用GPU的顯存和算力資源。本文介紹如何通過共用GPU調度實現算力分配。
前提條件
-
已建立ACK託管叢集Pro版,且叢集版本為v1.20及以上。具體步驟,請參見建立ACK託管叢集。對於不同ACK版本的叢集,調度器版本需滿足以下要求。關於調度器各版本支援的功能,請參見kube-scheduler。
ACK叢集版本
調度器版本
1.30及以上
均支援
1.28
v1.28.1-aliyun-5.6-998282b9及以上
1.26
v1.26.3-aliyun-4.1-a520c096及以上
1.24
v1.24.3-ack-2.0及以上
1.22
v1.22.15-ack-2.0及以上
1.20
v1.20.4-ack-8.0及以上
-
已安裝共用GPU調度組件,且Chart版本為1.2.0以上。
-
cGPU版本為1.0.5及以上。若版本過低,請及時升級節點cGPU版本。
使用限制
-
共用GPU調度目前支援僅申請顯存和同時申請顯存和算力兩種任務,這兩種任務不能同時存在於一個節點上。
-
為任務申請算力時,有如下限制:
-
每張GPU提供的算力按100計量,代表100%算力。例如,申請20代表使用GPU卡的20%算力。
-
申請的算力值應為5的倍數,最小為5。如果不為5的倍數,任務將提交失敗。
-
-
目前只有以下地區支援GPU顯存算力分配功能。如果您需要使用該功能,請確保叢集所在地區在此範圍內。
地區
地區ID
華北2(北京)
cn-beijing
華東2(上海)
cn-shanghai
華東1(杭州)
cn-hangzhou
華北3(張家口)
cn-zhangjiakou
華南1(深圳)
cn-shenzhen
西南1(成都)
cn-chengdu
華南2(河源)
cn-heyuan
中國香港
cn-hongkong
印尼(雅加達)
ap-southeast-5
新加坡
ap-southeast-1
泰國(曼穀)
ap-southeast-7
美國(維吉尼亞)
us-east-1
美國(矽谷)
us-west-1
日本(東京)
ap-northeast-1
華東2 金融雲
cn-shanghai-finance-1
-
共用GPU調度支援算力分配的調度器於2022年03月01日上線,在此之後建立的叢集將使用新版本調度器,在此之前已有叢集的調度器不會自動升級到新版本,需要您手動操作。若您的叢集建立時間早於2022年03月01日,請按照如下操作進行處理:
-
提交工單申請新版共用GPU調度內測。
-
卸載舊版共用GPU組件。
如果已安裝舊版共用GPU組件(僅支援顯存共用,Chart版本≤1.2.0),請按照以下步驟進行處理。
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
-
在Helm頁面,單擊ack-ai-installer右側操作列下方的移除,然後在彈出的刪除應用對話方塊,單擊確定。
-
安裝新版共用GPU組件。具體操作,請參見管理共用GPU調度組件。
-
步驟一:建立支援算力分配的節點池
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
-
在節點池頁面,單擊建立節點池。
部分參數配置說明如下,更多詳細說明,請參見建立和管理節點池。
配置項
說明
節點池名稱
設定節點池名稱。本文配置為
gpu-core。期望節點數
設定節點池初始節點數量。
節點標籤
為叢集節點添加標籤,本文配置如下:
-
開啟節點GPU顯存和算力隔離能力:單擊
,輸入第一個節點標籤的鍵為ack.node.gpu.schedule,值為core_mem。 -
在節點上使用Binpack演算法為Pod選擇GPU卡:單擊
,輸入第二個節點標籤的鍵為ack.node.gpu.placement,值為binpack。
關於節點標籤的更多資訊,請參見ACK調度GPU使用的節點標籤說明。
重要如果需要將叢集中已存在的GPU節點切換為算力隔離模式,請先將該節點從叢集中移除,然後重新加入支援算力隔離的節點池。不支援直接使用
kubectl label nodes <NODE_NAME> ack.node.gpu.schedule=core_mem命令將該GPU節點切換為算力隔離模式。 -
步驟二:查看節點池是否開啟算力分配功能
執行以下命令,查看節點池的節點是否開啟算力分配功能。
kubectl get nodes <NODE_NAME> -o yaml
預期輸出:
#省略其他欄位。
status:
#省略其他欄位。
allocatable:
#節點共有400%的算力,4張GPU卡,每張卡提供100%算力。
aliyun.com/gpu-core.percentage: "400"
aliyun.com/gpu-count: "4"
#節點共有60 GiB顯存,4張GPU卡,每張卡提供15 GiB顯存。
aliyun.com/gpu-mem: "60"
capacity:
aliyun.com/gpu-core.percentage: "400"
aliyun.com/gpu-count: "4"
aliyun.com/gpu-mem: "60"
預期輸出表明,存在aliyun.com/gpu-core.percentage欄位,即算力分配功能已開啟。
步驟三:使用算力分配功能
在未使用算力分配功能前,Pod可以100%使用一張總顯存為15 GiB的GPU卡。本文將以同時申請顯存和算力任務,申請2 GiB顯存、一張GPU卡的30%算力為例,介紹如何使用GPU顯存算力分配功能。
-
使用以下YAML內容建立任務,申請GPU顯存和算力。
apiVersion: batch/v1 kind: Job metadata: name: cuda-sample spec: parallelism: 1 template: metadata: labels: app: cuda-sample spec: containers: - name: cuda-sample image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:benchmark-tensorflow-2.2.3 command: - bash - run.sh - --num_batches=500000000 - --batch_size=8 resources: limits: # 單位為GiB,該Pod總共申請了2 GiB顯存。 aliyun.com/gpu-mem: 2 #申請一張GPU卡的30%算力。 aliyun.com/gpu-core.percentage: 30 workingDir: /root restartPolicy: Never -
執行以下命令部署cuda-sample任務。
kubectl apply -f /tmp/cuda-sample.yaml說明任務使用的鏡像較大,拉取需要時間,請耐心等待。
-
執行以下命令,查看cuda-sample任務的運行狀態。
kubectl get po -l app=cuda-sample預期輸出:
NAME READY STATUS RESTARTS AGE cuda-sample-m**** 1/1 Running 0 15s預期輸出表明,
STATUS為Running,即任務部署成功。 -
執行以下命令,查看顯存和算力的使用方式。
kubectl exec -ti cuda-sample-m**** -- nvidia-smi預期輸出:
Fri May 23 07:23:13 2025 +---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.161.07 Driver Version: 535.161.07 CUDA Version: 12.2 | |-----------------------------------------+----------------------+----------------------+ | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+======================+======================| | 0 Tesla T4 On | 00000000:00:08.0 Off | 0 | | N/A 50C P0 36W / 70W | 2038MiB / 2048MiB | 30% Default | | | | N/A | +-----------------------------------------+----------------------+----------------------+ +---------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=======================================================================================| +---------------------------------------------------------------------------------------+預期輸出表明:
-
顯存:未開啟算力分配功能前,Pod可以使用GPU卡的全部顯存(15 GiB)。開啟後,Pod當前已使用2038 MiB,總顯存為2048 MiB,顯存隔離生效。
-
算力:未使用算力分配功能前,Pod可以100%使用GPU卡。開啟後,Pod已使用30%算力,算力隔離生效。
說明如果有n個任務,每個任務申請30%算力(n≤3),n個任務運行在同一張GPU卡上,此時在每個Pod中執行
nvidia-smi命令,可以看到算力為n*30%。nvidia-smi命令的查詢結果目前僅顯示以卡為單位的算力利用率。 -
-
使用以下命令,查看Pod日誌。
kubectl logs cuda-sample-m**** -f預期輸出:
Generating training model Initializing graph Running warm up Done warm up Time Step Img/sec total_loss 2025-05-23 07:17 1 images/sec: 16.9 +/- 0.0 (jitter = 0.0) 7.670 2025-05-23 07:17 10 images/sec: 17.0 +/- 0.2 (jitter = 0.5) 7.947 2025-05-23 07:17 20 images/sec: 17.1 +/- 0.1 (jitter = 0.4) 8.113 2025-05-23 07:17 30 images/sec: 17.1 +/- 0.1 (jitter = 0.6) 7.214 2025-05-23 07:18 40 images/sec: 17.1 +/- 0.1 (jitter = 0.7) 7.878 2025-05-23 07:18 50 images/sec: 17.2 +/- 0.1 (jitter = 0.7) 8.056 2025-05-23 07:18 60 images/sec: 17.2 +/- 0.1 (jitter = 0.7) 7.990 2025-05-23 07:18 70 images/sec: 17.2 +/- 0.1 (jitter = 0.7) 7.892 2025-05-23 07:18 80 images/sec: 17.2 +/- 0.1 (jitter = 0.7) 7.133 2025-05-23 07:18 90 images/sec: 17.2 +/- 0.1 (jitter = 0.6) 7.789由預期輸出得到,使用算力分配功能後,Pod日誌重新整理較慢,此時算力被限制在該GPU卡的30%左右。
-
可選:驗證完畢後,您可以對任務進行刪除操作。執行以下命令,刪除cuda-sample任務。
kubectl delete job cuda-sample