Skip to content

Fail DeepSSM jobs instead of reporting success - #2622

Merged
akenmorris merged 2 commits into
masterfrom
deepssm-gpu-failure
Aug 7, 2026
Merged

Fail DeepSSM jobs instead of reporting success#2622
akenmorris merged 2 commits into
masterfrom
deepssm-gpu-failure

Conversation

@akenmorris

@akenmorris akenmorris commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Fixes #2621

DeepSSMJob::run() caught exceptions and returned normally, so a failed job was still marked complete: training that died at model initialization logged "Training complete", Run All chained into testing (which then failed on the missing best_model.torch), and the CLI exited zero. Job now carries a failed state that PythonWorker reports instead of the completion message, so Studio does not advance to the next step and shapeworks deepssm stops and exits non-zero. PythonWorker also marks the job complete on failure now, which it previously did not do, leaving the CLI's wait loop spinning forever.

The underlying failure is that light-the-torch 0.8.0's driver table stops at CUDA 12.6, so it can never select a cu128 wheel — every RTX 50-series user gets a PyTorch with no sm_120 kernels and DeepSSM cannot train at all. Bumped to 0.8.1, which knows CUDA 12.8 through 13.1. net_utils.get_device() now also probes the GPU with a small kernel launch and raises UnusableGPUError naming the device capability, the architectures the wheel supports, and whether a newer or older PyTorch is needed. It does not fall back to the CPU — that would silently turn a fixable setup problem into a run of several days. Machines with no GPU at all still run on the CPU as before.

swpip install now passes --upgrade, without which pip skips files that already exist under --target and reports success while leaving the old build in place — so the reinstall command in the error message and docs actually replaces PyTorch.

Both DeepSSM tests pass on CPU. The failure path was checked by forcing the unusable-GPU branch: the run stops at data loader preparation with the full message in the log, testing does not run, and the CLI exits 1.

DeepSSMJob::run() caught exceptions and returned normally, so a failed job was
still marked complete: training that died at model initialization logged
"Training complete", Run All chained into testing, and the CLI exited zero.
Jobs now carry a failed state, which stops the chaining and makes the CLI exit
non-zero.

DeepSSM also selected the GPU on torch.cuda.is_available() alone, which is true
even when the installed PyTorch wheel has no kernels for that card. Probe the
GPU with a small kernel launch before using it and fall back to the CPU with a
message naming the device capability and the wheel's supported architectures.
A machine with a GPU that PyTorch cannot use is a setup problem to fix, not a
reason to silently start a run that would take days. get_device() now raises
UnusableGPUError with the diagnostic message rather than returning the CPU.
Machines with no GPU at all still run on the CPU as before.
@akenmorris
akenmorris merged commit 34d2729 into master Aug 7, 2026
5 checks passed
@akenmorris
akenmorris deleted the deepssm-gpu-failure branch August 7, 2026 14:27
@akenmorris
akenmorris restored the deepssm-gpu-failure branch August 10, 2026 22:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

DeepSSM: unusable GPU causes silent training failure reported as success

1 participant