本頁說明如何在 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 資源分配
如要在 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請依下列方式設定 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 資源分配
如要檢查 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: Tesla T4 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.com/gpu-pod-NVIDIA_L4,適用於 NVIDIA L4 GPUnvidia.com/gpu-pod-TESLA_T4適用於 NVIDIA Tesla T4 GPU
設定虛擬機器以使用 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.com/gpu-pod-NVIDIA_L4,適用於 NVIDIA L4 GPUnvidia.com/gpu-pod-TESLA_T4,適用於 NVIDIA Tesla T4 GPU ## 後續步驟