PhaseSweep
PhaseSweep runs phase-chained hyperparameter sweeps from one ordinary YAML file. That file contains your trainer configuration, the metric, and the search plan. PhaseSweep materializes the configured trainer input for every trial, decides what to try next, persists each phase winner, and carries selected values forward as fixed inputs to later phases.
This is useful when a full joint sweep is too expensive or hard to interpret. For example, choose architecture depth, then tune learning rate, then regularization. The configuration guide explains the inheritance model and its tradeoffs.
How it works
The starter.yaml that phasesweep init writes searches depth before learning rate (abridged; the full file also sets storage, the working directory, and the metric extractor):
experiment: phasesweep_starter
# The trainer receives one complete generated YAML per trial.
trial_command: "python -m phasesweep.examples.fake_train --config {config_path}"
trainer_config:
model:
n_layers: 8
dropout: 0.1
optimizer:
lr: 0.0003
weight_decay: 0.05
metric:
name: eval_loss
goal: minimize
phases:
- name: depth
n_trials: 2
sampler: { type: grid }
search_space:
model.n_layers: { type: categorical, choices: [6, 8] }
- name: learning_rate
inherits: [depth] # the winning model.n_layers is fixed here
n_trials: 2
sampler: { type: grid }
search_space:
optimizer.lr: { type: categorical, choices: [0.0001, 0.0003] }
The packaged fake trainer uses report_objective(...). Your own trainer can report through that helper, W&B, MLflow, ordinary JSON, or logs.
Install and try it
Requirements: Python 3.11+ and a Linux host for real runs. GPUs are optional.
pip install phasesweep
phasesweep --version
mkdir phasesweep-demo && cd phasesweep-demo
phasesweep init # writes the starter template, starter.yaml
phasesweep validate starter.yaml # checks it without launching anything
phasesweep run starter.yaml # runs four tiny toy-trainer trials
phasesweep init never overwrites an existing file. Use phasesweep init --list to choose a template, --template NAME to write it, and -o PATH to choose its destination. The templates run on the packaged toy trainer; replace the command, keys, and extractor with your own.
The run log, runs/phasesweep_starter/run.log beside the config, shows the phase chaining (abridged):
[depth/trial_0] python -m phasesweep.examples.fake_train --config .../trainer_config.yaml
phase=depth TRIAL trial=0 state=COMPLETE outcome=success value=0.3 duration=0.8s (1/2 finished)
[depth/trial_1] python -m phasesweep.examples.fake_train --config .../trainer_config.yaml
phase=depth TRIAL trial=1 state=COMPLETE outcome=success value=0.5 duration=0.7s (2/2 finished)
phase=depth WINNER trial=0 metric=0.3 params={'model.n_layers': 8}
[learning_rate/trial_0] python -m phasesweep.examples.fake_train --config .../trainer_config.yaml
phase=learning_rate TRIAL trial=0 state=COMPLETE outcome=success value=0.3 duration=0.8s (1/2 finished)
[learning_rate/trial_1] python -m phasesweep.examples.fake_train --config .../trainer_config.yaml
phase=learning_rate TRIAL trial=1 state=COMPLETE outcome=success value=0.413822 duration=0.8s (2/2 finished)
phase=learning_rate WINNER trial=0 metric=0.3 params={'optimizer.lr': 0.0003}
The depth winner's model.n_layers: 8 is injected into every learning_rate trial's complete YAML. Winners persist in the working directory, so you can inspect them any time (abridged):
phasesweep show-winners starter.yaml
phase: learning_rate
metric:
eval_loss: 0.3
goal: minimize
trial_number: 0
params:
optimizer.lr: 0.0003
effective_overrides:
model.n_layers: 8
optimizer.lr: 0.0003
# ... completion state and evidence follow
Inspect recorded trials without launching work:
phasesweep status starter.yaml --trials
Run the same config again to resume after an interruption. See continuation and reruns for trial budgets and reproducibility, and inspection commands for status and result views.
Use your own trainer
Start from the template closest to your trainer. Choose its existing input interface: complete YAML, command-line flags, Hydra overrides, or nested JSON. phasesweep explain KEY prints the reference for one key; configuration errors name the relevant keys.
Set execution.cwd, env, and execution.inherit_env for the trainer's working directory and environment. validate and --dry-run print the launch contract so you can check it before training.
Choose an objective extractor for the trainer's output. For W&B, install the extra and follow the W&B setup:
pip install "phasesweep[wandb]"
For MLflow, install phasesweep[mlflow] and follow the MLflow guide. Use objective reporting when the checkpoint behind a value matters, and small-budget advice and repeats for noisy measurements.
Connect an agent
The optional MCP server connects an AI agent to experiments you have approved without exposing config or storage paths, trainer commands, environment values, or raw logs. Sampled winner values follow the catalog's visible_params policy. Follow the MCP setup to install the extra, review the catalog authority boundary, configure a client-owned connection, and verify the result; phasesweep mcp call runs one tool from a shell without a client.
Reference
- Configuration guide: Experiment YAML, search spaces, inheritance, noisy objectives and small budgets, repeats, gates, and objective extractors.
- Configuration reference: per-key types, defaults, valid values, interactions, and lifecycle warnings. Too long to read whole;
phasesweep explainlists the top-level keys andphasesweep explain 'phases[].sampler'prints one key and everything below it. - Minimal starting configuration: one local toy-trainer attempt; validate or run it from the checkout root.
- Runtime behavior: filesystem layout, locks, GPU leases, process supervision, fingerprints, and resume.
- MCP setup: installed-package agent onboarding and client-owned setup.
- MCP operator reference: catalog fields, tools, authorization, run state, and recovery.
- Toy experiment and MCP catalog: a checkout-local CLI example backed by the packaged fake trainer, plus an MCP catalog whose detached-run state and experiment outputs use absolute scratch paths under
/tmp. - Tiny Decoder Enwik8 example: real-trainer integration.
- Durability invariants: the ordering rules the ledger, publication, and recovery paths must hold, and the test that owns each one.
- Development: source checkout, contributor setup, and quality gates.
License
MIT. See LICENSE.
Metadata
Release files for phasesweep 0.3.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| phasesweep-0.3.9.tar.gz | 2.5 MB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| phasesweep-0.3.9-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 2.9 MB
Release files / phasesweep-0.3.9.tar.gz
| Download URL | phasesweep-0.3.9.tar.gz |
|---|---|
| Size | 2.5 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
15178d93919cba9403020d280562c378af2d6921c1780224209075d7fec5837a
|
|
BLAKE2b-256 checksum How to use checksums |
827f53be8f1258c2985d2688ccaa6b586f95800a0d2d23f913bef1420bb2aa4e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.
Transparency logRelease files / phasesweep-0.3.9-py3-none-any.whl
| Download URL | phasesweep-0.3.9-py3-none-any.whl |
|---|---|
| Size | 488.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
24c213c8dc4048b89efe4c72ca8f589d23c4eb435257eeb8f89e63a342f05749
|
|
BLAKE2b-256 checksum How to use checksums |
4dd1d12036075858518090b562e9278c24802cd935a75754d84ab7397e9b885a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.
Transparency logSecurity for phasesweep 0.3.9
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for phasesweep-0.3.9.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.