Launch experiments locally or on a cluster running SLURM in a single file.
Fork from experiment_launcher
The experiment_launcher package provides a simple way to run multiple experiments using SLURM or Joblib with minimum
effort - you just have to set the local parameter to True to run locally,
or to False to run with a cluster using SLURM.
It is particularly useful to run multiple seeds and/or test multiple configurations of hyperparameters such as learning rates, batch size.
You can install the package from pip with:
pip install "experiment-launcher-meco
If you want to install it locally, you can do so with:
pip install -e .
The best way to understand experiment launcher is to look at the basic example in examples/basic.
- The file examples/basic/test.py contains a single experiment
- The file examples/basic/launch_test.py contains the launcher file configurations and call
Single experiment
- examples/basic/test.py consists of:
-
The function
experimentis the entry point of your experiment- It takes as arguments your experiment settings (e.g., the number of layers in a neural network, the learning rate, ...)
- The arguments need to be assigned a type and default value in the function definition
- Current accepted types are
int,float,str,bool,list - The arguments
seedandresults_dirmust always be included - Python kwargs can also be added as
**kwargs(accepted types are the same as above)
- Current accepted types are
- This function must be decorated with a decorator, e.g.
@single_experiment. This will take care of creating proper results directories.
-
The
if __name__ == '__main__'block- This must contain one single line:
run_experiment(experiment)
- This must contain one single line:
-
- You can test your code by running
cd examples/basic python test.py
Launch file
- examples/basic/launch_test.py consists of:
- Creating an instance of the
LauncherConfigobject, that contains the SLURM or Joblib (if run locally) parameters. These are some of the important parameters. For more consult the class definition.exp_nameis the experiment name, under which a results directory will be createdexp_fileis the path to the python file where theexperimentis implemented (without the extension.py)n_seedsis the number of random seeds for each single experiment configuration
- Advanced configs are provided via nested Pydantic objects:
ResourceConfigspecifies:n_exps_in_parallelis the number of experiments to be run in parallel. This is useful to run multiple jobs in a single GPU in the clustern_coresis the number of cores for each experiment. Note that ifn_exps_in_parallel > 1, thenn_exps_in_paralleljobs will sharen_cores.memory_per_coreis amount of memory in MB requested for each core in SLURM. If you specify this too low, SLURM might crash.
SlurmConfigspecifies:partitionis the SLURM partition, which is cluster dependentgresare special resources asked for a SLURM experimentproject_nameis the project name in the cluster
EnvironmentConfigspecifies:conda_envif you are using a conda environment, specify its name here
DurationConfigspecifies the max runtime of the SLURM job (days, hours, minutes, seconds).
- Creating an instance of the
Launcherobject:launcher = Launcher(config) - Adding experiments with
launcher.add_experiment- Use
launcher.add_experimentto create an experiment for a particular configuration (e.g., different learning rates) - You can use the
Sweepclass to automatically sweep over a list of parameters. - E.g.
launcher.add_experiment(learning_rate=Sweep(values=[1e-3, 1e-4]), batch_size=32)creates two experiments: one with1e-3and another with1e-4. - Swept parameters automatically are used to organize the results directories. Results directories are going to be created by default as:
./logs/exp_name_DATE/learning_rate_0.001/SEED/and./logs/exp_name_DATE/learning_rate_0.0001/SEED/
- If multiple sweeps are provided, the Cartesian product of all sweep values is calculated to generate the experiments.
- Use
- Running the experiments with
launcher.run(LOCAL)- This runs your experiment either locally (LOCAL:
True) or in the cluster (LOCAL:False)
- This runs your experiment either locally (LOCAL:
- Creating an instance of the
Running the experiment
- To run the launcher simply call
cd examples/basic python launch_test.py - Log files will be placed in
./logsif running locally or in the IAS cluster/work/scratch/$USERNAMEif ran in theLichtenberg-Hochleistungsrechner of the TU Darmstadt
The experiment launcher provides an easy way to integrate with Weights and Biases.
- In the experiment file add
**kwargsin theexperimentfunction definition
- In the launcher file, create wandb options and pass them to the
launcher.add_experiment()wandb_options = dict( wandb_enabled=False, # If True, runs and logs to wandb. wandb_entity='joaocorreiacarvalho', wandb_project='experiment_launcher_test', wandb_group='group_test' )
- To use wandb, you need to install it with
pip install wandband log in withwandb login
- If you have many parameters that you need to change, a good idea can be to use configuration files.
- If you want to specify your parameters in a configuration file, look at the example under
examples/config_files
- For reproducibility, the seeds are created sequentially from
0ton_exps-1.