diff --git a/benchmarl/run.py b/benchmarl/run.py index 2328653e..8ec2addf 100644 --- a/benchmarl/run.py +++ b/benchmarl/run.py @@ -9,19 +9,15 @@ def hydra_experiment(cfg: DictConfig) -> None: hydra_choices = HydraConfig.get().runtime.choices task_name = hydra_choices.task - print(f"\nAlgorithm: {hydra_choices.algorithm}, Task: {task_name}") + algorithm_name = hydra_choices.algorithm + + print(f"\nAlgorithm: {algorithm_name}, Task: {task_name}") print("\nLoaded config:\n") print(OmegaConf.to_yaml(cfg)) - experiment = load_experiment_from_hydra( - cfg, - task_name=task_name, - ) + experiment = load_experiment_from_hydra(cfg, task_name=task_name) experiment.run() if __name__ == "__main__": hydra_experiment() - - # You can run multiple experiments like so - # python simple_hydra_run.py --multirun algorithm=mappo,qmix,maddpg,masac task=vmas/balance diff --git a/examples/vmas_run.py b/examples/vmas_run.py deleted file mode 100644 index 60059e1d..00000000 --- a/examples/vmas_run.py +++ /dev/null @@ -1,50 +0,0 @@ -import hydra -from benchmarl.experiment import Experiment - -from benchmarl.hydra_config import ( - load_algorithm_config_from_hydra, - load_experiment_config_from_hydra, - load_model_config_from_hydra, - load_task_config_from_hydra, -) -from hydra.core.hydra_config import HydraConfig -from omegaconf import DictConfig, OmegaConf - - -@hydra.main(version_base=None, config_path="../benchmarl/conf", config_name="config") -def hydra_experiment(cfg: DictConfig) -> None: - hydra_choices = HydraConfig.get().runtime.choices - task_name = hydra_choices.task - print(f"\nAlgorithm: {hydra_choices.algorithm}, Task: {task_name}") - - algorithm_config = load_algorithm_config_from_hydra(cfg.algorithm) - task_config = load_task_config_from_hydra(cfg.task, task_name) - model_config = load_model_config_from_hydra(cfg.model) - experiment_config = cfg.experiment - - # Hyperparameter changes for VMAS experiments - experiment_config.sampling_device = "cuda" - experiment_config.train_device = "cuda" - experiment_config.collected_frames_per_batch = 60_000 - experiment_config.n_envs_per_worker = 600 - experiment_config.on_policy_minibatch_size = 4096 - experiment_config.evaluation_episodes = 200 - experiment_config = load_experiment_config_from_hydra(cfg.experiment) - - print("\nLoaded config:\n") - print(OmegaConf.to_yaml(cfg)) - - experiment = Experiment( - task=task_config, - algorithm_config=algorithm_config, - model_config=model_config, - seed=cfg.seed, - config=experiment_config, - ) - experiment.run() - - -if __name__ == "__main__": - hydra_experiment() - # To reproduce the VMAS results launch this with - # python run.py algorithm=ippo "task=vmas/navigation,vmas/balance,vmas/sampling" "seed=0,1,2" diff --git a/premade_scripts/vmas/config.yaml b/premade_scripts/vmas/config.yaml new file mode 100644 index 00000000..9fc22595 --- /dev/null +++ b/premade_scripts/vmas/config.yaml @@ -0,0 +1,22 @@ +defaults: + - experiment: base_experiment + - algorithm: mappo + - task: vmas/balance + - model: layers/mlp + - model@critic_model: layers/mlp + - _self_ + +seed: 0 + +hydra: + searchpath: + # Tells hydra to add the default benchmarl configuration to its path + - pkg://benchmarl/conf + +experiment: + sampling_device: "cuda" + train_device: "cuda" + collected_frames_per_batch: 60_000 + n_envs_per_worker: 600 + on_policy_minibatch_size: 4096 + evaluation_episodes: 200 diff --git a/premade_scripts/vmas/vmas_run.py b/premade_scripts/vmas/vmas_run.py new file mode 100644 index 00000000..3f0d9c21 --- /dev/null +++ b/premade_scripts/vmas/vmas_run.py @@ -0,0 +1,24 @@ +import hydra +from benchmarl.experiment import Experiment + +from benchmarl.hydra_config import load_experiment_from_hydra +from hydra.core.hydra_config import HydraConfig +from omegaconf import DictConfig, OmegaConf + + +@hydra.main(version_base=None, config_path=".", config_name="config") +def hydra_experiment(cfg: DictConfig) -> None: + hydra_choices = HydraConfig.get().runtime.choices + task_name = hydra_choices.task + algorithm_name = hydra_choices.algorithm + + print(f"\nAlgorithm: {algorithm_name}, Task: {task_name}") + print("\nLoaded config:\n") + print(OmegaConf.to_yaml(cfg)) + + experiment: Experiment = load_experiment_from_hydra(cfg, task_name=task_name) + experiment.run() + + +if __name__ == "__main__": + hydra_experiment()