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