Brittle Star Configuration System
This project uses Hydra for a modular, hierarchical, and strictly-typed configuration system.
Core Concepts
- Composition over Inheritance: Instead of one giant config file, the configuration is composed of small, domain-specific modules (PPO settings, architecture, morphology, etc.).
- Strict Typing: Every configuration is validated against a Python dataclass schema (
ConfigStore). Misspelled keys throw aConfigAttributeErrorimmediately. - CLI Swapping: You can swap entire modules or override individual values from the command line without touching code.
Directory Structure
main_config.yaml: The root entry point defining the default composition.experiment/: High-level experiment settings (seed, device).logging/: WandB and checkpointing configuration.ppo/: PPO training hyperparameters.architecture/: Polymorphic network architectures (centralized vs. decentralized).morphology/: Physical robot definitions (number of segments, amputations).arena/: Environment physics and visual settings.environment/: Task-specific settings (Directed Locomotion, Light Escape).
Common Commands
Local Debugging
Run a quick test with minimal iterations:
python scripts/train.py experiment=dev_test ppo=fast
Swapping Architectures or Morphologies
Test a decentralized controller on a 3-arm robot:
python scripts/train.py architecture=decentralized morphology=3_arms
HPC Production
Run stable PPO with WandB enabled (HPC submission scripts handle the hydra.run.dir redirection):
python scripts/train.py ppo=stable logging=wandb_enabled
Dry-Run Validation
Check if your configuration is valid without starting the simulation:
python scripts/train.py --cfg job
Developer Notes
- Adding a new group: Create a subdirectory in
configs/and register the new dataclass insrc/brittle_star_project/configs/register_configs.py. - Typo Catching: If you see a
ConfigAttributeError, check for typos in your YAML keys or CLI overrides. - Output Redirection: We use
experiment.base_run_dirto configure where logs and models are stored (defaults toruns/). - To change it locally:
python scripts/train.py experiment.base_run_dir=/path/to/custom/dir - On HPC, ensure this points to a fast scratch storage.