管理 GPU 工作負載

本頁說明如何在 Google Distributed Cloud connected 上管理圖形處理器 (GPU) 工作負載。如要使用這項功能,您必須具備含有 GPU 的 Distributed Cloud 連線硬體設定。詳情請參閱「規劃硬體設定」。

Distributed Cloud 連線工作負載可在容器和虛擬機器上執行:

  • 在容器中執行的 GPU 工作負載。Distributed Cloud connected 叢集上的所有 GPU 資源,一開始都會分配給在容器中執行的工作負載。Distributed Cloud connected 內含執行 GPU 型容器化工作負載的 GPU 驅動程式。在每個容器中,GPU 程式庫都會掛接在 /opt/nvidia

  • 在虛擬機器上執行的 GPU 工作負載。如要在虛擬機器上執行 GPU 工作負載,您必須將目標 Distributed Cloud connected 節點上的 GPU 資源分配給虛擬機器,詳情請參閱本頁稍後內容。這麼做會略過內建的 GPU 驅動程式,並直接將 GPU 傳遞至虛擬機器。您必須在每個虛擬機器的客體作業系統上手動安裝相容的 GPU 驅動程式。您也必須取得所有授權,才能在虛擬機器上執行專用 GPU 驅動程式。

如要確認 Distributed Cloud connected 節點上是否有 GPU,請確認節點是否具有 vm.cluster.gke.io.gpu=true 標籤。如果節點上沒有標籤,表示對應的 Distributed Cloud 連結實體機器未安裝 GPU。

分配 GPU 資源

根據預設,叢集內每個節點上的所有 GPU 資源都會分配給容器化工作負載。如要自訂每個節點的 GPU 資源分配,請完成本節中的步驟。

設定 GPU 資源分配

  1. 如要在 Distributed Cloud 連線節點上分配 GPU 資源,請使用下列指令編輯目標節點上的 GPUAllocation 自訂資源:

    kubectl edit gpuallocation NODE_NAME --namespace vm-system

    請將 NODE_NAME 改成目標 Distributed Cloud 節點的名稱。

    在下列範例中,指令的輸出內容會顯示原廠預設的 GPU 資源分配。根據預設,所有 GPU 資源都會分配給容器化 (pod) 工作負載,不會分配給虛擬機器 (vm) 工作負載:

    ...
    spec:
      pod:   2  # Number of GPUs allocated for container workloads
      vm:    0  # Number of GPUs allocated for VM workloads
    
  2. 請依下列方式設定 GPU 資源分配:

    • 如要將 GPU 資源分配給容器化工作負載,請增加 pod 欄位的值,並減少 vm 欄位的值,兩者增減的量須相同。
    • 如要將 GPU 資源分配給虛擬機器工作負載,請增加 vm 欄位的值,並減少 pod 欄位的值,增減幅度相同。

    分配的 GPU 資源總數不得超過節點執行的實體 Distributed Cloud 連線機器上安裝的 GPU 數量;否則,節點會拒絕無效的分配。

    在下列範例中,有兩項 GPU 資源已從容器化 (pod) 工作負載重新分配至虛擬機器 (vm) 工作負載:

    ...
    spec:
      pod:   0  # Number of GPUs allocated for container workloads
      vm:    2  # Number of GPUs allocated for VM workloads
    

    完成後,將修改後的 GPUAllocation 資源套用至叢集,並等待狀態變更為 AllocationFulfilled

檢查 GPU 資源分配

  • 如要檢查 GPU 資源分配情形,請使用下列指令:

    kubectl describe gpuallocations NODE_NAME --namespace vm-system

    NODE_NAME 替換為目標 Distributed Cloud 連線節點的名稱。

    指令會傳回類似以下範例的輸出內容:

     Name:         mynode1
     ...
     spec:
       node:  mynode1
       pod:   2  # Number of GPUs allocated for container workloads
       vm:    0  # Number of GPUs allocated for VM workloads
     Status:
       Allocated:  true
       Conditions:
         Last Transition Time:  2022-09-23T03:14:10Z
         Message:
         Observed Generation:   1
         Reason:                AllocationFulfilled
         Status:                True
         Type:                  AllocationStatus
         Last Transition Time:  2022-09-23T03:14:16Z
         Message:
         Observed Generation:   1
         Reason:                DeviceStateUpdated
         Status:                True
         Type:                  DeviceStateUpdated
       Consumption:
         pod:         0/2   # Number of GPUs currently consumed by container workloads
         vm:          0/0   # Number of GPUs currently consumed by VM workloads
       Device Model:  NVIDIA L4
     Events:          <none>
    

設定容器以使用 GPU 資源

如要設定在 Distributed Cloud 上執行的容器,使其連線使用 GPU 資源,請按照下列範例設定規格,然後套用至叢集:

  apiVersion: v1
  kind: Pod
  metadata:
    name: my-gpu-pod
  spec:
    containers:
    - name: my-gpu-container
      image: CUDA_TOOLKIT_IMAGE
      command: ["/bin/bash", "-c", "--"]
      args: ["while true; do sleep 600; done;"]
      env:
      resources:
        requests:
        GPU_MODEL: 2
        limits:
        GPU_MODEL: 2
    nodeSelector:
      kubernetes.io/hostname: NODE_NAME

更改下列內容:

  • CUDA_TOOLKIT_IMAGE:NVIDIA CUDA 工具包映像檔的完整路徑和名稱。CUDA 工具包版本必須與 Distributed Cloud 連線叢集上執行的 NVIDIA 驅動程式版本相符。如要判斷 NVIDIA 驅動程式版本,請參閱「Distributed Cloud 版本資訊」。如要尋找相符的 CUDA Toolkit 版本,請參閱「CUDA 相容性」。
  • NODE_NAME:目標 Distributed Cloud 連線節點的名稱。
  • GPU_MODEL:安裝在目標 Distributed Cloud 連線機器中的 NVIDIA GPU 型號。在此版本中,NVIDIA L4 GPU 僅支援 nvidia.com/gpu-pod-NVIDIA_L4 值。

設定虛擬機器以使用 GPU 資源

如要設定在 Distributed Cloud 連線執行的虛擬機器,以使用 GPU 資源,請按照下列範例設定其 VirtualMachine 資源規格,然後套用至叢集:

apiVersion: vm.cluster.gke.io/v1
kind: VirtualMachine
...
spec:
  ...
  gpu:
    model: GPU_MODEL
    quantity: 2

更改下列內容:

  • GPU_MODEL:安裝在目標 Distributed Cloud 連線機器中的 NVIDIA GPU 型號。在此版本中,NVIDIA L4 GPU 僅支援 nvidia.com/gpu-pod-NVIDIA_L4 值。

後續步驟