Skip to main content
The console accepts recipe, source-package and image submissions. Review the resolved Fleet, backend, GPU count, warnings and expiry before confirming. Preview does not queue a job; commit creates it. Expand resolved details when checking configuration or provenance.
Validates locally, packs the working tree and uploads it, then shows a preview for confirmation. Committing queues the job and prints its id. Everything below changes what that command does. The full flag list is on tp submit.

Train from the console

Open Jobs → Submit job, or use Submit job in a recipe’s catalog detail. The default Recipe and configuration form needs no JobSpec JSON:
  1. Enter the project, then select a training framework, recipe and supported framework version.
  2. Set the experiment name, base-model reference and training/validation dataset references and splits.
  3. Request GPU series, nodes and GPUs per node. CPU and memory budgets are per node; the scheduler selects a compatible Fleet.
  4. Adjust the recipe’s declared parameters. Expand optimization, tuning or other groups, or search by parameter name. Empty controls retain recipe defaults. Framework-specific options such as LoRA appear only where the recipe declares them.
  5. Resolve the preview, review the chosen Fleet, runtime details, GPU count and warnings, then confirm. Preview alone creates no training job.
Changing framework or recipe clears incompatible inputs. Changing framework version resets parameter overrides. Any edit invalidates the previous preview. A retry after an uncertain confirmation uses the same preview to avoid creating a second job. The advanced runtime section accepts an optional digest-pinned image override. The registered runtime must exist for the selected framework/version; selecting a form option does not install a training framework. Source-package and image submission modes remain available for custom projects.

Pick the hardware

Split roles across GPU types by repeating the flag. Roles that share a pool are comma-separated:
Multiple pools need a kubernetes or slurm Fleet. See the resource model.

Override a hyperparameter for one run

Repeatable. Types and ranges are checked against the method declaration before anything is uploaded. This affects the submission only; your experiment files are untouched.

Point at a model and data

Model and data come from the config — a base plus a model fragment. Nothing extra is usually needed at submit time.

Mount material the job may read but not download

A Volume arrives read-only at $VOLUMES_DIR/<name>. It has no version: its current contents are its contents. tp volume ls lists the ones you can reference. Repeatable, and better declared as data.volumes in the config.

Publish what the run produces

The job writes into $TUNEPLANE_DATASET_OUT_DIR and the platform publishes it when the run succeeds. The job never holds a registry credential, and the published dataset inherits the classification of the material it read.

Run against an agent environment

The platform resolves the version into the job runtime and mounts it read-only. tp env ls lists what you can reference. See agent environments.

Use a different image

Required for custom, optional elsewhere, where it overrides the framework’s configured default. Resolution order is --image, then the console’s framework default, then the runtime registry, then the catalogue. Tags work; pin a digest in production. The registry has to be on the server’s allowlist — see custom images.

Chain steps after training

Runs automatically once training succeeds. Each one becomes a Step of the same Pipeline. See pipelines.

Continue from another run

This is how SFT → DPO → GRPO is expressed. The new run records a Derivation back to the old one, and the lineage shows up on both job pages.

Move to a newer method version

--framework-version only does something together with --upgrade-recipe. On its own it does not rewrite the lock file.

What gets uploaded

Three directories: experiments/<exp>/, common/ and configs/. In a git project, git’s own ignore rules apply, plus a shared exclude list:
A file that looks like a credential refuses to package, rather than being skipped quietly: .env, .envrc, credentials.json, token.txt, api_key.txt, *.pem, *.key, id_rsa*, secrets.*, hf_token*, *_credentials.json. Move it out of the three packed directories. Secrets reach a job through the platform’s own injection, never through the package.

Provenance

A dirty working tree is refused by default, so a result traces back to an exact commit. Untracked files are listed as warnings either way.

Check it worked

tp submit prints a job id and a state of QUEUED or SUBMITTED. Then:

When the server refuses or waits

A refusal names the gate. A job that was admitted but is waiting names it too, on the job page and in tp status. A stale recipe.lock.json is refused before any of these: re-submit with --upgrade-recipe.

Next

Sweeps · Pipelines · Job states · Troubleshooting