GradLab is a Python CLI and reproducible reinforcement-learning workbench for researchers who train, evaluate, compare, inspect, and publish game agents. It turns versioned goal contracts and recipes into traceable local or queued runs, with portable policies and evidence-backed results.
Try the bundled ROM-free smoke recipe without cloning, credentials, or a ROM:
uvx gradlab@0.1.1 train gradlab__bandit/ppoThe run writes a directly playable policy below ~/.config/gradlab/runs/.
Install uv, then run:
git clone https://github.com/tsilva/gradlab.git
cd gradlab
./install.sh
gradlab validateRun gradlab --help to open the command reference, or train and play the
bundled smoke recipe:
gradlab train gradlab__bandit/ppo
gradlab play --recipe gradlab__bandit/ppogradlab play starts the local web player and prints its loopback URL.
gradlab train <goal>/<recipe> # train a checked-in recipe locally
gradlab play [artifact] # browse or inspect local and remote policies
gradlab validate # validate goals, recipes, benchmarks, and ops config
gradlab env list # list available environment providers
gradlab rom status --json # inspect registered ROM assets
gradlab benchmark list # list reproducible benchmark profiles
gradlab experiment status --run ID # inspect an orchestrated run
uv run pytest # run Python tests
uv run ruff check . # lint Python code
pnpm test:web # run web-player testsUse gradlab <command> --help for full arguments. Gameplay datasets, leader
queries, W&B reports, and workspace management are also available through the
dataset, leaders, reports, and workspaces commands.
Evidence-backed research releases are indexed in the pinned Research Results Discussion. Start with Featured Research on Hugging Face or its YouTube playlist.
Environment indexes:
Evaluation evidence and representative replay are distinct: immutable model tags contain the accepted evaluation record, while videos show one separately labeled episode.
Queued training uses dstack for placement, a single supervisor-controlled training container, Modal for separately scheduled checkpoint evaluation, R2 for run authority and artifacts, and W&B for metrics.
Copy the portable operator template into private user configuration and run the read-only preflight before launching:
mkdir -p ~/.config/gradlab
install -m 600 ops/operator.example.toml ~/.config/gradlab/operator.toml
gradlab experiment operator-preflight --jsonThen launch a checked-in goal and recipe with a finite duration and a specific description:
gradlab experiment launch \
--goal-file experiments/goals/SuperMarioBros-Nes-v0/Level1-1/_goal.yaml \
--recipe-file experiments/goals/SuperMarioBros-Nes-v0/Level1-1/recipes/ppo.yaml \
--seed 123 \
--run-description "Mario Level1-1 PPO seed 123" \
--compute local \
--max-duration 48h \
--jsonLocal compute requires an enrolled fleet in
~/.config/gradlab/instances.md. Paid cloud compute is always bounded and
explicitly authorized. See COMPUTE.md and the
dstack runbook before operating queued runs.
- GradLab requires Python 3.14 and uses
uvwith a committed lockfile and a seven-day dependency age gate. Supported binary targets are macOS arm64 and Linux x86_64. - Local
gradlab trainruns disable W&B and checkpoint evaluation by default. They are training-only and cannot establish goal acceptance or checkpoint promotion. gradlab.ppois the opt-in tensor-native PPO backend. It accepts thesb3.ppoconfiguration surface plusprecision(fp32,amp-fp16, oramp-bf16) and anexecution_profile.sb3-paritypreserves SB3's eager, unfused, environment-major minibatch path;compiled-parityandcompiled-fused-parityisolate the CUDA optimizations;max-throughputadditionally uses GPU-native permutation and is the default. The backend keeps PPO artifacts mutually resumable with SB3 and uses eager execution on CPU or MPS. Checked-in training recipes remain onsb3.ppountil the dedicated RTX 4090 throughput gate passes.- NES recipes require a lawfully obtained ROM supplied with
--rom-pathor registered withgradlab rom sync. ROMs and credentials must remain outside source control. - Generated runs default to
~/.config/gradlab/runs/; other generated logs and models belong in ignoredlogs/andmodels/directories. - dstack task success is not scientific success. A queued run succeeds only when its terminal receipt proves checkpoint publication, evaluation drain, promotion state, and metric delivery.
- SPECS.md defines product requirements, METRICS.md defines metric semantics, and experiments/README.md explains the checked-in research contracts.
This repository does not currently include a project license. Third-party attributions are listed in THIRD_PARTY_NOTICES.md.

