設定及使用 NVIDIA GPU

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 運作:

  1. 如要取得名稱中含有「NVIDIA」的系統 PCI 匯流排清單,請針對透過周邊元件互連高速 (PCIe) 連接的 GPU 裝置執行下列指令:

    sudo lspci | grep NVIDIA
    

    輸出結果會與下列內容相似:

    25:00.0 3D controller: NVIDIA Corporation Device 20b5 (rev a1)
    
  2. 您可以在特定節點上使用 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                                                           |
    +---------------------------------------------------------------------------------------+
    
  3. 在管理員工作站上新增 NVIDIA Helm 存放區:

    helm repo add nvidia https://helm.ngc.nvidia.com/nvidia \
        && helm repo update
    
  4. 安裝 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 說明文件中的「常見的部署情境」。

  5. 確認 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
    
  6. 如要確認 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 檔案的路徑。

  7. 查看範例工作輸出內容的記錄:

    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 支援團隊聯絡 (如適用)。

感謝你提供寶貴意見。