共享GPU調度作為一種資源管理策略,允許多個任務或進程共享同一GPU。您可以在注冊集群中使用共享GPU調度,幫您解決傳統GPU調度的資源浪費問題,從而提升GPU利用率。
前提條件
已創建注冊集群,并將自建Kubernetes集群接入注冊集群。具體操作,請參見創建注冊集群并接入本地數據中心集群。
已通過kubectl連接注冊集群。具體操作,請參見獲取集群KubeConfig并通過kubectl工具連接集群。
系統組件版本具體要求如下表所示。
組件
版本要求
Kubernetes
1.22及以上版本
操作系統
CentOS 7.6
CentOS 7.7
Ubuntu 16.04
Ubuntu 18.04
Alibaba Cloud Linux 2(停止維護)
Alibaba Cloud Linux 3
計費說明
共享GPU調度目前已實行收費。在使用共享GPU調度前,需開通云原生AI套件。具體收費信息,請參見云原生AI套件計費說明。關于云原生AI套件的更多信息,請參見云原生AI套件概述。
使用限制
請勿將共享GPU調度的節點的
CpuPolicy
設置為static
。共享GPU的Daemonset的Pod在節點上的優先級不是最高的,所以節點資源有可能被其他優先級高的Pod搶占而導致被驅逐。如果想避免這個問題,可以對您實際使用的Daemonset(如共享GPU顯存的
gpushare-device-plugin-ds
)進行修改,加上priorityClassName: system-node-critical
來保證其優先級。
步驟一:安裝組件
在注冊集群中安裝ack-ai-installer組件。該組件可以提供共享GPU調度(包括共享隔離能力)、GPU拓撲感知調度等調度能力。
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在Helm頁面,單擊創建。搜索并安裝ack-ai-installer組件。
在注冊集群中安裝ack-co-scheduler組件。通過該組件,您可以自定義ResourcePolicy CR對象,使用多級彈性調度功能。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在組件管理頁面,搜索ack-co-scheduler組件,在卡片右下方單擊安裝。
步驟二:安裝和使用GPU資源查詢工具
下載kubectl-inspect-cgpu。
如果您使用的是Linux系統,您可以通過以下命令下載kubectl-inspect-cgpu。
wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-linux -O /usr/local/bin/kubectl-inspect-cgpu
如果您使用的是macOS系統,您可以通過以下命令下載kubectl-inspect-cgpu。
wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-darwin -O /usr/local/bin/kubectl-inspect-cgpu
執行以下命令,為kubectl-inspect-cgpu添加執行權限。
chmod +x /usr/local/bin/kubectl-inspect-cgpu
步驟三:創建GPU節點
創建GPU云服務器,并安裝驅動和nvidia-container-runtime。具體操作,請參見創建節點池。
如果您添加節點池時已經創建GPU節點并配置好環境,可以跳過此步驟。
如果您沒有安裝驅動的腳本,請參見手動升級GPU節點驅動。
使用共享GPU調度的節點需要有標簽
ack.node.gpu.schedule=share
,您可以通過節點池的節點標簽功能或者手動為節點打上該標簽。具體操作,請參見GPU節點調度屬性標簽說明。
步驟四:使用共享GPU調度
執行以下命令,查看集群GPU使用情況。
kubectl inspect cgpu
預期輸出:
NAME IPADDRESS GPU0(Allocated/Total) GPU Memory(GiB) cn-zhangjiakou.192.168.66.139 192.168.66.139 0/15 0/15 --------------------------------------------------------------------------- Allocated/Total GPU Memory In Cluster: 0/15 (0%)
使用以下內容,創建GPUtest.yaml。
apiVersion: batch/v1 kind: Job metadata: name: gpu-share-sample spec: parallelism: 1 template: metadata: labels: app: gpu-share-sample spec: schedulerName: ack-co-scheduler containers: - name: gpu-share-sample image: registry.cn-hangzhou.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5 command: - python - tensorflow-sample-code/tfjob/docker/mnist/main.py - --max_steps=100000 - --data_dir=tensorflow-sample-code/data resources: limits: # 單位為GiB,該Pod總共申請了3 GiB顯存。 aliyun.com/gpu-mem: 3 # 設置GPU顯存大小。 workingDir: /root restartPolicy: Never
執行以下命令,部署一個GPU示例應用,該應用申請3GiB顯存。
kubectl apply -f GPUtest.yaml
執行以下命令,查看集群GPU顯存使用情況。
kubectl inspect cgpu
預期輸出:
NAME IPADDRESS GPU0(Allocated/Total) GPU Memory(GiB) cn-zhangjiakou.192.168.66.139 192.168.66.139 3/15 3/15 --------------------------------------------------------------------------- Allocated/Total GPU Memory In Cluster: 3/15 (20%)
預期輸出表明,節點cn-zhangjiakou.192.168.66.139共有15 GiB顯存,已分配3 GiB顯存。
相關文檔
更多關于共享GPU調度的信息,請參見共享GPU調度概述。