Google Distributed Cloud (僅限軟體) 的「自備節點」功能可讓您在裸機上使用進階硬體 (包括搭載 GPU 的機器),為叢集提供最佳效能和彈性。
本文說明如何安裝及使用 NVIDIA GPU Operator,設定以 Google Distributed Cloud 建立的裸機叢集,以便搭配 NVIDIA GPU 使用。
NVIDIA GPU 運算子會使用 運算子架構,管理佈建及管理 GPU 裝置所需的 NVIDIA 軟體元件。建議您使用 NVIDIA GPU Operator,享有下列彈性和優點:
GPU 類型選擇:Google Distributed Cloud 軟體僅與最新 NVIDIA GPU 運算子支援的各種 GPU 類型相容。
選擇支援的作業系統:叢集工作站節點可使用任何支援的作業系統 (OS) 和 NVIDIA GPU,您可以選擇使用預先安裝的 GPU 驅動程式,或透過 NVIDIA GPU 運算子動態安裝驅動程式。
部署模型選擇:您可以在任何叢集類型中使用 NVIDIA GPU,包括使用者叢集、獨立叢集或混合式叢集。
本頁面適用於負責管理基礎技術架構生命週期的 IT 管理員和作業人員。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。
事前準備
執行下列各節中的步驟之前,請先確認您符合下列需求:
運作中的叢集:請確認您已使用 Google Distributed Cloud 建立可運作的裸機叢集。
NVIDIA GPU:請確認叢集工作站節點已安裝 NVIDIA GPU。安裝 NVIDIA GPU 運算子一節包含驗證步驟,可確認 GPU 是否已正確安裝,且作業系統可辨識 GPU。
相容的 NVIDIA 驅動程式版本:您使用的 NVIDIA 驅動程式版本必須與 GPU、作業系統,以及應用程式使用的 CUDA 版本相容。您可以選擇下列 NVIDIA 驅動程式安裝選項:
如要安裝正確版本的 NVIDIA GPU 驅動程式,請使用 NVIDIA GPU 運算子,詳情請參閱下列章節。
使用作業系統映像檔中預先安裝的 NVIDIA 驅動程式。
請按照 NVIDIA 驅動程式安裝快速入門指南中的說明,手動安裝 NVIDIA 驅動程式。
Helm 3.0.0 以上版本:在管理員工作站上安裝 Helm 指令列介面,用於套件管理。您可以使用 Helm 安裝 NVIDIA GPU 運算子。您可以執行下列指令,下載及安裝 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 運算子
請按照下列步驟,在裸機叢集上安裝 NVIDIA GPU 運算子,並確認運算子可搭配 GPU 運作:
如要取得名稱中含有「NVIDIA」的系統 PCI 匯流排清單,請針對透過周邊元件互連高速 (PCIe) 連接的 GPU 裝置執行下列指令:
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 運算子。
安裝 NVIDIA GPU 運算子時,有三種基本指令變體:
使用預設設定安裝 NVIDIA GPU 運算子:
helm install --wait --generate-name \ -n gpu-operator --create-namespace \ nvidia/gpu-operator
使用
--set
旗標傳遞以半形逗號分隔的鍵/值組合,指定設定選項:helm install --wait --generate-name \ -n gpu-operator --create-namespace \ nvidia/gpu-operator \ --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 運算子會在叢集中的所有 GPU 工作站節點上,部署最新或指定的 GPU 驅動程式。這表示所有搭載 GPU 的工作節點都必須執行相同作業系統版本,才能使用 NVIDIA GPU 驅動程式容器。如要解決這個問題,您可以在節點上手動安裝 GPU 驅動程式,並執行
helm install
指令搭配--set driver.enabled=false
,防止 NVIDIA GPU 運算子部署驅動程式。helm install --wait --generate-name \ -n gpu-operator --create-namespace \ nvidia/gpu-operator \ --set driver.enabled=false
如要瞭解常見的部署情境和範例指令,請參閱 NVIDIA 說明文件中的「常見的部署情境」。
確認 GPU 資源匯出作業:
安裝 NVIDIA GPU 運算子後,如果 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 | +---------------------------------------------------------------------------------------+
限制
使用 NVIDIA GPU 運算子搭配透過 Google Distributed Cloud 建立的叢集時,有下列限制:
如果您安裝最新版的 NVIDIA GPU 運算子,叢集或節點集區更新或升級時,運算子套用的 containerd 設定可能會遭到覆寫。
Google Distributed Cloud 安裝支援的版本包含 containerd LTS 1.6 版,但未啟用容器裝置介面 (CDI)。如果按照 NVIDIA 說明文件中的「支援容器裝置介面」操作,
nvidia-cdi
執行階段可能無法運作。叢集應仍可正常運作,但部分 CDI 功能可能無法使用。負載平衡器節點集區每 7 天會自動執行更新作業。這項作業會覆寫 containerd 設定,包括 NVIDIA GPU 運算子新增的設定。
最佳做法
為盡量減少 NVIDIA 設定的衝突和問題,建議您採取下列防範措施:
升級或更新叢集或節點集區前,請先備份 containerd 設定檔
/etc/containerd/config.toml
。這個檔案包含nvidia
執行階段設定。升級或更新成功後,請還原config.toml
檔案,並重新啟動 containerd,讓所有設定變更生效。為避免 containerd 設定發生潛在衝突或問題,請勿將 GPU 節點做為負載平衡器節點 (
loadBalancer.nodePoolSpec
)。
取得支援
如需在 Google Distributed Cloud 中使用 GPU 的相關協助,請與 Cloud Customer Care 團隊聯絡。
如要瞭解如何在作業系統上設定或使用 GPU 硬體,請參閱硬體供應商的說明,或直接與 NVIDIA 支援團隊聯絡 (如適用)。
感謝你提供寶貴意見。