设置和使用 NVIDIA GPU

借助 Google Distributed Cloud on Bare Metal(纯软件)的自带节点功能,您可以充分利用先进的硬件(包括配备 GPU 的机器),为集群实现最佳性能和灵活性。

本文档介绍了如何安装和使用 NVIDIA GPU Operator 来设置使用 Google Distributed Cloud 创建的裸机集群,以便与 NVIDIA GPU 搭配使用。

NVIDIA GPU Operator 使用 Operator Framework 来管理预配和管理 GPU 设备所需的 NVIDIA 软件组件。我们建议您使用 NVIDIA GPU Operator,因为它具有以下灵活性和优势:

  • GPU 类型的选择:Google Distributed Cloud 软件版与最新版 NVIDIA GPU Operator 支持的各种 GPU 类型兼容。

  • 选择受支持的操作系统:集群工作节点可以与 NVIDIA GPU 搭配使用任何受支持的操作系统 (OS),您可以选择使用预安装的 GPU 驱动程序,也可以选择使用 NVIDIA GPU Operator 进行动态驱动程序安装。

  • 部署模型的选择:您可以在具有工作器节点的任何集群类型(用户集群、独立集群或混合集群)上使用 NVIDIA GPU。

本页面适用于管理底层技术基础架构生命周期的 IT 管理员和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务

准备工作

在执行以下部分中的步骤之前,请确保您已满足以下要求:

  • 正常运行的集群:确保您已使用 Google Distributed Cloud 创建正常运行的裸机集群。

  • NVIDIA GPU:确保在集群工作节点上安装了 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 配合使用:

  1. 对于通过外围设备组件互连快速 (PCIe) 连接的 GPU 设备,请运行以下命令,获取名称中包含“NVIDIA”的系统 PCI 总线列表:

    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 Operator。

    安装 NVIDIA GPU Operator 时,有三种基本命令变体:

    • 使用默认配置安装 NVIDIA GPU Operator:

      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 文档中的常见图表自定义选项。如需了解使用 --set 标志的运维工作,请参阅 Helm 文档中的 --set 的格式和限制

    • 如果您已在节点上安装 NVIDIA GPU 驱动程序,请停用驱动程序安装:

      默认情况下,NVIDIA GPU 操作器会在集群中的所有 GPU 工作器节点上部署最新的或指定的 GPU 驱动程序。这要求所有具有 GPU 的工作器节点都必须运行相同的操作系统版本,才能使用 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 driver.enabled=false
      

    如需了解常见的部署场景和示例命令,请参阅 NVIDIA 文档中的常见的部署场景

  5. 验证 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
    
  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 Operator 与使用 Google Distributed Cloud 创建的集群搭配使用时,存在以下限制:

  • 如果您安装的是较新版本的 NVIDIA GPU 运维管理器,则在集群或节点池更新或升级期间,运维管理器应用的容器化配置可能会被覆盖。

  • 受支持的 Google Distributed Cloud 版本会安装 containerd LTS 版本 1.6,该版本不支持容器设备接口 (CDI)。如果您按照 NVIDIA 文档中对容器设备接口的支持部分中的说明操作,nvidia-cdi 运行时可能无法正常运行。集群应该仍会按预期运行,但某些 CDI 功能可能无法使用。

  • 负载平衡器节点池每 7 天自动运行一次更新作业。此作业会覆盖容器化配置,包括 NVIDIA GPU Operator 添加的配置。

最佳做法

为了尽量减少 NVIDIA 配置的冲突和问题,我们建议您采取以下预防措施:

  • 在升级或更新集群或节点池之前,请备份容器化配置文件 /etc/containerd/config.toml。此文件包含 nvidia 运行时配置。升级或更新成功完成后,请恢复 config.toml 文件并重启 containerd,以使所有配置更改生效。

  • 为防止 containerd 配置出现潜在冲突或问题,请勿将 GPU 节点用作负载均衡器节点 (loadBalancer.nodePoolSpec)。

获取支持

如果您需要有关将 GPU 与 Google Distributed Cloud 搭配使用方面的其他帮助,请与 Cloud Customer Care 联系。

对于与在操作系统上设置或使用 GPU 硬件相关的问题,请咨询硬件供应商,或者直接与 NVIDIA 支持团队联系(如果适用)。

期待您的反馈。