Skip to content

lebrice/Sequoia

Repository files navigation

Sequoia - The Research Tree

A Playground for research at the intersection of Continual, Reinforcement, and Self-Supervised Learning.

Note: This project is not being actively developed at the moment. If you encounter any difficulties, please create an issue and I'll help you out.

If you have any questions or comments, please make an issue!

Motivation:

Most applied ML research generally either proposes new Settings (research problems), new Methods (solutions to such problems), or both.

  • When proposing new Settings, researchers almost always have to reimplement or heavily modify existing solutions before they can be applied onto their new problem.

  • Likewise, when creating new Methods, it's often necessary to first re-create the experimental setting of other baseline papers, or even the baseline methods themselves, as experimental conditions may be slightly different between papers!

The goal of this repo is to:

  • Organize various research Settings into an inheritance hierarchy (a tree!), with more general, challenging settings with few assumptions at the top, and more constrained problems at the bottom.

  • Provide a mechanism for easily reusing existing solutions (Methods) onto new Settings through Polymorphism!

  • Allow researchers to easily create new, general Methods and quickly gather results on a multitude of Settings, ranging from Supervised to Reinforcement Learning!

Installation

Requires python >= 3.7

Basic installation:

$ git clone https://www.github.com/lebrice/Sequoia.git
$ pip install -e Sequoia

Optional Addons

You can also install optional "addons" for Sequoia, each of which either adds new Methods, new environments/datasets, or both. using either the usual extras_require feature of setuptools, or by pip-installing other repositories which register Methods for Sequoia using an entry_point in their setup.py file.

pip install -e Sequoia[all|<plugin name>]

Here are some of the optional addons:

  • avalanche:

    Continual Supervised Learning methods, provided by the Avalanche library:

    $ pip install -e Sequoia[avalanche]
  • CN-DPM: Continual Neural Dirichlet Process Mixture model:

    $ cd Sequoia
    $ git submodule init  # to setup the submodules
    $ pip install -e sequoia/methods/cn_dpm    
  • orion:

    Hyper-parameter optimization using Orion

    $ pip install -e Sequoia[orion]
  • metaworld:

    Continual / Multi-Task Reinforcement Learning environments, thanks to the metaworld package. The usual setup for mujoco needs to be done, Sequoia unfortunately can't do it for you ;(

    $ pip install -e Sequoia[metaworld]
  • monsterkong:

    Continual Reinforcement Learning environment from the Meta-MonsterKong repo.

    $ pip install -e Sequoia[monsterkong]
  • continual_world: The Continual World benchmark for Continual Reinforcement learning. Adds 6 different Continual RL Methods to Sequoia.

    $ cd Sequoia
    $ git submodule init  # to setup the submodules
    $ pip install -e sequoia/methods/continual_world   

See the setup.py file for all the optional extras.

Additional Installation Steps for Mac

Install the latest XQuartz app from here: https://www.xquartz.org/releases/index.html

Then run the following commands on the terminal:

mkdir /tmp/.X11-unix 
sudo chmod 1777 /tmp/.X11-unix 
sudo chown root /tmp/.X11-unix/

Documentation overview:

Current Settings & Assumptions:

Setting RL vs SL clear task boundaries? Task boundaries given? Task labels at training time? task labels at test time Stationary context? Fixed action space
Continual RL RL no no no no no no(?)
Discrete Task-Agnostic RL RL yes yes no no no no(?)
Incremental RL RL yes yes yes no no no(?)
Task-Incremental RL RL yes yes yes yes no no(?)
Traditional RL RL yes yes yes no yes no(?)
Multi-Task RL RL yes yes yes yes yes no(?)
Continual SL SL no no no no no no
Discrete Task-Agnostic SL SL yes no no no no no
(Class) Incremental SL SL yes yes no no no no
Domain-Incremental SL SL yes yes yes no no yes
Task-Incremental SL SL yes yes yes yes no no
Traditional SL SL yes yes yes no yes no
Multi-Task SL SL yes yes yes yes yes no

Notes

  • Active / Passive: Active settings are Settings where the next observation depends on the current action, i.e. where actions influence future observations, e.g. Reinforcement Learning. Passive settings are Settings where the current actions don't influence the next observations (e.g. Supervised Learning.)

  • Bold entries in the table mark constant attributes which cannot be changed from their default value.

  • *: The environment is changing constantly over time in ContinualRLSetting, so there aren't really "tasks" to speak of.

Running experiments

--> (Reminder) First, take a look at the Examples <--

Directly in code:

from sequoia.settings import TaskIncrementalSLSetting
from sequoia.methods import BaseMethod
# Create the setting
setting = TaskIncrementalSLSetting(dataset="mnist")
# Create the method
method = BaseMethod(max_epochs=1)
# Apply the setting to the method to generate results.
results = setting.apply(method)
print(results.summary())

Command-line:

$ sequoia --help
usage: sequoia [-h] [--version] {run,sweep,info} ...

Sequoia - The Research Tree 

Used to run experiments, which consist in applying a Method to a Setting.

optional arguments:
  -h, --help        show this help message and exit
  --version         Displays the installed version of Sequoia and exits.

command:
  Command to execute

  {run,sweep,info}
    run             Run an experiment on a given setting.
    sweep           Run a hyper-parameter optimization sweep.
    info            Displays some information about a Setting or Method.

For example:

$ sequoia run [--debug] <setting> (setting arguments) <method> (method arguments)
$ sequoia sweep [--debug] <setting> (setting arguments) <method> (method arguments)
$ sequoia info [setting or method]

For a detailed description of all the arguments, use the --help command for any of the actions:

$ sequoia --help
$ sequoia run --help
$ sequoia run <some_setting> --help
$ sequoia run <some_setting> <some_method> --help
$ sequoia sweep --help
$ sequoia sweep <some_setting> --help
$ sequoia sweep <some_setting> <some_method> --help

For example:

$ sequoia run --debug task_incremental_sl --dataset mnist random_baseline

For example:

  • Run the BaseMethod on task-incremental MNIST, with one epoch per task, and without wandb:
    $ sequoia run task_incremental_sl --dataset mnist base --max_epochs 1
  • Run the PPO Method from stable-baselines3 on an incremental RL setting, with the default dataset (CartPole) and 5 tasks:
    $ sequoia --setting incremental_rl --nb_tasks 5 --method sb3.ppo --steps_per_task 10_000

More questions? Please let us know by creating an issue or posting in the discussions!

About

The Research Tree - A playground for research at the intersection of Continual, Reinforcement, and Self-Supervised Learning.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages