Conversation
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: QUIET Plan: Enterprise Run ID: 📒 Files selected for processing (2)
Included review availability: Your plan provides up to 12 included reviews per hour; 11 remain after this review. 📝 WalkthroughWalkthroughThe DCGM and DCGM exporter init containers now wait for the toolkit validation marker and the loaded Merge Risk: ⚪ Minimal · up to DCGM and its exporter now wait for the NVIDIA driver module before startup, and DCGM restarts when it cannot discover a GPU. No concrete current-head merge-blocking risk remains. Comment |
|
Thanks for the contribution. We will review the PR soon. |
|
Thanks for the contribution! As mentioned in #2854 (comment), any fix for #2874 should also fix this. Although, I think the enhanced liveness probe could be valuable on its own. Let's keep this open and we'll evaluate the probe changes. |
119d901 to
8ec3752
Compare
A hostengine that starts while the nvidia kernel module is not loaded gets plain runc from the toolkit's host wrapper, comes up without NVML, and never re-initialises. The tcpSocket liveness probe on 5555 still passes because the process keeps listening, so the pod stays 1/1 Running and exports no DCGM_FI_* series for the node. Make the liveness probe run `dcgmi discovery -l` and require it to report at least one active GPU, so kubelet restarts a deaf hostengine once the driver is back. The pattern matches the current "N GPUs found (Active)." summary line and the plain "N GPUs found." form, and rejects "0 GPUs found". The check is skipped while no driver is present (no `nvidia` module and no WSL2 /dev/dxg), so a planned driver restart does not loop the hostengine; once the driver returns the probe fails and kubelet restarts the deaf hostengine. Readiness is unchanged. The init-container half of the original change is now redundant: NVIDIA#2881 already requires a live nvidia module, or the WSL2 /dev/dxg path, for every operand that uses the NVIDIA runtime, so this rebase keeps only the probe change. Refs NVIDIA#2854 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Signed-off-by: Weigang Geng <3356786+gengwg@users.noreply.github.com>
8ec3752 to
c8c4df4
Compare
|
Hi @rahulait @rajathagasthya — rebased onto The init-container change is dropped: #2881 already gates every NVIDIA-runtime operand on a live module, and it also covers the WSL2 What remains is Two notes for the evaluation:
Verified: Happy to keep it or drop it — your call. |
Description
The
nvidia-dcgmhostengine can start while the nvidia kernel module is not loaded (an operator rollout that recreates the dcgm pod while the driver container restarts, for example). The toolkit's host runtime wrapper then execs plain runc with no injection,nv-hostenginestarts with no NVML, and nothing ever restarts it. The pod stays1/1 Runningwhile exporting zeroDCGM_FI_*series.The
tcpSocketprobe on 5555 passes on a deaf hostengine because it still listens. This replaces it with an exec probe that requiresdcgmi discovery -lto report at least one active GPU, so kubelet restarts the hostengine once the driver is back. The check is skipped while no driver is present (nonvidiamodule and no WSL2/dev/dxg), so a planned driver restart does not loop the hostengine. The readiness probe is unchanged.The init-container gate from the original version of this PR is no longer needed: #2881 requires a live nvidia module, or the WSL2
/dev/dxgpath, before every operand that uses the NVIDIA runtime, so this PR now carries only the probe change.Behaviour worth stating: once the driver is present, a node that genuinely loses every GPU sees its hostengine restart every ~3 minutes instead of sitting silently at 0 GPUs. That is intended; it is visible where the previous state was not. Nodes with at least one GPU visible are unaffected. When the hostengine restarts,
dcgm-exporterhitsDCGM_ST_CONNECTION_NOT_VALID, which it already treats as fatal and exits, so it reconnects on its own restart.Refs #2854
Checklist
make lint) - YAML-only change underassets/make validate-generated-assets) - no generated files touchedmake validate-modules) - go.mod untouchedTesting
dcgmi discovery -lprintsN GPUs found (Active).on stdout, and0 GPUs found (Active).when no GPU is visible, so the anchored count matches only the visible case.go test ./controllers/... ./internal/...passes, includingTestOperandToolkitReadinessWaitsForLiveDriverfrom Wait for the driver before starting GPU operands #2881.