Command-line reference#
pimm exposes six commands. Training-config values are intentionally not
typed launcher flags: put them after a bare -- as key=value tokens.
Command |
Use it for |
Does not do |
|---|---|---|
|
list Python training configs below an optional config directory |
inspect launch recipes or site profiles |
|
run on the current node or inside an existing allocation |
submit a scheduler job |
|
submit through Slurm with Submitit, or request an interactive allocation |
evaluate a completed experiment |
|
inspect or remove supervisors for chained interactive runs |
install a supervisor directly; |
|
summarize or export per-rank structured trace logs |
replace experiment metrics or an operator-level profiler |
|
consolidate model weights into a portable directory and optionally upload it |
save resumable trainer state |
Run commands through the checkout’s locked environment:
uv run pimm --help
uv run pimm ls panda/pretrain
uv run pimm launch --help
uv run pimm submit --help
uv run pimm watchdog --help
uv run pimm trace --help
uv run pimm export --help
The override boundary#
uv run pimm launch \
--train.config tests/tiny_semseg \
--resources.nproc-per-node 1 \
--run.name smoke \
-- \
epoch=1 \
batch_size=4 \
data.train.max_len=32
Everything before -- configures execution. Everything after it patches the
Python experiment config. Post-separator tokens must contain = and must not
start with --; values are parsed with YAML scalar/list/map syntax. Dotted
keys patch nested mappings.
pimm launch#
pimm launch [launcher options] -- [EXPERIMENT.KEY=VALUE ...]
launch always selects the local executor, even if a different --executor
value is passed. “Local” means run in the current shell context: this can be a
workstation, one compute node, or an allocation obtained separately.
# Resolve without starting training
uv run pimm launch \
--train.config panda/pretrain/pretrain-sonata-v1m1-pilarnet-smallmask \
--resources.nproc-per-node 4 \
--dry-run
The local site defaults resources.nproc_per_node to auto, which asks
scripts/train.sh to use all visible GPUs. Set an integer for a predictable
world size.
pimm submit#
pimm submit [launcher and Slurm options] -- [EXPERIMENT.KEY=VALUE ...]
Always pass --site explicitly in scripts. The parser currently defaults
submit to the repository’s s3df profile, which is convenient for that site
but not portable.
uv run pimm submit \
--site nersc \
--resources.nnodes 2 \
--resources.nproc-per-node 4 \
--resources.time 02:00:00 \
--train.config panda/pretrain/pretrain-sonata-v1m1-pilarnet-smallmask \
--dry-run
--interactive uses salloc ... srun ... instead of queueing a Submitit batch
job. A single slot runs in the terminal. With --chain.jobs N greater than
one, pimm installs a scron watchdog that supervises sequential, resuming
interactive slots; the site must provide scrontab and a suitable login-node
QOS.
If --submit.host HOST is set, pimm SSHes to that host and invokes pimm submit there. --no-remote prevents that second hop; pimm adds it internally
to avoid recursion.
Launcher option groups#
Hyphens in flags map to underscores in the launch dataclasses. Boolean flags
have positive and negative forms, for example --run.timestamp and
--run.no-timestamp.
Group |
Flags users commonly set |
|---|---|
selection/output |
|
paths |
|
resources |
|
run identity |
|
training handoff |
|
container |
|
environment bootstrap |
|
requeue |
|
interactive watchdog |
|
rendezvous |
|
remote submit |
|
--recipe is a YAML path relative to the repository root, for example
--recipe launch/runs/e050_tail.yaml. --output PATH writes the redacted
local script, Submitit manifest, or interactive salloc command. It does not
redirect training logs.
Three advanced mappings are deliberately absent from Tyro’s flag list:
env, train.options, and resources.scheduler_options. Put them in launch
YAML. Prefer the post--- tail over train.options for one-off experiment
overrides.
resources.scheduler accepts only local and slurm. pimm launch always
runs locally and ignores scheduler-only resource fields; pimm submit requires
resources.scheduler: slurm.
Caution
--executor is visible for schema compatibility, but the command verb wins:
launch forces local and submit forces batch or interactive Slurm. Choose the
verb rather than setting this field.
pimm watchdog#
Chained interactive submission installs the supervisor; this command manages installed supervisors without loading a launch config:
uv run pimm watchdog ls
uv run pimm watchdog rm <run-name>
uv run pimm watchdog rm <run-name> --scancel
rm removes the run’s scrontab entry. --scancel also cancels the active
watchdog driver and interactive allocation by Slurm job name.
pimm trace#
pimm trace summarize RUN_DIR
pimm trace export RUN_DIR [-o OUTPUT]
RUN_DIR can be an experiment directory or its structured_logs/ directory.
summarize reports the last step and event for every traced process, unmatched
spans, and p50/p95/maximum phase durations. export merges base and rotated
JSONL segments into a Perfetto-compatible Chrome Trace document. Its default
destination is <run>/analysis/structured_trace.json.
Structured logging is disabled by default. Enable it through the experiment config:
uv run pimm launch \
--train.config <config> \
-- structured_logging.enabled=true
See Structured logging for the event schema, storage controls, and failure-diagnosis workflow.
pimm export#
pimm export [checkpoint] [output_dir] [options]
With --run-dir, the checkpoint positional argument defaults to last and is
resolved under <run-dir>/model/. The output directory is required unless
--dry-run is set.
uv run pimm export \
--run-dir exp/panda/semseg/my-run \
last \
artifacts/panda-semantic
Option |
Meaning |
|---|---|
|
infer checkpoint names and the run config from an experiment directory |
|
provide a config when it cannot be inferred |
|
copy Markdown into the export as |
|
device used while consolidating tensors; default |
|
write |
|
upload the completed export |
|
create a public Hub repository; default is private |
|
explicit Hub token; prefer |
|
print resolved paths and exit without writing |
See Export and publication for artifact semantics and a strict round-trip check.
Evaluation is currently a script#
There is no pimm evaluate subcommand. The supported standalone path is:
uv run sh scripts/test.sh \
-c panda/semseg/semseg-pt-v3m2-pilarnet-ft-5cls-fft \
-n <experiment-name> \
-w model_best
The script accepts -p, -c, -n, -w, -g, and -m, but its current
execution path is single-process. Its -c value selects a config from the
current checkout, not the saved run’s config.py. Read Evaluate an experiment for the exact saved-config command before
reporting metrics.
Exit-before-spend checks#
Use these before a job with data or GPUs:
uv run pimm launch --train.config <config> --dry-run
uv run pimm submit --site <site> --train.config <config> --dry-run
uv run pimm export --run-dir <run> --dry-run
Dry runs validate cheap path/config conditions and render the command. They do not construct the dataset or model, test credentials, inspect scheduler state, or prove that a container/data mount is reachable on compute nodes.