部署 GPU 容器工作負載

Google Distributed Cloud (GDC) 沙箱 AI 最佳化 SKU 可讓您在啟用 GPU 的容器中,執行加速 AI 和運算密集型應用程式。在本文件中,您將設定容器資源要求和安全性設定,在專屬 NVIDIA H100 GPU 上部署工作負載。

部署 GPU 容器工作負載

GDC Sandbox AI Optimized SKU 包含 org-infra 叢集中的四個 NVIDIA H100 80GB HBM3 GPU。您可以使用資源名稱 nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3 存取這些 GPU。本節說明如何更新容器設定,以便使用這些 GPU。

GDC Sandbox AI Optimized SKU 中的 GPU 與預先設定的專案「sandbox-gpu-project」相關聯 (僅存在於 GDC Sandbox AI Optimized SKU 執行個體)。您必須在 org-1-infra 叢集內使用這項專案部署容器,才能使用 GPU。

事前準備

  • 如要對組織基礎架構叢集執行指令,請務必取得 org-1-infra 叢集的 kubeconfig,詳情請參閱「使用叢集」:

    • 使用 gdcloud 指令列進行設定和驗證,
    • 為組織基礎架構叢集產生 kubeconfig 檔案,並將其路徑指派給環境變數 KUBECONFIG。
  • 如要執行工作負載,您必須具備 sandbox-gpu-admin 角色。根據預設,這個角色會指派給 platform-admin 使用者。如要將角色指派給其他使用者,請以 platform-admin 身分登入,並執行下列指令:

    kubectl --kubeconfig ${KUBECONFIG} create rolebinding ${NAME} --role=sandbox-gpu-admin \
    --user=${USER} --namespace=sandbox-gpu-project
    
  • 如要允許網路流量傳送至容器,您必須具備專案網路政策。詳情請參閱「建立網路政策」。

設定容器以使用 GPU 資源

  1. 在容器規格中加入 .containers.resources.requests 和 .containers.resources.limits 欄位,為工作負載要求 GPU。sandbox-gpu-project 中的所有容器,在整個專案中最多可要求 4 個 GPU。以下範例要求一個 GPU 做為容器規格的一部分。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: sandbox-gpu-project
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            resources:
              requests:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
              limits:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
    
  1. 容器也需要額外權限才能存取 GPU。針對每個要求 GPU 的容器,新增 .containers.securityContext,將 unconfined_t 類型的 securityContext.seLinuxOptions 授予容器。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
      namespace: sandbox-gpu-project
      labels:
        app: nginx
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:latest
            resources:
              requests:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
              limits:
                nvidia.com/gpu-pod-NVIDIA_H100_80GB_HBM3: 1
            securityContext:
              seLinuxOptions:
                type: unconfined_t
    
  2. 套用容器資訊清單檔案:

    kubectl apply -f ${CONTAINER_MANIFEST_FILE_PATH} \
        -n sandbox-gpu-project \
        --kubeconfig ${KUBECONFIG}