Experimental exex execution#

Exex is a required dependency; its execution adapter is opt-in. Set PIMM_USE_EXEX=1 with the existing pimm CLI. Unset it or set it to 0 to keep the existing launcher. There is no separate launcher script or checkpoint hook to configure, and failures never trigger silent fallback.

Run#

Install the locked dependencies with uv sync. The author and execution runtimes, including containers, need the pinned exex dependency.

# Inspect the plan without staging source or submitting a job.
PIMM_USE_EXEX=1 uv run pimm submit --site s3df \
  --train.config tests/tiny_semseg --resources.nproc-per-node 1 --dry-run

# Run locally using the same config interface.
PIMM_USE_EXEX=1 uv run pimm launch \
  --train.config tests/tiny_semseg --resources.nproc-per-node 1

# Two Slurm nodes, with two GPU workers per node.
PIMM_USE_EXEX=1 uv run pimm submit --site s3df \
  --train.config tests/tiny_semseg --resources.nnodes 2 --resources.nproc-per-node 2 \
  -- batch_size_val=4 batch_size_test=4

# NERSC interactive allocations, with up to three total attempts.
PIMM_USE_EXEX=1 uv run pimm submit --site nersc --interactive \
  --train.config tests/tiny_semseg --resources.nproc-per-node 1 \
  --resources.qos interactive --chain.jobs 3

Use your training config or existing --recipe; datasets must be available on the execution site. Site, resource, container, environment and setup settings select the target. There is no placement resolver or second site file.

Source and runtime#

Exex captures the Git-selected pimm/ and configs/ files, including uncommitted changes, and stages the frozen source to the selected host. It does not rebuild dependencies or synchronize a mutable remote checkout. paths.repo_root can identify a prepared execution runtime; source always comes from the author’s checkout. Dependencies outside those source directories must already be installed in the runtime.

The old train.code_copy and container.repo_mount choices are superseded by frozen-source execution. Do not bind a mutable checkout over the captured source.

Continuation#

Pimm runs torchrun and automatically restores its checkpoint and saves at safe pause boundaries. Exex retains the completed checkpoint and handles the next allocation. chain.jobs includes the initial attempt; resources.signal_delay_s reserves time to reach a safe point and capture state. Crashes and failed checkpoints are not retried.

Each attempt has its own output directory. The named checkpoint artifact holds that attempt’s training outputs and resumable model state. The previous artifact supplies the next attempt’s input; training writes to the new output directory. An initial --train.resume requires --train.weight pointing to a complete checkpoint visible to the worker.

Execution continuation does not select W&B history. Set PIMM_WANDB_HISTORY independently of PIMM_USE_EXEX:

  • new (default): create a new tracking run, even when training resumes.

  • append: continue the checkpoint’s tracking run without deleting history.

  • fork: create a child inheriting history through the checkpoint; requires W&B permission. Permission failures are not silently downgraded.

append and fork require checkpointed tracking identity and online mode. Rewind is unsupported. Explicit training config wandb_history takes precedence over the environment variable. Exex owns tracking identity/history and links; pimm keeps metric buffering and the semantic train/global_step axis. Keep credentials in runtime credential files or the worker environment, not recorded arguments or launch env dictionaries.

Storage and remote submission#

The author catalog is .exex/ in the checkout. Target staging is selected by submit.folder, defaulting to paths.exp_root/.exex. These directories contain retained execution state, not source files; do not commit or casually delete them. The launcher prints the experiment ID. From the author checkout, inspect it with exex experiments, exex status ID, or exex logs ID 1.

For S3DF → NERSC, set --submit.host nersc and an absolute target --paths.exp-root. SSH uses your existing configuration. Select an absolute target interpreter for a host runtime, or the prepared Shifter image/interpreter. Shifter clears inherited environment; use explicit env and setup settings.

Multi-node Slurm launches one torchrun coordinator per node using srun outside the container. Staging must be shared by all nodes; continuation keeps node/GPU counts and batch settings fixed. An attached salloc launcher must stay alive.

The current adapter supports single-node Local and multi-node Slurm, including multiple GPUs per node. Cloud execution, array continuation, watchdogs and automatic cross-site placement are not supported.