本页面介绍了如何解决与 Google Kubernetes Engine (GKE) 中的 GPU 相关的问题。
如果您需要其他帮助,请与 Cloud Customer Care 联系。
GPU 驱动程序安装
本部分提供了有关 GKE 中的自动 NVIDIA 设备驱动程序安装的问题排查信息。
在 Ubuntu 节点中安装驱动程序失败
如果您使用挂接了 L4 GPU 或 H100 GPU 的 Ubuntu 节点,则 GKE 安装的默认 GPU 驱动程序可能会低于这些 GPU 所需的版本。因此,GPU 设备插件 Pod 会卡在“待处理”状态,并且这些节点上的 GPU 工作负载可能会遇到问题。
如需解决此问题,我们建议您升级到以下 GKE 版本,以安装 535 版的 GPU 驱动程序作为默认驱动程序:
- 1.26.15-gke.1483000 及更高版本
- 1.27.15-gke.1039000 及更高版本
- 1.28.11-gke.1044000 及更高版本
- 1.29.6-gke.1073000 及更高版本
- 1.30.2-gke.1124000 及更高版本
或者,您也可以运行以下命令来手动安装 535 或更高版本的驱动程序:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/ubuntu/daemonset-preloaded-R535.yaml
GPU 设备插件失败并显示 CrashLoopBackOff 错误
如果您在 2023 年 1 月 25 日之前在节点池中使用了手动驱动程序安装方法,然后将节点池升级到支持自动驱动程序安装的 GKE 版本,则会出现以下问题。这两项安装工作负载同时存在,并尝试在节点上安装冲突的驱动程序版本。
GPU 设备插件 init 容器失败并显示 Init:CrashLoopBackOff
状态。容器的日志类似于以下内容:
failed to verify installation: failed to verify GPU driver installation: exit status 18
如需解决此问题,请尝试以下方法:
从集群中移除手动驱动程序安装 DaemonSet。这会删除冲突的安装工作负载,并让 GKE 自动将驱动程序安装到您的节点。
kubectl delete -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
将手动驱动程序安装 DaemonSet 清单重新应用到您的集群。 2023 年 1 月 25 日,我们更新了清单,以忽略使用自动驱动程序安装的节点。
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/nvidia-driver-installer/cos/daemonset-preloaded.yaml
为节点池停用驱动程序自动安装功能。更新操作完成后,现有的驱动程序安装 DaemonSet 应按预期运行。
gcloud container node-pools update POOL_NAME \ --accelerator=type=GPU_TYPE,count=GPU_COUNT,gpu-driver-version=disabled \ --cluster=CLUSTER_NAME \ --location=LOCATION
请替换以下内容:
POOL_NAME
:节点池的名称。GPU_TYPE
:节点池已在使用的 GPU 类型。GPU_COUNT
:已挂接到节点池的 GPU 数量。CLUSTER_NAME
:包含节点池的 GKE 集群的名称。LOCATION
:集群的 Compute Engine 位置。
错误:“容器映像 cos-nvidia-installer:fixed 不存在,拉取政策为‘从不’。”或“容器映像 ubuntu-nvidia-installer:fixed 不存在,拉取政策为‘从不’。”
当 nvidia-driver-installer
Pod 处于 PodInitializing
状态且 GPU 插件设备或 GPU 驱动程序安装程序 Pod 报告以下错误时,就会出现此问题。具体错误消息取决于节点上运行的操作系统:
COS
Container image "cos-nvidia-installer:fixed" is not present with pull policy of Never.
Ubuntu
Container image "gke-nvidia-installer:fixed" is not present with pull policy of Never.
如果垃圾回收器移除预加载的 NVIDIA 驱动程序映像以释放节点上的空间,则可能会出现此问题。重新创建驱动程序 Pod 或重启其容器时,GKE 将无法找到预加载的映像。
如需缓解运行 COS 时出现的垃圾回收问题,请将 GKE 节点升级到以下包含修复程序的版本之一:
- 1.25.15-gke.1040000 及更高版本
- 1.26.10-gke.1030000 及更高版本
- 1.27.6-gke.1513000 及更高版本
- 1.28.3-gke.1061000 及更高版本
如果您的节点运行的是 Ubuntu,则尚无针对此垃圾回收问题的修复程序。如需缓解 Ubuntu 上的此问题,您可以运行与主机交互的特权容器,以确保正确设置 NVIDIA GPU 驱动程序。为此,请从您的节点运行 sudo /usr/local/bin/nvidia-container-first-boot
或应用以下清单:
apiVersion: v1
kind: Pod
metadata:
name: gke-nvidia-installer-fixup
spec:
nodeSelector:
cloud.google.com/gke-os-distribution: ubuntu
hostPID: true
containers:
- name: installer
image: ubuntu
securityContext:
privileged: true
command:
- nsenter
- -at
- '1'
- --
- sh
- -c
- "/usr/local/bin/nvidia-container-first-boot"
restartPolicy: Never
节点重新启动或主机维护后 NVIDIA 驱动程序映像丢失也是导致此问题的另一个可能原因。这种情况可能会发生在使用临时本地 SSD 存储空间的机密节点或带 GPU 的节点上。在这种情况下,GKE 会在节点上预加载 nvidia-installer-driver
容器映像,并在首次启动时将其从启动磁盘移至本地 SSD。
如需确认是否发生了主机维护事件,请使用以下日志过滤器:
resource.type="gce_instance"
protoPayload.serviceName="compute.googleapis.com"
log_id("cloudaudit.googleapis.com/system_event")
如需缓解主机维护问题,请将您的 GKE 版本升级到以下某个版本:
- 1.27.13-gke.1166000 及更高版本
- 1.29.3-gke.1227000 及更高版本
- 1.28.8-gke.1171000 及更高版本
错误:未能配置 GPU 驱动程序安装目录:未能创建 lib64 叠加层:未能创建目录 /usr/local/nvidia/lib64:mkdir /usr/local/nvidia/lib64:并非目录。
启用 NCCL fastsocket 后,您会在 GPU 设备插件内的 GPU 驱动程序安装程序容器中遇到以下错误:
failed to configure GPU driver installation dirs: failed to create lib64 overlay: failed to create dir /usr/local/nvidia/lib64: mkdir /usr/local/nvidia/lib64: not a directory.
此问题仅在运行 GKE 1.28 和 1.29 的集群和节点上出现。
此问题是由 GPU 驱动程序安装程序中的 NCCL fastsocket 竞态条件引起的。
为了缓解这一问题,请将 GKE 版本升级到以下某个版本:
- 1.28.8-gke.1206000 及更高版本
- 1.29.3-gke.1344000 及更高版本
错误:未能获取 nvidia0 的设备:未找到设备 nvidia0。
以下错误表示 XID 62 和 RmInitAdapter 在 GPU 次要版本为 0 时失败:
Failed to get device for nvidia0: device nvidia0 not found.
NVIDIA 驱动程序版本 525.105.17 存在一个 bug,可能会导致通信错误 (XID) 并阻止 GPU 正确初始化,从而导致 GPU 初始化失败。
如需解决此问题,请将 NVIDIA 驱动程序升级到 525.110.11 或更高版本。
后续步骤
如果您需要其他帮助,请与 Cloud Customer Care 联系。