Skip to main content
Creates experiments/my-grpo/ with a config inherited from the method’s template, a README of tuning notes, and a lock file pinning the method version. No GPUs are involved yet.

Before you start

Run it inside a project. tp init my-lab --yes makes one, and every command that needs a project walks up from the current directory looking for tuneplane.yaml.
The name in tuneplane.yaml is the project the console groups your jobs under. Characters are limited to [A-Za-z0-9._-]. Do not pass --project on submit; it comes from here. In CI, set TUNEPLANE_CLIENT_REPO_ROOT instead of changing directory. tp login, tp logout and tp status are global and need no project.

What one experiment holds

A custom/custom experiment also gets train.sh, which is its only entrypoint. You can put a train.py beside it. tp plugin install … --exp adds plugins.lock.json. The lock file is the method. Adding a framework file to the directory does nothing.

Write only the diff

An experiment inherits from the official bases and holds what you changed:
experiments/my-grpo/config.yaml
Parallelism, GPU memory tuning and NCCL settings are not in this file. They arrive from the server’s hardware registry when you pass --profile, so the same experiment runs on a different GPU type without an edit. See config.yaml for how the layering resolves. The top of the scaffold carries a comment block listing the keys people change most, with useful ranges.

Start from an experiment that already works

Copies the source experiment’s config and its lock. --method is ignored, because the lock comes with it.

Validate before you queue

Checks four things against the method declaration: tp submit runs the same validation. --no-validate skips it, which mostly buys you a queue wait before the same error.

Browse what you can tune

The console’s Methods page is the same catalogue with a search box.

What else can live in an experiment directory

Check it worked

tp validate my-grpo prints no errors, and experiments/my-grpo/recipe.lock.json names the method you asked for. Then submit it.

Next

config.yaml inheritance · Submitting a job · Sweeps
tp submit records the commit, and refuses a dirty tree unless you pass --allow-dirty. That is what lets you read a result six months later and know which code produced it.Git is not required to submit. Without a repository the run is recorded with no commit, and the file list changes: instead of git applying .gitignore, the bundle is walked against the platform’s built-in exclusions and refused above 64 MB, so a checkpoint directory cannot quietly become an upload. Raise that ceiling with TUNEPLANE_CLIENT_MAX_PACKAGE_MB if a project genuinely needs to ship something large.