Skip to content

fix(distributed): correct VRAM/RAM reporting on NVIDIA unified-memory hosts - #9545

Merged
mudler merged 1 commit into
masterfrom
fix/nvidia-unified-ram-gpu
Apr 24, 2026
Merged

fix(distributed): correct VRAM/RAM reporting on NVIDIA unified-memory hosts#9545
mudler merged 1 commit into
masterfrom
fix/nvidia-unified-ram-gpu

Conversation

@mudler

@mudler mudler commented Apr 24, 2026

Copy link
Copy Markdown
Owner

Workers on NVIDIA unified-memory hardware (DGX Spark / GB10, Jetson AGX Thor, Jetson Orin/Xavier/Nano) were reporting available_vram=0 back to the frontend, so the Nodes UI showed the node as fully used even when most of the unified memory was actually free.

Three causes addressed:

  • isTegraDevice only matched /sys/devices/soc0/family == "Tegra". DGX Spark (SBSA) reports JEDEC codes there instead — jep106:0426 for the NVIDIA manufacturer — so the Tegra/unified-memory fallback never ran. Renamed to isNVIDIAIntegratedGPU and extended to also match jep106:0426[:*] via /sys/devices/soc0/soc_id.

  • The unified-iGPU code defaulted the device name to "NVIDIA Jetson" when /proc/device-tree/model was missing. That's what happens for Thor inside a docker container, and always on DGX Spark. New nvidiaIntegratedGPUName resolves via dt-model → /sys/devices/soc0/machinesoc_id lookup (jep106:0426:8901"NVIDIA GB10") so the Nodes UI labels the box correctly.

  • Worker heartbeat sent available_vram=0 (or total-as-available) when VRAM usage was momentarily unknown — e.g. when nvidia-smi intermittently failed with waitid: no child processes under containers without --init. Each such heartbeat overwrote the DB and made the UI flip to "fully used". heartbeatBody now omits available_vram in that case so the DB keeps its last good value.

Also updates the commented GPU blocks in both compose files with NVIDIA_DRIVER_CAPABILITIES=compute,utility, capabilities: [gpu, utility], and init: true, and documents the requirement in the distributed-mode and nvidia-l4t pages. Without utility, NVML/nvidia-smi are absent inside the container, which is what put the DGX Spark worker into the buggy fallback in the first place.

Detection verified on live hardware by running a cross-compiled probe of the new helpers on both host and inside the worker container.

Assisted-by: Claude:opus-4.7 [Claude Code]

… hosts

Workers on NVIDIA unified-memory hardware (DGX Spark / GB10, Jetson AGX Thor,
Jetson Orin/Xavier/Nano) were reporting `available_vram=0` back to the frontend,
so the Nodes UI showed the node as fully used even when most of the unified
memory was actually free.

Three causes addressed:

* `isTegraDevice` only matched `/sys/devices/soc0/family == "Tegra"`. DGX Spark
  (SBSA) reports JEDEC codes there instead — `jep106:0426` for the NVIDIA
  manufacturer — so the Tegra/unified-memory fallback never ran. Renamed to
  `isNVIDIAIntegratedGPU` and extended to also match `jep106:0426[:*]` via
  `/sys/devices/soc0/soc_id`.

* The unified-iGPU code defaulted the device name to `"NVIDIA Jetson"` when
  `/proc/device-tree/model` was missing. That's what happens for Thor inside a
  docker container, and always on DGX Spark. New `nvidiaIntegratedGPUName`
  resolves via dt-model → `/sys/devices/soc0/machine` → `soc_id` lookup
  (`jep106:0426:8901` → `"NVIDIA GB10"`) so the Nodes UI labels the box
  correctly.

* Worker heartbeat sent `available_vram=0` (or total-as-available) when VRAM
  usage was momentarily unknown — e.g. when `nvidia-smi` intermittently failed
  with `waitid: no child processes` under containers without `--init`. Each
  such heartbeat overwrote the DB and made the UI flip to "fully used".
  `heartbeatBody` now omits `available_vram` in that case so the DB keeps its
  last good value.

Also updates the commented GPU blocks in both compose files with
`NVIDIA_DRIVER_CAPABILITIES=compute,utility`, `capabilities: [gpu, utility]`,
and `init: true`, and documents the requirement in the distributed-mode and
nvidia-l4t pages. Without `utility`, NVML/`nvidia-smi` are absent inside the
container, which is what put the DGX Spark worker into the buggy fallback in
the first place.

Detection verified on live hardware (dgx.casa / GB10 and 192.168.68.23 / Thor)
by running a cross-compiled probe of the new helpers on both host and inside
the worker container.

Assisted-by: Claude:opus-4.7 [Claude Code]
@mudler
mudler merged commit 551ebdb into master Apr 24, 2026
45 checks passed
@mudler
mudler deleted the fix/nvidia-unified-ram-gpu branch April 24, 2026 20:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant