安裝共享GPU調(diào)度組件
ACK提供GPU共享調(diào)度能力,服務(wù)于共享單GPU的模型預(yù)測場景,同時(shí)也支持通過NVIDIA驅(qū)動(dòng)內(nèi)核態(tài)保障GPU顯存的隔離。本文介紹如何在GPU節(jié)點(diǎn)上安裝共享GPU組件和GPU資源查詢工具,實(shí)現(xiàn)GPU的調(diào)度和隔離能力。
前提條件
在使用共享GPU調(diào)度前,需開通云原生AI套件。關(guān)于云原生AI套件的介紹及計(jì)費(fèi)說明,請參見云原生AI套件概述、云原生AI套件計(jì)費(fèi)說明。
已創(chuàng)建ACK集群Pro版且集群實(shí)例規(guī)格架構(gòu)設(shè)置為GPU云服務(wù)器,請參見創(chuàng)建ACK托管集群。
使用限制
請勿將共享GPU調(diào)度的節(jié)點(diǎn)的CPU Policy設(shè)置為
static
。cGPU服務(wù)的隔離功能不支持以UVM的方式申請顯存,即調(diào)用
CUDA API cudaMallocManaged()
,請使用其他方式申請顯存,例如調(diào)用cudaMalloc()
等。更多信息,請參見NVIDIA。共享GPU的DaemonSet的Pod在節(jié)點(diǎn)上的優(yōu)先級(jí)不是最高的,所以節(jié)點(diǎn)資源有可能被其他優(yōu)先級(jí)高的Pod搶占而導(dǎo)致被驅(qū)逐。如果想避免這個(gè)問題,可以對您實(shí)際使用的DaemonSet(如共享GPU顯存的
gpushare-device-plugin-ds
)進(jìn)行修改,加上priorityClassName: system-node-critical
來保證其優(yōu)先級(jí)。共享GPU組件的安裝沒有地域限制,但GPU顯存隔離能力僅在以下地域中支持,請確保對應(yīng)集群屬于以下地域。
地域
地域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
印度尼西亞(雅加達(dá))
ap-southeast-5
新加坡
ap-southeast-1
美國(弗吉尼亞)
us-east-1
美國(硅谷)
us-west-1
德國(法蘭克福)
eu-central-1
版本配套信息
配置
支持版本
Kubernetes版本
1.18.8及以上
Nvidia驅(qū)動(dòng)版本
≥418.87.01
容器運(yùn)行時(shí)版本
Docker:19.03.5及以上
containerd:1.4.3及以上
操作系統(tǒng)
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套件
登錄容器服務(wù)管理控制臺(tái),在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在云原生AI套件頁面,單擊一鍵部署。
在一鍵部署云原生AI套件頁面,選中調(diào)度組件(批量任務(wù)調(diào)度、GPU共享、GPU拓?fù)涓兄PU調(diào)度)。
(可選)單擊調(diào)度組件(批量任務(wù)調(diào)度、GPU共享、GPU拓?fù)涓兄PU調(diào)度)右側(cè)的高級(jí)配置。在彈出的參數(shù)配置窗口,修改cGPU的
policy
字段。修改完成后,單擊確定。如果對cGPU算力共享無特殊要求,建議使用默認(rèn)
policy: 5
。cGPU支持的policy,請參見安裝并使用cGPU服務(wù)。在云原生AI套件頁面最下方,單擊部署云原生AI套件。
組件安裝成功后,在云原生AI套件頁面的組件列表中能看到已安裝的共享GPU組件ack-ai-installer。
已部署云原生AI套件
登錄容器服務(wù)管理控制臺(tái),在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在組件ack-ai-installer所在行,單擊操作列的部署。
(可選)在彈出的參數(shù)配置窗口,修改cGPU的
policy
字段。如果對cGPU算力共享無特殊要求,建議使用默認(rèn)
policy: 5
。cGPU支持的policy,請參見安裝并使用cGPU服務(wù)。修改完成后,單擊確定。
組件安裝完成后,ack-ai-installer的狀態(tài)為已部署。
步驟二:開啟GPU共享調(diào)度能力和顯存隔離能力
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在節(jié)點(diǎn)池頁面,單擊創(chuàng)建節(jié)點(diǎn)池。
在創(chuàng)建節(jié)點(diǎn)池頁面,設(shè)置創(chuàng)建節(jié)點(diǎn)池的配置項(xiàng),然后單擊確認(rèn)配置。
以下為重要配置項(xiàng)的說明,其余配置項(xiàng)的配置方法,請參見創(chuàng)建節(jié)點(diǎn)池。
配置項(xiàng)
說明
期望節(jié)點(diǎn)數(shù)
設(shè)置節(jié)點(diǎn)池初始節(jié)點(diǎn)數(shù)量。如無需創(chuàng)建節(jié)點(diǎn),可以填寫為0。
節(jié)點(diǎn)標(biāo)簽
標(biāo)簽的值需根據(jù)您的業(yè)務(wù)需求添加。關(guān)于節(jié)點(diǎn)標(biāo)簽的詳細(xì)說明,請參見GPU節(jié)點(diǎn)調(diào)度屬性標(biāo)簽。
下文以標(biāo)簽值cgpu為例,該值表示節(jié)點(diǎn)開啟共享GPU調(diào)度能力,每個(gè)Pod僅需申請GPU顯存資源,多個(gè)Pod在一張卡上實(shí)行顯存隔離和算力共享。
單擊節(jié)點(diǎn)標(biāo)簽的,設(shè)置鍵為ack.node.gpu.schedule,值為cgpu。
重要關(guān)于cGPU隔離功能注意事項(xiàng),請參見cGPU隔離能力注意事項(xiàng)。
添加共享GPU調(diào)度標(biāo)簽后,請勿通過
kubectl label nodes
命令切換節(jié)點(diǎn)GPU調(diào)度屬性標(biāo)簽值或使用控制臺(tái)節(jié)點(diǎn)頁面的標(biāo)簽管理功能更改節(jié)點(diǎn)標(biāo)簽,以避免引發(fā)潛在的問題,請參見使用kubectl label nodes或通過控制臺(tái)節(jié)點(diǎn)標(biāo)簽管理功能切換標(biāo)簽值存在的問題。推薦您基于節(jié)點(diǎn)池劃分GPU資源調(diào)度能力。
步驟三:添加GPU節(jié)點(diǎn)
如果您添加節(jié)點(diǎn)池時(shí)已經(jīng)創(chuàng)建GPU節(jié)點(diǎn),可以跳過此步驟。
完成創(chuàng)建節(jié)點(diǎn)池后,您還可以在節(jié)點(diǎn)池中添加GPU節(jié)點(diǎn)。添加GPU節(jié)點(diǎn)時(shí),您需要將實(shí)例規(guī)格架構(gòu)設(shè)置為GPU云服務(wù)器。具體操作,請參見添加已有節(jié)點(diǎn)或創(chuàng)建節(jié)點(diǎn)池。
步驟四:安裝和使用GPU資源查詢工具
下載kubectl-inspect-cgpu。
如果您使用的是Linux系統(tǒng),您可以通過以下命令下載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系統(tǒng),您可以通過以下命令下載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
執(zhí)行以下命令,為kubectl-inspect-cgpu添加執(zhí)行權(quán)限。
chmod +x /usr/local/bin/kubectl-inspect-cgpu
執(zhí)行以下命令,查看集群GPU使用情況。
kubectl inspect cgpu
預(yù)期輸出:
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%)