NVIDIA GPU Operator 故障排除#
GPU Operator 验证器:创建 Pod 沙箱失败#
问题
在某些情况下,驱动程序容器无法卸载 nouveau
Linux 内核模块。
观察
运行
kubectl describe pod -n gpu-operator -l app=nvidia-operator-validator
命令会包含以下事件Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedCreatePodSandBox 8s (x21 over 9m2s) kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = failed to get sandbox runtime: no runtime for "nvidia" is configured
在节点上运行以下命令之一表明
nouveau
Linux 内核模块已加载$ lsmod | grep -i nouveau $ dmesg | grep -i nouveau $ journalctl -xb | grep -i nouveau
根本原因
nouveau
Linux 内核模块已加载,并且驱动程序容器无法卸载该模块。由于 nouveau
模块已加载,因此驱动程序容器无法加载 nvidia
模块。
措施
在每个节点上,运行以下命令以防止在启动时加载 nouveau
Linux 内核模块
$ sudo tee /etc/modules-load.d/ipmi.conf <<< "ipmi_msghandler" \
&& sudo tee /etc/modprobe.d/blacklist-nouveau.conf <<< "blacklist nouveau" \
&& sudo tee -a /etc/modprobe.d/blacklist-nouveau.conf <<< "options nouveau modeset=0"
$ sudo update-initramfs -u
$ sudo init 6
没有 GPU 驱动程序或操作数 Pod 运行#
问题
在某些集群上,污点应用于具有 NoSchedule
污点效果的节点。
观察
运行
kubectl get ds -n gpu-operator
显示DESIRED
、CURRENT
、READY
等均为0
。NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE gpu-feature-discovery 0 0 0 0 0 nvidia.com/gpu.deploy.gpu-feature-discovery=true 11m ...
根本原因
NoSchedule
污点阻止 Operator 部署 GPU 驱动程序和其他操作数 Pod。
措施
描述每个节点,识别污点,并从节点中移除污点,或者将污点作为容忍添加到守护程序集中。
GPU Operator Pod 卡在崩溃循环中#
问题
在大型集群(例如 300 个或更多节点)上,GPU Operator Pod 可能会卡在崩溃循环中。
观察
GPU Operator Pod 未运行
$ kubectl get pod -n gpu-operator -l app=gpu-operator
示例输出
NAME READY STATUS RESTARTS AGE gpu-operator-568c7ff7f6-chg5b 0/1 CrashLoopBackOff 4 (85s ago) 4m42s
运行 GPU Operator Pod 的节点具有足够的资源,并且节点处于
Ready
状态$ kubectl describe node <node-name>
示例输出
Conditions: Type Status LastHeartbeatTime LastTransitionTime Reason Message ---- ------ ----------------- ------------------ ------ ------- MemoryPressure False Tue, 26 Dec 2023 14:01:31 +0000 Tue, 12 Dec 2023 19:47:47 +0000 KubeletHasSufficientMemory kubelet has sufficient memory available DiskPressure False Tue, 26 Dec 2023 14:01:31 +0000 Thu, 14 Dec 2023 19:15:03 +0000 KubeletHasNoDiskPressure kubelet has no disk pressure PIDPressure False Tue, 26 Dec 2023 14:01:31 +0000 Tue, 12 Dec 2023 19:47:47 +0000 KubeletHasSufficientPID kubelet has sufficient PID available Ready True Tue, 26 Dec 2023 14:01:31 +0000 Thu, 14 Dec 2023 19:15:13 +0000 KubeletReady kubelet is posting ready status
根本原因
GPU Operator 的内存资源限制对于集群大小来说太低。
措施
增加 GPU Operator Pod 的内存请求和限制
将内存请求设置为与较长时间窗口内的平均内存消耗相匹配的值。
将内存限制设置为与偶尔发生的内存消耗峰值相匹配。
增加 GPU Operator Pod 的内存资源限制
$ kubectl patch deployment gpu-operator -n gpu-operator --type='json' \ -p='[{"op":"replace", "path":"/spec/template/spec/containers/0/resources/limits/memory", "value":"1400Mi"}]'
可选:增加 Pod 的内存资源请求
$ kubectl patch deployment gpu-operator -n gpu-operator --type='json' \ -p='[{"op":"replace", "path":"/spec/template/spec/containers/0/resources/requests/memory", "value":"600Mi"}]'
监控 GPU Operator Pod。如果 Pod 仍然卡在崩溃循环中,请再次增加内存请求和限制。
infoROM 已损坏 (nvidia-smi 返回代码 14)#
问题
nvidia-operator-validator Pod 失败,nvidia-driver-daemonsets 也失败。
观察
来自驱动程序验证容器的输出表明 infoROM 已损坏
$ kubectl logs -n gpu-operator nvidia-operator-validator-xxxxx -c driver-validation
示例输出
| NVIDIA-SMI 470.82.01 Driver Version: 470.82.01 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
| 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 Tesla P100-PCIE... On | 00000000:0B:00.0 Off | 0 |
| N/A 42C P0 29W / 250W | 0MiB / 16280MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
WARNING: infoROM is corrupted at gpu 0000:0B:00.0
14
GPU 发出一些与 infoROM 相关的警告消息。下面列出了 nvidia-smi
命令的返回值。
RETURN VALUE
Return code reflects whether the operation succeeded or failed and what
was the reason of failure.
· Return code 0 - Success
· Return code 2 - A supplied argument or flag is invalid
· Return code 3 - The requested operation is not available on target device
· Return code 4 - The current user does not have permission to access this device or perform this operation
· Return code 6 - A query to find an object was unsuccessful
· Return code 8 - A device's external power cables are not properly attached
· Return code 9 - NVIDIA driver is not loaded
· Return code 10 - NVIDIA Kernel detected an interrupt issue with a GPU
· Return code 12 - NVML Shared Library couldn't be found or loaded
· Return code 13 - Local version of NVML doesn't implement this function
· Return code 14 - infoROM is corrupted
· Return code 15 - The GPU has fallen off the bus or has otherwise become inaccessible
· Return code 255 - Other error or internal driver error occurred
根本原因
为了使驱动程序验证器容器通过,并且 GPU Operator 成功在节点上部署驱动程序 Pod,nvidia-smi
命令应返回成功代码(返回代码 0)。
措施
更换故障 GPU。
EFI + 安全启动#
问题
GPU 驱动程序 Pod 部署失败。
根本原因
GPU Operator 目前不支持 EFI 安全启动
措施
在服务器上禁用 EFI 安全启动。