facebookresearch / how-to-autorl

Plug-and-play hydra sweepers for the EA-based multifidelity method DEHB and several population-based training variations, all proven to efficiently tune RL hyperparameters.
Apache License 2.0
66 stars 12 forks source link

"TypeError: unhashable type: 'list' " when running scripts from the example folder #18

Open tidiane-camaret opened 11 months ago

tidiane-camaret commented 11 months ago

Running the following command : python3 -m examples.dehb_for_pendulum_ppo -m leads to an error on my setup :

Steps to reproduce :

conda create -n autorl-sweepers python==3.9
conda activate autorl-sweepers
pip install -e .[dehb,pb2,bgt]

python3 -m  examples.dehb_for_pendulum_ppo -m

Result :

The version_base parameter is not specified.
Please specify a compatability version level, or None.
Will assume defaults for version 1.1
  @hydra.main(config_path="configs", config_name="dqn_cartpole_pb2")
/home/ndirt/dev/automl/how-to-autorl/examples/dehb_for_pendulum_ppo.py:6: UserWarning: 
The version_base parameter is not specified.
Please specify a compatability version level, or None.
Will assume defaults for version 1.1
  @hydra.main(config_path="configs", config_name="ppo_pendulum_dehb")
Traceback (most recent call last):
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "/home/ndirt/dev/automl/how-to-autorl/examples/dehb_for_pendulum_ppo.py", line 12, in <module>
    run_ppo_dehb()
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/hydra/main.py", line 94, in decorated_main
    _run_hydra(
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/hydra/_internal/utils.py", line 337, in _run_hydra
    search_path = create_automatic_config_search_path(
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/hydra/_internal/utils.py", line 190, in create_automatic_config_search_path
    return create_config_search_path(search_path_dir)
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/hydra/_internal/utils.py", line 203, in create_config_search_path
    search_path_plugins = Plugins.instance().discover(SearchPathPlugin)
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/hydra/core/plugins.py", line 46, in instance
    ret = Singleton.instance(Plugins, *args, **kwargs)
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/hydra/core/singleton.py", line 17, in instance
    return cls(*args, **kwargs)
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/hydra/core/singleton.py", line 13, in __call__
    cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/hydra/core/plugins.py", line 54, in __init__
    self._initialize()
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/hydra/core/plugins.py", line 71, in _initialize
    scanned_plugins, self.stats = self._scan_all_plugins(modules=top_level)
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/hydra/core/plugins.py", line 188, in _scan_all_plugins
    loaded_mod = m.load_module(modname)
  File "<frozen importlib._bootstrap_external>", line 469, in _check_name_wrapper
  File "<frozen importlib._bootstrap_external>", line 969, in load_module
  File "<frozen importlib._bootstrap_external>", line 794, in load_module
  File "<frozen importlib._bootstrap>", line 274, in _load_module_shim
  File "<frozen importlib._bootstrap>", line 711, in _load
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 790, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/home/ndirt/dev/automl/how-to-autorl/hydra_plugins/hydra_dehb_sweeper/dehb_sweeper_backend.py", line 18, in <module>
    from hydra_plugins.hydra_dehb_sweeper.hydra_dehb import HydraDEHB
  File "/home/ndirt/dev/automl/how-to-autorl/hydra_plugins/hydra_dehb_sweeper/hydra_dehb.py", line 12, in <module>
    from dehb.optimizers import dehb
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/dehb/__init__.py", line 2, in <module>
    from .optimizers import DE, AsyncDE
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/dehb/optimizers/__init__.py", line 1, in <module>
    from .de import DE, AsyncDE
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/dehb/optimizers/de.py", line 6, in <module>
    from distributed import Client
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/distributed/__init__.py", line 23, in <module>
    from distributed.actor import Actor, ActorFuture, BaseActorFuture
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/distributed/actor.py", line 13, in <module>
    from distributed.client import Future
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/distributed/client.py", line 117, in <module>
    from distributed.worker import get_client, get_worker, secede
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/distributed/worker.py", line 120, in <module>
    from distributed.worker_memory import (
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/site-packages/distributed/worker_memory.py", line 56, in <module>
    WorkerDataParameter: TypeAlias = Union[
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/typing.py", line 243, in inner
    return func(*args, **kwds)
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/typing.py", line 316, in __getitem__
    return self._getitem(self, parameters)
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/typing.py", line 421, in Union
    parameters = _remove_dups_flatten(parameters)
  File "/home/ndirt/miniconda3/envs/autorl-sweepers/lib/python3.9/typing.py", line 215, in _remove_dups_flatten
    all_params = set(params)
TypeError: unhashable type: 'list'

Setup : Ubuntu 22.04.3 LTS

tidiane-camaret commented 11 months ago

UPDATE : seems like the issue is related to python versions 3.9.0 and 3.9.1. Examples run well with python==3.9.2 see related issue with dask Suggested fix : precise python==3.9.2 during the creation of the conda env