您可以啟用及管理容器上的圖形處理器 (GPU) 資源。舉例來說,您可能偏好在 GPU 環境中執行人工智慧 (AI) 和機器學習 (ML) 筆記本。如要執行 GPU 容器工作負載,您必須擁有支援 GPU 裝置的 Kubernetes 叢集。如果 Kubernetes 叢集已佈建 GPU 機器,系統預設會啟用 GPU 支援。
本文適用於應用程式營運商群組中的應用程式開發人員,負責為組織建立應用程式工作負載。詳情請參閱「GDC 實體隔離方案說明文件的目標對象」。
事前準備
如要完成本文件中的工作,您必須要求必要權限並準備環境。
要求 IAM 角色
您必須具備特定角色,才能取得將 GPU 部署至容器所需的權限。所需角色取決於您是在組織範圍的共用叢集,還是專案範圍的標準叢集內工作。詳情請參閱「Kubernetes 叢集設定」。
共用叢集角色
如要驗證支援 GPU 的節點集區,並在共用叢集中部署 GPU 工作負載,請根據要執行的工作,要求下列角色:
- 使用者叢集管理員 (
user-cluster-admin):建立、刪除、編輯或查看託管於 Management 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。登入並產生 kubeconfig 檔案,用於託管 Kubernetes 叢集的可用區 Management API 伺服器。請使用這個路徑取代這些操作說明中的
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 資源時必須指定這些名稱。