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.