ACK提供GPU共享調度能力,服務于共享單GPU的模型預測場景,同時也支持通過NVIDIA驅動內核態保障GPU顯存的隔離。本文介紹如何在GPU節點上安裝共享GPU組件和GPU資源查詢工具,實現GPU的調度和隔離能力。
前提條件
共享GPU調度目前已實行收費。在使用共享GPU調度前,需開通云原生AI套件。具體收費信息,請參見云原生AI套件計費說明。關于云原生AI套件的更多信息,請參見云原生AI套件概述。
已創建ACK集群Pro版。ACK Pro集群的實例規格架構設置為GPU云服務器。其他配置,請參見創建ACK集群Pro版。
使用限制
請勿將共享GPU調度的節點的CPU Policy設置為
static
。cGPU服務的隔離功能不支持以UVM的方式申請顯存,即調用
CUDA API cudaMallocManaged()
,請使用其他方式申請顯存,例如調用cudaMalloc()
等。更多信息,請參見NVIDIA。共享GPU的Daemonset的Pod在節點上的優先級不是最高的,所以節點資源有可能被其他優先級高的Pod搶占而導致被驅逐。如果想避免這個問題,可以對您實際使用的Daemonset(如共享GPU顯存的
gpushare-device-plugin-ds
)進行修改,加上priorityClassName: system-node-critical
來保證其優先級。共享GPU組件的安裝沒有地域限制,但GPU顯存隔離能力僅在以下地域中支持,請確保對應集群屬于以下地域。
地域
地域ID
華北2(北京)
cn-beijing
華東2(上海)
cn-shanghai
華東1(杭州)
cn-hangzhou
華北3(張家口)
cn-zhangjiakou
華北6(烏蘭察布)
cn-wulanchabu
華南1(深圳)
cn-shenzhen
西南1(成都)
cn-chengdu
華南2(河源)
cn-heyuan
中國香港
cn-hongkong
日本(東京)
ap-northeast-1
印度尼西亞(雅加達)
ap-southeast-5
新加坡
ap-southeast-1
美國(弗吉尼亞)
us-east-1
美國(硅谷)
us-west-1
版本配套信息。
配置
支持版本
Kubernetes版本
1.18.8及以上
Nvidia驅動版本
≥418.87.01
容器運行時版本
Docker:19.03.5及以上
Containerd:1.4.3及以上
操作系統
Alibaba Cloud Linux 3.x、Alibaba Cloud Linux 2.x、CentOS 7.6、CentOS 7.7、CentOS 7.9
支持顯卡
P系列、T系列、V系列、A系列、H系列
步驟一:安裝共享GPU組件
未部署云原生AI套件
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在云原生AI套件頁面,單擊一鍵部署。
在一鍵部署云原生AI套件頁面,選中調度組件(批量任務調度、GPU共享、GPU拓撲感知、NPU調度)。
(可選)單擊調度組件(批量任務調度、GPU共享、GPU拓撲感知、NPU調度)右側的高級配置。在彈出的參數配置窗口,修改cGPU的
policy
字段。修改完成后,單擊確定。如果對cGPU算力共享無特殊要求,建議使用默認
policy: 5
。cGPU支持的policy,請參見通過Docker安裝并使用cGPU服務。在云原生AI套件頁面最下方,單擊部署云原生AI套件。
組件安裝成功后,在云原生AI套件頁面的組件列表中能看到已安裝的共享GPU組件ack-ai-installer。
已部署云原生AI套件
登錄容器服務管理控制臺,在左側導航欄選擇集群。
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在組件ack-ai-installer所在行,單擊操作列的部署。
(可選)在彈出的參數配置窗口,修改cGPU的
policy
字段。如果對cGPU算力共享無特殊要求,建議使用默認
policy: 5
。cGPU支持的policy,請參見通過Docker安裝并使用cGPU服務。修改完成后,單擊確定。
組件安裝完成后,ack-ai-installer的狀態為已部署。
步驟二:開啟GPU共享調度能力和顯存隔離能力
在集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇 。
在節點池頁面,單擊創建節點池。
在創建節點池頁面,設置創建節點池的配置項,然后單擊確認配置。
以下為重要配置項的說明,其余配置項的配置方法,請參見創建節點池。
配置項
說明
期望節點數
設置節點池初始節點數量。如無需創建節點,可以填寫為0。
節點標簽
標簽的值需根據您的業務需求添加。關于節點標簽的詳細說明,請參見GPU節點調度屬性標簽。
下文以標簽值cgpu為例,該值表示節點開啟共享GPU調度能力,每個Pod僅需申請GPU顯存資源,多個Pod在一張卡上實行顯存隔離和算力共享。
單擊節點標簽的,設置鍵為ack.node.gpu.schedule,值為cgpu。
重要添加共享GPU調度標簽后,請勿通過
kubectl label nodes
命令切換節點GPU調度屬性標簽值或使用控制臺節點頁面的標簽管理功能更改節點標簽,以避免引發潛在的問題,請參見使用kubectl label nodes或通過控制臺節點標簽管理功能切換標簽值存在的問題。推薦您基于節點池劃分GPU資源調度能力。
步驟三:添加GPU節點
步驟四:安裝和使用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使用情況。
kubectl inspect cgpu
預期輸出:
NAME IPADDRESS GPU0(Allocated/Total) GPU Memory(GiB) cn-shanghai.192.168.6.104 192.168.6.104 0/15 0/15 ---------------------------------------------------------------------- Allocated/Total GPU Memory In Cluster: 0/15 (0%)