您可以在容器上啟用及管理圖形處理器 (GPU) 資源。舉例來說,您可能偏好在 GPU 環境中執行人工智慧 (AI) 和機器學習 (ML) 筆記本。如要執行 GPU 容器工作負載,您必須使用支援 GPU 裝置的 Kubernetes 叢集。如果 Kubernetes 叢集已佈建 GPU 機器,系統預設會啟用 GPU 支援。
本文適用於應用程式運算子群組中的應用程式開發人員,負責為所屬機構建立應用程式工作負載。詳情請參閱「GDC air-gapped 說明文件適用對象」。
事前準備
如要完成本文中的工作,您必須要求必要的權限並準備環境。
要求 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 資源時必須指定這些名稱。