在 Distributed Cloud 軟體 (僅限裸機) 中,自備節點模型可讓您在自有硬體上執行 GPU 加速工作負載。如要為 NVIDIA GPU 準備裸機叢集,請安裝 NVIDIA GPU Operator,然後確認 GPU 是否能辨識並正常運作。
NVIDIA GPU Operator 總覽
NVIDIA GPU Operator 使用運算子架構,管理佈建及管理 GPU 裝置所需的 NVIDIA 軟體元件。建議您使用 NVIDIA GPU Operator,享有下列彈性和優勢:
選擇 GPU 類型:Distributed Cloud 軟體僅與最新 NVIDIA GPU Operator 支援的多種 GPU 類型相容。
選擇支援的作業系統:叢集 worker 節點可使用任何支援的作業系統 (OS) 搭配 NVIDIA GPU,您也可以選擇使用預先安裝的 GPU 驅動程式,或透過 NVIDIA GPU Operator 動態安裝驅動程式。
多種部署模型:您可以在任何具有 worker 節點的叢集類型 (使用者叢集、獨立叢集或混合叢集) 上使用 NVIDIA GPU。
事前準備
執行下列各節的步驟前,請確認您已符合下列需求:
運作中的叢集:確認您有使用 Google Distributed Cloud 建立的運作中裸機叢集。
NVIDIA GPU:確認叢集 worker 節點已安裝 NVIDIA GPU。在下一節安裝 NVIDIA GPU Operator 時,您會看到驗證 GPU 是否正確安裝並由作業系統辨識的步驟。
相容的 NVIDIA 驅動程式版本:您使用的 NVIDIA 驅動程式版本必須與 GPU、作業系統,以及應用程式使用的 CUDA 版本相容。您可以選擇下列 NVIDIA 驅動程式安裝選項:
請按照下列各節說明,使用 NVIDIA GPU Operator 安裝適當版本的 NVIDIA GPU 驅動程式。
使用作業系統映像檔中預先安裝的 NVIDIA 驅動程式。
請按照「NVIDIA 驅動程式安裝快速入門指南」中的操作說明,手動安裝 NVIDIA 驅動程式。
Helm 3.0.0 以上版本:在管理員工作站上安裝 Helm 指令列介面,以便管理套件。您可以使用 Helm 安裝 NVIDIA GPU Operator。您可以執行下列指令,下載並安裝 Helm 指令列工具:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 \ && chmod 700 get_helm.sh \ && ./get_helm.sh
安裝並驗證 NVIDIA GPU Operator
下列步驟將引導您在裸機叢集上安裝 NVIDIA GPU Operator,並協助您確認該運算子是否能與 GPU 搭配運作:
如果是透過周邊元件互連快捷 (PCIe) 連接的 GPU 裝置,請執行下列指令,取得名稱中含有「NVIDIA」的系統 PCI 匯流排清單:
sudo lspci | grep NVIDIA輸出結果會與下列內容相似:
25:00.0 3D controller: NVIDIA Corporation Device 20b5 (rev a1)您可以在特定節點上使用 NVIDIA 系統管理介面 (
nvidia-smi) 指令列工具,取得 GPU 裝置的詳細資訊:nvidia-smi輸出結果會與下列內容相似:
+---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.183.01 Driver Version: 535.183.1 CUDA Veersion 12.2 | |-----------------------------------------+----------------------+----------------------| | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+======================+======================| | 0 NVIDIA A100 80GB PCIe Off | 00000000:25:00.0 Off | 0 | | N/A 30C P0 44W / 300W | 0MiB / 81920MiB | 0% Default | | | | Disabled | +-----------------------------------------+----------------------+----------------------+ +---------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=======================================================================================| | No running processes found | +---------------------------------------------------------------------------------------+在管理員工作站上新增 NVIDIA Helm 存放區:
helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \ && helm repo update安裝 NVIDIA GPU Operator。
安裝 NVIDIA GPU Operator 時,有三種基本指令變化版本:
使用預設設定安裝 NVIDIA GPU Operator:
helm install --wait --generate-name \ -n gpu-operator --create-namespace \ nvidia/gpu-operator \ --set cdi.enabled=true \ --set cdi.default=true使用
--set旗標傳遞以半形逗號分隔的鍵/值組合,指定設定選項:helm install --wait --generate-name \ -n gpu-operator --create-namespace \ nvidia/gpu-operator \ --set cdi.enabled=true \ --set cdi.default=true \ --set OPTION_1_NAME=OPTION_1_VALUE,OPTION_2_NAME=OPTION_2_VALUE如需設定選項的詳細清單,請參閱 NVIDIA 說明文件中的「Common Chart Customization Options」(常見圖表自訂選項)。如要瞭解使用
--set旗標的物流資訊,請參閱 Helm 說明文件中的「--set的格式和限制」。如果您已在節點上安裝 NVIDIA GPU 驅動程式,請停用驅動程式安裝功能:
根據預設,NVIDIA GPU Operator 會在叢集的所有 GPU worker 節點上,部署最新或指定的 GPU 驅動程式。這表示所有具備 GPU 的 worker 節點都必須執行相同的作業系統版本,才能使用 NVIDIA GPU 驅動程式容器。如要解決這個問題,您可以手動在節點上安裝 GPU 驅動程式,並使用
--set driver.enabled=false執行helm install指令,防止 NVIDIA GPU Operator 部署驅動程式。helm install --wait --generate-name \ -n gpu-operator --create-namespace \ nvidia/gpu-operator \ --set cdi.enabled=true \ --set cdi.default=true \ --set driver.enabled=false
如需常見的部署情境和指令範例,請參閱 NVIDIA 說明文件中的「常見部署情境」。
驗證 GPU 資源匯出:
安裝 NVIDIA GPU Operator 後,如果 GPU 驅動程式和裝置外掛程式正常運作,節點資源的
Allocatable欄位應會顯示正確的 GPU 數量。kubectl describe node GPU_NODE_NAME | grep Allocatable -A7將
GPU_NODE_NAME替換為節點機器的名稱,並附上您要測試的 GPU。輸出結果會與下列內容相似:
Allocatable: cpu: 127130m ephemeral-storage: 858356868519 hugepages-1Gi: 0 hugepages-2Mi: 0 memory: 509648288Ki nvidia.com/gpu: 1 pods: 250如要確認 GPU 是否正常運作,請執行下列範例 GPU 工作,該工作會執行
nvidia-smi指令:export NODE_NAME=GPU_NODE_NAME cat <<EOF | kubectl create --kubeconfig=CLUSTER_KUBECONFIG -f - apiVersion: batch/v1 kind: Job metadata: name: test-job-gpu spec: template: spec: runtimeClassName: nvidia containers: - name: nvidia-test image: nvidia/cuda:12.0.0-base-ubuntu22.04 command: ["nvidia-smi"] resources: limits: nvidia.com/gpu: 1 nodeSelector: kubernetes.io/hostname: ${NODE_NAME} restartPolicy: Never EOF將
CLUSTER_KUBECONFIG替換為叢集 kubeconfig 檔案的路徑。查看範例工作輸出的記錄:
kubectl logs job/test-job-gpu --kubeconfig=CLUSTER_KUBECONFIG輸出結果會與下列內容相似:
+---------------------------------------------------------------------------------------+ | NVIDIA-SMI 535.183.01 Driver Version: 535.183.1 CUDA Veersion 12.2 | |-----------------------------------------+----------------------+----------------------| | GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |=========================================+======================+======================| | 0 NVIDIA A100 80GB PCIe Off | 00000000:25:00.0 Off | 0 | | N/A 30C P0 44W / 300W | 0MiB / 81920MiB | 0% Default | | | | Disabled | +-----------------------------------------+----------------------+----------------------+ +---------------------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=======================================================================================| | No running processes found | +---------------------------------------------------------------------------------------+
限制
使用 Google Distributed Cloud 建立的叢集搭配 NVIDIA GPU Operator 時,須遵守下列限制:
如果您安裝的是近期版本的 NVIDIA GPU Operator,在叢集或節點集區更新或升級期間,Operator 套用的 containerd 設定可能會遭到覆寫。
使用容器裝置介面 (CDI) 處理 GPU 工作負載。如果舊版 Google Distributed Cloud 使用 containerd 1.6,可能無法使用部分 CDI 功能。
負載平衡器節點集區每 7 天會自動執行一次更新工作。這項工作會覆寫 containerd 設定,包括 NVIDIA GPU Operator 新增的設定。
最佳做法
為盡可能減少 NVIDIA 設定的衝突和問題,建議您採取下列預防措施:
在升級或更新叢集或節點集區之前,請先備份 containerd 設定檔
/etc/containerd/config.toml。這個檔案包含nvidia執行階段設定。升級或更新成功完成後,請還原config.toml檔案,並重新啟動 containerd,讓所有設定變更生效。為避免 containerd 設定發生潛在衝突或問題,請勿將 GPU 節點做為負載平衡器節點 (
loadBalancer.nodePoolSpec)。
取得支援
如需進一步協助,瞭解如何搭配使用 GPU 和 Google Distributed Cloud,請與 Cloud Customer Care 聯絡。
如果是在作業系統上設定或使用 GPU 硬體時發生問題,請直接洽詢硬體供應商或 NVIDIA 支援團隊 (如適用)。
歡迎提供意見。