您可以在容器上啟用及管理圖形處理器 (GPU) 資源。舉例來說,您可能偏好在 GPU 環境中執行人工智慧 (AI) 和機器學習 (ML) 筆記本。如要執行 GPU 容器工作負載,您必須擁有支援 GPU 裝置的 Kubernetes 叢集。如果 Kubernetes 叢集已佈建 GPU 機器,系統預設會啟用 GPU 支援。
本文適用於應用程式運算子群組中的應用程式開發人員,負責為所屬機構建立應用程式工作負載。詳情請參閱 GDC 氣隙環境適用的目標對象說明文件。
事前準備
如要完成本文中的工作,您必須要求必要的權限並準備環境。
要求 IAM 角色
您必須具備特定角色,才能取得在容器中部署 GPU 的必要權限。您需要的角色取決於您是在組織範圍的共用叢集,還是專案範圍的標準叢集內工作。詳情請參閱「Kubernetes 叢集設定」。
共用叢集角色
如要驗證支援 GPU 的節點集區,並在共用叢集中部署 GPU 工作負載,請根據要執行的工作要求下列角色:
- 使用者叢集管理員 (
user-cluster-admin):建立、刪除、編輯或查看管理 API 伺服器上共用叢集的資源。這個角色可讓您檢查共用叢集中的 GPU,且不會繫結至專案命名空間。 - 命名空間管理員 (
namespace-admin):建立、刪除、編輯或查看專案中代管共用叢集的資源。這個角色可讓您將 GPU 工作負載部署至標準叢集,並繫結至專案命名空間。
標準叢集角色
如要驗證支援 GPU 的節點集區,並將 GPU 工作負載部署至標準叢集,請要求專案 IAM 管理員授予下列角色:
- 標準叢集管理員 (
standard-cluster-admin):建立、刪除、編輯或查看管理 API 伺服器上代管的標準叢集資源。這個角色可讓您檢查共用叢集中的 GPU,並繫結至專案命名空間。 - 叢集開發人員 (
cluster-developer):建立、刪除、編輯或查看標準叢集。這個角色可讓您存取標準叢集內代管的資料平面 API,將 GPU 工作負載部署至標準叢集。這個角色會繫結至專案命名空間。
準備環境
如要設定容器使用 GPU 資源,請確認您具備下列資源:
具有 GPU 機器類別的 Kubernetes 叢集。詳情請參閱「支援的 GPU 卡」一節。
找出 Kubernetes 叢集名稱,或向平台管理員群組成員詢問叢集名稱。
登入並產生 Kubernetes 叢集的 kubeconfig 檔案。
請使用 Kubernetes 叢集的 kubeconfig 路徑,替換這些操作說明中的
KUBERNETES_CLUSTER_KUBECONFIG。登入並產生代管 Kubernetes 叢集的區域管理 API 伺服器 kubeconfig 檔案。請使用這個路徑,取代這些操作說明中的
MANAGEMENT_API_SERVER。登入並產生機構基礎架構叢集的 kubeconfig 檔案,該叢集位於預計要代管 GPU 的區域。
設定容器以使用 GPU 資源
如要在容器中使用這些 GPU,請完成下列步驟:
確認 Kubernetes 叢集是否具備支援 GPU 的節點集區:
kubectl describe clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig MANAGEMENT_API_SERVER更改下列內容:
KUBERNETES_CLUSTER_NAME:叢集名稱。KUBERNETES_CLUSTER_NAMESPACE:叢集的命名空間。如果是共用叢集,請使用platform命名空間。如果是標準叢集,請使用叢集的專案命名空間。MANAGEMENT_API_SERVER:Kubernetes 叢集所在區域 API 伺服器的 kubeconfig 路徑。如果您尚未在目標區域中為 API 伺服器產生 kubeconfig 檔案,請參閱「登入」。
相關輸出內容會與下列程式碼片段類似:
# Several lines of code are omitted here. spec: nodePools: - machineTypeName: a2-ultragpu-1g-gdc nodeCount: 2 # Several lines of code are omitted here.如需支援的 GPU 機型和多重執行個體 GPU (MIG) 設定檔完整清單,請參閱叢集節點機型。
將
.containers.resources.requests和.containers.resources.limits欄位新增至容器規格。每個資源名稱會因機器類別而異。檢查 GPU 資源分配情形,找出 GPU 資源名稱。舉例來說,下列容器規格會從
a2-ultragpu-1g-gdc節點要求三個 GPU 分區:# Several lines of code are omitted here. containers: - name: my-container image: "my-image" resources: requests: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3 limits: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 3 # Several lines of code are omitted here.容器也需要額外權限才能存取 GPU。針對要求 GPU 的每個容器,請在容器規格中新增下列權限:
# Several lines of code are omitted here. securityContext: seLinuxOptions: type: unconfined_t # Several lines of code are omitted here.套用容器資訊清單檔案:
kubectl apply -f CONTAINER_MANIFEST_FILE \ -n KUBERNETES_CLUSTER_NAMESPACE \ --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG更改下列內容:
CONTAINER_MANIFEST_FILE:容器工作負載的 YAML 資訊清單檔案。KUBERNETES_CLUSTER_NAMESPACE:叢集的命名空間。如果是共用叢集,請使用platform命名空間。如果是標準叢集,請使用叢集的專案命名空間。KUBERNETES_CLUSTER_KUBECONFIG:叢集的 kubeconfig 路徑。
檢查 GPU 資源分配
如要檢查 GPU 資源分配情形,請使用下列指令:
kubectl describe nodes NODE_NAME --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG更改下列內容:
NODE_NAME:管理要檢查的 GPU 的節點。KUBERNETES_CLUSTER_KUBECONFIG:叢集的 kubeconfig 路徑。
相關輸出內容會與下列程式碼片段類似:
# Several lines of code are omitted here. Capacity: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 Allocatable: nvidia.com/mig-1g.10gb-NVIDIA_A100_80GB_PCIE: 7 # Several lines of code are omitted here.
請記下 GPU 的資源名稱,設定容器使用 GPU 資源時必須指定這些名稱。