管理 GPU 容器工作負載

您可以在容器上啟用及管理圖形處理器 (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,請完成下列步驟:

  1. 確認 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) 設定檔完整清單,請參閱「叢集節點機型」。

  2. 在容器規格中新增 .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.
    
  3. 容器也需要額外權限才能存取 GPU。為要求 GPU 的每個容器,在容器規格中新增下列權限:

    # Several lines of code are omitted here.
    securityContext:
     seLinuxOptions:
       type: unconfined_t
    # Several lines of code are omitted here.
    
  4. 套用容器資訊清單檔案:

    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 資源時必須指定這些名稱。

後續步驟