管理 GPU 容器工作負載

您可以在容器上啟用及管理圖形處理器 (GPU) 資源。舉例來說,您可能偏好在 GPU 環境中執行人工智慧 (AI) 和機器學習 (ML) 筆記本。如要執行 GPU 容器工作負載,您必須擁有支援 GPU 裝置的 Kubernetes 叢集。如果 Kubernetes 叢集已佈建 GPU 機器,系統預設會啟用 GPU 支援。

本文適用於應用程式運算子群組中的應用程式開發人員,負責為所屬機構建立應用程式工作負載。詳情請參閱 GDC air-gapped 的目標對象說明文件

事前準備

如要將 GPU 部署至容器,您必須具備下列條件:

  • 具有 GPU 機器類別的 Kubernetes 叢集。如要瞭解叢集機器的設定選項,請參閱「支援的 GPU 卡」一節。

  • 使用者叢集管理員角色 (user-cluster-admin):檢查共用叢集中的 GPU。專案命名空間中的命名空間管理員角色 (namespace-admin):將 GPU 工作負載部署至共用叢集。

  • 標準叢集管理員角色 (standard-cluster-admin):檢查標準叢集中的 GPU。標準叢集中的叢集開發人員角色 (cluster-developer):將 GPU 工作負載部署至標準叢集。

  • 如要對 Kubernetes 叢集執行指令,請確認您具備下列資源:

    • 找出 Kubernetes 叢集名稱,或向平台管理員群組成員詢問叢集名稱。

    • 如果沒有 Kubernetes 叢集的 kubeconfig 檔案,請登入並產生該檔案。

    • 請使用 Kubernetes 叢集的 kubeconfig 路徑,替換這些操作說明中的 KUBERNETES_CLUSTER_KUBECONFIG

  • 代管 Kubernetes 叢集的區域管理 API 伺服器 kubeconfig 路徑。登入並產生 kubeconfig 檔案 (如果沒有)。

  • 可用區中機構基礎架構叢集的 kubeconfig 路徑,該可用區預計會代管 GPU。登入並產生 kubeconfig 檔案 (如果沒有)。

設定容器以使用 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:區域 API 伺服器的 kubeconfig 路徑,Kubernetes 叢集即是代管於此。如果您尚未在目標區域中為 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 分區:

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

    ...
    securityContext:
     seLinuxOptions:
       type: unconfined_t
    ...
    
  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 資源時必須指定這些名稱。

後續步驟