ACK提供GPU共用調度能力,服務於共用單GPU的模型預測情境,同時也支援通過NVIDIA驅動核心態保障GPU顯存的隔離。本文介紹如何在GPU節點上安裝共用GPU組件和GPU資源查詢工具,實現GPU的調度和隔離能力。
前提條件
在使用共用GPU調度前,需開通雲原生AI套件。關於雲原生AI套件的介紹及計費說明,請參見雲原生AI套件概述、雲原生AI套件計費說明。
已建立ACK叢集Pro版且叢集執行個體規格架構設定為GPU雲端服務器,請參見建立ACK託管叢集。
使用限制
請勿將共用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顯存隔離能力僅在以下地區中支援,請確保對應叢集屬於以下地區。
版本配套資訊。
配置
支援版本
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套件
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在雲原生AI套件頁面,單擊一鍵部署。
在一鍵部署雲原生AI套件頁面,選中調度組件(批量任務調度、GPU共用、GPU拓撲感知、NPU調度)。
(可選)單擊調度組件(批量任務調度、GPU共用、GPU拓撲感知、NPU調度)右側的進階配置。在彈出的參數配置視窗,修改cGPU的
policy
欄位。修改完成後,單擊確定。如果對cGPU算力共用無特殊要求,建議使用預設
policy: 5
。cGPU支援的policy,請參見安裝並使用KuberGPU產品的cGPU服務。在雲原生AI套件頁面最下方,單擊部署雲原生AI套件。
組件安裝成功後,在雲原生AI套件頁面的組件列表中能看到已安裝的共用GPU組件ack-ai-installer。
已部署雲原生AI套件
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在組件ack-ai-installer所在行,單擊操作列的部署。
(可選)在彈出的參數配置視窗,修改cGPU的
policy
欄位。如果對cGPU算力共用無特殊要求,建議使用預設
policy: 5
。cGPU支援的policy,請參見安裝並使用KuberGPU產品的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%)