Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Preflight and diagnose the ten known failure modes for ML training on NVIDIA DGX Spark. Use when a training run on DGX Spark fails to start, OOMs below the 128GB limit, slows down mid-run, or before any multi-hour training job on GB10.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 38% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 16% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 54% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 16% | 0% |
DGX Spark's GB10 chip (Grace Blackwell, SM121, 128GB unified memory, aarch64) has ten recurring failure modes across launch, memory, thermals, bandwidth, and precision. Each is named G1–G10 so it can be checked by number — the numbering is load-bearing for tooling that runs these checks. Read this before a long run, not after hour six.
segfault that doesn't point at the real cause.
nvidia-smi still shows headroom.strategy.
| # | Symptom | Fix | |---|---|---| | G1 | undefined symbol / segfault | cu130 wheel or container | | G2 | flash-attn wrong backend used | skip pip build; monkeypatch on NGC | | G3 | OOM despite headroom | drop page cache | | G4 | throughput drop / reboot | expect ~100W sustained cap | | G5 | memory-bound step slow | budget 180–192 GB/s | | G6 | cache evicted mid-run | one GPU server at a time | | G7 | NVFP4 slower than FP8 | stay FP8 unless sm_121a | | G8 | playbook fails outright | check upstream issues | | G9 | env breaks after install | use a container | | G10 | 2-Spark TP hangs | DDP/FSDP only, never TP |
ImportError: undefined symbol naming a CUDAfunction, or a segfault on the first .cuda() call.
libcudart.so.12; Sparkships CUDA 13. pip never checks CUDA ABI, so it surfaces only at import or first kernel launch.
references/gotcha-checks.md G1 — the wheel'sCUDA build tag.
download.pytorch.org/whl/cu130 oruse a matched container.
pip install flash-attn still fails/hangs.Unsloth may also silently train flash-attn over an explicitly requested SDPA.
containers ship a working SM121 flash-attn, and Unsloth auto-prefers it, dropping attn_implementation="sdpa".
references/gotcha-checks.md G2 — is flash-attnalready present and working.
NGC — the only reliable override is the monkeypatch in references/gotcha-checks.md G2.
nvidia-smi still reports free memory under the 128GB cap — or, on some setups, [N/A] outright instead of a number.
during safetensors load; QLoRA can OOM earlier than bf16 since dequantization adds transient allocs.
references/gotcha-checks.md G3 — read free -gand /proc/meminfo, not nvidia-smi.
sync; echo 3 > /proc/sys/vm/drop_caches — needs root, a between-run reset, not a mid-training step.
run, or the box spontaneously reboots under sustained load.
240W rated figure; long runs push into that ceiling and throttle or, sometimes, reboot.
references/gotcha-checks.md G4 — samplenvidia-smi --query-gpu=temperature.gpu,power.draw.
climbs, treat throttling as the cause; improve cooling or cap run length.
especially, plateau well below expected throughput.
measured bandwidth runs 180–192 GB/s.
references/gotcha-checks.md G5 — observed steptime vs. the measured range, not spec.
built on the 273 GB/s figure.
mid-run silently, no OOM in its own logs.
one global pool; an uncapped or near-capacity process competes with anything else and can evict it. A small, bounded workload doesn't — a <4GB LoRA coexists fine alongside vLLM capped at gpu-memory-utilization<=0.5.
references/gotcha-checks.mdG6 — other GPU-resident processes and whether capped.
rule applies to uncapped or near-capacity workloads — cap or stop unrelated servers first. A small, capped workload need not stop.
NVFP4 on Spark makes it slower, not faster.
cvt.e2m1x2 unless kernels targetsm_121a; NVFP4 runs ~32% slower without it.
references/gotcha-checks.md G7 — capabilityreports (12, 1); does the build target sm_121a?
sm_121a.fails, with no local misconfiguration explaining it.
the stack moves faster than the docs.
references/gotcha-checks.md G8 — the playbookrepo's recent issues.
github.com/NVIDIA/dgx-spark-playbooks issuesbefore trusting a recipe for an expensive run.
breaks after an unrelated pip install, or two "identical" environments behave differently.
drift independently; nothing pins them to GB10's SM121 target.
references/gotcha-checks.mdG9 — container or bare pip?
spark-environment-setupfor tag guidance) or Unsloth's container. If bare pip is unavoidable, follow the NVIDIA install order, including --no-deps on Unsloth.
hangs, runs far slower than single-Spark, or errors out.
sync (DDP, FSDP) but too thin for TP's fine-grained traffic.
references/gotcha-checks.md G10 — theconfigured parallelism strategy.
tensor parallelism — TP is single-node only here.
The cheapest checks to run before anything else:
bashpython3 -c "import torch; print(torch.version.cuda)" # expect 13.x (G1); NGC builds have no +cu130 tag — that's not a failure
pythonimport torch; print(torch.cuda.get_device_capability()) # expect (12, 1) (G7)
bash{ [ -f /.dockerenv -o -f /run/.containerenv ] || grep -qE 'docker|containerd' /proc/1/cgroup; } 2>/dev/null && echo container || echo unknown # G9
assets/preflight.sh runs G1, G3, G4, G7, G9 and produces one output line per gotcha in a fixed format: G-number first, then PASS/FAIL/WARN where automatable, SKIP when unavailable, or INFO: for a raw reading (G3, G4). Full commands: references/gotcha-checks.md. See also spark-environment-setup for the environment assumed working.
Other measured skills in the registry, with their headline benchmark lift.