Benchmarking

This guide explains how to write and run garage benchmark scripts.

Prerequisites

Firstly, you should have installed garage. If not, you can see instructions in the latest documentation to install garage.

Install garage-benchmarks

cd garage/benchmarks && pip install -e .

Write garage benchmark scripts

Define an experiment function

Use @wrap_experiment to define your experiment. ctxt is used for @wrap_experiment. The second and third parameters of the function should be env_id and seed. You should give your function a good name because it is used as the label name when it comes to plotting. See more examples. You can see detailed documentations of defining experiments here.

@wrap_experiment
def trpo_garage_pytorch(ctxt, env_id, seed):
    ...

Define an execution function using @benchmark and iterate_experiments()

Plotting is enabled by default. You can explicitly disable it by defining @benchmark(plot=False).

@benchmark
def your_benchmarks():
    iterate_experiments(trpo_garage_pytorch, MuJoCo1M_ENV_SET)
    iterate_experiments(trpo_garage_tf, MuJoCo1M_ENV_SET)

The execution function should be placed in one of the following files:

garage/benchmarks/src/garage_benchmarks
                      ├── benchmark_algos.py
                      ├── benchmark_auto.py
                      ├── benchmark_baselines.py
                      ├── benchmark_policies.py
                      └── benchmark_q_functions.py

Run garage benchmarks

To list all the benchmarks, do:

garage_benchmark list

To run a benchmark, do:

garage_benchmark run your_benchmark

For the above example, the results will be saved in ./data/local/benchmarks/your_benchmark/.

Environment sets

Algorithm Observation Action Environment Set
On-policy Pixel Discrete *PIXEL_ENV_SET
Off-policy Pixel Discrete Atari1M
Meta-RL Non-Pixel Discrete *ML_ENV_SET
Multi-Task RL Non-Pixel Discrete *MT_ENV_SET
ALL Non-Pixel Discrete *NON_PIXEL_ENV_SET
ALL Non-Pixel Continuous MuJoCo-1M
PIXEL_ENV_SET = [
 'MemorizeDigits-v0', 'CubeCrash-v0', ^'Acrobot-v1', ^'MountainCar-v0',
 ^'CartPole-v1', ^'LunarLander-v2']

^ Using the wrappers PixelObservationWrapper and FrameStack (n=4)

ML_ENV_SET = [
 'ML1-push-v1', 'ML1-reach-v1', 'ML1-pick-place-v1', 'ML10', 'ML45']
MT_ENV_SET = [
 'ML1-push-v1', 'ML1-reach-v1', 'ML1-pick-place-v1', 'MT10', 'MT50']

See Meta-World for ML1/ML10/ML45/MT10/MT50.

STATE_ENV_SET = [
 'LunarLander-v2', 'CartPole-v1', 'Assault-ramDeterministic-v4',
 'Breakout-ramDeterministic-v4', 'ChopperCommand-ramDeterministic-v4',
 'Tutankham-ramDeterministic-v4']

This page was authored by Ruofu Wang (@yeukfu).