借助 Google Distributed Cloud on Bare Metal(纯软件)的自带节点方面,您可以利用高级硬件(包括配备 GPU 的机器),为集群提供最佳性能和灵活性。
本文档介绍了如何安装和使用 NVIDIA GPU Operator 来设置使用 Google Distributed Cloud 创建的 Bare Metal 集群,以便与 NVIDIA GPU 搭配使用。
NVIDIA GPU Operator 使用Operator Framework 来管理预配和管理 GPU 设备所需的 NVIDIA 软件组件。我们建议您使用 NVIDIA GPU Operator,以便获得以下灵活性和优势:
选择 GPU 类型:Google Distributed Cloud(纯软件)与最新 NVIDIA GPU Operator 支持的各种 GPU 类型兼容。
选择受支持的操作系统:集群工作器节点可以将任何受支持的操作系统 (OS) 与 NVIDIA GPU 搭配使用,您可以选择使用预安装的 GPU 驱动程序,也可以使用 NVIDIA GPU Operator 进行动态驱动程序安装。
选择部署模型:您可以在任何具有工作器节点的集群类型(用户集群、独立集群或混合集群)上使用 NVIDIA GPU。
本页面适用于管理底层技术基础架构生命周期的 IT 管理员和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE Enterprise 用户角色和任务。
准备工作
在执行以下部分中的步骤之前,请确保您已满足以下要求:
正常运行的集群:确保您已使用 Google Distributed Cloud 创建了一个正常运行的 Bare Metal 集群。
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
以下步骤将引导您在 Bare Metal 集群上安装 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
标志传递一组以英文逗号分隔的键值对,以指定配置选项: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 Operator 会在集群中的所有 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 文档中的常见部署场景。
验证 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 | +---------------------------------------------------------------------------------------+
限制
将 NVIDIA GPU Operator 与使用 Google Distributed Cloud 创建的集群搭配使用时,存在以下限制:
如果您安装的是最新版本的 NVIDIA GPU Operator,则在集群或节点池更新或升级期间,该 Operator 应用的 containerd 配置可能会被覆盖。
支持的 Google Distributed Cloud 版本会安装 containerd LTS 1.6 版,该版本不会启用容器设备接口 (CDI)。如果您按照 NVIDIA 文档中对容器设备接口的支持中的说明操作,
nvidia-cdi
运行时可能无法正常运行。集群应仍能按预期运行,但某些 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 支持(如适用)。
期待您的反馈。