chainer/chainerrl

Windows compatibility?

iNomaD opened this issue · 6 comments

Does it work under Windows? I run python examples/ale/train_a3c_ale.py 4 pong --steps 100 --outdir ./output/ale/a3c and get an error:

Output files are saved in ./output/ale/a3c\20171116T000856.454199
Traceback (most recent call last):
  File "examples/ale/train_a3c_ale.py", line 151, in <module>
    main()
  File "examples/ale/train_a3c_ale.py", line 147, in main
    global_step_hooks=[lr_decay_hook])
  File "E:\Programs\Anaconda3\envs\intel35\lib\site-packages\chainerrl-0.2.0-py3
.5.egg\chainerrl\experiments\train_agent_async.py", line 234, in train_agent_asy
nc
  File "E:\Programs\Anaconda3\envs\intel35\lib\site-packages\chainerrl-0.2.0-py3
.5.egg\chainerrl\misc\async.py", line 131, in run_async
  File "E:\Programs\Anaconda3\envs\intel35\lib\multiprocessing\process.py", line
 105, in start
    self._popen = self._Popen(self)
  File "E:\Programs\Anaconda3\envs\intel35\lib\multiprocessing\context.py", line
 212, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "E:\Programs\Anaconda3\envs\intel35\lib\multiprocessing\context.py", line
 313, in _Popen
    return Popen(process_obj)
  File "E:\Programs\Anaconda3\envs\intel35\lib\multiprocessing\popen_spawn_win32
.py", line 66, in __init__
    reduction.dump(process_obj, to_child)
  File "E:\Programs\Anaconda3\envs\intel35\lib\multiprocessing\reduction.py", li
ne 59, in dump
    ForkingPickler(file, protocol).dump(obj)
AttributeError: Can't pickle local object 'run_async.<locals>.set_seed_and_run'

(intel35) c:\Projects\Atari\chainerrl>Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "E:\Programs\Anaconda3\envs\intel35\lib\multiprocessing\spawn.py", line 1
06, in spawn_main
    exitcode = _main(fd)
  File "E:\Programs\Anaconda3\envs\intel35\lib\multiprocessing\spawn.py", line 1
16, in _main
    self = pickle.load(from_parent)
EOFError: Ran out of input

ChainerRL is not tested on Windows, so I don't know if it works as it is.

I would appreciate if any windows user can tell us what's the issue. Contributions to support Windows are welcome.

Hit the same problem.
Pickle can't pickle anonymous functions (see docs.python.org/3/library/pickle.html).

I tried resolving this issue by moving all anonymous functions, which would be pickled, out of their parent functions.

I then hit the following (Using python 3.6):

Traceback (most recent call last):
  File "train_a3c_gym.py", line 192, in <module>
    main()
  File "traina3cgzm.py", line 188, in main
    max_episode_len=timestep_limit)
  File "C:\Users\<USERNAME>\AppData\Roaming\Python\Python36\site-packages\chainerrl\experiments\train_agent_async.py", line 240, in train_agent_async
    profile
  File "C:\Users\<USERNAME>\AppData\Roaming\Python\Python36\site-packages\chainerrl\misc\async.py", line 131, in run_async
    p.start()
  File "c:\Users\<USERNAME>\AppData\Local\Programs\Python\Python36\lib\multiprocessing\process.py", line 105, in start
    self._popen = self._Popen(self)
  File "c:\Users\<USERNAME>\AppData\Local\Programs\Python\Python36\lib\multiprocessing\context.py", line 223, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "c:\Users\<USERNAME>\AppData\Local\Programs\Python\Python36\lib\multiprocessing\context.py", line 322, in _Popen
    return Popen(process_obj)
  File "c:\Users\<USERNAME>\AppData\Local\Programs\Python\Python36\lib\multiprocessing\popen_spawn_win32.py", line 65, in __init__
    reduction.dump(process_obj, to_child)
  File "c:\Users\<USERNAME>\AppData\Local\Programs\Python\Python36\lib\multiprocessing\reduction.py", line 60, in dump
    ForkingPickler(file, protocol).dump(obj)
TypeError: can't pickle _thread.RLock objects

A similar trace with python 3.5 tells me the following: TypeError: cannot serialize '_io.TextIOWrapper' object

Ok, I got it to run by hacking multiprocessing.

reduction.py:

- import pickle
+ import dill as pickle

I don't know if I broke something else with this without noticing, but the example runs.

ImportError: cannot import name 'reduce_socket' from 'multiprocessing.reduction' (C:\anaconda\envs\ChainerRl\lib\multiprocessing\reduction.py)

This happens when i use the code above using dill. any thoughts?

try pip install dill==0.3.0

Closing this issue due to inactivity.